import { mkdirSync, readFileSync, writeFileSync } from "node:fs"; import { basename, dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; const root = dirname(fileURLToPath(import.meta.url)); const frontendRoot = join(root, ".."); const exactRoot = join(frontendRoot, "public", "exact"); const outFile = join(frontendRoot, "src", "routes", "exact-html.ts"); const componentRoot = join(frontendRoot, "src", "routes", "exact-pages"); const pages = [ ["account", "account.html"], ["assetFactory", "asset-factory.html"], ["dashboard", "index.html"], ["imageOptimize", "image-optimize.html"], ["library", "library.html"], ["login", "login.html"], ["messages", "messages.html"], ["modelPhoto", "model-photo.html"], ["modelPhotoDemoA", "model-photo-demo-a.html"], ["modelPhotoDemoB", "model-photo-demo-b.html"], ["pipeline", "pipeline.html"], ["platformCover", "platform-cover.html"], ["productCreate", "product-create.html"], ["productCreateUpload", "product-create-upload.html"], ["productDetail", "product-detail.html"], ["products", "products.html"], ["projectWizard", "projects-new.html"], ["projects", "projects.html"], ["register", "register.html"], ["settings", "settings.html"], ["team", "team.html"] ]; function normalizeDocument(html, fileName) { const withMeta = html.replace( /
/i, `\n` ); return withMeta .replace(/(src|href)="assets\//g, '$1="/exact/assets/') .replace(/url\((['"]?)assets\//g, "url($1/exact/assets/") .replace( "history.replaceState(null, '', '#' + id);", "try { window.location.hash = id; } catch (e) {}" ); } mkdirSync(dirname(outFile), { recursive: true }); mkdirSync(componentRoot, { recursive: true }); const entries = pages .map(([key, fileName]) => { const html = normalizeDocument(readFileSync(join(exactRoot, fileName), "utf8"), fileName); return ` ${JSON.stringify(key)}: ${JSON.stringify(html)}`; }) .join(",\n"); const keys = pages.map(([key]) => JSON.stringify(key)).join(" | "); writeFileSync( outFile, `/* This file is generated by scripts/generate-exact-html.mjs. Do not edit by hand. */\n` + `export type ExactHtmlKey = ${keys};\n\n` + `export const exactHtmlDocuments: Record