Update to Svelte 5, fix og creation with render being different, import CSS in a differnt way for OG image, and change all svelte files to runes.

This commit is contained in:
Bradley Shellnut 2024-01-31 21:08:00 -08:00
parent 23db818646
commit d7e7e19627
22 changed files with 286 additions and 225 deletions

View file

@ -49,7 +49,7 @@
"satori-html": "^0.3.2",
"scrape-it": "^6.1.0",
"sharp": "^0.32.6",
"svelte": "^4.2.9",
"svelte": "5.0.0-next.42",
"svelte-check": "^3.6.3",
"svelte-meta-tags": "^3.1.0",
"svelte-preprocess": "^5.1.3",

View file

@ -7,7 +7,7 @@ settings:
dependencies:
'@melt-ui/svelte':
specifier: ^0.50.1
version: 0.50.1(svelte@4.2.9)
version: 0.50.1(svelte@5.0.0-next.42)
'@sveltejs/adapter-vercel':
specifier: ^5.1.0
version: 5.1.0(@sveltejs/kit@2.5.0)
@ -39,7 +39,7 @@ devDependencies:
version: 1.2.74
'@melt-ui/pp':
specifier: ^0.1.4
version: 0.1.4(@melt-ui/svelte@0.50.1)(svelte@4.2.9)
version: 0.1.4(@melt-ui/svelte@0.50.1)(svelte@5.0.0-next.42)
'@playwright/test':
specifier: ^1.41.1
version: 1.41.1
@ -51,13 +51,13 @@ devDependencies:
version: 3.0.1(@sveltejs/kit@2.5.0)
'@sveltejs/enhanced-img':
specifier: ^0.1.8
version: 0.1.8(svelte@4.2.9)
version: 0.1.8(svelte@5.0.0-next.42)
'@sveltejs/kit':
specifier: ^2.5.0
version: 2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.9)(vite@5.0.12)
version: 2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.42)(vite@5.0.12)
'@sveltejs/vite-plugin-svelte':
specifier: ^3.0.2
version: 3.0.2(svelte@4.2.9)(vite@5.0.12)
version: 3.0.2(svelte@5.0.0-next.42)(vite@5.0.12)
'@typescript-eslint/eslint-plugin':
specifier: ^5.62.0
version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3)
@ -66,7 +66,7 @@ devDependencies:
version: 5.62.0(eslint@8.56.0)(typescript@5.3.3)
'@zerodevx/svelte-img':
specifier: ^2.1.0
version: 2.1.0(svelte@4.2.9)
version: 2.1.0(svelte@5.0.0-next.42)
autoprefixer:
specifier: ^10.4.17
version: 10.4.17(postcss@8.4.33)
@ -78,7 +78,7 @@ devDependencies:
version: 8.10.0(eslint@8.56.0)
eslint-plugin-svelte:
specifier: ^2.35.1
version: 2.35.1(eslint@8.56.0)(svelte@4.2.9)
version: 2.35.1(eslint@8.56.0)(svelte@5.0.0-next.42)
iconify-icon:
specifier: ^1.0.8
version: 1.0.8
@ -87,7 +87,7 @@ devDependencies:
version: 4.3.0
mdsvex:
specifier: ^0.11.0
version: 0.11.0(svelte@4.2.9)
version: 0.11.0(svelte@5.0.0-next.42)
mdsvex-relative-images:
specifier: ^1.0.3
version: 1.0.3
@ -108,7 +108,7 @@ devDependencies:
version: 3.2.4
prettier-plugin-svelte:
specifier: ^3.1.2
version: 3.1.2(prettier@3.2.4)(svelte@4.2.9)
version: 3.1.2(prettier@3.2.4)(svelte@5.0.0-next.42)
sass:
specifier: ^1.70.0
version: 1.70.0
@ -125,17 +125,17 @@ devDependencies:
specifier: ^0.32.6
version: 0.32.6
svelte:
specifier: ^4.2.9
version: 4.2.9
specifier: 5.0.0-next.42
version: 5.0.0-next.42
svelte-check:
specifier: ^3.6.3
version: 3.6.3(postcss-load-config@4.0.2)(postcss@8.4.33)(sass@1.70.0)(svelte@4.2.9)
version: 3.6.3(postcss-load-config@4.0.2)(postcss@8.4.33)(sass@1.70.0)(svelte@5.0.0-next.42)
svelte-meta-tags:
specifier: ^3.1.0
version: 3.1.0(svelte@4.2.9)(typescript@5.3.3)
version: 3.1.0(svelte@5.0.0-next.42)(typescript@5.3.3)
svelte-preprocess:
specifier: ^5.1.3
version: 5.1.3(postcss-load-config@4.0.2)(postcss@8.4.33)(sass@1.70.0)(svelte@4.2.9)(typescript@5.3.3)
version: 5.1.3(postcss-load-config@4.0.2)(postcss@8.4.33)(sass@1.70.0)(svelte@5.0.0-next.42)(typescript@5.3.3)
svelte-sequential-preprocessor:
specifier: ^2.0.1
version: 2.0.1
@ -1319,19 +1319,19 @@ packages:
- supports-color
dev: false
/@melt-ui/pp@0.1.4(@melt-ui/svelte@0.50.1)(svelte@4.2.9):
/@melt-ui/pp@0.1.4(@melt-ui/svelte@0.50.1)(svelte@5.0.0-next.42):
resolution: {integrity: sha512-zR+Kl3CZJPJBHW8V7YcdQCMI/dVcnW9Ct3yGbVaIywYVStVRS7F9uEDOea3xLLT2WTGodQePzPlUn53yKFu87g==}
engines: {pnpm: '>=8.6.3'}
peerDependencies:
'@melt-ui/svelte': '>= 0.29.0'
svelte: ^3.55.0 || ^4.0.0 || ^5.0.0-next.1
dependencies:
'@melt-ui/svelte': 0.50.1(svelte@4.2.9)
'@melt-ui/svelte': 0.50.1(svelte@5.0.0-next.42)
estree-walker: 3.0.3
svelte: 4.2.9
svelte: 5.0.0-next.42
dev: true
/@melt-ui/svelte@0.50.1(svelte@4.2.9):
/@melt-ui/svelte@0.50.1(svelte@5.0.0-next.42):
resolution: {integrity: sha512-MIenasd8a5jXgynNKmH5JNSrDBS0EKUK4BImgyD0R6Vbzrll6rQquBIxlh5PeqVhZ2azDIEh/yRkwaOFi2HEgw==}
peerDependencies:
svelte: '>=3 <5'
@ -1341,7 +1341,7 @@ packages:
dequal: 2.0.3
focus-trap: 7.5.3
nanoid: 4.0.2
svelte: 4.2.9
svelte: 5.0.0-next.42
/@nodelib/fs.scandir@2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@ -1650,7 +1650,7 @@ packages:
peerDependencies:
'@sveltejs/kit': ^2.0.0
dependencies:
'@sveltejs/kit': 2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.9)(vite@5.0.12)
'@sveltejs/kit': 2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.42)(vite@5.0.12)
dev: true
/@sveltejs/adapter-vercel@5.1.0(@sveltejs/kit@2.5.0):
@ -1658,7 +1658,7 @@ packages:
peerDependencies:
'@sveltejs/kit': ^2.4.0
dependencies:
'@sveltejs/kit': 2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.9)(vite@5.0.12)
'@sveltejs/kit': 2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.42)(vite@5.0.12)
'@vercel/nft': 0.26.2
esbuild: 0.19.12
transitivePeerDependencies:
@ -1666,18 +1666,18 @@ packages:
- supports-color
dev: false
/@sveltejs/enhanced-img@0.1.8(svelte@4.2.9):
/@sveltejs/enhanced-img@0.1.8(svelte@5.0.0-next.42):
resolution: {integrity: sha512-0cLVR9KiO0/t3VVm64OM7bPHTkdaT2aaz1rwoAhao+EBXR3vMvLoYXLHvz8o9/552PSV8G844RkH7qkGc3YAiQ==}
dependencies:
magic-string: 0.30.5
svelte-parse-markup: 0.1.2(svelte@4.2.9)
svelte-parse-markup: 0.1.2(svelte@5.0.0-next.42)
vite-imagetools: 6.2.9
transitivePeerDependencies:
- rollup
- svelte
dev: true
/@sveltejs/kit@2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.9)(vite@5.0.12):
/@sveltejs/kit@2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.42)(vite@5.0.12):
resolution: {integrity: sha512-1uyXvzC2Lu1FZa30T4y5jUAC21R309ZMRG0TPt+PPPbNUoDpy8zSmSNVWYaBWxYDqLGQ5oPNWvjvvF2IjJ1jmA==}
engines: {node: '>=18.13'}
hasBin: true
@ -1687,7 +1687,7 @@ packages:
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.3
dependencies:
'@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.9)(vite@5.0.12)
'@sveltejs/vite-plugin-svelte': 3.0.2(svelte@5.0.0-next.42)(vite@5.0.12)
'@types/cookie': 0.6.0
cookie: 0.6.0
devalue: 4.3.2
@ -1699,11 +1699,11 @@ packages:
sade: 1.8.1
set-cookie-parser: 2.6.0
sirv: 2.0.4
svelte: 4.2.9
svelte: 5.0.0-next.42
tiny-glob: 0.2.9
vite: 5.0.12(sass@1.70.0)
/@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.9)(vite@5.0.12):
/@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.42)(vite@5.0.12):
resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==}
engines: {node: ^18.0.0 || >=20}
peerDependencies:
@ -1711,27 +1711,27 @@ packages:
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.0
dependencies:
'@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.9)(vite@5.0.12)
'@sveltejs/vite-plugin-svelte': 3.0.2(svelte@5.0.0-next.42)(vite@5.0.12)
debug: 4.3.4
svelte: 4.2.9
svelte: 5.0.0-next.42
vite: 5.0.12(sass@1.70.0)
transitivePeerDependencies:
- supports-color
/@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.9)(vite@5.0.12):
/@sveltejs/vite-plugin-svelte@3.0.2(svelte@5.0.0-next.42)(vite@5.0.12):
resolution: {integrity: sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==}
engines: {node: ^18.0.0 || >=20}
peerDependencies:
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.0
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.9)(vite@5.0.12)
'@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.42)(vite@5.0.12)
debug: 4.3.4
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.5
svelte: 4.2.9
svelte-hmr: 0.15.3(svelte@4.2.9)
svelte: 5.0.0-next.42
svelte-hmr: 0.15.3(svelte@5.0.0-next.42)
vite: 5.0.12(sass@1.70.0)
vitefu: 0.2.5(vite@5.0.12)
transitivePeerDependencies:
@ -1977,12 +1977,12 @@ packages:
pretty-format: 29.7.0
dev: true
/@zerodevx/svelte-img@2.1.0(svelte@4.2.9):
/@zerodevx/svelte-img@2.1.0(svelte@5.0.0-next.42):
resolution: {integrity: sha512-ktOcv5svIm8qQQ7sBnSST1zaA5mJpTp+MbzaMeDNBEw4hulwzSD0VRPtq/pvYsjacA1OAw+JIN/qmBl7doh7HA==}
peerDependencies:
svelte: ^3.55.1 || ^4.0.0
dependencies:
svelte: 4.2.9
svelte: 5.0.0-next.42
vite-imagetools: 5.0.8
transitivePeerDependencies:
- rollup
@ -2008,6 +2008,13 @@ packages:
acorn: 8.11.2
dev: true
/acorn-typescript@1.4.13(acorn@8.11.3):
resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==}
peerDependencies:
acorn: '>=8.9.0'
dependencies:
acorn: 8.11.3
/acorn-walk@8.3.2:
resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
engines: {node: '>=0.4.0'}
@ -2023,12 +2030,12 @@ packages:
resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: false
/acorn@8.9.0:
resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
/agent-base@6.0.2:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
@ -2355,6 +2362,7 @@ packages:
acorn: 8.9.0
estree-walker: 3.0.3
periscopic: 3.1.0
dev: true
/color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
@ -2478,6 +2486,7 @@ packages:
dependencies:
mdn-data: 2.0.30
source-map-js: 1.0.2
dev: true
/css-what@6.1.0:
resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
@ -2744,7 +2753,7 @@ packages:
eslint: 8.56.0
dev: true
/eslint-plugin-svelte@2.35.1(eslint@8.56.0)(svelte@4.2.9):
/eslint-plugin-svelte@2.35.1(eslint@8.56.0)(svelte@5.0.0-next.42):
resolution: {integrity: sha512-IF8TpLnROSGy98Z3NrsKXWDSCbNY2ReHDcrYTuXZMbfX7VmESISR78TWgO9zdg4Dht1X8coub5jKwHzP0ExRug==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
@ -2766,8 +2775,8 @@ packages:
postcss-safe-parser: 6.0.0(postcss@8.4.33)
postcss-selector-parser: 6.0.13
semver: 7.5.3
svelte: 4.2.9
svelte-eslint-parser: 0.33.1(svelte@4.2.9)
svelte: 5.0.0-next.42
svelte-eslint-parser: 0.33.1(svelte@5.0.0-next.42)
transitivePeerDependencies:
- supports-color
- ts-node
@ -2865,6 +2874,12 @@ packages:
estraverse: 5.3.0
dev: true
/esrap@1.2.1:
resolution: {integrity: sha512-dhkcOLfN/aDdMFI1iwPEcy/XqAZzGNfgfEJjZozy2tia6u0dQoZyXzkRshHTckuNsM+c0CYQndY+uRFe3N+AIQ==}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
'@types/estree': 1.0.5
/esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
@ -2889,6 +2904,7 @@ packages:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
dependencies:
'@types/estree': 1.0.5
dev: true
/esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
@ -3320,6 +3336,12 @@ packages:
resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==}
dependencies:
'@types/estree': 1.0.5
dev: true
/is-reference@3.0.2:
resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==}
dependencies:
'@types/estree': 1.0.5
/is-stream@3.0.0:
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
@ -3457,6 +3479,7 @@ packages:
/mdn-data@2.0.30:
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
dev: true
/mdsvex-relative-images@1.0.3:
resolution: {integrity: sha512-3XvpnaguRAhC5gchpqCH+A5Yl28xG9WDPylVla0+k90c5LT+QqSM+hwHd1v5C7gB2cAT0AIhuMsY/g6aCw+WDg==}
@ -3465,7 +3488,7 @@ packages:
unist-util-visit: 3.1.0
dev: true
/mdsvex@0.11.0(svelte@4.2.9):
/mdsvex@0.11.0(svelte@5.0.0-next.42):
resolution: {integrity: sha512-gJF1s0N2nCmdxcKn8HDn0LKrN8poStqAicp6bBcsKFd/zkUBGLP5e7vnxu+g0pjBbDFOscUyI1mtHz+YK2TCDw==}
peerDependencies:
svelte: '>=3 <5'
@ -3473,7 +3496,7 @@ packages:
'@types/unist': 2.0.6
prism-svelte: 0.4.7
prismjs: 1.29.0
svelte: 4.2.9
svelte: 5.0.0-next.42
vfile-message: 2.0.4
dev: true
@ -3820,6 +3843,7 @@ packages:
'@types/estree': 1.0.5
estree-walker: 3.0.3
is-reference: 3.0.1
dev: true
/picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
@ -4294,14 +4318,14 @@ packages:
engines: {node: '>= 0.8.0'}
dev: true
/prettier-plugin-svelte@3.1.2(prettier@3.2.4)(svelte@4.2.9):
/prettier-plugin-svelte@3.1.2(prettier@3.2.4)(svelte@5.0.0-next.42):
resolution: {integrity: sha512-7xfMZtwgAWHMT0iZc8jN4o65zgbAQ3+O32V6W7pXrqNvKnHnkoyQCGCbKeUyXKZLbYE0YhFRnamfxfkEGxm8qA==}
peerDependencies:
prettier: ^3.0.0
svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0
dependencies:
prettier: 3.2.4
svelte: 4.2.9
svelte: 5.0.0-next.42
dev: true
/prettier@3.2.4:
@ -4807,7 +4831,7 @@ packages:
engines: {node: '>= 0.4'}
dev: true
/svelte-check@3.6.3(postcss-load-config@4.0.2)(postcss@8.4.33)(sass@1.70.0)(svelte@4.2.9):
/svelte-check@3.6.3(postcss-load-config@4.0.2)(postcss@8.4.33)(sass@1.70.0)(svelte@5.0.0-next.42):
resolution: {integrity: sha512-Q2nGnoysxUnB9KjnjpQLZwdjK62DHyW6nuH/gm2qteFnDk0lCehe/6z8TsIvYeKjC6luKaWxiNGyOcWiLLPSwA==}
hasBin: true
peerDependencies:
@ -4819,8 +4843,8 @@ packages:
import-fresh: 3.3.0
picocolors: 1.0.0
sade: 1.8.1
svelte: 4.2.9
svelte-preprocess: 5.1.3(postcss-load-config@4.0.2)(postcss@8.4.33)(sass@1.70.0)(svelte@4.2.9)(typescript@5.3.3)
svelte: 5.0.0-next.42
svelte-preprocess: 5.1.3(postcss-load-config@4.0.2)(postcss@8.4.33)(sass@1.70.0)(svelte@5.0.0-next.42)(typescript@5.3.3)
typescript: 5.3.3
transitivePeerDependencies:
- '@babel/core'
@ -4834,7 +4858,7 @@ packages:
- sugarss
dev: true
/svelte-eslint-parser@0.33.1(svelte@4.2.9):
/svelte-eslint-parser@0.33.1(svelte@5.0.0-next.42):
resolution: {integrity: sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
@ -4848,37 +4872,37 @@ packages:
espree: 9.6.1
postcss: 8.4.33
postcss-scss: 4.0.9(postcss@8.4.33)
svelte: 4.2.9
svelte: 5.0.0-next.42
dev: true
/svelte-hmr@0.15.3(svelte@4.2.9):
/svelte-hmr@0.15.3(svelte@5.0.0-next.42):
resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==}
engines: {node: ^12.20 || ^14.13.1 || >= 16}
peerDependencies:
svelte: ^3.19.0 || ^4.0.0
dependencies:
svelte: 4.2.9
svelte: 5.0.0-next.42
/svelte-meta-tags@3.1.0(svelte@4.2.9)(typescript@5.3.3):
/svelte-meta-tags@3.1.0(svelte@5.0.0-next.42)(typescript@5.3.3):
resolution: {integrity: sha512-wFBfpktSua1R5rdvQ/aFucvXmRqzDhRYrPpMQ/pL4+KL5QHIzomPf29a5WN3yDR0reSy1PXyQ2ah0+uCYCbi0g==}
peerDependencies:
svelte: ^3.55.0 || ^4.0.0
dependencies:
schema-dts: 1.1.2(typescript@5.3.3)
svelte: 4.2.9
svelte: 5.0.0-next.42
transitivePeerDependencies:
- typescript
dev: true
/svelte-parse-markup@0.1.2(svelte@4.2.9):
/svelte-parse-markup@0.1.2(svelte@5.0.0-next.42):
resolution: {integrity: sha512-DycY7DJr7VqofiJ63ut1/NEG92HrWWL56VWITn/cJCu+LlZhMoBkBXT4opUitPEEwbq1nMQbv4vTKUfbOqIW1g==}
peerDependencies:
svelte: ^3.0.0 || ^4.0.0
dependencies:
svelte: 4.2.9
svelte: 5.0.0-next.42
dev: true
/svelte-preprocess@5.1.3(postcss-load-config@4.0.2)(postcss@8.4.33)(sass@1.70.0)(svelte@4.2.9)(typescript@5.3.3):
/svelte-preprocess@5.1.3(postcss-load-config@4.0.2)(postcss@8.4.33)(sass@1.70.0)(svelte@5.0.0-next.42)(typescript@5.3.3):
resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==}
engines: {node: '>= 16.0.0', pnpm: ^8.0.0}
requiresBuild: true
@ -4924,7 +4948,7 @@ packages:
sass: 1.70.0
sorcery: 0.11.0
strip-indent: 3.0.0
svelte: 4.2.9
svelte: 5.0.0-next.42
typescript: 5.3.3
dev: true
@ -4954,6 +4978,25 @@ packages:
locate-character: 3.0.0
magic-string: 0.30.5
periscopic: 3.1.0
dev: true
/svelte@5.0.0-next.42:
resolution: {integrity: sha512-sK/XrJTOTTCuOC8JRxAIcodScGYUuQDTilKiTFaQpHzPniPsqZTiEIOEPZvojEWeitWfbr1FHK90NjERHbpzBw==}
engines: {node: '>=18'}
dependencies:
'@ampproject/remapping': 2.2.1
'@jridgewell/sourcemap-codec': 1.4.15
'@types/estree': 1.0.5
acorn: 8.11.3
acorn-typescript: 1.4.13(acorn@8.11.3)
aria-query: 5.3.0
axobject-query: 4.0.0
esm-env: 1.0.0
esrap: 1.2.1
is-reference: 3.0.2
locate-character: 3.0.0
magic-string: 0.30.5
zimmerframe: 1.1.0
/tabbable@6.2.0:
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
@ -5395,3 +5438,6 @@ packages:
/yoga-wasm-web@0.3.3:
resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==}
/zimmerframe@1.1.0:
resolution: {integrity: sha512-+AmV37r9NPUy7KcuG0Fde9AAFSD88kN5pnqvD7Pkp5WLLK0jct7hAtIDXXFDCRk3l5Mc1r2Sth3gfP2ZLE+/Qw==}

