Fix prerendering

This commit is contained in:
Kasper 2025-06-02 01:57:49 +02:00
parent 51774f9b38
commit f918f3d5e0
No known key found for this signature in database
GPG Key ID: 3E47D7CD99820B85
5 changed files with 63 additions and 59 deletions

92
web/package-lock.json generated
View File

@ -10,11 +10,11 @@
"@sveltejs/vite-plugin-svelte": "^5.0.3", "@sveltejs/vite-plugin-svelte": "^5.0.3",
"@tailwindcss/vite": "^4.1.8", "@tailwindcss/vite": "^4.1.8",
"cpc": "file:../pkg", "cpc": "file:../pkg",
"svelte": "^5.33.10", "svelte": "^5.33.13",
"svelte-check": "^4.2.1", "svelte-check": "^4.2.1",
"tailwindcss": "^4.1.8", "tailwindcss": "^4.1.8",
"typescript": "^5.8.3", "typescript": "^5.8.3",
"vercel": "^42.2.0", "vercel": "^42.3.0",
"vite": "^6.3.5", "vite": "^6.3.5",
"vite-plugin-top-level-await": "^1.5.0", "vite-plugin-top-level-await": "^1.5.0",
"vite-plugin-wasm": "^3.4.1", "vite-plugin-wasm": "^3.4.1",
@ -1752,9 +1752,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "22.15.27", "version": "22.15.29",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.27.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.29.tgz",
"integrity": "sha512-5fF+eu5mwihV2BeVtX5vijhdaZOfkQTATrePEaXTcKqI16LhJ7gi2/Vhd9OZM0UojcdmiOCVg5rrax+i1MdoQQ==", "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true, "peer": true,
@ -1984,9 +1984,9 @@
} }
}, },
"node_modules/@vercel/gatsby-plugin-vercel-builder": { "node_modules/@vercel/gatsby-plugin-vercel-builder": {
"version": "2.0.82", "version": "2.0.83",
"resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-2.0.82.tgz", "resolved": "https://registry.npmjs.org/@vercel/gatsby-plugin-vercel-builder/-/gatsby-plugin-vercel-builder-2.0.83.tgz",
"integrity": "sha512-KlJcfdS+pEjXQ7mmEv67RorxqUwbtRWB7RN8F/nPn9eUaoNCirvfgfO83CJyljWEOoaXcBv3U9rGzs/YtKjF/A==", "integrity": "sha512-SSuCIHZmTTMc6HEnipkAkW2+cbEmCHGnOyF3uvOfEzjiQX9zB50ziq0DV3yPltSxp37MFkYKDUeWJe2ESXPJaA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@sinclair/typebox": "0.25.24", "@sinclair/typebox": "0.25.24",
@ -2040,13 +2040,13 @@
"license": "Apache-2.0" "license": "Apache-2.0"
}, },
"node_modules/@vercel/hydrogen": { "node_modules/@vercel/hydrogen": {
"version": "1.2.1", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/@vercel/hydrogen/-/hydrogen-1.2.1.tgz", "resolved": "https://registry.npmjs.org/@vercel/hydrogen/-/hydrogen-1.2.2.tgz",
"integrity": "sha512-pHHiYkvCI+SkRHVDzBsp0HoV3pLymIJIFmRsifCyWryBzhFIg4nA8XUuG2cHGJxOTrnnc85o1Xw6DyagDT34dQ==", "integrity": "sha512-PRA3r1/ZRcklGgs/hczprQZ27jX9Avyq/iEbtmzAFNbFovkTlkE0Wy93pVKJfJ4ISCBzBgUSMktX9+6wgjs32A==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@vercel/static-config": "3.1.0", "@vercel/static-config": "3.1.1",
"ts-morph": "12.0.0" "ts-morph": "12.0.0"
} }
}, },
@ -2088,9 +2088,9 @@
} }
}, },
"node_modules/@vercel/nft": { "node_modules/@vercel/nft": {
"version": "0.29.3", "version": "0.29.4",
"resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.29.3.tgz", "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.29.4.tgz",
"integrity": "sha512-aVV0E6vJpuvImiMwU1/5QKkw2N96BRFE7mBYGS7FhXUoS6V7SarQ+8tuj33o7ofECz8JtHpmQ9JW+oVzOoB7MA==", "integrity": "sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -2115,9 +2115,9 @@
} }
}, },
"node_modules/@vercel/node": { "node_modules/@vercel/node": {
"version": "5.2.0", "version": "5.2.1",
"resolved": "https://registry.npmjs.org/@vercel/node/-/node-5.2.0.tgz", "resolved": "https://registry.npmjs.org/@vercel/node/-/node-5.2.1.tgz",
"integrity": "sha512-E8LpLhU13v7tKU+RxXESYtQZDVkt4CepK6uNN7CrzZzEuZqphkC8QrXg1Yrdb9kt8NgJaFjGeBtp9BkiRRC8WA==", "integrity": "sha512-0+YV01grkqfHIHhmWeCXWmgeP6GsuzXtgWBri3+qESwfAZ6dOTBG4GJp9z2E7sEi+wP60S0/eNGRj8z77uk3JQ==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
@ -2128,7 +2128,7 @@
"@vercel/build-utils": "10.6.0", "@vercel/build-utils": "10.6.0",
"@vercel/error-utils": "2.0.3", "@vercel/error-utils": "2.0.3",
"@vercel/nft": "0.29.2", "@vercel/nft": "0.29.2",
"@vercel/static-config": "3.1.0", "@vercel/static-config": "3.1.1",
"async-listen": "3.0.0", "async-listen": "3.0.0",
"cjs-module-lexer": "1.2.3", "cjs-module-lexer": "1.2.3",
"edge-runtime": "2.5.9", "edge-runtime": "2.5.9",
@ -2267,14 +2267,14 @@
"license": "Apache-2.0" "license": "Apache-2.0"
}, },
"node_modules/@vercel/redwood": { "node_modules/@vercel/redwood": {
"version": "2.3.2", "version": "2.3.3",
"resolved": "https://registry.npmjs.org/@vercel/redwood/-/redwood-2.3.2.tgz", "resolved": "https://registry.npmjs.org/@vercel/redwood/-/redwood-2.3.3.tgz",
"integrity": "sha512-nAzihiYucoz7nzQNW3DkLnaeyFSujkEI8mEBb5LUM2iUXHCvSIqhh/cCu17KZg10aho/R5YOIWLoPPDMkMYFzA==", "integrity": "sha512-9Dfith+CYNNt/5Mkrklu7xWroWgSJVR4uh7mwu/2IvuCiJMNa24ReR9xtQNyGFAwAjdeweQ/nHfImz+12ORfpQ==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@vercel/nft": "0.29.2", "@vercel/nft": "0.29.2",
"@vercel/static-config": "3.1.0", "@vercel/static-config": "3.1.1",
"semver": "6.3.1", "semver": "6.3.1",
"ts-morph": "12.0.0" "ts-morph": "12.0.0"
} }
@ -2317,15 +2317,15 @@
} }
}, },
"node_modules/@vercel/remix-builder": { "node_modules/@vercel/remix-builder": {
"version": "5.4.8", "version": "5.4.9",
"resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-5.4.8.tgz", "resolved": "https://registry.npmjs.org/@vercel/remix-builder/-/remix-builder-5.4.9.tgz",
"integrity": "sha512-lQql/nohy4CFr+fo+eOAWqh0PSP8dJuwhzlwH6J8QB9nUZd5PvaJg165y5+Dz5I3hBxYfTQCqBvqmMp/NZCzzQ==", "integrity": "sha512-+fWdMjVI6bO0GUBJbw2seBDnLvPi2dd9aBQHVG2TCbJobBPfXgyEMgRWDS+4gjhXn4jLatX4B5C5iJykkeMqNQ==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@vercel/error-utils": "2.0.3", "@vercel/error-utils": "2.0.3",
"@vercel/nft": "0.29.2", "@vercel/nft": "0.29.2",
"@vercel/static-config": "3.1.0", "@vercel/static-config": "3.1.1",
"path-to-regexp": "6.1.0", "path-to-regexp": "6.1.0",
"path-to-regexp-updated": "npm:path-to-regexp@6.3.0", "path-to-regexp-updated": "npm:path-to-regexp@6.3.0",
"ts-morph": "12.0.0" "ts-morph": "12.0.0"
@ -2366,22 +2366,22 @@
"license": "Apache-2.0" "license": "Apache-2.0"
}, },
"node_modules/@vercel/static-build": { "node_modules/@vercel/static-build": {
"version": "2.7.8", "version": "2.7.9",
"resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-2.7.8.tgz", "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-2.7.9.tgz",
"integrity": "sha512-2mx8QVogdtmnVK26wf3mBYwBEK5GVIcxjuBN/JVu0ozX3UskHvEZwf+BJo7J0RzwSh37mR4ERLP90qpCuWLM8g==", "integrity": "sha512-0AuRrNAE0wntRjZo0CrmQTwvRVO5/7jtcSShgkAKcx2CsPphDjBh2Ah6Kcwb2w9inqJr5Bpg0pxi/Y915hj2oQ==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@vercel/gatsby-plugin-vercel-analytics": "1.0.11", "@vercel/gatsby-plugin-vercel-analytics": "1.0.11",
"@vercel/gatsby-plugin-vercel-builder": "2.0.82", "@vercel/gatsby-plugin-vercel-builder": "2.0.83",
"@vercel/static-config": "3.1.0", "@vercel/static-config": "3.1.1",
"ts-morph": "12.0.0" "ts-morph": "12.0.0"
} }
}, },
"node_modules/@vercel/static-config": { "node_modules/@vercel/static-config": {
"version": "3.1.0", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/@vercel/static-config/-/static-config-3.1.0.tgz", "resolved": "https://registry.npmjs.org/@vercel/static-config/-/static-config-3.1.1.tgz",
"integrity": "sha512-NUUdlTvqmCrg+/Kd/T1yONDym3bMiUJW+wlaZoqgUNMANvmIkO10/lk/2fFRQtGkYaPlnM+TUrL+U2FghccHQg==", "integrity": "sha512-IRtKnm9N1Uqd2ayIbLPjRtdwcl1GTWvqF1PuEVNm9O43kmoI+m9VpGlW8oga+5LQq1LmJ2Y67zHr7NbjrH1rrw==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
@ -5045,9 +5045,9 @@
} }
}, },
"node_modules/svelte": { "node_modules/svelte": {
"version": "5.33.10", "version": "5.33.13",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.33.10.tgz", "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.33.13.tgz",
"integrity": "sha512-/yArPQIBoQS2p86LKnvJywOXkVHeEXnFgrDPSxkEfIAEkykopYuy2bF6UUqHG4IbZlJD6OurLxJT8Kn7kTk9WA==", "integrity": "sha512-uT3BAPpHGaJqpOgdwJwIK7P4JkBkSS0vylbaRXxQjt1gr+DZ9BiPkhmbZw3ql8LJofUyz5XyrzzQDgQQdfP86Q==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -5375,23 +5375,23 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/vercel": { "node_modules/vercel": {
"version": "42.2.0", "version": "42.3.0",
"resolved": "https://registry.npmjs.org/vercel/-/vercel-42.2.0.tgz", "resolved": "https://registry.npmjs.org/vercel/-/vercel-42.3.0.tgz",
"integrity": "sha512-a733x8TmsOagZoYJyVUxMpNI1UOFmp+dw/1/j2iH+ZmkEbYfiEJo96TtqgqPgzX2qF6iEO63i0wDwwFI6aZssA==", "integrity": "sha512-hLiqfcvsjI7IRm5gYIAE7d7wIAqnn797oyDdMkaw76pAQh6aFqvrw4EYcByuxuCSe/5bwck5LNcJ3neXeceGbQ==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@vercel/build-utils": "10.6.0", "@vercel/build-utils": "10.6.0",
"@vercel/fun": "1.1.6", "@vercel/fun": "1.1.6",
"@vercel/go": "3.2.1", "@vercel/go": "3.2.1",
"@vercel/hydrogen": "1.2.1", "@vercel/hydrogen": "1.2.2",
"@vercel/next": "4.8.0", "@vercel/next": "4.8.0",
"@vercel/node": "5.2.0", "@vercel/node": "5.2.1",
"@vercel/python": "4.7.2", "@vercel/python": "4.7.2",
"@vercel/redwood": "2.3.2", "@vercel/redwood": "2.3.3",
"@vercel/remix-builder": "5.4.8", "@vercel/remix-builder": "5.4.9",
"@vercel/ruby": "2.2.0", "@vercel/ruby": "2.2.0",
"@vercel/static-build": "2.7.8", "@vercel/static-build": "2.7.9",
"chokidar": "4.0.0", "chokidar": "4.0.0",
"jose": "5.9.6" "jose": "5.9.6"
}, },

View File

@ -16,11 +16,11 @@
"@sveltejs/vite-plugin-svelte": "^5.0.3", "@sveltejs/vite-plugin-svelte": "^5.0.3",
"@tailwindcss/vite": "^4.1.8", "@tailwindcss/vite": "^4.1.8",
"cpc": "file:../pkg", "cpc": "file:../pkg",
"svelte": "^5.33.10", "svelte": "^5.33.13",
"svelte-check": "^4.2.1", "svelte-check": "^4.2.1",
"tailwindcss": "^4.1.8", "tailwindcss": "^4.1.8",
"typescript": "^5.8.3", "typescript": "^5.8.3",
"vercel": "^42.2.0", "vercel": "^42.3.0",
"vite": "^6.3.5", "vite": "^6.3.5",
"vite-plugin-top-level-await": "^1.5.0", "vite-plugin-top-level-await": "^1.5.0",
"vite-plugin-wasm": "^3.4.1", "vite-plugin-wasm": "^3.4.1",

View File

@ -1,7 +1,5 @@
<script lang="ts"> <script lang="ts">
import "../app.css"; import "../app.css";
let { children } = $props();
</script> </script>
{@render children()} <slot />

View File

@ -1,2 +1 @@
export const ssr = false;
export const prerender = true; export const prerender = true;

View File

@ -1,16 +1,22 @@
<script lang="ts"> <script lang="ts">
import { check_shortcut } from "$lib/helpers"; import { check_shortcut } from "$lib/helpers";
import { wasm_eval } from "cpc";
import { flip } from "svelte/animate"; import { flip } from "svelte/animate";
import { fly } from "svelte/transition"; import { fly } from "svelte/transition";
// Has to be dynamically imported for prerendering to work
// https://github.com/sveltejs/svelte/issues/13155
const cpc_promise = import("cpc");
let cpc: typeof import("cpc") | undefined;
cpc_promise.then((mod) => {
cpc = mod;
});
let input = $state(""); let input = $state("");
let output = $derived.by(() => { let output = $derived.by(() => {
try { try {
if (input.trim().length === 0) { if (!cpc || input.trim().length === 0) {
return ""; return "";
} }
return wasm_eval(input); return cpc.wasm_eval(input);
} catch (e) { } catch (e) {
return ""; return "";
} }
@ -20,14 +26,15 @@
<svelte:head> <svelte:head>
<title>cpc</title> <title>cpc</title>
<meta name="description" content="Text calculator with support for units and conversion" /> <meta
name="description"
content="Text calculator with support for units and conversion"
/>
</svelte:head> </svelte:head>
<main class="w-full px-4 lg:px-8 text-base lg:text-lg"> <main class="w-full px-4 lg:px-8 text-base lg:text-lg">
<nav class="flex items-center justify-between py-4 lg:py-6"> <nav class="flex items-center justify-between py-4 lg:py-6">
<h1 class="text-3xl font-bold text-amber-600 dark:text-amber-400"> <h1 class="text-3xl font-bold text-amber-600 dark:text-amber-400">cpc</h1>
cpc
</h1>
<a <a
href="https://github.com/probablykasper/cpc" href="https://github.com/probablykasper/cpc"
aria-label="GitHub repository" aria-label="GitHub repository"