Frontend uudelleenrakennettu: Astro-komponentit, Wasm pääsäikeessä, ei Workeria

Vanha frontend siirretty temp/. Uusi rakenne:
- StatusBar.astro, Terminal.astro, Editor.astro, Guide.astro
- global.css erillinen
- Wasm pääsäikeessä (ei Worker — yksinkertainen, debugattava)
- Tab-completion, dropdown, projektikortti, Monaco, GUIDE.md
- Ei tokenisointia eikä koodilaboratoriota

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jaakko Vanhala
2026-04-09 20:17:39 +03:00
parent e3fdb91ac5
commit a8c4af0975
9617 changed files with 996171 additions and 5349 deletions

View File

@@ -0,0 +1,71 @@
import { defineDriver, normalizeKey, joinKeys } from "./utils/index.mjs";
const DRIVER_NAME = "vercel-runtime-cache";
export default defineDriver((opts) => {
const base = normalizeKey(opts?.base);
const r = (...keys) => joinKeys(base, ...keys);
let _cache;
const getClient = () => {
if (!_cache) {
_cache = getCache();
}
return _cache;
};
return {
name: DRIVER_NAME,
getInstance: getClient,
async hasItem(key) {
const value = await getClient().get(r(key));
return value !== void 0 && value !== null;
},
async getItem(key) {
const value = await getClient().get(r(key));
return value === void 0 ? null : value;
},
async setItem(key, value, tOptions) {
const ttl = tOptions?.ttl ?? opts?.ttl;
const tags = [...tOptions?.tags || [], ...opts?.tags || []].filter(
Boolean
);
await getClient().set(r(key), value, {
ttl,
tags
});
},
async removeItem(key) {
await getClient().delete(r(key));
},
async getKeys(_base) {
return [];
},
async clear(_base) {
if (opts?.tags && opts.tags.length > 0) {
await getClient().expireTag(opts.tags);
}
}
};
});
const SYMBOL_FOR_REQ_CONTEXT = /* @__PURE__ */ Symbol.for(
"@vercel/request-context"
);
function getContext() {
const fromSymbol = globalThis;
return fromSymbol[SYMBOL_FOR_REQ_CONTEXT]?.get?.() ?? {};
}
function getCache() {
const cache = getContext()?.cache || tryRequireVCFunctions()?.getCache?.({
keyHashFunction: (key) => key,
namespaceSeparator: ":"
});
if (!cache) {
throw new Error("Runtime cache is not available!");
}
return cache;
}
let _vcFunctionsLib;
function tryRequireVCFunctions() {
if (!_vcFunctionsLib) {
const { createRequire } = globalThis.process?.getBuiltinModule?.("node:module") || {};
_vcFunctionsLib = createRequire?.(import.meta.url)("@vercel/functions");
}
return _vcFunctionsLib;
}