@absolutejs/absolute 0.19.0-beta.271 → 0.19.0-beta.272

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,22 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/constants.ts", "../src/utils/ssrErrorPage.ts", "../src/utils/stringModifiers.ts", "../src/utils/resolveConvention.ts", "../src/utils/registerClientScript.ts", "../src/angular/injectorPatch.ts", "../src/angular/resolveAngularPackage.ts", "../src/angular/angularPatch.ts", "../src/angular/angularDeps.ts", "../src/angular/ssrSanitizer.ts", "../src/angular/ssrRender.ts", "../src/angular/pageHandler.ts", "../src/angular/server.ts"],
4
+ "sourcesContent": [
5
+ "export const ANGULAR_INIT_TIMEOUT_MS = 500;\nexport const ANSI_ESCAPE_LENGTH = 3;\nexport const ASCII_SPACE = 32;\nexport const BASE_36_RADIX = 36;\nexport const BUN_BUILD_WARNING_SUPPRESSION =\n\t'wildcard sideEffects are not supported yet';\nexport const BODY_SLICE_LENGTH = 2000;\nexport const BYTES_PER_KILOBYTE = 1024;\nexport const CLI_ARGS_OFFSET = 3;\nexport const CSS_ERROR_RESOLVE_DELAY_MS = 50;\nexport const CSS_MAX_CHECK_ATTEMPTS = 10;\nexport const CSS_MAX_PARSE_TIMEOUT_MS = 500;\nexport const CSS_SHEET_READY_TIMEOUT_MS = 100;\nexport const DEFAULT_CHUNK_SIZE = 16_384;\nexport const DEFAULT_DEBOUNCE_MS = 15;\nexport const DEFAULT_PORT = 3000;\nexport const DEV_SERVER_RESTART_DEBOUNCE_MS = 100;\nexport const DOM_UPDATE_DELAY_MS = 50;\nexport const FILE_PROTOCOL_PREFIX_LENGTH = 7;\nexport const FOCUS_ID_PREFIX_LENGTH = 3;\nexport const FOCUS_IDX_PREFIX_LENGTH = 4;\nexport const FOCUS_NAME_PREFIX_LENGTH = 5;\nexport const HMR_UPDATE_TIMEOUT_MS = 2000;\nexport const HOOK_SIGNATURE_LENGTH = 12;\nexport const HOURS_IN_DAY = 24;\nexport const HOURS_IN_HALF_DAY = 12;\nexport const MAX_ERROR_LENGTH = 200;\nexport const MAX_RECONNECT_ATTEMPTS = 60;\nexport const MILLISECONDS_IN_A_SECOND = 1000;\nexport const MINUTES_IN_AN_HOUR = 60;\nexport const SECONDS_IN_A_MINUTE = 60;\nexport const MILLISECONDS_IN_A_MINUTE =\n\tMILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE;\nexport const MILLISECONDS_IN_A_DAY =\n\tMILLISECONDS_IN_A_SECOND *\n\tSECONDS_IN_A_MINUTE *\n\tMINUTES_IN_AN_HOUR *\n\tHOURS_IN_DAY;\nexport const OVERLAY_FADE_DURATION_MS = 150;\nexport const PING_INTERVAL_MS = 30_000;\nexport const RAF_BATCH_COUNT = 3;\nexport const RANDOM_ID_END_INDEX = 11;\nexport const REBUILD_BATCH_DELAY_MS = 10;\nexport const REBUILD_RELOAD_DELAY_MS = 200;\nexport const RECONNECT_INITIAL_DELAY_MS = 500;\nexport const RECONNECT_POLL_INTERVAL_MS = 300;\nexport const SIGINT_EXIT_CODE = 130;\nexport const SIGTERM_EXIT_CODE = 143;\nexport const SVELTE_CSS_LOAD_TIMEOUT_MS = 500;\nexport const TIME_PRECISION = 2;\nexport const TWO_THIRDS = 2 / 3;\nexport const UNFOUND_INDEX = -1;\nexport const WEBSOCKET_NORMAL_CLOSURE = 1000;\n",
6
+ "export const ssrErrorPage = (framework: string, error: unknown) => {\n\tconst frameworkColors: Record<string, string> = {\n\t\tangular: '#dd0031',\n\t\thtml: '#e34c26',\n\t\thtmx: '#1a365d',\n\t\treact: '#61dafb',\n\t\tsvelte: '#ff3e00',\n\t\tvue: '#42b883'\n\t};\n\n\tconst accent = frameworkColors[framework] ?? '#94a3b8';\n\tconst label = framework.charAt(0).toUpperCase() + framework.slice(1);\n\tconst message = error instanceof Error ? error.message : String(error);\n\n\treturn `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>SSR Error - AbsoluteJS</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:\"JetBrains Mono\",\"Fira Code\",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}\n.card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}\n.header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}\n.brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}\n.badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}\n.kind{color:#94a3b8;font-size:13px;font-weight:500}\n.content{padding:24px}\n.label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}\n.message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}\n.hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}\n</style>\n</head>\n<body>\n<div class=\"card\">\n<div class=\"header\">\n<div style=\"display:flex;align-items:center;gap:12px\">\n<span class=\"brand\">AbsoluteJS</span>\n<span class=\"badge\">${label}</span>\n</div>\n<span class=\"kind\">Server Render Error</span>\n</div>\n<div class=\"content\">\n<div class=\"label\">What went wrong</div>\n<pre class=\"message\">${message.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')}</pre>\n<div class=\"hint\">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>\n</div>\n</div>\n</body>\n</html>`;\n};\n",
7
+ "const normalizeSlug = (str: string) =>\n\tstr\n\t\t.trim()\n\t\t.replace(/\\s+/g, '-')\n\t\t.replace(/[^A-Za-z0-9\\-_]+/g, '')\n\t\t.replace(/[-_]{2,}/g, '-');\n\nexport const toKebab = (str: string) =>\n\tnormalizeSlug(str)\n\t\t.replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n\t\t.toLowerCase();\nexport const toPascal = (str: string) => {\n\tif (!str.includes('-') && !str.includes('_')) {\n\t\treturn str.charAt(0).toUpperCase() + str.slice(1);\n\t}\n\n\treturn normalizeSlug(str)\n\t\t.split(/[-_]/)\n\t\t.filter(Boolean)\n\t\t.map(\n\t\t\t(segment) =>\n\t\t\t\tsegment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase()\n\t\t)\n\t\t.join('');\n};\nexport const toScreamingSnake = (str: string) =>\n\tstr.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n",
8
+ "import { basename } from 'node:path';\nimport type { ConventionsMap } from '../../types/conventions';\nimport { toPascal } from './stringModifiers';\n\n// Use globalThis so the conventions map is shared across all bundles.\n// The main bundle (dist/index.js) calls setConventions, but framework\n// bundles (dist/svelte/index.js, etc.) need to read the same map.\nconst CONVENTIONS_KEY = '__absoluteConventions';\n\nconst isConventionsMap = (value: unknown): value is ConventionsMap =>\n\tBoolean(value) && typeof value === 'object';\n\nconst getMap = () => {\n\tconst value: unknown = Reflect.get(globalThis, CONVENTIONS_KEY);\n\tif (isConventionsMap(value)) return value;\n\n\tconst empty: ConventionsMap = {};\n\n\treturn empty;\n};\n\nexport const derivePageName = (pagePath: string) => {\n\tconst base = basename(pagePath);\n\t// Strip hash and extension: \"SvelteExample.abc123.js\" → \"SvelteExample\"\n\tconst dotIndex = base.indexOf('.');\n\tconst name = dotIndex > 0 ? base.slice(0, dotIndex) : base;\n\n\treturn toPascal(name);\n};\nexport const getConventions = () => getMap();\nexport const resolveErrorConventionPath = (\n\tframework: keyof ConventionsMap,\n\tpageName: string\n) => {\n\tconst conventions = getMap()[framework];\n\tif (!conventions) return undefined;\n\n\treturn conventions.pages?.[pageName]?.error ?? conventions.defaults?.error;\n};\nexport const resolveNotFoundConventionPath = (\n\tframework: keyof ConventionsMap\n) => getMap()[framework]?.defaults?.notFound;\nexport const setConventions = (map: ConventionsMap) => {\n\tReflect.set(globalThis, CONVENTIONS_KEY, map);\n};\n\nconst isDev = () => process.env.NODE_ENV === 'development';\n\nconst buildErrorProps = (error: unknown) => {\n\tconst message = error instanceof Error ? error.message : String(error);\n\tconst stack = isDev() && error instanceof Error ? error.stack : undefined;\n\n\treturn { error: { message, stack } };\n};\n\nconst renderReactError = async (\n\tconventionPath: string,\n\terrorProps: ReturnType<typeof buildErrorProps>\n) => {\n\tconst { createElement } = await import('react');\n\tconst { renderToReadableStream } = await import('react-dom/server');\n\tconst mod = await import(conventionPath);\n\tconst [firstKey] = Object.keys(mod);\n\tconst ErrorComponent =\n\t\tmod.default ?? (firstKey ? mod[firstKey] : undefined);\n\tconst element = createElement(ErrorComponent, errorProps);\n\tconst stream = await renderToReadableStream(element);\n\n\treturn new Response(stream, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 500\n\t});\n};\n\nconst renderSvelteError = async (\n\tconventionPath: string,\n\terrorProps: ReturnType<typeof buildErrorProps>\n) => {\n\tconst { render } = await import('svelte/server');\n\tconst mod = await import(conventionPath);\n\tconst ErrorComponent = mod.default;\n\tconst { head, body } = render(ErrorComponent, {\n\t\tprops: errorProps\n\t});\n\tconst html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 500\n\t});\n};\n\nconst unescapeVueStyles = (ssrBody: string) => {\n\tlet styles = '';\n\tconst body = ssrBody.replace(\n\t\t/<style>([\\s\\S]*?)<\\/style>/g,\n\t\t(_, css: string) => {\n\t\t\tstyles += `<style>${css\n\t\t\t\t.replace(/&quot;/g, '\"')\n\t\t\t\t.replace(/&amp;/g, '&')\n\t\t\t\t.replace(/&lt;/g, '<')\n\t\t\t\t.replace(/&gt;/g, '>')}</style>`;\n\n\t\t\treturn '';\n\t\t}\n\t);\n\n\treturn { body, styles };\n};\n\nconst renderVueError = async (\n\tconventionPath: string,\n\terrorProps: ReturnType<typeof buildErrorProps>\n) => {\n\tconst { createSSRApp, h } = await import('vue');\n\tconst { renderToString } = await import('vue/server-renderer');\n\tconst mod = await import(conventionPath);\n\tconst ErrorComponent = mod.default;\n\tconst app = createSSRApp({\n\t\trender: () => h(ErrorComponent, errorProps)\n\t});\n\tconst rawBody = await renderToString(app);\n\n\t// Vue SSR escapes quotes inside <component is=\"style\"> tags.\n\t// Extract style content, unescape it, and move to <head>.\n\tconst { styles, body } = unescapeVueStyles(rawBody);\n\tconst html = `<!DOCTYPE html><html><head>${styles}</head><body><div id=\"root\">${body}</div></body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 500\n\t});\n};\n\nconst renderAngularError = async (\n\tconventionPath: string,\n\terrorProps: ReturnType<typeof buildErrorProps>\n) => {\n\t// Angular error pages are rendered as plain HTML templates\n\t// since the full Angular SSR pipeline is too heavy for error pages\n\tconst mod = await import(conventionPath);\n\tconst renderError = mod.default ?? mod.renderError;\n\tif (typeof renderError !== 'function') return null;\n\n\tconst html = renderError(errorProps);\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 500\n\t});\n};\n\nconst logConventionRenderError = (\n\tframework: keyof ConventionsMap,\n\tlabel: string,\n\trenderError: unknown\n) => {\n\tconst message = renderError instanceof Error ? renderError.message : '';\n\tif (\n\t\tmessage.includes('Cannot find module') ||\n\t\tmessage.includes('Cannot find package') ||\n\t\tmessage.includes('not found in module')\n\t) {\n\t\tconsole.error(\n\t\t\t`[SSR] Convention ${label} page for ${framework} failed: missing framework package. ` +\n\t\t\t\t`Ensure the ${framework} runtime is installed (e.g. bun add ${framework === 'react' ? 'react react-dom' : framework}).`\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconsole.error(\n\t\t`[SSR] Failed to render ${framework} convention ${label} page:`,\n\t\trenderError\n\t);\n};\n\nconst ERROR_RENDERERS: Record<\n\tkeyof ConventionsMap,\n\t(\n\t\tconventionPath: string,\n\t\terrorProps: ReturnType<typeof buildErrorProps>\n\t) => Promise<Response | null>\n> = {\n\tangular: renderAngularError,\n\treact: renderReactError,\n\tsvelte: renderSvelteError,\n\tvue: renderVueError\n};\n\nexport const renderConventionError = async (\n\tframework: keyof ConventionsMap,\n\tpageName: string,\n\terror: unknown\n) => {\n\tconst conventionPath = resolveErrorConventionPath(framework, pageName);\n\tif (!conventionPath) return null;\n\n\tconst errorProps = buildErrorProps(error);\n\tconst renderer = ERROR_RENDERERS[framework];\n\tif (!renderer) return null;\n\n\ttry {\n\t\treturn await renderer(conventionPath, errorProps);\n\t} catch (renderError) {\n\t\tlogConventionRenderError(framework, 'error', renderError);\n\t}\n\n\treturn null;\n};\n\nconst renderReactNotFound = async (conventionPath: string) => {\n\tconst { createElement } = await import('react');\n\tconst { renderToReadableStream } = await import('react-dom/server');\n\tconst mod = await import(conventionPath);\n\tconst [nfKey] = Object.keys(mod);\n\tconst NotFoundComponent = mod.default ?? (nfKey ? mod[nfKey] : undefined);\n\tconst element = createElement(NotFoundComponent);\n\tconst stream = await renderToReadableStream(element);\n\n\treturn new Response(stream, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 404\n\t});\n};\n\nconst renderSvelteNotFound = async (conventionPath: string) => {\n\tconst { render } = await import('svelte/server');\n\tconst mod = await import(conventionPath);\n\tconst NotFoundComponent = mod.default;\n\tconst { head, body } = render(NotFoundComponent);\n\tconst html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 404\n\t});\n};\n\nconst renderVueNotFound = async (conventionPath: string) => {\n\tconst { createSSRApp, h } = await import('vue');\n\tconst { renderToString } = await import('vue/server-renderer');\n\tconst mod = await import(conventionPath);\n\tconst NotFoundComponent = mod.default;\n\tconst app = createSSRApp({\n\t\trender: () => h(NotFoundComponent)\n\t});\n\tconst rawBody = await renderToString(app);\n\n\tconst { styles, body } = unescapeVueStyles(rawBody);\n\tconst html = `<!DOCTYPE html><html><head>${styles}</head><body><div id=\"root\">${body}</div></body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 404\n\t});\n};\n\nconst renderAngularNotFound = async (conventionPath: string) => {\n\tconst mod = await import(conventionPath);\n\tconst renderNotFound = mod.default ?? mod.renderNotFound;\n\tif (typeof renderNotFound !== 'function') return null;\n\n\tconst html = renderNotFound();\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 404\n\t});\n};\n\nconst NOT_FOUND_RENDERERS: Record<\n\tkeyof ConventionsMap,\n\t(conventionPath: string) => Promise<Response | null>\n> = {\n\tangular: renderAngularNotFound,\n\treact: renderReactNotFound,\n\tsvelte: renderSvelteNotFound,\n\tvue: renderVueNotFound\n};\n\nexport const renderConventionNotFound = async (\n\tframework: keyof ConventionsMap\n) => {\n\tconst conventionPath = resolveNotFoundConventionPath(framework);\n\tif (!conventionPath) return null;\n\n\tconst renderer = NOT_FOUND_RENDERERS[framework];\n\tif (!renderer) return null;\n\n\ttry {\n\t\treturn await renderer(conventionPath);\n\t} catch (renderError) {\n\t\tlogConventionRenderError(framework, 'not-found', renderError);\n\t}\n\n\treturn null;\n};\n\nconst NOT_FOUND_PRIORITY: (keyof ConventionsMap)[] = [\n\t'react',\n\t'svelte',\n\t'vue',\n\t'angular'\n];\n\nexport const renderFirstNotFound = async () => {\n\tfor (const framework of NOT_FOUND_PRIORITY) {\n\t\tif (!getMap()[framework]?.defaults?.notFound) continue;\n\t\t// eslint-disable-next-line no-await-in-loop -- frameworks must be tried sequentially; first match wins\n\t\tconst response = await renderConventionNotFound(framework);\n\t\tif (response) return response;\n\t}\n\n\treturn null;\n};\n",
9
+ "/**\n * Utility for registering client-side scripts that need to run after Angular SSR hydration.\n *\n * This is necessary because Angular's lifecycle hooks don't always run reliably on the client\n * after SSR hydration, especially for event listeners attached to DOM elements.\n *\n * Usage in Angular components:\n * ```typescript\n * import { registerClientScript } from '@absolutejs/absolute';\n *\n * // Register an event listener script\n * registerClientScript(() => {\n * const element = document.querySelector('.my-element');\n * if (element) {\n * element.addEventListener('click', () => {\n * console.log('Clicked!');\n * });\n * }\n * });\n * ```\n *\n * The script will be automatically injected into the HTML response and executed on the client.\n */\n\n// Request-scoped registry for client scripts\n// Each request gets its own set of scripts to inject\nconst scriptRegistry = new Map<string, Set<() => void>>();\n\n// Generate a unique request ID for tracking scripts per request\nlet requestCounter = 0;\nconst getRequestId = () => `req_${Date.now()}_${++requestCounter}`;\n\n// Allow SSR frameworks to inject a request context getter (e.g. AsyncLocalStorage)\nlet ssrContextGetter: (() => string | undefined) | null = null;\nexport const registerClientScript = (\n\tscript: () => void,\n\trequestId?: string\n) => {\n\t// Try to get requestId from explicit arg, then Async Context, then global fallback\n\tconst id =\n\t\trequestId ||\n\t\tssrContextGetter?.() ||\n\t\tObject.getOwnPropertyDescriptor(globalThis, '__absolutejs_requestId')\n\t\t\t?.value ||\n\t\tgetRequestId();\n\n\tif (!scriptRegistry.has(id)) {\n\t\tscriptRegistry.set(id, new Set());\n\t}\n\n\tscriptRegistry.get(id)?.add(script);\n\n\treturn id;\n};\nexport const setSsrContextGetter = (getter: () => string | undefined) => {\n\tssrContextGetter = getter;\n};\n\n// Make registerClientScript available globally during SSR for Angular components\n// Using type assertion for globalThis extension\nif (typeof globalThis !== 'undefined') {\n\tObject.assign(globalThis, { registerClientScript });\n}\n\n/**\n * Get all registered scripts for a request and clear them.\n * This is called by the page handler after rendering.\n *\n * @param requestId - The request ID to get scripts for\n * @returns Array of script functions, or empty array if none registered\n */\nexport const clearAllClientScripts = () => {\n\tscriptRegistry.clear();\n};\nexport const generateClientScriptCode = (scripts: (() => void)[]) => {\n\tif (scripts.length === 0) {\n\t\treturn '';\n\t}\n\n\t// Convert functions to strings and wrap in IIFE\n\tconst scriptCode = scripts\n\t\t.map((script, index) => {\n\t\t\t// Get the function body as a string\n\t\t\tconst funcString = script.toString();\n\n\t\t\t// Extract the body (everything between { and })\n\t\t\tconst bodyMatch = funcString.match(/\\{([\\s\\S]*)\\}/);\n\t\t\tif (!bodyMatch || !bodyMatch[1]) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tconst body = bodyMatch[1].trim();\n\n\t\t\t// Wrap in IIFE with MutationObserver for DOM readiness\n\t\t\treturn `\n\t(function() {\n\t\tvar executed = false;\n\t\tfunction executeScript_${index}() {\n\t\t\tif (executed) return;\n\t\t\texecuted = true;\n\t\t\t${body}\n\t\t}\n\n\t\tif (document.readyState === 'complete' || document.readyState === 'interactive') {\n\t\t\texecuteScript_${index}();\n\t\t} else {\n\t\t\tdocument.addEventListener('DOMContentLoaded', executeScript_${index});\n\t\t}\n\n\t\t// Watch for hydration-added elements\n\t\tvar observer = new MutationObserver(function() {\n\t\t\texecuteScript_${index}();\n\t\t\tif (executed) observer.disconnect();\n\t\t});\n\t\tif (!executed) {\n\t\t\tobserver.observe(document.body || document.documentElement, { childList: true, subtree: true });\n\t\t}\n\n\t\t// Single fallback timeout\n\t\tsetTimeout(function() {\n\t\t\texecuteScript_${index}();\n\t\t\tobserver.disconnect();\n\t\t}, 1000);\n\t})();`;\n\t\t})\n\t\t.join('\\n');\n\n\treturn `<script>\n(function() {\n${scriptCode}\n})();\n</script>`;\n};\nexport const getAndClearClientScripts = (requestId?: string) => {\n\tconst id = requestId || ssrContextGetter?.();\n\tif (!id) return [];\n\n\tconst scripts = scriptRegistry.get(id);\n\tif (!scripts) {\n\t\treturn [];\n\t}\n\n\tconst scriptArray = Array.from(scripts);\n\tscriptRegistry.delete(id);\n\n\treturn scriptArray;\n};\n",
10
+ "import { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\n\n// --- Patch Angular injector singleton for HMR compatibility ---\n// Bun's --hot mode can create duplicate Angular module instances during\n// HMR rebuilds. Angular's _currentInjector is a module-level variable in\n// _not_found-chunk.mjs — when duplicated, R3Injector.get() sets it in\n// instance A while the factory's inject() reads from instance B (undefined),\n// causing NG0203. This patch stores _currentInjector on globalThis so all\n// instances share the same value.\n\nconst applyInjectorPatch = (chunkPath: string, content: string) => {\n\tif (content.includes('Symbol.for(\"angular.currentInjector\")')) {\n\t\treturn;\n\t}\n\n\tconst original = [\n\t\t'let _currentInjector = undefined;',\n\t\t'function getCurrentInjector() {',\n\t\t' return _currentInjector;',\n\t\t'}',\n\t\t'function setCurrentInjector(injector) {',\n\t\t' const former = _currentInjector;',\n\t\t' _currentInjector = injector;',\n\t\t' return former;',\n\t\t'}'\n\t].join('\\n');\n\n\tconst replacement = [\n\t\t'const _injSym = Symbol.for(\"angular.currentInjector\");',\n\t\t'if (!globalThis[_injSym]) globalThis[_injSym] = { v: undefined };',\n\t\t'function getCurrentInjector() {',\n\t\t' return globalThis[_injSym].v;',\n\t\t'}',\n\t\t'function setCurrentInjector(injector) {',\n\t\t' const former = globalThis[_injSym].v;',\n\t\t' globalThis[_injSym].v = injector;',\n\t\t' return former;',\n\t\t'}'\n\t].join('\\n');\n\n\tconst patched = content.replace(original, replacement);\n\n\tif (patched === content) {\n\t\treturn;\n\t}\n\n\twriteFileSync(chunkPath, patched, 'utf-8');\n};\n\nconst resolveAngularCoreDir = () => {\n\tconst fromProject = resolve(process.cwd(), 'node_modules/@angular/core');\n\n\tif (existsSync(join(fromProject, 'package.json'))) {\n\t\treturn fromProject;\n\t}\n\n\treturn dirname(require.resolve('@angular/core/package.json'));\n};\n\nexport const patchAngularInjectorSingleton = () => {\n\ttry {\n\t\tconst coreDir = resolveAngularCoreDir();\n\t\tconst chunkPath = join(coreDir, 'fesm2022', '_not_found-chunk.mjs');\n\t\tconst content = readFileSync(chunkPath, 'utf-8');\n\t\tapplyInjectorPatch(chunkPath, content);\n\t} catch {\n\t\t// Non-fatal — HMR may see NG0203 on second+ edits\n\t}\n};\n\n// Apply immediately at module load so the file is patched before any\n// Angular module is first evaluated by Bun's --hot mode or linker plugin.\npatchAngularInjectorSingleton();\n",
11
+ "import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\n/**\n * Resolve an Angular package path from process.cwd()/node_modules/ first,\n * falling back to the bare specifier. This prevents Bun's baked import.meta.dir\n * from resolving Angular packages from the absolutejs source tree instead of\n * the consumer's project when running from a published npm package.\n */\nexport const resolveAngularPackage = (specifier: string) => {\n\tconst fromProject = resolve(process.cwd(), 'node_modules', specifier);\n\n\tif (existsSync(fromProject)) {\n\t\treturn fromProject;\n\t}\n\n\treturn specifier;\n};\n",
12
+ "import { resolveAngularPackage } from './resolveAngularPackage';\n\n// Patches Angular SSR's DominoAdapter to guard against null doc.head\n\nconst ensureHead = (doc: Document) => {\n\tif (!doc || doc.head || !doc.documentElement) {\n\t\treturn;\n\t}\n\n\tconst head = doc.createElement('head');\n\tdoc.documentElement.insertBefore(head, doc.documentElement.firstChild);\n};\n\nexport const applyPatches = async () => {\n\tconst { ɵDominoAdapter } = await import(\n\t\tresolveAngularPackage('@angular/platform-server')\n\t);\n\tif (!ɵDominoAdapter?.prototype) {\n\t\tconsole.warn(\n\t\t\t'[Angular Patch] ɵDominoAdapter not found, skipping patches'\n\t\t);\n\n\t\treturn false;\n\t}\n\n\tconst proto = ɵDominoAdapter.prototype;\n\n\tconst origGetBaseHref = proto.getBaseHref;\n\tproto.getBaseHref = function (doc: Document) {\n\t\tif (!doc || !doc.head || typeof doc.head.children === 'undefined') {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn origGetBaseHref.call(this, doc);\n\t};\n\n\tconst origCreateHtmlDocument = proto.createHtmlDocument;\n\tproto.createHtmlDocument = function () {\n\t\tconst doc = origCreateHtmlDocument.call(this);\n\t\tensureHead(doc);\n\n\t\treturn doc;\n\t};\n\n\tconst origGetDefaultDocument = proto.getDefaultDocument;\n\tproto.getDefaultDocument = function () {\n\t\tconst doc = origGetDefaultDocument.call(this);\n\t\tensureHead(doc);\n\n\t\treturn doc;\n\t};\n\n\treturn true;\n};\n",
13
+ "import type { AngularDeps, SsrDepsResult } from '../../types/angular';\nimport { patchAngularInjectorSingleton } from './injectorPatch';\nimport { resolveAngularPackage } from './resolveAngularPackage';\n\nconst initDominoAdapter = (platformServer: SsrDepsResult['platformServer']) => {\n\ttry {\n\t\tconst DominoAdapter: { makeCurrent?: () => void } | undefined =\n\t\t\tplatformServer.ɵDominoAdapter;\n\t\tDominoAdapter?.makeCurrent?.();\n\t} catch (err) {\n\t\tconsole.error('Failed to initialize DominoAdapter:', err);\n\t}\n};\n\nconst loadAngularDeps = async () => {\n\t// Patch Angular's _currentInjector to use globalThis BEFORE any\n\t// Angular module is loaded — this prevents NG0203 when Bun's --hot\n\t// mode creates duplicate module instances during HMR rebuilds.\n\tpatchAngularInjectorSingleton();\n\n\t// JIT compiler MUST be fully loaded before any other Angular import.\n\t// Angular packages like @angular/common contain partially compiled\n\t// injectables (e.g. PlatformLocation) that need the JIT compiler\n\t// facade to be registered first.\n\tawait import(resolveAngularPackage('@angular/compiler'));\n\n\t// angularPatch imports @angular/platform-server internally, so it\n\t// must also run after the compiler is available.\n\tconst { applyPatches } = await import('./angularPatch');\n\tawait applyPatches();\n\n\t// Now safe to load all Angular packages in parallel\n\tconst [platformBrowser, platformServer, common, core] = await Promise.all([\n\t\timport(resolveAngularPackage('@angular/platform-browser')),\n\t\timport(resolveAngularPackage('@angular/platform-server')),\n\t\timport(resolveAngularPackage('@angular/common')),\n\t\timport(resolveAngularPackage('@angular/core'))\n\t]);\n\n\tif (process.env.NODE_ENV !== 'development') {\n\t\tcore.enableProdMode();\n\t}\n\n\tinitDominoAdapter(platformServer);\n\n\treturn {\n\t\tAPP_BASE_HREF: common.APP_BASE_HREF,\n\t\tbootstrapApplication: platformBrowser.bootstrapApplication,\n\t\tDomSanitizer: platformBrowser.DomSanitizer,\n\t\tprovideClientHydration: platformBrowser.provideClientHydration,\n\t\tprovideServerRendering: platformServer.provideServerRendering,\n\t\tprovideZonelessChangeDetection: core.provideZonelessChangeDetection,\n\t\treflectComponentType: core.reflectComponentType,\n\t\trenderApplication: platformServer.renderApplication,\n\t\tSanitizer: core.Sanitizer,\n\t\tSecurityContext: core.SecurityContext\n\t};\n};\n\nlet angularDeps: Promise<AngularDeps> | null = null;\n\nexport const getAngularDeps = () => {\n\tif (!angularDeps) {\n\t\tangularDeps = loadAngularDeps();\n\t}\n\n\treturn angularDeps;\n};\n",
14
+ "import type { SecurityContext } from '@angular/core';\nimport type { SafeValue } from '@angular/platform-browser';\nimport type { AngularDeps } from '../../types/angular';\n\nconst escapeHtml = (str: string) =>\n\tString(str)\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;');\n\nconst bypassValue = (value: string): SafeValue => ({\n\tchangingThisBreaksApplicationSecurity: value\n});\n\n// Deferred: SsrSanitizer class is built after deps load because it\n// extends DomSanitizer which comes from the lazy import. We cache the\n// class + singleton instance after the first request.\nlet ssrSanitizer: InstanceType<AngularDeps['DomSanitizer']> | null = null;\n\nexport const getSsrSanitizer = (deps: AngularDeps) => {\n\tif (ssrSanitizer) return ssrSanitizer;\n\n\tconst SsrSanitizerClass = class extends deps.DomSanitizer {\n\t\tsanitize(ctx: SecurityContext, value: SafeValue | string | null) {\n\t\t\tif (value === null) return null;\n\t\t\tlet strValue: string;\n\t\t\tlet isTrustedHtml = false;\n\t\t\tif (typeof value === 'string') {\n\t\t\t\tstrValue = value;\n\t\t\t} else if (\n\t\t\t\ttypeof value === 'object' &&\n\t\t\t\t'changingThisBreaksApplicationSecurity' in value\n\t\t\t) {\n\t\t\t\tstrValue = String(value.changingThisBreaksApplicationSecurity);\n\t\t\t\tisTrustedHtml = true;\n\t\t\t} else {\n\t\t\t\tstrValue = String(value);\n\t\t\t}\n\n\t\t\tif (ctx === deps.SecurityContext.HTML) {\n\t\t\t\tif (isTrustedHtml) {\n\t\t\t\t\treturn strValue;\n\t\t\t\t}\n\n\t\t\t\treturn escapeHtml(strValue);\n\t\t\t}\n\n\t\t\treturn strValue;\n\t\t}\n\t\tbypassSecurityTrustHtml(value: string) {\n\t\t\treturn bypassValue(value);\n\t\t}\n\t\tbypassSecurityTrustStyle(value: string) {\n\t\t\treturn bypassValue(value);\n\t\t}\n\t\tbypassSecurityTrustScript(value: string) {\n\t\t\treturn bypassValue(value);\n\t\t}\n\t\tbypassSecurityTrustUrl(value: string) {\n\t\t\treturn bypassValue(value);\n\t\t}\n\t\tbypassSecurityTrustResourceUrl(value: string) {\n\t\t\treturn bypassValue(value);\n\t\t}\n\t};\n\n\tssrSanitizer = new SsrSanitizerClass();\n\n\treturn ssrSanitizer;\n};\nexport const resetSsrSanitizer = () => {\n\tssrSanitizer = null;\n};\n",
15
+ "import type { EnvironmentProviders, Provider, Type } from '@angular/core';\nimport type { BootstrapContext } from '@angular/platform-browser';\nimport type {\n\tAngularDeps,\n\tCachedRouteData,\n\tSsrDepsResult\n} from '../../types/angular';\nimport { toScreamingSnake } from '../utils/stringModifiers';\nimport {\n\tgetAndClearClientScripts,\n\tgenerateClientScriptCode\n} from '../utils/registerClientScript';\n\n// --- Last-used props cache for HMR ---\n// Stores { props, headTag } from the most recent real request per route\n// so HMR re-renders with the same data the user last saw (Vite/Next behavior).\n\nconst routePropsCache = new Map<string, CachedRouteData>();\n\nexport const cacheRouteData = (pagePath: string, data: CachedRouteData) => {\n\tconst cacheKey = pagePath.split('?')[0] ?? pagePath;\n\troutePropsCache.set(cacheKey, data);\n};\nexport const getCachedRouteData = (pagePath: string) =>\n\troutePropsCache.get(pagePath);\n\n// --- Selector cache ---\n\nconst selectorCache = new Map<string, string>();\n\nexport const buildDeps = (\n\tssrResult: SsrDepsResult | null,\n\tbaseDeps: AngularDeps\n) => {\n\tif (!ssrResult?.core) {\n\t\treturn baseDeps;\n\t}\n\n\tconst { common, core, platformBrowser, platformServer } = ssrResult;\n\n\treturn {\n\t\tAPP_BASE_HREF: common?.APP_BASE_HREF ?? baseDeps.APP_BASE_HREF,\n\t\tbootstrapApplication:\n\t\t\tplatformBrowser?.bootstrapApplication ??\n\t\t\tbaseDeps.bootstrapApplication,\n\t\tDomSanitizer: platformBrowser?.DomSanitizer ?? baseDeps.DomSanitizer,\n\t\tprovideClientHydration:\n\t\t\tplatformBrowser?.provideClientHydration ??\n\t\t\tbaseDeps.provideClientHydration,\n\t\tprovideServerRendering:\n\t\t\tplatformServer?.provideServerRendering ??\n\t\t\tbaseDeps.provideServerRendering,\n\t\tprovideZonelessChangeDetection: core.provideZonelessChangeDetection,\n\t\treflectComponentType: core.reflectComponentType,\n\t\trenderApplication:\n\t\t\tplatformServer?.renderApplication ?? baseDeps.renderApplication,\n\t\tSanitizer: core.Sanitizer,\n\t\tSecurityContext: core.SecurityContext\n\t} satisfies AngularDeps;\n};\nexport const buildProviders = (\n\tdeps: AngularDeps,\n\tsanitizer: InstanceType<AngularDeps['DomSanitizer']>,\n\tmaybeProps: Record<string, unknown> | undefined,\n\ttokenMap: Map<string, unknown>\n) => {\n\tconst providers: (Provider | EnvironmentProviders)[] = [\n\t\tdeps.provideServerRendering(),\n\t\tdeps.provideClientHydration(),\n\t\tdeps.provideZonelessChangeDetection(),\n\t\t{ provide: deps.APP_BASE_HREF, useValue: '/' },\n\t\t{\n\t\t\tprovide: deps.DomSanitizer,\n\t\t\tuseValue: sanitizer\n\t\t},\n\t\t{ provide: deps.Sanitizer, useValue: sanitizer }\n\t];\n\n\tif (!maybeProps) {\n\t\treturn providers;\n\t}\n\n\tconst propProviders = Object.entries(maybeProps)\n\t\t.map(([propName, propValue]) => ({\n\t\t\ttoken: tokenMap.get(toScreamingSnake(propName)),\n\t\t\tvalue: propValue\n\t\t}))\n\t\t.filter((entry) => entry.token)\n\t\t.map((entry) => ({ provide: entry.token, useValue: entry.value }));\n\n\treturn [...providers, ...propProviders];\n};\nexport const clearSelectorCache = () => selectorCache.clear();\n\nconst isInjectionToken = (value: unknown) => {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\t'ngMetadataName' in value && value.ngMetadataName === 'InjectionToken'\n\t);\n};\n\nexport const discoverTokens = (pageModule: Record<string, unknown>) =>\n\tnew Map(\n\t\tObject.entries(pageModule).filter(([, value]) =>\n\t\t\tisInjectionToken(value)\n\t\t)\n\t);\nexport const loadSsrDeps = async (pagePath: string) => {\n\tconst ssrDepsPath = (pagePath.split('?')[0] ?? pagePath).replace(\n\t\t/\\.js$/,\n\t\t'.ssr-deps.js'\n\t);\n\n\ttry {\n\t\tconst ssrDeps = await import(ssrDepsPath);\n\n\t\tconst result: SsrDepsResult = {\n\t\t\tcommon: ssrDeps.__angularCommon,\n\t\t\tcore: ssrDeps.__angularCore,\n\t\t\tplatformBrowser: ssrDeps.__angularPlatformBrowser,\n\t\t\tplatformServer: ssrDeps.__angularPlatformServer\n\t\t};\n\n\t\treturn result;\n\t} catch {\n\t\treturn null;\n\t}\n};\nexport const resolveSelector = (\n\tdeps: AngularDeps,\n\tpagePath: string,\n\tPageComponent: Type<unknown>\n) => {\n\tconst cached = selectorCache.get(pagePath);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst selector =\n\t\tdeps.reflectComponentType(PageComponent)?.selector ?? 'ng-app';\n\tselectorCache.set(pagePath, selector);\n\n\treturn selector;\n};\n\n// --- Inject HTML helper ---\n\nconst injectBeforeClose = (html: string, snippet: string) => {\n\tif (html.includes('</body>')) {\n\t\treturn html.replace('</body>', `${snippet}</body>`);\n\t}\n\tif (html.includes('</html>')) {\n\t\treturn html.replace('</html>', `${snippet}</html>`);\n\t}\n\n\treturn html + snippet;\n};\n\n// --- Post-render HTML injection ---\n\nexport const injectSsrScripts = (\n\thtml: string,\n\trequestId: string,\n\tindexPath: string\n) => {\n\tlet result = html;\n\n\tconst registeredScripts = getAndClearClientScripts(requestId);\n\tif (registeredScripts.length > 0) {\n\t\tresult = injectBeforeClose(\n\t\t\tresult,\n\t\t\tgenerateClientScriptCode(registeredScripts)\n\t\t);\n\t}\n\n\tif (indexPath) {\n\t\tresult = injectBeforeClose(\n\t\t\tresult,\n\t\t\t`<script type=\"module\" src=\"${indexPath}\"></script>`\n\t\t);\n\t}\n\n\treturn result;\n};\n\n// --- Render with suppressed dev logs ---\n\nexport const renderAngularApp = async (\n\tdeps: AngularDeps,\n\tPageComponent: Type<unknown>,\n\tproviders: (Provider | EnvironmentProviders)[],\n\tdocument: string | Document\n) => {\n\tconst origLog = console.log;\n\tconsole.log = (...args: unknown[]) => {\n\t\tif (\n\t\t\ttypeof args[0] === 'string' &&\n\t\t\targs[0].includes('development mode')\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\torigLog.apply(console, args);\n\t};\n\n\tconst bootstrap = (context: BootstrapContext) =>\n\t\tdeps.bootstrapApplication(PageComponent, { providers }, context);\n\n\ttry {\n\t\treturn await deps.renderApplication(bootstrap, {\n\t\t\tdocument,\n\t\t\tplatformProviders: [],\n\t\t\turl: '/'\n\t\t});\n\t} finally {\n\t\tconsole.log = origLog;\n\t}\n};\n",
16
+ "import { AsyncLocalStorage } from 'node:async_hooks';\nimport type { Type } from '@angular/core';\nimport type { AngularPageImporter } from '../../types/angular';\nimport { BASE_36_RADIX, RANDOM_ID_END_INDEX } from '../constants';\nimport { ssrErrorPage } from '../utils/ssrErrorPage';\nimport {\n\tderivePageName,\n\trenderConventionError\n} from '../utils/resolveConvention';\nimport { setSsrContextGetter } from '../utils/registerClientScript';\nimport { getAngularDeps } from './angularDeps';\nimport { getSsrSanitizer, resetSsrSanitizer } from './ssrSanitizer';\nimport {\n\tbuildDeps,\n\tbuildProviders,\n\tcacheRouteData,\n\tclearSelectorCache,\n\tdiscoverTokens,\n\tinjectSsrScripts,\n\tloadSsrDeps,\n\trenderAngularApp,\n\tresolveSelector\n} from './ssrRender';\n\nlet ssrDirty = false;\nlet lastSelector = 'angular-page';\n\nexport const invalidateAngularSsrCache = () => {\n\tssrDirty = true;\n\tclearSelectorCache();\n};\n\nconst angularSsrContext = new AsyncLocalStorage<string>();\nsetSsrContextGetter(() => angularSsrContext.getStore());\n\nexport const handleAngularPageRequest = async <\n\tProps extends Record<string, unknown> = Record<never, never>\n>(\n\t_importer: AngularPageImporter<Props>,\n\tpagePath: string,\n\tindexPath: string,\n\theadTag: `<head>${string}</head>` = '<head></head>',\n\t...props: keyof Props extends never ? [] : [props: NoInfer<Props>]\n) => {\n\tconst requestId = `angular_${Date.now()}_${Math.random().toString(BASE_36_RADIX).substring(2, RANDOM_ID_END_INDEX)}`;\n\n\treturn angularSsrContext.run(requestId, async () => {\n\t\tconst [maybeProps] = props;\n\n\t\t// Cache props + headTag for HMR replay — strip query strings\n\t\t// so cache-busted HMR paths match the original manifest path.\n\t\tcacheRouteData(pagePath, { headTag, props: maybeProps });\n\n\t\tif (ssrDirty) {\n\t\t\tconst script = indexPath\n\t\t\t\t? `<script type=\"module\" src=\"${indexPath}\"></script>`\n\t\t\t\t: '';\n\t\t\tconst html = `<!DOCTYPE html><html>${headTag}<body><${lastSelector}></${lastSelector}>${script}</body></html>`;\n\n\t\t\treturn new Response(html, {\n\t\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst baseDeps = await getAngularDeps();\n\t\t\tconst pageModule = await import(pagePath);\n\t\t\tconst PageComponent: Type<unknown> = pageModule.default;\n\n\t\t\tconst ssrResult = await loadSsrDeps(pagePath);\n\t\t\tconst deps = buildDeps(ssrResult, baseDeps);\n\n\t\t\tconst tokenMap = discoverTokens(pageModule);\n\t\t\tconst selector = resolveSelector(deps, pagePath, PageComponent);\n\t\t\tlastSelector = selector;\n\n\t\t\tconst htmlString = `<!DOCTYPE html><html>${headTag}<body><${selector}></${selector}></body></html>`;\n\n\t\t\tif (ssrResult?.core) resetSsrSanitizer();\n\t\t\tconst sanitizer = getSsrSanitizer(deps);\n\t\t\tconst providers = buildProviders(\n\t\t\t\tdeps,\n\t\t\t\tsanitizer,\n\t\t\t\tmaybeProps,\n\t\t\t\ttokenMap\n\t\t\t);\n\n\t\t\tconst rawHtml: string = await renderAngularApp(\n\t\t\t\tdeps,\n\t\t\t\tPageComponent,\n\t\t\t\tproviders,\n\t\t\t\thtmlString\n\t\t\t);\n\n\t\t\tconst html = injectSsrScripts(rawHtml, requestId, indexPath);\n\n\t\t\treturn new Response(html, {\n\t\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error('[SSR] Angular render error:', error);\n\n\t\t\tconst pageName = derivePageName(pagePath);\n\t\t\tconst conventionResponse = await renderConventionError(\n\t\t\t\t'angular',\n\t\t\t\tpageName,\n\t\t\t\terror\n\t\t\t);\n\t\t\tif (conventionResponse) return conventionResponse;\n\n\t\t\treturn new Response(ssrErrorPage('angular', error), {\n\t\t\t\theaders: { 'Content-Type': 'text/html' },\n\t\t\t\tstatus: 500\n\t\t\t});\n\t\t}\n\t});\n};\n",
17
+ "export { handleAngularPageRequest } from './pageHandler';\n"
18
+ ],
19
+ "mappings": "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",
20
+ "debugId": "A63E56AEF2A815A264756E2164756E21",
21
+ "names": []
22
+ }
@@ -0,0 +1,385 @@
1
+ // @bun
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ function __accessProp(key) {
9
+ return this[key];
10
+ }
11
+ var __toESMCache_node;
12
+ var __toESMCache_esm;
13
+ var __toESM = (mod, isNodeMode, target) => {
14
+ var canCache = mod != null && typeof mod === "object";
15
+ if (canCache) {
16
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
17
+ var cached = cache.get(mod);
18
+ if (cached)
19
+ return cached;
20
+ }
21
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
22
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
23
+ for (let key of __getOwnPropNames(mod))
24
+ if (!__hasOwnProp.call(to, key))
25
+ __defProp(to, key, {
26
+ get: __accessProp.bind(mod, key),
27
+ enumerable: true
28
+ });
29
+ if (canCache)
30
+ cache.set(mod, to);
31
+ return to;
32
+ };
33
+ var __toCommonJS = (from) => {
34
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
35
+ if (entry)
36
+ return entry;
37
+ entry = __defProp({}, "__esModule", { value: true });
38
+ if (from && typeof from === "object" || typeof from === "function") {
39
+ for (var key of __getOwnPropNames(from))
40
+ if (!__hasOwnProp.call(entry, key))
41
+ __defProp(entry, key, {
42
+ get: __accessProp.bind(from, key),
43
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
44
+ });
45
+ }
46
+ __moduleCache.set(from, entry);
47
+ return entry;
48
+ };
49
+ var __moduleCache;
50
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
51
+ var __returnValue = (v) => v;
52
+ function __exportSetter(name, newValue) {
53
+ this[name] = __returnValue.bind(null, newValue);
54
+ }
55
+ var __export = (target, all) => {
56
+ for (var name in all)
57
+ __defProp(target, name, {
58
+ get: all[name],
59
+ enumerable: true,
60
+ configurable: true,
61
+ set: __exportSetter.bind(all, name)
62
+ });
63
+ };
64
+ var __legacyDecorateClassTS = function(decorators, target, key, desc) {
65
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
66
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
67
+ r = Reflect.decorate(decorators, target, key, desc);
68
+ else
69
+ for (var i = decorators.length - 1;i >= 0; i--)
70
+ if (d = decorators[i])
71
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
72
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
73
+ };
74
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
75
+ var __require = import.meta.require;
76
+
77
+ // src/utils/ssrErrorPage.ts
78
+ var ssrErrorPage = (framework, error) => {
79
+ const frameworkColors = {
80
+ angular: "#dd0031",
81
+ html: "#e34c26",
82
+ htmx: "#1a365d",
83
+ react: "#61dafb",
84
+ svelte: "#ff3e00",
85
+ vue: "#42b883"
86
+ };
87
+ const accent = frameworkColors[framework] ?? "#94a3b8";
88
+ const label = framework.charAt(0).toUpperCase() + framework.slice(1);
89
+ const message = error instanceof Error ? error.message : String(error);
90
+ return `<!DOCTYPE html>
91
+ <html>
92
+ <head>
93
+ <meta charset="utf-8">
94
+ <meta name="viewport" content="width=device-width, initial-scale=1">
95
+ <title>SSR Error - AbsoluteJS</title>
96
+ <style>
97
+ *{margin:0;padding:0;box-sizing:border-box}
98
+ body{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:"JetBrains Mono","Fira Code",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}
99
+ .card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}
100
+ .header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}
101
+ .brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}
102
+ .badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}
103
+ .kind{color:#94a3b8;font-size:13px;font-weight:500}
104
+ .content{padding:24px}
105
+ .label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}
106
+ .message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}
107
+ .hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}
108
+ </style>
109
+ </head>
110
+ <body>
111
+ <div class="card">
112
+ <div class="header">
113
+ <div style="display:flex;align-items:center;gap:12px">
114
+ <span class="brand">AbsoluteJS</span>
115
+ <span class="badge">${label}</span>
116
+ </div>
117
+ <span class="kind">Server Render Error</span>
118
+ </div>
119
+ <div class="content">
120
+ <div class="label">What went wrong</div>
121
+ <pre class="message">${message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}</pre>
122
+ <div class="hint">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>
123
+ </div>
124
+ </div>
125
+ </body>
126
+ </html>`;
127
+ };
128
+
129
+ // src/utils/stringModifiers.ts
130
+ var normalizeSlug = (str) => str.trim().replace(/\s+/g, "-").replace(/[^A-Za-z0-9\-_]+/g, "").replace(/[-_]{2,}/g, "-"), toKebab = (str) => normalizeSlug(str).replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), toPascal = (str) => {
131
+ if (!str.includes("-") && !str.includes("_")) {
132
+ return str.charAt(0).toUpperCase() + str.slice(1);
133
+ }
134
+ return normalizeSlug(str).split(/[-_]/).filter(Boolean).map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase()).join("");
135
+ }, toScreamingSnake = (str) => str.replace(/([a-z0-9])([A-Z])/g, "$1_$2").toUpperCase();
136
+
137
+ // src/utils/resolveConvention.ts
138
+ import { basename } from "path";
139
+ var CONVENTIONS_KEY = "__absoluteConventions", isConventionsMap = (value) => Boolean(value) && typeof value === "object", getMap = () => {
140
+ const value = Reflect.get(globalThis, CONVENTIONS_KEY);
141
+ if (isConventionsMap(value))
142
+ return value;
143
+ const empty = {};
144
+ return empty;
145
+ }, derivePageName = (pagePath) => {
146
+ const base = basename(pagePath);
147
+ const dotIndex = base.indexOf(".");
148
+ const name = dotIndex > 0 ? base.slice(0, dotIndex) : base;
149
+ return toPascal(name);
150
+ }, resolveErrorConventionPath = (framework, pageName) => {
151
+ const conventions = getMap()[framework];
152
+ if (!conventions)
153
+ return;
154
+ return conventions.pages?.[pageName]?.error ?? conventions.defaults?.error;
155
+ }, resolveNotFoundConventionPath = (framework) => getMap()[framework]?.defaults?.notFound, setConventions = (map) => {
156
+ Reflect.set(globalThis, CONVENTIONS_KEY, map);
157
+ }, isDev = () => true, buildErrorProps = (error) => {
158
+ const message = error instanceof Error ? error.message : String(error);
159
+ const stack = isDev() && error instanceof Error ? error.stack : undefined;
160
+ return { error: { message, stack } };
161
+ }, renderReactError = async (conventionPath, errorProps) => {
162
+ const { createElement } = await import("react");
163
+ const { renderToReadableStream } = await import("react-dom/server");
164
+ const mod = await import(conventionPath);
165
+ const [firstKey] = Object.keys(mod);
166
+ const ErrorComponent = mod.default ?? (firstKey ? mod[firstKey] : undefined);
167
+ const element = createElement(ErrorComponent, errorProps);
168
+ const stream = await renderToReadableStream(element);
169
+ return new Response(stream, {
170
+ headers: { "Content-Type": "text/html" },
171
+ status: 500
172
+ });
173
+ }, renderSvelteError = async (conventionPath, errorProps) => {
174
+ const { render } = await import("svelte/server");
175
+ const mod = await import(conventionPath);
176
+ const ErrorComponent = mod.default;
177
+ const { head, body } = render(ErrorComponent, {
178
+ props: errorProps
179
+ });
180
+ const html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;
181
+ return new Response(html, {
182
+ headers: { "Content-Type": "text/html" },
183
+ status: 500
184
+ });
185
+ }, unescapeVueStyles = (ssrBody) => {
186
+ let styles = "";
187
+ const body = ssrBody.replace(/<style>([\s\S]*?)<\/style>/g, (_, css) => {
188
+ styles += `<style>${css.replace(/&quot;/g, '"').replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">")}</style>`;
189
+ return "";
190
+ });
191
+ return { body, styles };
192
+ }, renderVueError = async (conventionPath, errorProps) => {
193
+ const { createSSRApp, h } = await import("vue");
194
+ const { renderToString } = await import("vue/server-renderer");
195
+ const mod = await import(conventionPath);
196
+ const ErrorComponent = mod.default;
197
+ const app = createSSRApp({
198
+ render: () => h(ErrorComponent, errorProps)
199
+ });
200
+ const rawBody = await renderToString(app);
201
+ const { styles, body } = unescapeVueStyles(rawBody);
202
+ const html = `<!DOCTYPE html><html><head>${styles}</head><body><div id="root">${body}</div></body></html>`;
203
+ return new Response(html, {
204
+ headers: { "Content-Type": "text/html" },
205
+ status: 500
206
+ });
207
+ }, renderAngularError = async (conventionPath, errorProps) => {
208
+ const mod = await import(conventionPath);
209
+ const renderError = mod.default ?? mod.renderError;
210
+ if (typeof renderError !== "function")
211
+ return null;
212
+ const html = renderError(errorProps);
213
+ return new Response(html, {
214
+ headers: { "Content-Type": "text/html" },
215
+ status: 500
216
+ });
217
+ }, logConventionRenderError = (framework, label, renderError) => {
218
+ const message = renderError instanceof Error ? renderError.message : "";
219
+ if (message.includes("Cannot find module") || message.includes("Cannot find package") || message.includes("not found in module")) {
220
+ console.error(`[SSR] Convention ${label} page for ${framework} failed: missing framework package. Ensure the ${framework} runtime is installed (e.g. bun add ${framework === "react" ? "react react-dom" : framework}).`);
221
+ return;
222
+ }
223
+ console.error(`[SSR] Failed to render ${framework} convention ${label} page:`, renderError);
224
+ }, ERROR_RENDERERS, renderConventionError = async (framework, pageName, error) => {
225
+ const conventionPath = resolveErrorConventionPath(framework, pageName);
226
+ if (!conventionPath)
227
+ return null;
228
+ const errorProps = buildErrorProps(error);
229
+ const renderer = ERROR_RENDERERS[framework];
230
+ if (!renderer)
231
+ return null;
232
+ try {
233
+ return await renderer(conventionPath, errorProps);
234
+ } catch (renderError) {
235
+ logConventionRenderError(framework, "error", renderError);
236
+ }
237
+ return null;
238
+ }, renderReactNotFound = async (conventionPath) => {
239
+ const { createElement } = await import("react");
240
+ const { renderToReadableStream } = await import("react-dom/server");
241
+ const mod = await import(conventionPath);
242
+ const [nfKey] = Object.keys(mod);
243
+ const NotFoundComponent = mod.default ?? (nfKey ? mod[nfKey] : undefined);
244
+ const element = createElement(NotFoundComponent);
245
+ const stream = await renderToReadableStream(element);
246
+ return new Response(stream, {
247
+ headers: { "Content-Type": "text/html" },
248
+ status: 404
249
+ });
250
+ }, renderSvelteNotFound = async (conventionPath) => {
251
+ const { render } = await import("svelte/server");
252
+ const mod = await import(conventionPath);
253
+ const NotFoundComponent = mod.default;
254
+ const { head, body } = render(NotFoundComponent);
255
+ const html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;
256
+ return new Response(html, {
257
+ headers: { "Content-Type": "text/html" },
258
+ status: 404
259
+ });
260
+ }, renderVueNotFound = async (conventionPath) => {
261
+ const { createSSRApp, h } = await import("vue");
262
+ const { renderToString } = await import("vue/server-renderer");
263
+ const mod = await import(conventionPath);
264
+ const NotFoundComponent = mod.default;
265
+ const app = createSSRApp({
266
+ render: () => h(NotFoundComponent)
267
+ });
268
+ const rawBody = await renderToString(app);
269
+ const { styles, body } = unescapeVueStyles(rawBody);
270
+ const html = `<!DOCTYPE html><html><head>${styles}</head><body><div id="root">${body}</div></body></html>`;
271
+ return new Response(html, {
272
+ headers: { "Content-Type": "text/html" },
273
+ status: 404
274
+ });
275
+ }, renderAngularNotFound = async (conventionPath) => {
276
+ const mod = await import(conventionPath);
277
+ const renderNotFound = mod.default ?? mod.renderNotFound;
278
+ if (typeof renderNotFound !== "function")
279
+ return null;
280
+ const html = renderNotFound();
281
+ return new Response(html, {
282
+ headers: { "Content-Type": "text/html" },
283
+ status: 404
284
+ });
285
+ }, NOT_FOUND_RENDERERS, renderConventionNotFound = async (framework) => {
286
+ const conventionPath = resolveNotFoundConventionPath(framework);
287
+ if (!conventionPath)
288
+ return null;
289
+ const renderer = NOT_FOUND_RENDERERS[framework];
290
+ if (!renderer)
291
+ return null;
292
+ try {
293
+ return await renderer(conventionPath);
294
+ } catch (renderError) {
295
+ logConventionRenderError(framework, "not-found", renderError);
296
+ }
297
+ return null;
298
+ }, NOT_FOUND_PRIORITY, renderFirstNotFound = async () => {
299
+ for (const framework of NOT_FOUND_PRIORITY) {
300
+ if (!getMap()[framework]?.defaults?.notFound)
301
+ continue;
302
+ const response = await renderConventionNotFound(framework);
303
+ if (response)
304
+ return response;
305
+ }
306
+ return null;
307
+ };
308
+ var init_resolveConvention = __esm(() => {
309
+ ERROR_RENDERERS = {
310
+ angular: renderAngularError,
311
+ react: renderReactError,
312
+ svelte: renderSvelteError,
313
+ vue: renderVueError
314
+ };
315
+ NOT_FOUND_RENDERERS = {
316
+ angular: renderAngularNotFound,
317
+ react: renderReactNotFound,
318
+ svelte: renderSvelteNotFound,
319
+ vue: renderVueNotFound
320
+ };
321
+ NOT_FOUND_PRIORITY = [
322
+ "react",
323
+ "svelte",
324
+ "vue",
325
+ "angular"
326
+ ];
327
+ });
328
+
329
+ // src/react/pageHandler.ts
330
+ var ssrDirty = false, buildDirtyResponse = (index, maybeProps) => {
331
+ const propsScript = maybeProps ? `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps)};` : "";
332
+ const dirtyFlag = "window.__SSR_DIRTY__=true;";
333
+ const refreshSetup = "window.__REFRESH_BUFFER__=[];" + "window.$RefreshReg$=function(t,i){window.__REFRESH_BUFFER__.push([t,i])};" + "window.$RefreshSig$=function(){return function(t){return t}};";
334
+ const inlineScript = `${propsScript}${dirtyFlag}${refreshSetup}`;
335
+ const html = `<!DOCTYPE html><html><head></head><body>` + `<script>${inlineScript}</script>` + `<script type="module" src="${index}"></script>` + `</body></html>`;
336
+ return new Response(html, {
337
+ headers: { "Content-Type": "text/html" }
338
+ });
339
+ }, handleReactPageRequest = async (PageComponent, index, ...props) => {
340
+ const [maybeProps] = props;
341
+ if (ssrDirty) {
342
+ return buildDirtyResponse(index, maybeProps);
343
+ }
344
+ try {
345
+ const { createElement } = await import("react");
346
+ const { renderToReadableStream } = await import("react-dom/server");
347
+ const element = maybeProps !== undefined ? createElement(PageComponent, maybeProps) : createElement(PageComponent);
348
+ const propsScript = maybeProps ? `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps)};` : "";
349
+ const refreshSetup = "window.__REFRESH_BUFFER__=[];window.$RefreshReg$=function(t,i){window.__REFRESH_BUFFER__.push([t,i])};window.$RefreshSig$=function(){return function(t){return t}};";
350
+ const stream = await renderToReadableStream(element, {
351
+ bootstrapModules: [index],
352
+ bootstrapScriptContent: propsScript + refreshSetup || undefined,
353
+ onError(error) {
354
+ console.error("[SSR] React streaming error:", error);
355
+ }
356
+ });
357
+ return new Response(stream, {
358
+ headers: { "Content-Type": "text/html" }
359
+ });
360
+ } catch (error) {
361
+ console.error("[SSR] React render error:", error);
362
+ const pageName = PageComponent.name || PageComponent.displayName || "";
363
+ const conventionResponse = await renderConventionError("react", pageName, error);
364
+ if (conventionResponse)
365
+ return conventionResponse;
366
+ return new Response(ssrErrorPage("react", error), {
367
+ headers: { "Content-Type": "text/html" },
368
+ status: 500
369
+ });
370
+ }
371
+ }, invalidateReactSsrCache = () => {
372
+ ssrDirty = true;
373
+ };
374
+ var init_pageHandler = __esm(() => {
375
+ init_resolveConvention();
376
+ });
377
+
378
+ // src/react/server.ts
379
+ init_pageHandler();
380
+ export {
381
+ handleReactPageRequest
382
+ };
383
+
384
+ //# debugId=DFB05DB9F73157E364756E2164756E21
385
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1,14 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/utils/ssrErrorPage.ts", "../src/utils/stringModifiers.ts", "../src/utils/resolveConvention.ts", "../src/react/pageHandler.ts", "../src/react/server.ts"],
4
+ "sourcesContent": [
5
+ "export const ssrErrorPage = (framework: string, error: unknown) => {\n\tconst frameworkColors: Record<string, string> = {\n\t\tangular: '#dd0031',\n\t\thtml: '#e34c26',\n\t\thtmx: '#1a365d',\n\t\treact: '#61dafb',\n\t\tsvelte: '#ff3e00',\n\t\tvue: '#42b883'\n\t};\n\n\tconst accent = frameworkColors[framework] ?? '#94a3b8';\n\tconst label = framework.charAt(0).toUpperCase() + framework.slice(1);\n\tconst message = error instanceof Error ? error.message : String(error);\n\n\treturn `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>SSR Error - AbsoluteJS</title>\n<style>\n*{margin:0;padding:0;box-sizing:border-box}\nbody{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:\"JetBrains Mono\",\"Fira Code\",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}\n.card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}\n.header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}\n.brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}\n.badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}\n.kind{color:#94a3b8;font-size:13px;font-weight:500}\n.content{padding:24px}\n.label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}\n.message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}\n.hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}\n</style>\n</head>\n<body>\n<div class=\"card\">\n<div class=\"header\">\n<div style=\"display:flex;align-items:center;gap:12px\">\n<span class=\"brand\">AbsoluteJS</span>\n<span class=\"badge\">${label}</span>\n</div>\n<span class=\"kind\">Server Render Error</span>\n</div>\n<div class=\"content\">\n<div class=\"label\">What went wrong</div>\n<pre class=\"message\">${message.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')}</pre>\n<div class=\"hint\">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>\n</div>\n</div>\n</body>\n</html>`;\n};\n",
6
+ "const normalizeSlug = (str: string) =>\n\tstr\n\t\t.trim()\n\t\t.replace(/\\s+/g, '-')\n\t\t.replace(/[^A-Za-z0-9\\-_]+/g, '')\n\t\t.replace(/[-_]{2,}/g, '-');\n\nexport const toKebab = (str: string) =>\n\tnormalizeSlug(str)\n\t\t.replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n\t\t.toLowerCase();\nexport const toPascal = (str: string) => {\n\tif (!str.includes('-') && !str.includes('_')) {\n\t\treturn str.charAt(0).toUpperCase() + str.slice(1);\n\t}\n\n\treturn normalizeSlug(str)\n\t\t.split(/[-_]/)\n\t\t.filter(Boolean)\n\t\t.map(\n\t\t\t(segment) =>\n\t\t\t\tsegment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase()\n\t\t)\n\t\t.join('');\n};\nexport const toScreamingSnake = (str: string) =>\n\tstr.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n",
7
+ "import { basename } from 'node:path';\nimport type { ConventionsMap } from '../../types/conventions';\nimport { toPascal } from './stringModifiers';\n\n// Use globalThis so the conventions map is shared across all bundles.\n// The main bundle (dist/index.js) calls setConventions, but framework\n// bundles (dist/svelte/index.js, etc.) need to read the same map.\nconst CONVENTIONS_KEY = '__absoluteConventions';\n\nconst isConventionsMap = (value: unknown): value is ConventionsMap =>\n\tBoolean(value) && typeof value === 'object';\n\nconst getMap = () => {\n\tconst value: unknown = Reflect.get(globalThis, CONVENTIONS_KEY);\n\tif (isConventionsMap(value)) return value;\n\n\tconst empty: ConventionsMap = {};\n\n\treturn empty;\n};\n\nexport const derivePageName = (pagePath: string) => {\n\tconst base = basename(pagePath);\n\t// Strip hash and extension: \"SvelteExample.abc123.js\" → \"SvelteExample\"\n\tconst dotIndex = base.indexOf('.');\n\tconst name = dotIndex > 0 ? base.slice(0, dotIndex) : base;\n\n\treturn toPascal(name);\n};\nexport const getConventions = () => getMap();\nexport const resolveErrorConventionPath = (\n\tframework: keyof ConventionsMap,\n\tpageName: string\n) => {\n\tconst conventions = getMap()[framework];\n\tif (!conventions) return undefined;\n\n\treturn conventions.pages?.[pageName]?.error ?? conventions.defaults?.error;\n};\nexport const resolveNotFoundConventionPath = (\n\tframework: keyof ConventionsMap\n) => getMap()[framework]?.defaults?.notFound;\nexport const setConventions = (map: ConventionsMap) => {\n\tReflect.set(globalThis, CONVENTIONS_KEY, map);\n};\n\nconst isDev = () => process.env.NODE_ENV === 'development';\n\nconst buildErrorProps = (error: unknown) => {\n\tconst message = error instanceof Error ? error.message : String(error);\n\tconst stack = isDev() && error instanceof Error ? error.stack : undefined;\n\n\treturn { error: { message, stack } };\n};\n\nconst renderReactError = async (\n\tconventionPath: string,\n\terrorProps: ReturnType<typeof buildErrorProps>\n) => {\n\tconst { createElement } = await import('react');\n\tconst { renderToReadableStream } = await import('react-dom/server');\n\tconst mod = await import(conventionPath);\n\tconst [firstKey] = Object.keys(mod);\n\tconst ErrorComponent =\n\t\tmod.default ?? (firstKey ? mod[firstKey] : undefined);\n\tconst element = createElement(ErrorComponent, errorProps);\n\tconst stream = await renderToReadableStream(element);\n\n\treturn new Response(stream, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 500\n\t});\n};\n\nconst renderSvelteError = async (\n\tconventionPath: string,\n\terrorProps: ReturnType<typeof buildErrorProps>\n) => {\n\tconst { render } = await import('svelte/server');\n\tconst mod = await import(conventionPath);\n\tconst ErrorComponent = mod.default;\n\tconst { head, body } = render(ErrorComponent, {\n\t\tprops: errorProps\n\t});\n\tconst html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 500\n\t});\n};\n\nconst unescapeVueStyles = (ssrBody: string) => {\n\tlet styles = '';\n\tconst body = ssrBody.replace(\n\t\t/<style>([\\s\\S]*?)<\\/style>/g,\n\t\t(_, css: string) => {\n\t\t\tstyles += `<style>${css\n\t\t\t\t.replace(/&quot;/g, '\"')\n\t\t\t\t.replace(/&amp;/g, '&')\n\t\t\t\t.replace(/&lt;/g, '<')\n\t\t\t\t.replace(/&gt;/g, '>')}</style>`;\n\n\t\t\treturn '';\n\t\t}\n\t);\n\n\treturn { body, styles };\n};\n\nconst renderVueError = async (\n\tconventionPath: string,\n\terrorProps: ReturnType<typeof buildErrorProps>\n) => {\n\tconst { createSSRApp, h } = await import('vue');\n\tconst { renderToString } = await import('vue/server-renderer');\n\tconst mod = await import(conventionPath);\n\tconst ErrorComponent = mod.default;\n\tconst app = createSSRApp({\n\t\trender: () => h(ErrorComponent, errorProps)\n\t});\n\tconst rawBody = await renderToString(app);\n\n\t// Vue SSR escapes quotes inside <component is=\"style\"> tags.\n\t// Extract style content, unescape it, and move to <head>.\n\tconst { styles, body } = unescapeVueStyles(rawBody);\n\tconst html = `<!DOCTYPE html><html><head>${styles}</head><body><div id=\"root\">${body}</div></body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 500\n\t});\n};\n\nconst renderAngularError = async (\n\tconventionPath: string,\n\terrorProps: ReturnType<typeof buildErrorProps>\n) => {\n\t// Angular error pages are rendered as plain HTML templates\n\t// since the full Angular SSR pipeline is too heavy for error pages\n\tconst mod = await import(conventionPath);\n\tconst renderError = mod.default ?? mod.renderError;\n\tif (typeof renderError !== 'function') return null;\n\n\tconst html = renderError(errorProps);\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 500\n\t});\n};\n\nconst logConventionRenderError = (\n\tframework: keyof ConventionsMap,\n\tlabel: string,\n\trenderError: unknown\n) => {\n\tconst message = renderError instanceof Error ? renderError.message : '';\n\tif (\n\t\tmessage.includes('Cannot find module') ||\n\t\tmessage.includes('Cannot find package') ||\n\t\tmessage.includes('not found in module')\n\t) {\n\t\tconsole.error(\n\t\t\t`[SSR] Convention ${label} page for ${framework} failed: missing framework package. ` +\n\t\t\t\t`Ensure the ${framework} runtime is installed (e.g. bun add ${framework === 'react' ? 'react react-dom' : framework}).`\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconsole.error(\n\t\t`[SSR] Failed to render ${framework} convention ${label} page:`,\n\t\trenderError\n\t);\n};\n\nconst ERROR_RENDERERS: Record<\n\tkeyof ConventionsMap,\n\t(\n\t\tconventionPath: string,\n\t\terrorProps: ReturnType<typeof buildErrorProps>\n\t) => Promise<Response | null>\n> = {\n\tangular: renderAngularError,\n\treact: renderReactError,\n\tsvelte: renderSvelteError,\n\tvue: renderVueError\n};\n\nexport const renderConventionError = async (\n\tframework: keyof ConventionsMap,\n\tpageName: string,\n\terror: unknown\n) => {\n\tconst conventionPath = resolveErrorConventionPath(framework, pageName);\n\tif (!conventionPath) return null;\n\n\tconst errorProps = buildErrorProps(error);\n\tconst renderer = ERROR_RENDERERS[framework];\n\tif (!renderer) return null;\n\n\ttry {\n\t\treturn await renderer(conventionPath, errorProps);\n\t} catch (renderError) {\n\t\tlogConventionRenderError(framework, 'error', renderError);\n\t}\n\n\treturn null;\n};\n\nconst renderReactNotFound = async (conventionPath: string) => {\n\tconst { createElement } = await import('react');\n\tconst { renderToReadableStream } = await import('react-dom/server');\n\tconst mod = await import(conventionPath);\n\tconst [nfKey] = Object.keys(mod);\n\tconst NotFoundComponent = mod.default ?? (nfKey ? mod[nfKey] : undefined);\n\tconst element = createElement(NotFoundComponent);\n\tconst stream = await renderToReadableStream(element);\n\n\treturn new Response(stream, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 404\n\t});\n};\n\nconst renderSvelteNotFound = async (conventionPath: string) => {\n\tconst { render } = await import('svelte/server');\n\tconst mod = await import(conventionPath);\n\tconst NotFoundComponent = mod.default;\n\tconst { head, body } = render(NotFoundComponent);\n\tconst html = `<!DOCTYPE html><html><head>${head}</head><body>${body}</body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 404\n\t});\n};\n\nconst renderVueNotFound = async (conventionPath: string) => {\n\tconst { createSSRApp, h } = await import('vue');\n\tconst { renderToString } = await import('vue/server-renderer');\n\tconst mod = await import(conventionPath);\n\tconst NotFoundComponent = mod.default;\n\tconst app = createSSRApp({\n\t\trender: () => h(NotFoundComponent)\n\t});\n\tconst rawBody = await renderToString(app);\n\n\tconst { styles, body } = unescapeVueStyles(rawBody);\n\tconst html = `<!DOCTYPE html><html><head>${styles}</head><body><div id=\"root\">${body}</div></body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 404\n\t});\n};\n\nconst renderAngularNotFound = async (conventionPath: string) => {\n\tconst mod = await import(conventionPath);\n\tconst renderNotFound = mod.default ?? mod.renderNotFound;\n\tif (typeof renderNotFound !== 'function') return null;\n\n\tconst html = renderNotFound();\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' },\n\t\tstatus: 404\n\t});\n};\n\nconst NOT_FOUND_RENDERERS: Record<\n\tkeyof ConventionsMap,\n\t(conventionPath: string) => Promise<Response | null>\n> = {\n\tangular: renderAngularNotFound,\n\treact: renderReactNotFound,\n\tsvelte: renderSvelteNotFound,\n\tvue: renderVueNotFound\n};\n\nexport const renderConventionNotFound = async (\n\tframework: keyof ConventionsMap\n) => {\n\tconst conventionPath = resolveNotFoundConventionPath(framework);\n\tif (!conventionPath) return null;\n\n\tconst renderer = NOT_FOUND_RENDERERS[framework];\n\tif (!renderer) return null;\n\n\ttry {\n\t\treturn await renderer(conventionPath);\n\t} catch (renderError) {\n\t\tlogConventionRenderError(framework, 'not-found', renderError);\n\t}\n\n\treturn null;\n};\n\nconst NOT_FOUND_PRIORITY: (keyof ConventionsMap)[] = [\n\t'react',\n\t'svelte',\n\t'vue',\n\t'angular'\n];\n\nexport const renderFirstNotFound = async () => {\n\tfor (const framework of NOT_FOUND_PRIORITY) {\n\t\tif (!getMap()[framework]?.defaults?.notFound) continue;\n\t\t// eslint-disable-next-line no-await-in-loop -- frameworks must be tried sequentially; first match wins\n\t\tconst response = await renderConventionNotFound(framework);\n\t\tif (response) return response;\n\t}\n\n\treturn null;\n};\n",
8
+ "import type { ComponentType as ReactComponent } from 'react';\nimport { ssrErrorPage } from '../utils/ssrErrorPage';\nimport { renderConventionError } from '../utils/resolveConvention';\n\nlet ssrDirty = false;\n\nconst buildDirtyResponse = (\n\tindex: string,\n\tmaybeProps: Record<string, unknown> | undefined\n) => {\n\tconst propsScript = maybeProps\n\t\t? `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps)};`\n\t\t: '';\n\tconst dirtyFlag = 'window.__SSR_DIRTY__=true;';\n\tconst refreshSetup =\n\t\tprocess.env.NODE_ENV !== 'production'\n\t\t\t? 'window.__REFRESH_BUFFER__=[];' +\n\t\t\t\t'window.$RefreshReg$=function(t,i){window.__REFRESH_BUFFER__.push([t,i])};' +\n\t\t\t\t'window.$RefreshSig$=function(){return function(t){return t}};'\n\t\t\t: '';\n\tconst inlineScript = `${propsScript}${dirtyFlag}${refreshSetup}`;\n\tconst html =\n\t\t`<!DOCTYPE html><html><head></head><body>` +\n\t\t`<script>${inlineScript}</script>` +\n\t\t`<script type=\"module\" src=\"${index}\"></script>` +\n\t\t`</body></html>`;\n\n\treturn new Response(html, {\n\t\theaders: { 'Content-Type': 'text/html' }\n\t});\n};\n\nexport const handleReactPageRequest = async <\n\tProps extends Record<string, unknown> = Record<never, never>\n>(\n\tPageComponent: ReactComponent<Props>,\n\tindex: string,\n\t...props: keyof Props extends never ? [] : [props: NoInfer<Props>]\n) => {\n\tconst [maybeProps] = props;\n\n\tif (ssrDirty) {\n\t\treturn buildDirtyResponse(index, maybeProps);\n\t}\n\n\ttry {\n\t\tconst { createElement } = await import('react');\n\t\tconst { renderToReadableStream } = await import('react-dom/server');\n\n\t\tconst element =\n\t\t\tmaybeProps !== undefined\n\t\t\t\t? createElement(PageComponent, maybeProps)\n\t\t\t\t: createElement(PageComponent);\n\n\t\tconst propsScript = maybeProps\n\t\t\t? `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps)};`\n\t\t\t: '';\n\n\t\t// Buffer React Refresh registrations until the runtime loads.\n\t\t// Bun.build injects $RefreshReg$ calls in the bundle, but the\n\t\t// real runtime isn't ready yet. This buffering function captures\n\t\t// all registrations, then replays them when the runtime is set up.\n\t\tconst refreshSetup =\n\t\t\tprocess.env.NODE_ENV !== 'production'\n\t\t\t\t? 'window.__REFRESH_BUFFER__=[];' +\n\t\t\t\t\t'window.$RefreshReg$=function(t,i){window.__REFRESH_BUFFER__.push([t,i])};' +\n\t\t\t\t\t'window.$RefreshSig$=function(){return function(t){return t}};'\n\t\t\t\t: '';\n\n\t\tconst stream = await renderToReadableStream(element, {\n\t\t\tbootstrapModules: [index],\n\t\t\tbootstrapScriptContent: propsScript + refreshSetup || undefined,\n\t\t\tonError(error: unknown) {\n\t\t\t\tconsole.error('[SSR] React streaming error:', error);\n\t\t\t}\n\t\t});\n\n\t\treturn new Response(stream, {\n\t\t\theaders: { 'Content-Type': 'text/html' }\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('[SSR] React render error:', error);\n\n\t\tconst pageName = PageComponent.name || PageComponent.displayName || '';\n\t\tconst conventionResponse = await renderConventionError(\n\t\t\t'react',\n\t\t\tpageName,\n\t\t\terror\n\t\t);\n\t\tif (conventionResponse) return conventionResponse;\n\n\t\treturn new Response(ssrErrorPage('react', error), {\n\t\t\theaders: { 'Content-Type': 'text/html' },\n\t\t\tstatus: 500\n\t\t});\n\t}\n};\n\nexport const invalidateReactSsrCache = () => {\n\tssrDirty = true;\n};\n",
9
+ "export { handleReactPageRequest } from './pageHandler';\n"
10
+ ],
11
+ "mappings": "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",
12
+ "debugId": "DFB05DB9F73157E364756E2164756E21",
13
+ "names": []
14
+ }
@@ -0,0 +1 @@
1
+ export { handleAngularPageRequest } from './pageHandler';
@@ -0,0 +1 @@
1
+ export { handleReactPageRequest } from './pageHandler';
@@ -0,0 +1 @@
1
+ export { handleSveltePageRequest } from './pageHandler';
@@ -0,0 +1 @@
1
+ export { handleVuePageRequest } from './pageHandler';