View file

@ -2,10 +2,12 @@
import type { Article } from "$lib/types/article";
import ExternalLink from './ExternalLink.svelte';
export let articles: Article[];
export let totalArticles: number;
export let compact: boolean = false;
export let classes: string[] = [];
const { articles, totalArticles, compact = false, classes = [] } = $props<{
articles: Article[];
totalArticles: number;
compact?: boolean;
classes?: string[]
}>();
</script>
<div>

View file

@ -1,13 +1,16 @@
<script lang="ts">
import OpenInNew from '@iconify-icons/mdi/open-in-new';
import type { IconifyIcon } from 'iconify-icon';
export let rel = 'noreferrer';
export let target = '_blank';
export let href: string;
export let ariaLabel: string;
export let showIcon: boolean = false;
export let clazz = "";
export let icon: IconifyIcon = OpenInNew;
const { rel = 'noreferrer', target = '_blank', href, ariaLabel, showIcon = false, clazz = "", icon = OpenInNew } = $props<{
rel?: string;
target?: string;
href: string;
ariaLabel: string;
showIcon?: boolean;
clazz?: string;
icon?: IconifyIcon;
}>();
</script>

View file

@ -1,22 +1,23 @@
<script lang="ts">
import { onMount } from 'svelte';
import Img from '@zerodevx/svelte-img';
import type { ExternalImageSource } from '../types/album';
export let clazz = "";
export let src: Record<string, any> | ExternalImageSource[] | undefined;
export let alt: string;
export let style = "";
export let loading: "lazy" | "eager" = "lazy";
const { clazz = "", src, alt, style = "", loading = 'lazy' } = $props<{
clazz?: string;
src: Record<string, any> | ExternalImageSource[] | undefined;
alt: string;
style?: string;
loading?: 'lazy' | 'eager';
}>();
let ref: any;
let loaded: boolean;
let ref: any = $state();
let loaded: boolean = $state(false);
onMount(() => {
if (ref.complete) {
$effect(() => {
if (ref.complete) {
loaded = true;
}
})
});
</script>
<div class="wrap">

View file

@ -1,8 +1,10 @@
<script lang="ts">
export let rel = '';
export let target = '';
export let href: string;
export let ariaLabel: string;
const { rel = '', target = '', href, ariaLabel } = $props<{
rel?: string;
target?: string,
href: string,
ariaLabel: string
}>();
</script>
<a aria-label={ariaLabel} {href} {rel} {target}>

View file

@ -1,11 +1,13 @@
<script lang="ts">
import LazyImage from './LazyImage.svelte';
export let name: string;
export let src: Record<string, any>;
export let alt: string;
export let style = "";
export let loading: "lazy" | "eager" = "lazy";
const { name, src, alt, style = "", loading = "lazy" } = $props<{
name: string;
src: Record<string, any>;
alt: string;
style: string;
loading: "lazy" | "eager";
}>();
</script>
<div class="portfolio">

View file

@ -9,17 +9,24 @@
siteUrl,
};
export let title = defaultMetadata.defaultTitle;
export let description = defaultMetadata.defaultDescription;
export let image = defaultMetadata.defaultImage;
export let location: string = '';
const {
title = defaultMetadata.defaultTitle,
description = defaultMetadata.defaultDescription,
image = defaultMetadata.defaultImage,
location = ''
} = $props<{
title?: string;
description?: string;
image?: string;
location?: string
}>();
$: seo = {
let seo = $derived({
title,
description,
image: `${siteUrl}${image}`,
url: `${siteUrl}${location || ``}`,
};
url: `${siteUrl}${location || ''}`,
});
</script>
<svelte:head>

