[READ-ONLY] Mirror of https://github.com/flo-bit/atproto-image-sharing. share images using your atproto account atmo.pics
0

Configure Feed

Select the types of activity you want to include in your feed.

add og image generation, remove workflow

Florian (Jan 30, 2026, 10:29 AM +0100) 34d0ffa6 acef453b

+410 -56
-53
.github/workflows/deploy.yml
··· 1 - name: Deploy to GitHub Pages 2 - 3 - on: 4 - push: 5 - branches: 6 - - main 7 - 8 - jobs: 9 - build_site: 10 - runs-on: ubuntu-latest 11 - steps: 12 - - name: Checkout 13 - uses: actions/checkout@v4 14 - 15 - - uses: pnpm/action-setup@v4 16 - with: 17 - version: 10.24.0 18 - 19 - - name: Setup Node.js environment 20 - uses: actions/setup-node@v4 21 - with: 22 - node-version: 20 23 - cache: 'pnpm' 24 - 25 - - name: Install dependencies 26 - run: pnpm install 27 - 28 - - name: Build 29 - run: pnpm build 30 - env: 31 - BASE_PATH: '/${{ github.event.repository.name }}' 32 - 33 - - name: Upload Artifacts 34 - uses: actions/upload-pages-artifact@v3 35 - with: 36 - path: 'build/' 37 - 38 - deploy: 39 - needs: build_site 40 - runs-on: ubuntu-latest 41 - 42 - permissions: 43 - pages: write 44 - id-token: write 45 - 46 - environment: 47 - name: github-pages 48 - url: ${{ steps.deployment.outputs.page_url }} 49 - 50 - steps: 51 - - name: Deploy 52 - id: deployment 53 - uses: actions/deploy-pages@v4
+1
package.json
··· 46 46 }, 47 47 "license": "MIT", 48 48 "dependencies": { 49 + "@ethercorps/sveltekit-og": "^4.2.1", 49 50 "@sveltejs/adapter-cloudflare": "^7.2.6", 50 51 "wrangler": "^4.61.1" 51 52 }
+347
pnpm-lock.yaml
··· 8 8 9 9 .: 10 10 dependencies: 11 + '@ethercorps/sveltekit-og': 12 + specifier: ^4.2.1 13 + version: 4.2.1(@sveltejs/kit@2.50.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.48.0)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.48.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2))) 11 14 '@sveltejs/adapter-cloudflare': 12 15 specifier: ^7.2.6 13 16 version: 7.2.6(@sveltejs/kit@2.50.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.48.0)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.48.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)))(wrangler@4.61.1(@cloudflare/workers-types@4.20260129.0)) ··· 566 569 resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==, tarball: https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz} 567 570 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 568 571 572 + '@ethercorps/sveltekit-og@4.2.1': 573 + resolution: {integrity: sha512-mMkoKWMMBXL5iAYrMZqklezZDUU7HpHd+sNsz78e4gElXFyxdOnsIFfPPXpqDcUn6orZHs5MGHvtPi5II5xNAA==, tarball: https://registry.npmjs.org/@ethercorps/sveltekit-og/-/sveltekit-og-4.2.1.tgz} 574 + peerDependencies: 575 + '@sveltejs/kit': '>=2.0.0' 576 + 569 577 '@floating-ui/core@1.7.3': 570 578 resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==, tarball: https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz} 571 579 ··· 762 770 '@poppinss/exception@1.2.3': 763 771 resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==, tarball: https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz} 764 772 773 + '@resvg/resvg-wasm@2.6.2': 774 + resolution: {integrity: sha512-FqALmHI8D4o6lk/LRWDnhw95z5eO+eAa6ORjVg09YRR7BkcM6oPHU9uyC0gtQG5vpFLvgpeU4+zEAz2H8APHNw==, tarball: https://registry.npmjs.org/@resvg/resvg-wasm/-/resvg-wasm-2.6.2.tgz} 775 + engines: {node: '>= 10'} 776 + 765 777 '@rollup/rollup-android-arm-eabi@4.56.0': 766 778 resolution: {integrity: sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz} 767 779 cpu: [arm] ··· 887 899 cpu: [x64] 888 900 os: [win32] 889 901 902 + '@shuding/opentype.js@1.4.0-beta.0': 903 + resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==, tarball: https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz} 904 + engines: {node: '>= 8.0.0'} 905 + hasBin: true 906 + 890 907 '@sindresorhus/is@7.2.0': 891 908 resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==, tarball: https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz} 892 909 engines: {node: '>=18'} ··· 1047 1064 peerDependencies: 1048 1065 vite: ^5.2.0 || ^6 || ^7 1049 1066 1067 + '@takumi-rs/core-darwin-arm64@0.55.4': 1068 + resolution: {integrity: sha512-LH/X/ul19DActLGcBpXnxH3OBEq8qOgPD56hNHAJMbnCRxAO6TDaIh2U7WqPVliSkFk3jZfikbD21SIEpZrp8A==, tarball: https://registry.npmjs.org/@takumi-rs/core-darwin-arm64/-/core-darwin-arm64-0.55.4.tgz} 1069 + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1070 + cpu: [arm64] 1071 + os: [darwin] 1072 + 1073 + '@takumi-rs/core-darwin-x64@0.55.4': 1074 + resolution: {integrity: sha512-UW7ovR/D1Qp8n8bJOo6JLqZZUDFWWtGRXEZZUZhzUeMSzJ4k3C6ef/DEc75bUTGeBKqCeypMPcvtkQAjcVwwhw==, tarball: https://registry.npmjs.org/@takumi-rs/core-darwin-x64/-/core-darwin-x64-0.55.4.tgz} 1075 + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1076 + cpu: [x64] 1077 + os: [darwin] 1078 + 1079 + '@takumi-rs/core-linux-arm64-gnu@0.55.4': 1080 + resolution: {integrity: sha512-y1d5yuPapKlmt77TpE+XrtULj7LZ51leBqWSg6qMNKxhpvRqmjI/SYjHmk5YvshnrTkdKmRQiXJiiN5EzOhbmA==, tarball: https://registry.npmjs.org/@takumi-rs/core-linux-arm64-gnu/-/core-linux-arm64-gnu-0.55.4.tgz} 1081 + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1082 + cpu: [arm64] 1083 + os: [linux] 1084 + 1085 + '@takumi-rs/core-linux-arm64-musl@0.55.4': 1086 + resolution: {integrity: sha512-VRbQqbMeoPlrMmaqPwn30Sw82LYya+o4ru9dqV/7BKExozWj/pX9ahexlJdHsZ6wqmsr+ZxexZivK1mPum9ang==, tarball: https://registry.npmjs.org/@takumi-rs/core-linux-arm64-musl/-/core-linux-arm64-musl-0.55.4.tgz} 1087 + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1088 + cpu: [arm64] 1089 + os: [linux] 1090 + 1091 + '@takumi-rs/core-linux-x64-gnu@0.55.4': 1092 + resolution: {integrity: sha512-ecCUtNgOe6mCWKf+SE7cbJXWd6D6TQoCnKZAJAGrJkJLAdy/gBhCFhOyPz8M7q/4uWHUATentqi35KAp+jxBiQ==, tarball: https://registry.npmjs.org/@takumi-rs/core-linux-x64-gnu/-/core-linux-x64-gnu-0.55.4.tgz} 1093 + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1094 + cpu: [x64] 1095 + os: [linux] 1096 + 1097 + '@takumi-rs/core-linux-x64-musl@0.55.4': 1098 + resolution: {integrity: sha512-YBM2zPrGE/1sfHoFZvOsCvCuK9PfaxzePN/GnnlaAvpvgeRHiAU4PJkLGDpjMFfsWUAEdjly/b0HSAjVQ7NL6Q==, tarball: https://registry.npmjs.org/@takumi-rs/core-linux-x64-musl/-/core-linux-x64-musl-0.55.4.tgz} 1099 + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1100 + cpu: [x64] 1101 + os: [linux] 1102 + 1103 + '@takumi-rs/core-win32-arm64-msvc@0.55.4': 1104 + resolution: {integrity: sha512-VcgLCWnmyWuhwLv0Tpob8Hv5IFPreFVykoHruPGwXDVVoUcCo+lQ8oCO5EYTB8B/tBAXl2S0xUL0nMDbyLzMxQ==, tarball: https://registry.npmjs.org/@takumi-rs/core-win32-arm64-msvc/-/core-win32-arm64-msvc-0.55.4.tgz} 1105 + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1106 + cpu: [arm64] 1107 + os: [win32] 1108 + 1109 + '@takumi-rs/core-win32-x64-msvc@0.55.4': 1110 + resolution: {integrity: sha512-ta9g1gUybS2V4mHaccJHcMeBb+w1P6pgZuqHzLoQzBIEK9a/KncHPfnR48cz4sGfg4atorfSa6UBffa2FqijyQ==, tarball: https://registry.npmjs.org/@takumi-rs/core-win32-x64-msvc/-/core-win32-x64-msvc-0.55.4.tgz} 1111 + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1112 + cpu: [x64] 1113 + os: [win32] 1114 + 1115 + '@takumi-rs/core@0.55.4': 1116 + resolution: {integrity: sha512-+zB9r5pzRDDMTonwOgywG+SR3Ydsl7jOJef233Wo2pwcakcfjntgI3O+iEZthWuD8OK16Dhj5+JmG8B3mqBh+w==, tarball: https://registry.npmjs.org/@takumi-rs/core/-/core-0.55.4.tgz} 1117 + engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'} 1118 + 1119 + '@takumi-rs/helpers@0.55.4': 1120 + resolution: {integrity: sha512-Q+iol0en/Az377+iox/jocJKUZ5JJK3R7yMtRI7zWgxXaOWkUspdwy66a3YC9pqlDszcM/YB5xMgbFEbn5wlPQ==, tarball: https://registry.npmjs.org/@takumi-rs/helpers/-/helpers-0.55.4.tgz} 1121 + 1122 + '@takumi-rs/image-response@0.55.4': 1123 + resolution: {integrity: sha512-E7IfI4Y01UK4I95Jq1/BkLaIWIoLT5bn5D5yPvcweSxMXZxpPMcukSWWmNFDboH+p9lj9ozjME75cf9kRdn9/w==, tarball: https://registry.npmjs.org/@takumi-rs/image-response/-/image-response-0.55.4.tgz} 1124 + 1125 + '@takumi-rs/wasm@0.55.4': 1126 + resolution: {integrity: sha512-/iOhQW+nJW0hhv2viu6806JehiAKWFvJ4LXux6CW4XBpP1xWdr4H+VBS7OYMbQu/7XaPITyL7B10lSTtRUAHoA==, tarball: https://registry.npmjs.org/@takumi-rs/wasm/-/wasm-0.55.4.tgz} 1127 + 1050 1128 '@types/bun@1.3.6': 1051 1129 resolution: {integrity: sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA==, tarball: https://registry.npmjs.org/@types/bun/-/bun-1.3.6.tgz} 1052 1130 ··· 1152 1230 balanced-match@1.0.2: 1153 1231 resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz} 1154 1232 1233 + base64-js@0.0.8: 1234 + resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==, tarball: https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz} 1235 + engines: {node: '>= 0.4'} 1236 + 1155 1237 bits-ui@2.15.4: 1156 1238 resolution: {integrity: sha512-7H9YUfp03KOk1LVDh8wPYSRPxlZgG/GRWLNSA8QC73/8Z8ytun+DWJhIuibyFyz7A0cP/RANVcB4iDrbY8q+Og==, tarball: https://registry.npmjs.org/bits-ui/-/bits-ui-2.15.4.tgz} 1157 1239 engines: {node: '>=20'} ··· 1175 1257 resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, tarball: https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz} 1176 1258 engines: {node: '>=6'} 1177 1259 1260 + camelize@1.0.1: 1261 + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==, tarball: https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz} 1262 + 1178 1263 chalk@4.1.2: 1179 1264 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, tarball: https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz} 1180 1265 engines: {node: '>=10'} ··· 1197 1282 concat-map@0.0.1: 1198 1283 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, tarball: https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz} 1199 1284 1285 + confbox@0.1.8: 1286 + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==, tarball: https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz} 1287 + 1288 + confbox@0.2.2: 1289 + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==, tarball: https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz} 1290 + 1200 1291 cookie@0.6.0: 1201 1292 resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==, tarball: https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz} 1202 1293 engines: {node: '>= 0.6'} ··· 1209 1300 resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, tarball: https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz} 1210 1301 engines: {node: '>= 8'} 1211 1302 1303 + css-background-parser@0.1.0: 1304 + resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==, tarball: https://registry.npmjs.org/css-background-parser/-/css-background-parser-0.1.0.tgz} 1305 + 1306 + css-box-shadow@1.0.0-3: 1307 + resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==, tarball: https://registry.npmjs.org/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz} 1308 + 1309 + css-color-keywords@1.0.0: 1310 + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==, tarball: https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz} 1311 + engines: {node: '>=4'} 1312 + 1313 + css-to-react-native@3.2.0: 1314 + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==, tarball: https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz} 1315 + 1212 1316 cssesc@3.0.0: 1213 1317 resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, tarball: https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz} 1214 1318 engines: {node: '>=4'} ··· 1241 1345 devalue@5.6.2: 1242 1346 resolution: {integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==, tarball: https://registry.npmjs.org/devalue/-/devalue-5.6.2.tgz} 1243 1347 1348 + emoji-regex@10.6.0: 1349 + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==, tarball: https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz} 1350 + 1244 1351 enhanced-resolve@5.18.4: 1245 1352 resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==, tarball: https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz} 1246 1353 engines: {node: '>=10.13.0'} ··· 1258 1365 engines: {node: '>=18'} 1259 1366 hasBin: true 1260 1367 1368 + escape-html@1.0.3: 1369 + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==, tarball: https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz} 1370 + 1261 1371 escape-string-regexp@4.0.0: 1262 1372 resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz} 1263 1373 engines: {node: '>=10'} ··· 1326 1436 resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, tarball: https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz} 1327 1437 engines: {node: '>=0.10.0'} 1328 1438 1439 + exsolve@1.0.8: 1440 + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==, tarball: https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz} 1441 + 1329 1442 fast-deep-equal@3.1.3: 1330 1443 resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, tarball: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} 1331 1444 ··· 1344 1457 picomatch: 1345 1458 optional: true 1346 1459 1460 + fflate@0.7.4: 1461 + resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==, tarball: https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz} 1462 + 1347 1463 file-entry-cache@8.0.0: 1348 1464 resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, tarball: https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz} 1349 1465 engines: {node: '>=16.0.0'} ··· 1386 1502 has-flag@4.0.0: 1387 1503 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, tarball: https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz} 1388 1504 engines: {node: '>=8'} 1505 + 1506 + hex-rgb@4.3.0: 1507 + resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==, tarball: https://registry.npmjs.org/hex-rgb/-/hex-rgb-4.3.0.tgz} 1508 + engines: {node: '>=6'} 1389 1509 1390 1510 ignore@5.3.2: 1391 1511 resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, tarball: https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz} ··· 1444 1564 resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==, tarball: https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz} 1445 1565 engines: {node: '>=6'} 1446 1566 1567 + knitwork@1.3.0: 1568 + resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==, tarball: https://registry.npmjs.org/knitwork/-/knitwork-1.3.0.tgz} 1569 + 1447 1570 known-css-properties@0.37.0: 1448 1571 resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==, tarball: https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz} 1449 1572 ··· 1524 1647 lilconfig@2.1.0: 1525 1648 resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, tarball: https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz} 1526 1649 engines: {node: '>=10'} 1650 + 1651 + linebreak@1.1.0: 1652 + resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==, tarball: https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz} 1527 1653 1528 1654 locate-character@3.0.0: 1529 1655 resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==, tarball: https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz} ··· 1558 1684 resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, tarball: https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz} 1559 1685 engines: {node: '>=16 || 14 >=14.17'} 1560 1686 1687 + mlly@1.8.0: 1688 + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==, tarball: https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz} 1689 + 1561 1690 mri@1.2.0: 1562 1691 resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, tarball: https://registry.npmjs.org/mri/-/mri-1.2.0.tgz} 1563 1692 engines: {node: '>=4'} ··· 1601 1730 resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, tarball: https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz} 1602 1731 engines: {node: '>=10'} 1603 1732 1733 + pako@0.2.9: 1734 + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==, tarball: https://registry.npmjs.org/pako/-/pako-0.2.9.tgz} 1735 + 1604 1736 parent-module@1.0.1: 1605 1737 resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, tarball: https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz} 1606 1738 engines: {node: '>=6'} 1739 + 1740 + parse-css-color@0.2.1: 1741 + resolution: {integrity: sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==, tarball: https://registry.npmjs.org/parse-css-color/-/parse-css-color-0.2.1.tgz} 1607 1742 1608 1743 path-exists@4.0.0: 1609 1744 resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, tarball: https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz} ··· 1626 1761 resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==, tarball: https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz} 1627 1762 engines: {node: '>=12'} 1628 1763 1764 + pkg-types@1.3.1: 1765 + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==, tarball: https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz} 1766 + 1767 + pkg-types@2.3.0: 1768 + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==, tarball: https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz} 1769 + 1629 1770 postcss-load-config@3.1.4: 1630 1771 resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==, tarball: https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz} 1631 1772 engines: {node: '>= 10'} ··· 1653 1794 postcss-selector-parser@7.1.1: 1654 1795 resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==, tarball: https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz} 1655 1796 engines: {node: '>=4'} 1797 + 1798 + postcss-value-parser@4.2.0: 1799 + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, tarball: https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz} 1656 1800 1657 1801 postcss@8.5.6: 1658 1802 resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==, tarball: https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz} ··· 1762 1906 resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, tarball: https://registry.npmjs.org/sade/-/sade-1.8.1.tgz} 1763 1907 engines: {node: '>=6'} 1764 1908 1909 + satori-html@0.3.2: 1910 + resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==, tarball: https://registry.npmjs.org/satori-html/-/satori-html-0.3.2.tgz} 1911 + 1912 + satori@0.10.14: 1913 + resolution: {integrity: sha512-abovcqmwl97WKioxpkfuMeZmndB1TuDFY/R+FymrZyiGP+pMYomvgSzVPnbNMWHHESOPosVHGL352oFbdAnJcA==, tarball: https://registry.npmjs.org/satori/-/satori-0.10.14.tgz} 1914 + engines: {node: '>=16'} 1915 + 1765 1916 semver@7.7.3: 1766 1917 resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==, tarball: https://registry.npmjs.org/semver/-/semver-7.7.3.tgz} 1767 1918 engines: {node: '>=10'} ··· 1790 1941 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, tarball: https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz} 1791 1942 engines: {node: '>=0.10.0'} 1792 1943 1944 + std-env@3.10.0: 1945 + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==, tarball: https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz} 1946 + 1947 + string.prototype.codepointat@0.2.1: 1948 + resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==, tarball: https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz} 1949 + 1793 1950 strip-json-comments@3.1.1: 1794 1951 resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz} 1795 1952 engines: {node: '>=8'} ··· 1842 1999 resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==, tarball: https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz} 1843 2000 engines: {node: '>=6'} 1844 2001 2002 + tiny-inflate@1.0.3: 2003 + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==, tarball: https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz} 2004 + 1845 2005 tinyglobby@0.2.15: 1846 2006 resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==, tarball: https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz} 1847 2007 engines: {node: '>=12.0.0'} ··· 1875 2035 engines: {node: '>=14.17'} 1876 2036 hasBin: true 1877 2037 2038 + ufo@1.6.3: 2039 + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==, tarball: https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz} 2040 + 2041 + ultrahtml@1.6.0: 2042 + resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==, tarball: https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz} 2043 + 1878 2044 undici-types@7.16.0: 1879 2045 resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==, tarball: https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz} 1880 2046 ··· 1887 2053 1888 2054 unicode-segmenter@0.14.5: 1889 2055 resolution: {integrity: sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==, tarball: https://registry.npmjs.org/unicode-segmenter/-/unicode-segmenter-0.14.5.tgz} 2056 + 2057 + unicode-trie@2.0.0: 2058 + resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==, tarball: https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz} 2059 + 2060 + unwasm@0.5.3: 2061 + resolution: {integrity: sha512-keBgTSfp3r6+s9ZcSma+0chwxQdmLbB5+dAD9vjtB21UTMYuKAxHXCU1K2CbCtnP09EaWeRvACnXk0EJtUx+hw==, tarball: https://registry.npmjs.org/unwasm/-/unwasm-0.5.3.tgz} 1890 2062 1891 2063 uri-js@4.4.1: 1892 2064 resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, tarball: https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz} ··· 1990 2162 resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, tarball: https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz} 1991 2163 engines: {node: '>=10'} 1992 2164 2165 + yoga-wasm-web@0.3.3: 2166 + resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==, tarball: https://registry.npmjs.org/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz} 2167 + 1993 2168 youch-core@0.3.3: 1994 2169 resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==, tarball: https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz} 1995 2170 ··· 2316 2491 '@eslint/core': 0.17.0 2317 2492 levn: 0.4.1 2318 2493 2494 + '@ethercorps/sveltekit-og@4.2.1(@sveltejs/kit@2.50.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.48.0)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.48.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)))': 2495 + dependencies: 2496 + '@resvg/resvg-wasm': 2.6.2 2497 + '@sveltejs/kit': 2.50.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.48.0)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.48.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) 2498 + '@takumi-rs/helpers': 0.55.4 2499 + '@takumi-rs/image-response': 0.55.4 2500 + '@takumi-rs/wasm': 0.55.4 2501 + satori: 0.10.14 2502 + satori-html: 0.3.2 2503 + std-env: 3.10.0 2504 + unwasm: 0.5.3 2505 + 2319 2506 '@floating-ui/core@1.7.3': 2320 2507 dependencies: 2321 2508 '@floating-ui/utils': 0.2.10 ··· 2476 2663 2477 2664 '@poppinss/exception@1.2.3': {} 2478 2665 2666 + '@resvg/resvg-wasm@2.6.2': {} 2667 + 2479 2668 '@rollup/rollup-android-arm-eabi@4.56.0': 2480 2669 optional: true 2481 2670 ··· 2551 2740 '@rollup/rollup-win32-x64-msvc@4.56.0': 2552 2741 optional: true 2553 2742 2743 + '@shuding/opentype.js@1.4.0-beta.0': 2744 + dependencies: 2745 + fflate: 0.7.4 2746 + string.prototype.codepointat: 0.2.1 2747 + 2554 2748 '@sindresorhus/is@7.2.0': {} 2555 2749 2556 2750 '@speed-highlight/core@1.2.14': {} ··· 2691 2885 tailwindcss: 4.1.18 2692 2886 vite: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) 2693 2887 2888 + '@takumi-rs/core-darwin-arm64@0.55.4': 2889 + optional: true 2890 + 2891 + '@takumi-rs/core-darwin-x64@0.55.4': 2892 + optional: true 2893 + 2894 + '@takumi-rs/core-linux-arm64-gnu@0.55.4': 2895 + optional: true 2896 + 2897 + '@takumi-rs/core-linux-arm64-musl@0.55.4': 2898 + optional: true 2899 + 2900 + '@takumi-rs/core-linux-x64-gnu@0.55.4': 2901 + optional: true 2902 + 2903 + '@takumi-rs/core-linux-x64-musl@0.55.4': 2904 + optional: true 2905 + 2906 + '@takumi-rs/core-win32-arm64-msvc@0.55.4': 2907 + optional: true 2908 + 2909 + '@takumi-rs/core-win32-x64-msvc@0.55.4': 2910 + optional: true 2911 + 2912 + '@takumi-rs/core@0.55.4': 2913 + optionalDependencies: 2914 + '@takumi-rs/core-darwin-arm64': 0.55.4 2915 + '@takumi-rs/core-darwin-x64': 0.55.4 2916 + '@takumi-rs/core-linux-arm64-gnu': 0.55.4 2917 + '@takumi-rs/core-linux-arm64-musl': 0.55.4 2918 + '@takumi-rs/core-linux-x64-gnu': 0.55.4 2919 + '@takumi-rs/core-linux-x64-musl': 0.55.4 2920 + '@takumi-rs/core-win32-arm64-msvc': 0.55.4 2921 + '@takumi-rs/core-win32-x64-msvc': 0.55.4 2922 + 2923 + '@takumi-rs/helpers@0.55.4': {} 2924 + 2925 + '@takumi-rs/image-response@0.55.4': 2926 + dependencies: 2927 + '@takumi-rs/core': 0.55.4 2928 + '@takumi-rs/helpers': 0.55.4 2929 + '@takumi-rs/wasm': 0.55.4 2930 + 2931 + '@takumi-rs/wasm@0.55.4': {} 2932 + 2694 2933 '@types/bun@1.3.6': 2695 2934 dependencies: 2696 2935 bun-types: 1.3.6 ··· 2821 3060 2822 3061 balanced-match@1.0.2: {} 2823 3062 3063 + base64-js@0.0.8: {} 3064 + 2824 3065 bits-ui@2.15.4(@internationalized/date@3.10.1)(@sveltejs/kit@2.50.0(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.48.0)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.48.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.48.0): 2825 3066 dependencies: 2826 3067 '@floating-ui/core': 1.7.3 ··· 2851 3092 2852 3093 callsites@3.1.0: {} 2853 3094 3095 + camelize@1.0.1: {} 3096 + 2854 3097 chalk@4.1.2: 2855 3098 dependencies: 2856 3099 ansi-styles: 4.3.0 ··· 2870 3113 2871 3114 concat-map@0.0.1: {} 2872 3115 3116 + confbox@0.1.8: {} 3117 + 3118 + confbox@0.2.2: {} 3119 + 2873 3120 cookie@0.6.0: {} 2874 3121 2875 3122 cookie@1.1.1: {} ··· 2880 3127 shebang-command: 2.0.0 2881 3128 which: 2.0.2 2882 3129 3130 + css-background-parser@0.1.0: {} 3131 + 3132 + css-box-shadow@1.0.0-3: {} 3133 + 3134 + css-color-keywords@1.0.0: {} 3135 + 3136 + css-to-react-native@3.2.0: 3137 + dependencies: 3138 + camelize: 1.0.1 3139 + css-color-keywords: 1.0.0 3140 + postcss-value-parser: 4.2.0 3141 + 2883 3142 cssesc@3.0.0: {} 2884 3143 2885 3144 debug@4.4.3: ··· 2895 3154 detect-libc@2.1.2: {} 2896 3155 2897 3156 devalue@5.6.2: {} 3157 + 3158 + emoji-regex@10.6.0: {} 2898 3159 2899 3160 enhanced-resolve@5.18.4: 2900 3161 dependencies: ··· 2961 3222 '@esbuild/win32-ia32': 0.27.2 2962 3223 '@esbuild/win32-x64': 0.27.2 2963 3224 3225 + escape-html@1.0.3: {} 3226 + 2964 3227 escape-string-regexp@4.0.0: {} 2965 3228 2966 3229 eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)): ··· 3059 3322 3060 3323 esutils@2.0.3: {} 3061 3324 3325 + exsolve@1.0.8: {} 3326 + 3062 3327 fast-deep-equal@3.1.3: {} 3063 3328 3064 3329 fast-json-stable-stringify@2.1.0: {} ··· 3068 3333 fdir@6.5.0(picomatch@4.0.3): 3069 3334 optionalDependencies: 3070 3335 picomatch: 4.0.3 3336 + 3337 + fflate@0.7.4: {} 3071 3338 3072 3339 file-entry-cache@8.0.0: 3073 3340 dependencies: ··· 3102 3369 3103 3370 has-flag@4.0.0: {} 3104 3371 3372 + hex-rgb@4.3.0: {} 3373 + 3105 3374 ignore@5.3.2: {} 3106 3375 3107 3376 ignore@7.0.5: {} ··· 3144 3413 json-buffer: 3.0.1 3145 3414 3146 3415 kleur@4.1.5: {} 3416 + 3417 + knitwork@1.3.0: {} 3147 3418 3148 3419 known-css-properties@0.37.0: {} 3149 3420 ··· 3203 3474 3204 3475 lilconfig@2.1.0: {} 3205 3476 3477 + linebreak@1.1.0: 3478 + dependencies: 3479 + base64-js: 0.0.8 3480 + unicode-trie: 2.0.0 3481 + 3206 3482 locate-character@3.0.0: {} 3207 3483 3208 3484 locate-path@6.0.0: ··· 3238 3514 minimatch@9.0.5: 3239 3515 dependencies: 3240 3516 brace-expansion: 2.0.2 3517 + 3518 + mlly@1.8.0: 3519 + dependencies: 3520 + acorn: 8.15.0 3521 + pathe: 2.0.3 3522 + pkg-types: 1.3.1 3523 + ufo: 1.6.3 3241 3524 3242 3525 mri@1.2.0: {} 3243 3526 ··· 3272 3555 dependencies: 3273 3556 p-limit: 3.1.0 3274 3557 3558 + pako@0.2.9: {} 3559 + 3275 3560 parent-module@1.0.1: 3276 3561 dependencies: 3277 3562 callsites: 3.1.0 3278 3563 3564 + parse-css-color@0.2.1: 3565 + dependencies: 3566 + color-name: 1.1.4 3567 + hex-rgb: 4.3.0 3568 + 3279 3569 path-exists@4.0.0: {} 3280 3570 3281 3571 path-key@3.1.1: {} ··· 3288 3578 3289 3579 picomatch@4.0.3: {} 3290 3580 3581 + pkg-types@1.3.1: 3582 + dependencies: 3583 + confbox: 0.1.8 3584 + mlly: 1.8.0 3585 + pathe: 2.0.3 3586 + 3587 + pkg-types@2.3.0: 3588 + dependencies: 3589 + confbox: 0.2.2 3590 + exsolve: 1.0.8 3591 + pathe: 2.0.3 3592 + 3291 3593 postcss-load-config@3.1.4(postcss@8.5.6): 3292 3594 dependencies: 3293 3595 lilconfig: 2.1.0 ··· 3307 3609 dependencies: 3308 3610 cssesc: 3.0.0 3309 3611 util-deprecate: 1.0.2 3612 + 3613 + postcss-value-parser@4.2.0: {} 3310 3614 3311 3615 postcss@8.5.6: 3312 3616 dependencies: ··· 3381 3685 dependencies: 3382 3686 mri: 1.2.0 3383 3687 3688 + satori-html@0.3.2: 3689 + dependencies: 3690 + ultrahtml: 1.6.0 3691 + 3692 + satori@0.10.14: 3693 + dependencies: 3694 + '@shuding/opentype.js': 1.4.0-beta.0 3695 + css-background-parser: 0.1.0 3696 + css-box-shadow: 1.0.0-3 3697 + css-to-react-native: 3.2.0 3698 + emoji-regex: 10.6.0 3699 + escape-html: 1.0.3 3700 + linebreak: 1.1.0 3701 + parse-css-color: 0.2.1 3702 + postcss-value-parser: 4.2.0 3703 + yoga-wasm-web: 0.3.3 3704 + 3384 3705 semver@7.7.3: {} 3385 3706 3386 3707 set-cookie-parser@2.7.2: {} ··· 3429 3750 totalist: 3.0.1 3430 3751 3431 3752 source-map-js@1.2.1: {} 3753 + 3754 + std-env@3.10.0: {} 3755 + 3756 + string.prototype.codepointat@0.2.1: {} 3432 3757 3433 3758 strip-json-comments@3.1.1: {} 3434 3759 ··· 3498 3823 3499 3824 tapable@2.3.0: {} 3500 3825 3826 + tiny-inflate@1.0.3: {} 3827 + 3501 3828 tinyglobby@0.2.15: 3502 3829 dependencies: 3503 3830 fdir: 6.5.0(picomatch@4.0.3) ··· 3528 3855 3529 3856 typescript@5.9.3: {} 3530 3857 3858 + ufo@1.6.3: {} 3859 + 3860 + ultrahtml@1.6.0: {} 3861 + 3531 3862 undici-types@7.16.0: {} 3532 3863 3533 3864 undici@7.18.2: {} ··· 3537 3868 pathe: 2.0.3 3538 3869 3539 3870 unicode-segmenter@0.14.5: {} 3871 + 3872 + unicode-trie@2.0.0: 3873 + dependencies: 3874 + pako: 0.2.9 3875 + tiny-inflate: 1.0.3 3876 + 3877 + unwasm@0.5.3: 3878 + dependencies: 3879 + exsolve: 1.0.8 3880 + knitwork: 1.3.0 3881 + magic-string: 0.30.21 3882 + mlly: 1.8.0 3883 + pathe: 2.0.3 3884 + pkg-types: 2.3.0 3540 3885 3541 3886 uri-js@4.4.1: 3542 3887 dependencies: ··· 3603 3948 yaml@1.10.2: {} 3604 3949 3605 3950 yocto-queue@0.1.0: {} 3951 + 3952 + yoga-wasm-web@0.3.3: {} 3606 3953 3607 3954 youch-core@0.3.3: 3608 3955 dependencies:
+4 -2
src/lib/atproto/methods.ts
··· 352 352 export function getCDNImageBlobUrl({ 353 353 did, 354 354 blob, 355 - size = 'thumbnail' 355 + size = 'thumbnail', 356 + type = 'webp' 356 357 }: { 357 358 did?: string; 358 359 blob: { ··· 362 363 }; 363 364 }; 364 365 size?: 'thumbnail' | 'fullsize'; 366 + type?: 'webp' | 'jpeg'; 365 367 }) { 366 368 did ??= user.did; 367 369 const sizeParam = size === 'fullsize' ? 'feed_fullsize' : 'feed_thumbnail'; 368 370 369 - return `https://cdn.bsky.app/img/${sizeParam}/plain/${did}/${blob.ref.$link}@webp`; 371 + return `https://cdn.bsky.app/img/${sizeParam}/plain/${did}/${blob.ref.$link}@${type}`; 370 372 } 371 373 372 374 /**
+5 -1
src/routes/i/[repo]/[rkey]/+page.svelte
··· 2 2 import { page } from '$app/state'; 3 3 import { getBlobURL, getCDNImageBlobUrl } from '$lib/atproto'; 4 4 import { getShareLink } from '$lib'; 5 + import { resolve } from '$app/paths'; 5 6 6 7 let imageUrl = $state<string | undefined>(undefined); 7 8 let fullQualityUrl = $state<string | undefined>(undefined); ··· 72 73 <svelte:head> 73 74 <meta 74 75 property="og:image" 75 - content={getCDNImageBlobUrl({ did: data.did, blob: data.blob, size: 'thumbnail' })} 76 + content={resolve("/i/[repo]/[rkey]", { 77 + repo: page.params.repo ?? '', 78 + rkey: page.params.rkey ?? '' 79 + })} 76 80 /> 77 81 <meta 78 82 name="twitter:image"
+53
src/routes/i/[repo]/[rkey]/og.png/+server.ts
··· 1 + import { getCDNImageBlobUrl, getRecord, resolveHandle } from '$lib/atproto'; 2 + import { isDid, isHandle } from '@atcute/lexicons/syntax'; 3 + import { error } from '@sveltejs/kit'; 4 + import { ImageResponse } from '@ethercorps/sveltekit-og'; 5 + 6 + export async function GET({ params }) { 7 + const repo = params.repo; 8 + 9 + const did = isDid(repo) 10 + ? repo 11 + : isHandle(repo) 12 + ? await resolveHandle({ handle: repo }) 13 + : undefined; 14 + 15 + if (!did) throw error(404, 'User not found'); 16 + 17 + const record = await getRecord({ did, collection: 'pics.atmo.image', rkey: params.rkey }); 18 + 19 + const aspectRatio = record.value.aspectRatio as { 20 + width: number; 21 + height: number; 22 + }; 23 + 24 + const blob = record.value.image as { $type: 'blob'; ref: { $link: string } } | undefined; 25 + 26 + if (!blob || blob.$type !== 'blob') { 27 + throw error(404, 'Image not found'); 28 + } 29 + console.log(getCDNImageBlobUrl({ did: did, blob: blob })); 30 + 31 + const ogWidth = 1200; 32 + const ogHeight = 630; 33 + 34 + let imgWidth: number; 35 + let imgHeight: number; 36 + 37 + if (aspectRatio.width / aspectRatio.height > ogWidth / ogHeight) { 38 + imgWidth = ogWidth; 39 + imgHeight = ogWidth / (aspectRatio.width / aspectRatio.height); 40 + } else { 41 + imgHeight = ogHeight; 42 + imgWidth = ogHeight * (aspectRatio.width / aspectRatio.height); 43 + } 44 + 45 + const htmlString = `<div style="display:flex;align-items:center;justify-content:center;width:${ogWidth}px;height:${ogHeight}px;background:#000;"> 46 + <img src="${getCDNImageBlobUrl({ did: did, blob: blob, type: 'jpeg' }) ?? ''}" width="${Math.round(imgWidth)}" height="${Math.round(imgHeight)}" /> 47 + </div>`; 48 + 49 + return new ImageResponse(htmlString, { 50 + width: ogWidth, 51 + height: ogHeight 52 + }); 53 + }