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,79 @@
import { DEFAULT_COMPONENTS } from "../core/routing/default.js";
import { routeIsRedirect } from "../core/routing/helpers.js";
import { VIRTUAL_PAGE_MODULE_ID } from "./const.js";
import { getVirtualModulePageName } from "./util.js";
import { ASTRO_VITE_ENVIRONMENT_NAMES } from "../core/constants.js";
const VIRTUAL_PAGES_MODULE_ID = "virtual:astro:pages";
const VIRTUAL_PAGES_RESOLVED_MODULE_ID = "\0" + VIRTUAL_PAGES_MODULE_ID;
function getRoutesForEnvironment(routes, isPrerender) {
const result = /* @__PURE__ */ new Set();
for (const route of routes) {
if (route.prerender === isPrerender) {
result.add(route);
}
if (route.redirectRoute) {
result.add(route.redirectRoute);
}
}
return result;
}
function pluginPages({ routesList }) {
return {
name: "@astro/plugin-pages",
enforce: "post",
applyToEnvironment(environment) {
return environment.name === ASTRO_VITE_ENVIRONMENT_NAMES.ssr || environment.name === ASTRO_VITE_ENVIRONMENT_NAMES.prerender;
},
resolveId: {
filter: {
id: new RegExp(`^${VIRTUAL_PAGES_MODULE_ID}$`)
},
handler() {
return VIRTUAL_PAGES_RESOLVED_MODULE_ID;
}
},
load: {
filter: {
id: new RegExp(`^${VIRTUAL_PAGES_RESOLVED_MODULE_ID}$`)
},
async handler() {
const imports = [];
const pageMap = [];
let i = 0;
const envName = this.environment.name;
const isSSR = envName === ASTRO_VITE_ENVIRONMENT_NAMES.ssr;
const isPrerender = envName === ASTRO_VITE_ENVIRONMENT_NAMES.prerender;
const routes = isSSR || isPrerender ? getRoutesForEnvironment(routesList.routes, isPrerender) : new Set(routesList.routes);
for (const route of routes) {
if (routeIsRedirect(route)) {
continue;
}
if (DEFAULT_COMPONENTS.some((component) => route.component === component)) {
continue;
}
const virtualModuleName = getVirtualModulePageName(
VIRTUAL_PAGE_MODULE_ID,
route.component
);
const module = await this.resolve(virtualModuleName);
if (module) {
const variable = `_page${i}`;
imports.push(`const ${variable} = () => import("${virtualModuleName}");`);
pageMap.push(`[${JSON.stringify(route.component)}, ${variable}]`);
i++;
}
}
const pageMapCode = `const pageMap = new Map([
${pageMap.join(",\n ")}
]);
export { pageMap };`;
return { code: [...imports, pageMapCode].join("\n") };
}
}
};
}
export {
VIRTUAL_PAGES_MODULE_ID,
pluginPages
};