View file

@ -1,5 +1,7 @@
<script lang="ts">
export let name: string;
const { name } = $props<{
name: string;
}>();
</script>
<span>{name}</span>

View file

@ -1,10 +1,10 @@
<script lang="ts">
import Img from '@zerodevx/svelte-img';
import type { Album } from "$lib/types/album";
import LazyImage from '../LazyImage.svelte';
export let albums: Album[];
const { albums } = $props<{
albums: Album[];
}>();
const displayAlbums =
albums?.length > 6 ? albums.slice(0, 6) : albums;

View file

@ -4,13 +4,15 @@
import linkedin from '@iconify-icons/radix-icons/linkedin-logo';
import twitter from '@iconify-icons/radix-icons/twitter-logo';
export let showGithub: boolean = false;
export let showTwitter: boolean = false;
export let showLinkedIn: boolean = false;
export let showEmail: boolean = false;
export let userNames: Record<string, string>;
export let showText: boolean = false;
export let justify: boolean = false;
const { showGithub = false, showTwitter = false, showLinkedIn = false, showEmail = false, userNames, showText = false, justify = false } = $props<{
showGithub?: boolean;
showTwitter?: boolean;
showLinkedIn?: boolean;
showEmail?: boolean;
userNames: Record<string, string>;
showText?: boolean;
justify?: boolean
}>();
</script>
{#if showText}

View file

@ -1,16 +1,18 @@
<script lang="ts">
export let additionalClasses: string;
export let pageSize: number;
export let totalCount: number;
export let currentPage: number;
export let base: string;
const { additionalClasses, pageSize, totalCount, currentPage, base } = $props<{
additionalClasses: string;
pageSize: number;
totalCount: number;
currentPage: number;
base: string
}>();
// make some variables
$: totalPages = Math.ceil(totalCount / pageSize);
$: prevPage = currentPage - 1;
$: nextPage = currentPage + 1;
$: hasNextPage = nextPage <= totalPages;
$: hasPrevPage = prevPage >= 1;
let totalPages = $derived(Math.ceil(totalCount / pageSize));
let prevPage = $derived(currentPage - 1);
let nextPage = $derived(currentPage + 1);
let hasNextPage = $derived(nextPage <= totalPages);
let hasPrevPage = $derived(prevPage >= 1);
</script>
<div class={`paginationStyles ${additionalClasses}`}>

View file

@ -1,11 +1,13 @@
<script lang="ts">
export let header: string;
export let page: string;
export let image: string;
export let content: string;
export let width = 1200;
export let height = 630;
export let url: string;
let { header, page, image, content, width = 1200, height = 630, url } = $props<{
header: string;
page: string;
image: string;
content: string;
width: number;
height: number;
url: string;
}>();
</script>
<div class="social-card" style={`width: ${width}px; height: ${height}px;`}>
@ -27,72 +29,3 @@
</footer>
</div>
</div>
<style>
@font-face {
font-family: 'Fira Sans';
src: url('/src/lib/FiraSans-Bold.ttf');
}
.social-card {
display: flex;
flex: 1;
flex-direction: column;
justify-content: space-between;
color: #D8D8D8;
background-color: #131415;
}
.social-card-header {
display: flex;
padding: 0 1.5rem;
flex-direction: column;
background-color: #2E2E2E;
}
.social-card-title {
display: flex;
align-items: center;
gap: 1rem;
font-size: 1.875rem; /* 30px */
line-height: 2.25rem; /* 36px */
font-weight: 700;
letter-spacing: -0.025em;
}
.social-card-image {
display: flex;
width: 4rem;
height: 4rem;
}
.social-card-content {
display: flex;
flex-direction: column;
align-items: center;
gap: 2rem;
padding: 1.5rem;
padding-top: 0;
}
.page {
font-size: 3.75rem; /* 60px */
line-height: 1;
font-weight: 700;
}
.content {
font-size: 1.25rem; /* 20px */
line-height: 1.75rem; /* 28px */
}
.social-card-footer {
display: flex;
padding: 1rem 1.5rem;
align-items: center;
font-size: 1.25rem;
line-height: 1.75rem;
font-weight: 700;
background-color: #2E2E2E;
}
</style>

View file

@ -1,3 +1,4 @@
import { render } from 'svelte/server';
import satori from 'satori';
import { Resvg } from '@resvg/resvg-js';
import { html as toReactNode } from 'satori-html';
@ -10,11 +11,10 @@ import type { SvelteComponent } from 'svelte';
const fontData = read(firaSansSemiBold).arrayBuffer();
export async function componentToPng(component: SvelteComponent,
props: Record<string, string | undefined>,
height: number, width: number) {
const result = component.render(props);
const markup = toReactNode(`${result.html}<style lang="css">${result.css.code}</style>`);
export async function componentToPng(component: SvelteComponent, props: Record<string, string | undefined>, height: number, width: number, css: string) {
const result = render(component, { props });
// const result = component.render(props);
const markup = toReactNode(`${result.html}<style lang="css">${css}</style>`);
const svg = await satori(markup, {
fonts: [

View file

@ -19,15 +19,15 @@
const dev = process.env.NODE_ENV !== 'production';
const siteUrl = PUBLIC_SITE_URL || 'https://bradleyshellnut.com/';
$: {
$effect(() => {
if (browser && $navigating) {
NProgress.start();
} else {
NProgress.done();
}
}
});
$: metaTags = {
const metaTags = $derived({
titleTemplate: '%s | Bradley Shellnut',
additionalMetaTags: [
{
@ -36,7 +36,7 @@
}
],
...$page.data.metaTagsChild
}
});
</script>
{#if !dev}

View file

@ -1,17 +1,12 @@
<script lang="ts">
import type { PageData } from './$types';
import Bandcamp from '$lib/components/bandcamp/index.svelte';
import Articles from '$lib/components/Articles.svelte';
import type { Album } from '$lib/types/album';
import type { Article, ArticlePageLoad } from '$lib/types/article';
export let data: PageData;
let albums: Album[];
let articlesData: ArticlePageLoad;
let articles: Article[];
let totalArticles: number;
$: ({ albums, articlesData } = data);
$: ({ articles, totalArticles } = articlesData);
const { data } = $props();
const { albums, articlesData } = $state(data);
const { articles, totalArticles } = $state(articlesData);
const userNames = {
github: 'BradNut',

View file

@ -3,7 +3,7 @@
import Tag from "$lib/components/Tag.svelte";
import type { Course } from "$lib/types/courses";
export let course: Course;
const { course } = $props<{ course: Course }>();
const { externalLinks, tags } = course;
</script>

View file

@ -1,11 +1,13 @@
<script lang="ts">
import type { IconifyIcon } from "iconify-icon/dist/iconify-icon.js";
export let ariaLabel: string;
export let href: string;
export let clazz = "";
export let itemText: string;
export let icon: IconifyIcon;
const { ariaLabel, href, clazz = "", itemText, icon } = $props<{
ariaLabel: string;
href: string;
clazz?: string;
itemText: string;
icon: IconifyIcon
}>();
</script>
<a

View file

@ -8,9 +8,7 @@ import type { MetaTagsProps } from 'svelte-meta-tags';
export const load: PageServerLoad = async ({ fetch, params, setHeaders, url }) => {
const { page } = params;
if (+page > +WALLABAG_MAX_PAGES) {
error(404, {
message: 'Not found'
});
error(404, { message: 'Not found' });
}
const resp = await fetch(`/api/articles?page=${page}`);
const { articles, currentPage, totalPages, limit, totalArticles, cacheControl }: ArticlePageLoad =

View file

@ -4,12 +4,8 @@
import Articles from "$lib/components/Articles.svelte";
import type { PageData } from "./$types";
export let data: PageData;
let articles: Article[];
let currentPage: number;
let totalArticles: number;
let limit: number;
$: ({ articles, currentPage, totalPages, totalArticles, limit } = data);
const { data } = $props();
const { articles, currentPage, totalArticles, limit } = $state(data);
</script>
<div>

View file

@ -12,6 +12,8 @@ export async function GET({ url }) {
const header = url.searchParams.get('header') ?? undefined;
const page = url.searchParams.get('page') ?? undefined;
const content = url.searchParams.get('content') ?? '';
const css = (await import('../../styles/socialImageCard.pcss')).default;
console.log('css', css);
// @ts-expect-error: Argument of type 'typeof SocialImageCard__SvelteComponent_' is not assignable to parameter of type 'SvelteComponent<any, any, any>'
return componentToPng(SocialImageCard, {
@ -22,7 +24,7 @@ export async function GET({ url }) {
width: `${width}`,
height: `${height}`,
url: new URL(url.origin).href
}, height, width);
}, height, width, css);
} catch (e) {
console.error(e);
}

View file

@ -0,0 +1,66 @@
@font-face {
font-family: 'Fira Sans';
src: url('/src/lib/FiraSans-Bold.ttf');
}
.social-card {
display: flex;
flex: 1;
flex-direction: column;
justify-content: space-between;
color: #D8D8D8;
background-color: #131415;
}
.social-card-header {
display: flex;
padding: 0 1.5rem;
flex-direction: column;
background-color: #2E2E2E;
}
.social-card-title {
display: flex;
align-items: center;
gap: 1rem;
font-size: 1.875rem; /* 30px */
line-height: 2.25rem; /* 36px */
font-weight: 700;
letter-spacing: -0.025em;
}
.social-card-image {
display: flex;
width: 4rem;
height: 4rem;
}
.social-card-content {
display: flex;
flex-direction: column;
align-items: center;
gap: 2rem;
padding: 1.5rem;
padding-top: 0;
}
.page {
font-size: 3.75rem; /* 60px */
line-height: 1;
font-weight: 700;
}
.content {
font-size: 1.25rem; /* 20px */
line-height: 1.75rem; /* 28px */
}
.social-card-footer {
display: flex;
padding: 1rem 1.5rem;
align-items: center;
font-size: 1.25rem;
line-height: 1.75rem;
font-weight: 700;
background-color: #2E2E2E;
}