@absolutejs/absolute 0.13.11 → 0.15.0
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.
- package/.claude/settings.local.json +7 -1
- package/CLAUDE.md +65 -56
- package/LICENSE +80 -24
- package/README.md +163 -163
- package/THIRD_PARTY_NOTICES.md +61 -0
- package/dist/cli/index.js +24 -8
- package/dist/index.js +3013 -480
- package/dist/index.js.map +56 -26
- package/dist/{build → src/build}/compileSvelte.d.ts +2 -1
- package/dist/src/build/compileVue.d.ts +33 -0
- package/dist/src/build/generateReactIndexes.d.ts +1 -0
- package/dist/src/build/htmlScriptHMRPlugin.d.ts +13 -0
- package/dist/src/build/wrapHTMLScript.d.ts +24 -0
- package/dist/src/core/build.d.ts +2 -0
- package/dist/src/core/devBuild.d.ts +6 -0
- package/dist/{core → src/core}/index.d.ts +2 -1
- package/dist/src/core/lookup.d.ts +3 -0
- package/dist/{core → src/core}/pageHandlers.d.ts +4 -4
- package/dist/src/dev/assetStore.d.ts +12 -0
- package/dist/src/dev/buildHMRClient.d.ts +1 -0
- package/dist/src/dev/clientManager.d.ts +26 -0
- package/dist/src/dev/configResolver.d.ts +13 -0
- package/dist/src/dev/dependencyGraph.d.ts +13 -0
- package/dist/src/dev/fileHashTracker.d.ts +2 -0
- package/dist/src/dev/fileWatcher.d.ts +3 -0
- package/dist/src/dev/moduleMapper.d.ts +21 -0
- package/dist/src/dev/moduleVersionTracker.d.ts +7 -0
- package/dist/src/dev/pathUtils.d.ts +5 -0
- package/dist/src/dev/reactComponentClassifier.d.ts +2 -0
- package/dist/src/dev/rebuildTrigger.d.ts +10 -0
- package/dist/src/dev/simpleHTMLHMR.d.ts +4 -0
- package/dist/src/dev/simpleHTMXHMR.d.ts +4 -0
- package/dist/src/dev/simpleSvelteHMR.d.ts +1 -0
- package/dist/src/dev/simpleVueHMR.d.ts +1 -0
- package/dist/src/dev/webSocket.d.ts +9 -0
- package/dist/{index.d.ts → src/index.d.ts} +1 -0
- package/dist/src/plugins/hmr.d.ts +62 -0
- package/dist/{plugins → src/plugins}/index.d.ts +2 -1
- package/dist/{plugins → src/plugins}/networking.d.ts +3 -0
- package/dist/{svelte → src/svelte}/renderToReadableStream.d.ts +3 -1
- package/dist/src/utils/getRegisterClientScript.d.ts +10 -0
- package/dist/{utils → src/utils}/index.d.ts +2 -0
- package/dist/src/utils/logger.d.ts +45 -0
- package/dist/src/utils/networking.d.ts +2 -0
- package/dist/src/utils/normalizePath.d.ts +9 -0
- package/dist/src/utils/registerClientScript.d.ts +51 -0
- package/dist/{types.d.ts → types/build.d.ts} +7 -0
- package/dist/types/client.d.ts +104 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/messages.d.ts +138 -0
- package/dist/types/websocket.d.ts +6 -0
- package/eslint.config.mjs +238 -234
- package/package.json +17 -12
- package/tsconfig.build.json +20 -20
- package/types/build.ts +46 -0
- package/types/client.ts +109 -0
- package/types/index.ts +4 -0
- package/types/messages.ts +205 -0
- package/types/websocket.ts +12 -0
- package/types/window-globals.ts +53 -0
- package/dist/build/compileVue.d.ts +0 -5
- package/dist/build/generateReactIndexes.d.ts +0 -1
- package/dist/core/build.d.ts +0 -2
- package/dist/core/lookup.d.ts +0 -1
- package/dist/utils/networking.d.ts +0 -1
- /package/dist/{build → src/build}/generateManifest.d.ts +0 -0
- /package/dist/{build → src/build}/outputLogs.d.ts +0 -0
- /package/dist/{build → src/build}/scanEntryPoints.d.ts +0 -0
- /package/dist/{build → src/build}/updateAssetPaths.d.ts +0 -0
- /package/dist/{cli → src/cli}/index.d.ts +0 -0
- /package/dist/{constants.d.ts → src/constants.d.ts} +0 -0
- /package/dist/{plugins → src/plugins}/pageRouter.d.ts +0 -0
- /package/dist/{svelte → src/svelte}/renderToPipeableStream.d.ts +0 -0
- /package/dist/{svelte → src/svelte}/renderToString.d.ts +0 -0
- /package/dist/{utils → src/utils}/cleanup.d.ts +0 -0
- /package/dist/{utils → src/utils}/commonAncestor.d.ts +0 -0
- /package/dist/{utils → src/utils}/escapeScriptContent.d.ts +0 -0
- /package/dist/{utils → src/utils}/generateHeadElement.d.ts +0 -0
- /package/dist/{utils → src/utils}/getDurationString.d.ts +0 -0
- /package/dist/{utils → src/utils}/getEnv.d.ts +0 -0
- /package/dist/{utils → src/utils}/stringModifiers.d.ts +0 -0
- /package/dist/{utils → src/utils}/validateSafePath.d.ts +0 -0
package/dist/index.js.map
CHANGED
|
@@ -1,32 +1,62 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["
|
|
3
|
+
"sources": ["../src/constants.ts", "../src/utils/stringModifiers.ts", "../src/build/compileVue.ts", "../src/dev/simpleHTMLHMR.ts", "../src/utils/escapeScriptContent.ts", "../src/svelte/renderToReadableStream.ts", "../src/core/pageHandlers.ts", "../src/utils/generateHeadElement.ts", "../src/dev/simpleVueHMR.ts", "../src/dev/simpleSvelteHMR.ts", "../src/dev/simpleHTMXHMR.ts", "../types/client.ts", "../types/messages.ts", "../types/websocket.ts", "../src/index.ts", "../src/core/build.ts", "../src/build/compileSvelte.ts", "../src/build/generateManifest.ts", "../src/utils/normalizePath.ts", "../src/build/generateReactIndexes.ts", "../src/build/wrapHTMLScript.ts", "../src/build/htmlScriptHMRPlugin.ts", "../src/build/outputLogs.ts", "../src/build/scanEntryPoints.ts", "../src/build/updateAssetPaths.ts", "../src/dev/buildHMRClient.ts", "../src/utils/cleanup.ts", "../src/utils/commonAncestor.ts", "../src/utils/getDurationString.ts", "../src/utils/logger.ts", "../src/utils/validateSafePath.ts", "../src/core/devBuild.ts", "../src/dev/dependencyGraph.ts", "../src/dev/moduleVersionTracker.ts", "../src/dev/configResolver.ts", "../src/dev/clientManager.ts", "../src/dev/fileWatcher.ts", "../src/dev/pathUtils.ts", "../src/dev/assetStore.ts", "../src/dev/rebuildTrigger.ts", "../src/dev/fileHashTracker.ts", "../src/dev/moduleMapper.ts", "../src/dev/reactComponentClassifier.ts", "../src/dev/webSocket.ts", "../src/core/lookup.ts", "../src/core/index.ts", "../src/plugins/pageRouter.ts", "../src/plugins/hmr.ts", "../src/plugins/networking.ts", "../src/utils/networking.ts", "../src/utils/getEnv.ts", "../src/utils/registerClientScript.ts", "../src/utils/getRegisterClientScript.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"export const UNFOUND_INDEX = -1;\
|
|
6
|
-
"
|
|
7
|
-
"import { mkdir, stat } from 'node:fs/promises';\r\nimport {\r\n\tdirname,\r\n\tjoin,\r\n\tbasename,\r\n\textname,\r\n\tresolve,\r\n\trelative,\r\n\tsep\r\n} from 'node:path';\r\nimport { env } from 'node:process';\r\nimport { write, file, Transpiler } from 'bun';\r\nimport { compile, compileModule, preprocess } from 'svelte/compiler';\r\n\r\ntype Built = { ssr: string; client: string };\r\ntype Cache = Map<string, Built>;\r\n\r\nconst transpiler = new Transpiler({ loader: 'ts', target: 'browser' });\r\n\r\nconst exists = async (path: string) => {\r\n\ttry {\r\n\t\tawait stat(path);\r\n\r\n\t\treturn true;\r\n\t} catch {\r\n\t\treturn false;\r\n\t}\r\n};\r\n\r\nconst resolveSvelte = async (spec: string, from: string) => {\r\n\tconst basePath = resolve(dirname(from), spec);\r\n\tconst explicit = /\\.(svelte|svelte\\.(?:ts|js))$/.test(basePath);\r\n\r\n\tif (!explicit) {\r\n\t\tconst extensions = ['.svelte', '.svelte.ts', '.svelte.js'];\r\n\t\tconst paths = extensions.map((ext) => `${basePath}${ext}`);\r\n\t\tconst checks = await Promise.all(paths.map(exists));\r\n\t\tconst match = paths.find((_, index) => checks[index]);\r\n\r\n\t\treturn match ?? null;\r\n\t}\r\n\r\n\tif (await exists(basePath)) return basePath;\r\n\tif (!basePath.endsWith('.svelte')) return null;\r\n\r\n\tconst tsPath = `${basePath}.ts`;\r\n\tif (await exists(tsPath)) return tsPath;\r\n\r\n\tconst jsPath = `${basePath}.js`;\r\n\tif (await exists(jsPath)) return jsPath;\r\n\r\n\treturn null;\r\n};\r\n\r\nexport const compileSvelte = async (\r\n\tentryPoints: string[],\r\n\tsvelteRoot: string,\r\n\tcache: Cache = new Map()\r\n) => {\r\n\tconst compiledRoot = join(svelteRoot, 'compiled');\r\n\tconst clientDir = join(compiledRoot, 'client');\r\n\tconst indexDir = join(compiledRoot, 'indexes');\r\n\tconst pagesDir = join(compiledRoot, 'pages');\r\n\r\n\tawait Promise.all(\r\n\t\t[clientDir, indexDir, pagesDir].map((dir) =>\r\n\t\t\tmkdir(dir, { recursive: true })\r\n\t\t)\r\n\t);\r\n\r\n\tconst dev = env.NODE_ENV === 'development';\r\n\r\n\tconst build = async (src: string) => {\r\n\t\tconst memoized = cache.get(src);\r\n\t\tif (memoized) return memoized;\r\n\r\n\t\tconst raw = await file(src).text();\r\n\t\tconst isModule =\r\n\t\t\tsrc.endsWith('.svelte.ts') || src.endsWith('.svelte.js');\r\n\t\tconst preprocessed = isModule ? raw : (await preprocess(raw, {})).code;\r\n\t\tconst transpiled =\r\n\t\t\tsrc.endsWith('.ts') || src.endsWith('.svelte.ts')\r\n\t\t\t\t? transpiler.transformSync(preprocessed)\r\n\t\t\t\t: preprocessed;\r\n\r\n\t\tconst relDir = dirname(relative(svelteRoot, src)).replace(/\\\\/g, '/');\r\n\t\tconst baseName = basename(src).replace(/\\.svelte(\\.(ts|js))?$/, '');\r\n\r\n\t\tconst importPaths = Array.from(\r\n\t\t\ttranspiled.matchAll(/from\\s+['\"]([^'\"]+)['\"]/g)\r\n\t\t)\r\n\t\t\t.map((match) => match[1])\r\n\t\t\t.filter((path): path is string => path !== undefined);\r\n\r\n\t\tconst resolvedImports = await Promise.all(\r\n\t\t\timportPaths.map((importPath) => resolveSvelte(importPath, src))\r\n\t\t);\r\n\t\tconst childSources = resolvedImports.filter(\r\n\t\t\t(path): path is string => path !== null\r\n\t\t);\r\n\t\tawait Promise.all(childSources.map((child) => build(child)));\r\n\r\n\t\tconst generate = (mode: 'server' | 'client') =>\r\n\t\t\t(isModule\r\n\t\t\t\t? compileModule(transpiled, { dev, filename: src }).js.code\r\n\t\t\t\t: compile(transpiled, {\r\n\t\t\t\t\t\tcss: 'injected',\r\n\t\t\t\t\t\tdev,\r\n\t\t\t\t\t\tfilename: src,\r\n\t\t\t\t\t\tgenerate: mode\r\n\t\t\t\t\t}).js.code\r\n\t\t\t).replace(/\\.svelte(?:\\.(?:ts|js))?(['\"])/g, '.js$1');\r\n\r\n\t\tconst ssrPath = join(pagesDir, relDir, `${baseName}.js`);\r\n\t\tconst clientPath = join(clientDir, relDir, `${baseName}.js`);\r\n\r\n\t\tawait Promise.all([\r\n\t\t\tmkdir(dirname(ssrPath), { recursive: true }),\r\n\t\t\tmkdir(dirname(clientPath), { recursive: true })\r\n\t\t]);\r\n\r\n\t\tif (isModule) {\r\n\t\t\tconst bundle = generate('client');\r\n\t\t\tawait Promise.all([\r\n\t\t\t\twrite(ssrPath, bundle),\r\n\t\t\t\twrite(clientPath, bundle)\r\n\t\t\t]);\r\n\t\t} else {\r\n\t\t\tconst serverBundle = generate('server');\r\n\t\t\tconst clientBundle = generate('client');\r\n\t\t\tawait Promise.all([\r\n\t\t\t\twrite(ssrPath, serverBundle),\r\n\t\t\t\twrite(clientPath, clientBundle)\r\n\t\t\t]);\r\n\t\t}\r\n\r\n\t\tconst built: Built = { client: clientPath, ssr: ssrPath };\r\n\t\tcache.set(src, built);\r\n\r\n\t\treturn built;\r\n\t};\r\n\r\n\tconst roots = await Promise.all(entryPoints.map(build));\r\n\r\n\tawait Promise.all(\r\n\t\troots.map(async ({ client }) => {\r\n\t\t\tconst relClientDir = dirname(relative(clientDir, client));\r\n\t\t\tconst name = basename(client, extname(client));\r\n\t\t\tconst indexPath = join(indexDir, relClientDir, `${name}.js`);\r\n\t\t\tconst importRaw = relative(dirname(indexPath), client)\r\n\t\t\t\t.split(sep)\r\n\t\t\t\t.join('/');\r\n\t\t\tconst importPath =\r\n\t\t\t\timportRaw.startsWith('.') || importRaw.startsWith('/')\r\n\t\t\t\t\t? importRaw\r\n\t\t\t\t\t: `./${importRaw}`;\r\n\t\t\tconst bootstrap = `import C from \"${importPath}\";\r\nimport { hydrate } from \"svelte\";\r\nhydrate(C,{target:document.body,props:window.__INITIAL_PROPS__??{}});`;\r\n\r\n\t\t\tawait mkdir(dirname(indexPath), { recursive: true });\r\n\r\n\t\t\treturn write(indexPath, bootstrap);\r\n\t\t})\r\n\t);\r\n\r\n\treturn {\r\n\t\tsvelteClientPaths: roots.map(({ client }) => {\r\n\t\t\tconst rel = dirname(relative(clientDir, client));\r\n\r\n\t\t\treturn join(indexDir, rel, basename(client));\r\n\t\t}),\r\n\t\tsvelteServerPaths: roots.map(({ ssr }) => ssr)\r\n\t};\r\n};\r\n",
|
|
8
|
-
"import { mkdir } from 'node:fs/promises';\r\nimport { basename, dirname, join, relative, resolve } from 'node:path';\r\nimport {\r\n\tparse,\r\n\tcompileScript,\r\n\tcompileTemplate,\r\n\tcompileStyle\r\n} from '@vue/compiler-sfc';\r\nimport { file, write, Transpiler } from 'bun';\r\nimport { toKebab } from '../utils/stringModifiers';\r\n\r\nconst transpiler = new Transpiler({ loader: 'ts', target: 'browser' });\r\n\r\ntype BuildResult = {\r\n\tclientPath: string;\r\n\tserverPath: string;\r\n\tcssPaths: string[];\r\n\tcssCodes: string[];\r\n\ttsHelperPaths: string[];\r\n};\r\n\r\nconst extractImports = (sourceCode: string) =>\r\n\tArray.from(sourceCode.matchAll(/import\\s+[\\s\\S]+?['\"]([^'\"]+)['\"]/g))\r\n\t\t.map((match) => match[1])\r\n\t\t.filter((importPath): importPath is string => importPath !== undefined);\r\n\r\nconst toJs = (filePath: string) => {\r\n\tif (filePath.endsWith('.vue')) return filePath.replace(/\\.vue$/, '.js');\r\n\tif (filePath.endsWith('.ts')) return filePath.replace(/\\.ts$/, '.js');\r\n\r\n\treturn `${filePath}.js`;\r\n};\r\n\r\nconst stripExports = (code: string) =>\r\n\tcode\r\n\t\t.replace(/export\\s+default/, 'const script =')\r\n\t\t.replace(/^export\\s+/gm, '');\r\n\r\nconst mergeVueImports = (code: string) => {\r\n\tconst lines = code.split('\\n');\r\n\tconst specifierSet = new Set<string>();\r\n\tconst vueImportRegex = /^import\\s+{([^}]+)}\\s+from\\s+['\"]vue['\"];?$/;\r\n\r\n\tlines.forEach((line) => {\r\n\t\tconst match = line.match(vueImportRegex);\r\n\t\tif (match?.[1])\r\n\t\t\tmatch[1]\r\n\t\t\t\t.split(',')\r\n\t\t\t\t.forEach((importSpecifier) =>\r\n\t\t\t\t\tspecifierSet.add(importSpecifier.trim())\r\n\t\t\t\t);\r\n\t});\r\n\r\n\tconst nonVueLines = lines.filter((line) => !vueImportRegex.test(line));\r\n\r\n\treturn specifierSet.size\r\n\t\t? [\r\n\t\t\t\t`import { ${[...specifierSet].join(', ')} } from \"vue\";`,\r\n\t\t\t\t...nonVueLines\r\n\t\t\t].join('\\n')\r\n\t\t: nonVueLines.join('\\n');\r\n};\r\n\r\nconst compileVueFile = async (\r\n\tsourceFilePath: string,\r\n\toutputDirs: { client: string; server: string; css: string },\r\n\tcacheMap: Map<string, BuildResult>,\r\n\tisEntryPoint: boolean,\r\n\tvueRootDir: string\r\n) => {\r\n\tconst cachedResult = cacheMap.get(sourceFilePath);\r\n\tif (cachedResult) return cachedResult;\r\n\r\n\tconst relativeFilePath = relative(vueRootDir, sourceFilePath).replace(\r\n\t\t/\\\\/g,\r\n\t\t'/'\r\n\t);\r\n\tconst relativeWithoutExtension = relativeFilePath.replace(/\\.vue$/, '');\r\n\tconst fileBaseName = basename(sourceFilePath, '.vue');\r\n\tconst componentId = toKebab(fileBaseName);\r\n\r\n\tconst sourceContent = await file(sourceFilePath).text();\r\n\tconst { descriptor } = parse(sourceContent, { filename: sourceFilePath });\r\n\tconst scriptSource =\r\n\t\tdescriptor.scriptSetup?.content ?? descriptor.script?.content ?? '';\r\n\r\n\tconst importPaths = extractImports(scriptSource);\r\n\tconst childComponentPaths = importPaths.filter(\r\n\t\t(path) => path.startsWith('.') && path.endsWith('.vue')\r\n\t);\r\n\tconst helperModulePaths = importPaths.filter(\r\n\t\t(path) => path.startsWith('.') && !path.endsWith('.vue')\r\n\t);\r\n\r\n\tconst childBuildResults: BuildResult[] = await Promise.all(\r\n\t\tchildComponentPaths.map((relativeChildPath) =>\r\n\t\t\tcompileVueFile(\r\n\t\t\t\tresolve(dirname(sourceFilePath), relativeChildPath),\r\n\t\t\t\toutputDirs,\r\n\t\t\t\tcacheMap,\r\n\t\t\t\tfalse,\r\n\t\t\t\tvueRootDir\r\n\t\t\t)\r\n\t\t)\r\n\t);\r\n\r\n\tconst compiledScript = compileScript(descriptor, {\r\n\t\tid: componentId,\r\n\t\tinlineTemplate: false\r\n\t});\r\n\tconst strippedScript = stripExports(compiledScript.content);\r\n\tconst transpiledScript = transpiler\r\n\t\t.transformSync(strippedScript)\r\n\t\t.replace(\r\n\t\t\t/(['\"])(\\.{1,2}\\/[^'\"]+)(['\"])/g,\r\n\t\t\t(_, quoteStart, relativeImport, quoteEnd) =>\r\n\t\t\t\t`${quoteStart}${toJs(relativeImport)}${quoteEnd}`\r\n\t\t);\r\n\r\n\tconst generateRenderFunction = (ssr: boolean) =>\r\n\t\tcompileTemplate({\r\n\t\t\tcompilerOptions: {\r\n\t\t\t\tbindingMetadata: compiledScript.bindings,\r\n\t\t\t\tprefixIdentifiers: true\r\n\t\t\t},\r\n\t\t\tfilename: sourceFilePath,\r\n\t\t\tid: componentId,\r\n\t\t\tscoped: descriptor.styles.some((styleBlock) => styleBlock.scoped),\r\n\t\t\tsource: descriptor.template?.content ?? '',\r\n\t\t\tssr,\r\n\t\t\tssrCssVars: descriptor.cssVars\r\n\t\t}).code.replace(\r\n\t\t\t/(['\"])(\\.{1,2}\\/[^'\"]+)(['\"])/g,\r\n\t\t\t(_, quoteStart, relativeImport, quoteEnd) =>\r\n\t\t\t\t`${quoteStart}${toJs(relativeImport)}${quoteEnd}`\r\n\t\t);\r\n\r\n\tconst localCss = descriptor.styles.map(\r\n\t\t(styleBlock) =>\r\n\t\t\tcompileStyle({\r\n\t\t\t\tfilename: sourceFilePath,\r\n\t\t\t\tid: componentId,\r\n\t\t\t\tscoped: styleBlock.scoped,\r\n\t\t\t\tsource: styleBlock.content,\r\n\t\t\t\ttrim: true\r\n\t\t\t}).code\r\n\t);\r\n\tconst allCss = [\r\n\t\t...localCss,\r\n\t\t...childBuildResults.flatMap((result) => result.cssCodes)\r\n\t];\r\n\r\n\tlet cssOutputPaths: string[] = [];\r\n\tif (isEntryPoint && allCss.length) {\r\n\t\tconst cssOutputFile = join(\r\n\t\t\toutputDirs.css,\r\n\t\t\t`${toKebab(fileBaseName)}.css`\r\n\t\t);\r\n\t\tawait mkdir(dirname(cssOutputFile), { recursive: true });\r\n\t\tawait write(cssOutputFile, allCss.join('\\n'));\r\n\t\tcssOutputPaths = [cssOutputFile];\r\n\t}\r\n\r\n\tconst assembleModule = (\r\n\t\trenderCode: string,\r\n\t\trenderFnName: 'render' | 'ssrRender'\r\n\t) =>\r\n\t\tmergeVueImports(\r\n\t\t\t[\r\n\t\t\t\ttranspiledScript,\r\n\t\t\t\trenderCode,\r\n\t\t\t\t`script.${renderFnName} = ${renderFnName};`,\r\n\t\t\t\t'export default script;'\r\n\t\t\t].join('\\n')\r\n\t\t);\r\n\r\n\tconst clientCode = assembleModule(generateRenderFunction(false), 'render');\r\n\tconst serverCode = assembleModule(\r\n\t\tgenerateRenderFunction(true),\r\n\t\t'ssrRender'\r\n\t);\r\n\r\n\tconst clientOutputPath = join(\r\n\t\toutputDirs.client,\r\n\t\t`${relativeWithoutExtension}.js`\r\n\t);\r\n\tconst serverOutputPath = join(\r\n\t\toutputDirs.server,\r\n\t\t`${relativeWithoutExtension}.js`\r\n\t);\r\n\r\n\tawait mkdir(dirname(clientOutputPath), { recursive: true });\r\n\tawait mkdir(dirname(serverOutputPath), { recursive: true });\r\n\tawait write(clientOutputPath, clientCode);\r\n\tawait write(serverOutputPath, serverCode);\r\n\r\n\tconst result: BuildResult = {\r\n\t\tclientPath: clientOutputPath,\r\n\t\tcssCodes: allCss,\r\n\t\tcssPaths: cssOutputPaths,\r\n\t\tserverPath: serverOutputPath,\r\n\t\ttsHelperPaths: [\r\n\t\t\t...helperModulePaths.map((helper) =>\r\n\t\t\t\tresolve(\r\n\t\t\t\t\tdirname(sourceFilePath),\r\n\t\t\t\t\thelper.endsWith('.ts') ? helper : `${helper}.ts`\r\n\t\t\t\t)\r\n\t\t\t),\r\n\t\t\t...childBuildResults.flatMap((child) => child.tsHelperPaths)\r\n\t\t]\r\n\t};\r\n\r\n\tcacheMap.set(sourceFilePath, result);\r\n\r\n\treturn result;\r\n};\r\n\r\nexport const compileVue = async (entryPoints: string[], vueRootDir: string) => {\r\n\tconst compiledOutputRoot = join(vueRootDir, 'compiled');\r\n\tconst clientOutputDir = join(compiledOutputRoot, 'client');\r\n\tconst indexOutputDir = join(compiledOutputRoot, 'indexes');\r\n\tconst serverOutputDir = join(compiledOutputRoot, 'pages');\r\n\tconst cssOutputDir = join(compiledOutputRoot, 'styles');\r\n\r\n\tawait Promise.all([\r\n\t\tmkdir(clientOutputDir, { recursive: true }),\r\n\t\tmkdir(indexOutputDir, { recursive: true }),\r\n\t\tmkdir(serverOutputDir, { recursive: true }),\r\n\t\tmkdir(cssOutputDir, { recursive: true })\r\n\t]);\r\n\r\n\tconst buildCache = new Map<string, BuildResult>();\r\n\tconst allTsHelperPaths = new Set<string>();\r\n\r\n\tconst compiledPages = await Promise.all(\r\n\t\tentryPoints.map(async (entryPath) => {\r\n\t\t\tconst result = await compileVueFile(\r\n\t\t\t\tresolve(entryPath),\r\n\t\t\t\t{\r\n\t\t\t\t\tclient: clientOutputDir,\r\n\t\t\t\t\tcss: cssOutputDir,\r\n\t\t\t\t\tserver: serverOutputDir\r\n\t\t\t\t},\r\n\t\t\t\tbuildCache,\r\n\t\t\t\ttrue,\r\n\t\t\t\tvueRootDir\r\n\t\t\t);\r\n\r\n\t\t\tresult.tsHelperPaths.forEach((path) => allTsHelperPaths.add(path));\r\n\r\n\t\t\tconst entryBaseName = basename(entryPath, '.vue');\r\n\t\t\tconst indexOutputFile = join(indexOutputDir, `${entryBaseName}.js`);\r\n\t\t\tconst clientOutputFile = join(\r\n\t\t\t\tclientOutputDir,\r\n\t\t\t\trelative(vueRootDir, entryPath)\r\n\t\t\t\t\t.replace(/\\\\/g, '/')\r\n\t\t\t\t\t.replace(/\\.vue$/, '.js')\r\n\t\t\t);\r\n\r\n\t\t\tawait mkdir(dirname(indexOutputFile), { recursive: true });\r\n\t\t\tawait write(\r\n\t\t\t\tindexOutputFile,\r\n\t\t\t\t[\r\n\t\t\t\t\t`import Comp from \"${relative(dirname(indexOutputFile), clientOutputFile).replace(/\\\\/g, '/')}\";`,\r\n\t\t\t\t\t'import { createSSRApp } from \"vue\";',\r\n\t\t\t\t\t'const props = window.__INITIAL_PROPS__ ?? {};',\r\n\t\t\t\t\t'createSSRApp(Comp, props).mount(\"#root\");'\r\n\t\t\t\t].join('\\n')\r\n\t\t\t);\r\n\r\n\t\t\treturn {\r\n\t\t\t\tcssPaths: result.cssPaths,\r\n\t\t\t\tindexPath: indexOutputFile,\r\n\t\t\t\tserverPath: result.serverPath\r\n\t\t\t};\r\n\t\t})\r\n\t);\r\n\r\n\tawait Promise.all(\r\n\t\tArray.from(allTsHelperPaths).map(async (tsPath) => {\r\n\t\t\tconst sourceCode = await file(tsPath).text();\r\n\t\t\tconst transpiledCode = transpiler.transformSync(sourceCode);\r\n\t\t\tconst relativeJsPath = relative(vueRootDir, tsPath).replace(\r\n\t\t\t\t/\\.ts$/,\r\n\t\t\t\t'.js'\r\n\t\t\t);\r\n\t\t\tconst outClientPath = join(clientOutputDir, relativeJsPath);\r\n\t\t\tconst outServerPath = join(serverOutputDir, relativeJsPath);\r\n\t\t\tawait mkdir(dirname(outClientPath), { recursive: true });\r\n\t\t\tawait mkdir(dirname(outServerPath), { recursive: true });\r\n\t\t\tawait write(outClientPath, transpiledCode);\r\n\t\t\tawait write(outServerPath, transpiledCode);\r\n\t\t})\r\n\t);\r\n\r\n\treturn {\r\n\t\tvueCssPaths: compiledPages.flatMap((result) => result.cssPaths),\r\n\t\tvueIndexPaths: compiledPages.map((result) => result.indexPath),\r\n\t\tvueServerPaths: compiledPages.map((result) => result.serverPath)\r\n\t};\r\n};\r\n",
|
|
9
|
-
"const
|
|
10
|
-
"import {
|
|
11
|
-
"import {
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"import type { Component } from 'svelte';\r\nimport { render } from 'svelte/server';\r\nimport { DEFAULT_CHUNK_SIZE } from '../constants';\r\nimport { escapeScriptContent } from '../utils/escapeScriptContent';\r\n\r\nexport type RenderStreamOptions = {\r\n\tbootstrapScriptContent?: string;\r\n\tbootstrapScripts?: string[];\r\n\tbootstrapModules?: string[];\r\n\tnonce?: string;\r\n\tonError?: (error: unknown) => void;\r\n\tprogressiveChunkSize?: number;\r\n\tsignal?: AbortSignal;\r\n};\r\n\r\nexport const renderToReadableStream = async <\r\n\tProps extends Record<string, unknown> = Record<string, never>\r\n>(\r\n\tcomponent: Component<Props>,\r\n\tprops?: Props,\r\n\t{\r\n\t\tbootstrapScriptContent,\r\n\t\tbootstrapScripts = [],\r\n\t\tbootstrapModules = [],\r\n\t\tnonce,\r\n\t\tonError = console.error,\r\n\t\tprogressiveChunkSize = DEFAULT_CHUNK_SIZE,\r\n\t\tsignal\r\n\t}: RenderStreamOptions = {}\r\n) => {\r\n\ttry {\r\n\t\tconst { head, body } =\r\n\t\t\ttypeof props === 'undefined'\r\n\t\t\t\t? // @ts-expect-error Svelte's render function can't determine which overload to choose when the component is generic\r\n\t\t\t\t\trender(component)\r\n\t\t\t\t: render(component, { props });\r\n\t\tconst nonceAttr = nonce ? ` nonce=\"${nonce}\"` : '';\r\n\t\tconst scripts =\r\n\t\t\t(bootstrapScriptContent\r\n\t\t\t\t? `<script${nonceAttr}>${escapeScriptContent(bootstrapScriptContent)}</script>`\r\n\t\t\t\t: '') +\r\n\t\t\tbootstrapScripts\r\n\t\t\t\t.map((src) => `<script${nonceAttr} src=\"${src}\"></script>`)\r\n\t\t\t\t.join('') +\r\n\t\t\tbootstrapModules\r\n\t\t\t\t.map(\r\n\t\t\t\t\t(src) =>\r\n\t\t\t\t\t\t`<script${nonceAttr} type=\"module\" src=\"${src}\"></script>`\r\n\t\t\t\t)\r\n\t\t\t\t.join('');\r\n\t\tconst encoder = new TextEncoder();\r\n\t\t// Warning: this encodes the entire document into memory in one buffer\r\n\t\tconst full = encoder.encode(\r\n\t\t\t`<!DOCTYPE html><html lang=\"en\"><head>${head}</head><body>${body}${scripts}</body></html>`\r\n\t\t);\r\n\r\n\t\tlet offset = 0;\r\n\r\n\t\treturn new ReadableStream<Uint8Array>({\r\n\t\t\ttype: 'bytes',\r\n\t\t\tcancel(reason) {\r\n\t\t\t\tonError?.(reason);\r\n\t\t\t},\r\n\t\t\tpull(controller) {\r\n\t\t\t\tif (signal?.aborted) {\r\n\t\t\t\t\tcontroller.close();\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (offset >= full.length) {\r\n\t\t\t\t\tcontroller.close();\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst end = Math.min(\r\n\t\t\t\t\toffset + progressiveChunkSize,\r\n\t\t\t\t\tfull.length\r\n\t\t\t\t);\r\n\t\t\t\tcontroller.enqueue(full.subarray(offset, end));\r\n\t\t\t\toffset = end;\r\n\t\t\t}\r\n\t\t});\r\n\t} catch (error) {\r\n\t\tonError?.(error);\r\n\t\tthrow error;\r\n\t}\r\n};\r\n",
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"import os from 'os';\r\n\r\nexport const getLocalIPAddress = () => {\r\n\tconst interfaces = os.networkInterfaces();\r\n\tconst addresses = Object.values(interfaces)\r\n\t\t.flat()\r\n\t\t.filter(\r\n\t\t\t(iface): iface is os.NetworkInterfaceInfo => iface !== undefined\r\n\t\t);\r\n\tconst ipAddress = addresses.find(\r\n\t\t(iface) => iface.family === 'IPv4' && !iface.internal\r\n\t);\r\n\r\n\tif (ipAddress) return ipAddress.address; // Return the first non-internal IPv4 address\r\n\r\n\tconsole.warn('No IP address found, falling back to localhost');\r\n\r\n\treturn 'localhost'; // Fallback to localhost if no IP found\r\n};\r\n",
|
|
25
|
-
"
|
|
26
|
-
"type
|
|
27
|
-
"import {
|
|
5
|
+
"export const UNFOUND_INDEX = -1;\nexport const SECONDS_IN_A_MINUTE = 60;\nexport const MILLISECONDS_IN_A_SECOND = 1000;\nexport const MILLISECONDS_IN_A_MINUTE =\n\tMILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE;\nexport const MINUTES_IN_AN_HOUR = 60;\nexport const HOURS_IN_DAY = 24;\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 TIME_PRECISION = 2;\nexport const TWO_THIRDS = 2 / 3;\nexport const DEFAULT_PORT = 3000;\nexport const DEFAULT_CHUNK_SIZE = 16_384;\nexport const BUN_BUILD_WARNING_SUPPRESSION =\n\t'wildcard sideEffects are not supported yet';\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 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};\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();\n",
|
|
7
|
+
"import { mkdir } from 'node:fs/promises';\nimport { basename, dirname, join, relative, resolve } from 'node:path';\nimport {\n\tparse,\n\tcompileScript,\n\tcompileTemplate,\n\tcompileStyle,\n\ttype SFCDescriptor\n} from '@vue/compiler-sfc';\nimport { file, write, Transpiler } from 'bun';\nimport { toKebab } from '../utils/stringModifiers';\n\nconst hmrClientPath = resolve(\n\timport.meta.dir,\n\t'../dev/client/hmrClient.ts'\n).replace(/\\\\/g, '/');\n\nconst transpiler = new Transpiler({ loader: 'ts', target: 'browser' });\n\ntype BuildResult = {\n\tclientPath: string;\n\tserverPath: string;\n\tcssPaths: string[];\n\tcssCodes: string[];\n\ttsHelperPaths: string[];\n\thmrId: string;\n};\n\n// HMR change type detection\nexport type VueChangeType = 'style-only' | 'template-only' | 'script' | 'full';\n\n// Descriptor caches for change detection\nconst scriptCache = new Map<string, string>();\nconst scriptSetupCache = new Map<string, string>();\nconst templateCache = new Map<string, string>();\nconst styleCache = new Map<string, string>();\n\n// HMR metadata storage (exported for rebuildTrigger to access)\nexport const vueHmrMetadata = new Map<\n\tstring,\n\t{ hmrId: string; changeType: VueChangeType }\n>();\n\n/**\n * Detect what type of change occurred in a Vue component\n * Returns 'template-only' for template changes (supports rerender)\n * Returns 'script' for script/scriptSetup changes (requires reload)\n * Returns 'full' for first compile or when detection fails\n */\nexport const detectVueChangeType = (\n\tfilePath: string,\n\tdescriptor: SFCDescriptor\n): VueChangeType => {\n\tconst prevScript = scriptCache.get(filePath);\n\tconst prevScriptSetup = scriptSetupCache.get(filePath);\n\tconst prevTemplate = templateCache.get(filePath);\n\tconst prevStyle = styleCache.get(filePath);\n\n\tconst currentScript = descriptor.script?.content ?? '';\n\tconst currentScriptSetup = descriptor.scriptSetup?.content ?? '';\n\tconst currentTemplate = descriptor.template?.content ?? '';\n\t// Serialize styles: include scoped flag and content for each style block\n\t// Uses ||| delimiter to detect changes to any block, additions, removals, or reordering\n\tconst currentStyle = descriptor.styles\n\t\t.map((s) => `${s.scoped ? 'scoped:' : ''}${s.content}`)\n\t\t.join('|||');\n\n\t// Update caches with current values\n\tscriptCache.set(filePath, currentScript);\n\tscriptSetupCache.set(filePath, currentScriptSetup);\n\ttemplateCache.set(filePath, currentTemplate);\n\tstyleCache.set(filePath, currentStyle);\n\n\t// First compile - no previous data\n\tif (prevScript === undefined && prevScriptSetup === undefined) {\n\t\treturn 'full';\n\t}\n\n\tconst scriptChanged = prevScript !== currentScript;\n\tconst scriptSetupChanged = prevScriptSetup !== currentScriptSetup;\n\tconst templateChanged = prevTemplate !== currentTemplate;\n\tconst styleChanged = prevStyle !== currentStyle;\n\n\t// Priority order:\n\t// 1. Script changes → 'script' (requires reload)\n\t// 2. Template-only (no script, no style) → 'template-only' (rerender)\n\t// 3. Style-only (no script, no template) → 'style-only' (CSS hot-swap, state preserved)\n\t// 4. Template + style → 'template-only' (CSS swapped alongside rerender)\n\n\t// Script change: script or scriptSetup changed (may also include template/style)\n\tif (scriptChanged || scriptSetupChanged) {\n\t\treturn 'script';\n\t}\n\n\t// Style-only change: only styles changed, no script or template\n\tif (styleChanged && !templateChanged) {\n\t\treturn 'style-only';\n\t}\n\n\t// Template-only change: template changed (with or without styles), script unchanged\n\tif (templateChanged) {\n\t\treturn 'template-only';\n\t}\n\n\t// No changes detected (shouldn't happen in practice)\n\treturn 'full';\n};\n\n/**\n * Generate a stable HMR ID for a Vue component\n * Uses relative path from Vue root without extension\n * Example: \"pages/VueExample\" or \"components/CountButton\"\n */\nexport const generateVueHmrId = (\n\tsourceFilePath: string,\n\tvueRootDir: string\n): string => {\n\treturn relative(vueRootDir, sourceFilePath)\n\t\t.replace(/\\\\/g, '/')\n\t\t.replace(/\\.vue$/, '');\n};\n\n/**\n * Clear HMR caches (useful for testing or full rebuilds)\n */\nexport const clearVueHmrCaches = () => {\n\tscriptCache.clear();\n\tscriptSetupCache.clear();\n\ttemplateCache.clear();\n\tstyleCache.clear();\n\tvueHmrMetadata.clear();\n};\n\nconst extractImports = (sourceCode: string) =>\n\tArray.from(sourceCode.matchAll(/import\\s+[\\s\\S]+?['\"]([^'\"]+)['\"]/g))\n\t\t.map((match) => match[1])\n\t\t.filter((importPath): importPath is string => importPath !== undefined);\n\nconst toJs = (filePath: string) => {\n\tif (filePath.endsWith('.vue')) return filePath.replace(/\\.vue$/, '.js');\n\tif (filePath.endsWith('.ts')) return filePath.replace(/\\.ts$/, '.js');\n\n\treturn `${filePath}.js`;\n};\n\nconst stripExports = (code: string) =>\n\tcode\n\t\t.replace(/export\\s+default/, 'const script =')\n\t\t.replace(/^export\\s+/gm, '');\n\nconst mergeVueImports = (code: string) => {\n\tconst lines = code.split('\\n');\n\tconst specifierSet = new Set<string>();\n\tconst vueImportRegex = /^import\\s+{([^}]+)}\\s+from\\s+['\"]vue['\"];?$/;\n\n\tlines.forEach((line) => {\n\t\tconst match = line.match(vueImportRegex);\n\t\tif (match?.[1])\n\t\t\tmatch[1]\n\t\t\t\t.split(',')\n\t\t\t\t.forEach((importSpecifier) =>\n\t\t\t\t\tspecifierSet.add(importSpecifier.trim())\n\t\t\t\t);\n\t});\n\n\tconst nonVueLines = lines.filter((line) => !vueImportRegex.test(line));\n\n\treturn specifierSet.size\n\t\t? [\n\t\t\t\t`import { ${[...specifierSet].join(', ')} } from \"vue\";`,\n\t\t\t\t...nonVueLines\n\t\t\t].join('\\n')\n\t\t: nonVueLines.join('\\n');\n};\n\nconst compileVueFile = async (\n\tsourceFilePath: string,\n\toutputDirs: { client: string; server: string; css: string },\n\tcacheMap: Map<string, BuildResult>,\n\tisEntryPoint: boolean,\n\tvueRootDir: string\n) => {\n\tconst cachedResult = cacheMap.get(sourceFilePath);\n\tif (cachedResult) return cachedResult;\n\n\tconst relativeFilePath = relative(vueRootDir, sourceFilePath).replace(\n\t\t/\\\\/g,\n\t\t'/'\n\t);\n\tconst relativeWithoutExtension = relativeFilePath.replace(/\\.vue$/, '');\n\tconst fileBaseName = basename(sourceFilePath, '.vue');\n\tconst componentId = toKebab(fileBaseName);\n\n\tconst sourceContent = await file(sourceFilePath).text();\n\tconst { descriptor } = parse(sourceContent, { filename: sourceFilePath });\n\n\t// Generate HMR ID and detect change type\n\tconst hmrId = generateVueHmrId(sourceFilePath, vueRootDir);\n\tconst changeType = detectVueChangeType(sourceFilePath, descriptor);\n\n\t// Store HMR metadata for rebuildTrigger to access\n\tvueHmrMetadata.set(sourceFilePath, { hmrId, changeType });\n\n\tconst scriptSource =\n\t\tdescriptor.scriptSetup?.content ?? descriptor.script?.content ?? '';\n\n\tconst importPaths = extractImports(scriptSource);\n\tconst childComponentPaths = importPaths.filter(\n\t\t(path) => path.startsWith('.') && path.endsWith('.vue')\n\t);\n\tconst helperModulePaths = importPaths.filter(\n\t\t(path) => path.startsWith('.') && !path.endsWith('.vue')\n\t);\n\n\tconst childBuildResults: BuildResult[] = await Promise.all(\n\t\tchildComponentPaths.map((relativeChildPath) =>\n\t\t\tcompileVueFile(\n\t\t\t\tresolve(dirname(sourceFilePath), relativeChildPath),\n\t\t\t\toutputDirs,\n\t\t\t\tcacheMap,\n\t\t\t\tfalse,\n\t\t\t\tvueRootDir\n\t\t\t)\n\t\t)\n\t);\n\n\tconst compiledScript = compileScript(descriptor, {\n\t\tid: componentId,\n\t\tinlineTemplate: false\n\t});\n\tconst strippedScript = stripExports(compiledScript.content);\n\tconst transpiledScript = transpiler\n\t\t.transformSync(strippedScript)\n\t\t.replace(\n\t\t\t/(['\"])(\\.{1,2}\\/[^'\"]+)(['\"])/g,\n\t\t\t(_, quoteStart, relativeImport, quoteEnd) =>\n\t\t\t\t`${quoteStart}${toJs(relativeImport)}${quoteEnd}`\n\t\t);\n\n\tconst generateRenderFunction = (ssr: boolean) =>\n\t\tcompileTemplate({\n\t\t\tcompilerOptions: {\n\t\t\t\tbindingMetadata: compiledScript.bindings,\n\t\t\t\tprefixIdentifiers: true\n\t\t\t},\n\t\t\tfilename: sourceFilePath,\n\t\t\tid: componentId,\n\t\t\tscoped: descriptor.styles.some((styleBlock) => styleBlock.scoped),\n\t\t\tsource: descriptor.template?.content ?? '',\n\t\t\tssr,\n\t\t\tssrCssVars: descriptor.cssVars\n\t\t}).code.replace(\n\t\t\t/(['\"])(\\.{1,2}\\/[^'\"]+)(['\"])/g,\n\t\t\t(_, quoteStart, relativeImport, quoteEnd) =>\n\t\t\t\t`${quoteStart}${toJs(relativeImport)}${quoteEnd}`\n\t\t);\n\n\tconst localCss = descriptor.styles.map(\n\t\t(styleBlock) =>\n\t\t\tcompileStyle({\n\t\t\t\tfilename: sourceFilePath,\n\t\t\t\tid: componentId,\n\t\t\t\tscoped: styleBlock.scoped,\n\t\t\t\tsource: styleBlock.content,\n\t\t\t\ttrim: true\n\t\t\t}).code\n\t);\n\tconst allCss = [\n\t\t...localCss,\n\t\t...childBuildResults.flatMap((result) => result.cssCodes)\n\t];\n\n\tlet cssOutputPaths: string[] = [];\n\tif (isEntryPoint && allCss.length) {\n\t\tconst cssOutputFile = join(\n\t\t\toutputDirs.css,\n\t\t\t`${toKebab(fileBaseName)}.css`\n\t\t);\n\t\tawait mkdir(dirname(cssOutputFile), { recursive: true });\n\t\tawait write(cssOutputFile, allCss.join('\\n'));\n\t\tcssOutputPaths = [cssOutputFile];\n\t}\n\n\tconst assembleModule = (\n\t\trenderCode: string,\n\t\trenderFnName: 'render' | 'ssrRender',\n\t\tincludeHmr: boolean\n\t) => {\n\t\tconst hasScoped = descriptor.styles.some(\n\t\t\t(styleBlock) => styleBlock.scoped\n\t\t);\n\n\t\t// __scopeId is required for Vue runtime to add scoped style attributes to dynamic elements\n\t\t// Without this, scoped styles only work on static VNodes that have the attribute baked in\n\t\tconst scopeIdCode = hasScoped\n\t\t\t? `script.__scopeId = \"data-v-${componentId}\";`\n\t\t\t: '';\n\n\t\t// For client bundles, inject HMR registration code that uses Vue's native __VUE_HMR_RUNTIME__\n\t\t// This enables state-preserving hot updates via rerender() for template changes\n\t\t// and reload() for script changes\n\t\tconst hmrCode = includeHmr\n\t\t\t? `\n// Vue Native HMR Registration\nscript.__hmrId = ${JSON.stringify(hmrId)};\nif (typeof __VUE_HMR_RUNTIME__ !== 'undefined') {\n __VUE_HMR_RUNTIME__.createRecord(script.__hmrId, script);\n if (typeof window !== 'undefined') {\n window.__VUE_HMR_COMPONENTS__ = window.__VUE_HMR_COMPONENTS__ || {};\n window.__VUE_HMR_COMPONENTS__[script.__hmrId] = script;\n }\n}`\n\t\t\t: '';\n\n\t\treturn mergeVueImports(\n\t\t\t[\n\t\t\t\ttranspiledScript,\n\t\t\t\trenderCode,\n\t\t\t\t`script.${renderFnName} = ${renderFnName};`,\n\t\t\t\tscopeIdCode,\n\t\t\t\thmrCode,\n\t\t\t\t'export default script;'\n\t\t\t].join('\\n')\n\t\t);\n\t};\n\n\t// Client bundles include HMR registration code; server bundles do not\n\tconst clientCode = assembleModule(\n\t\tgenerateRenderFunction(false),\n\t\t'render',\n\t\ttrue\n\t);\n\tconst serverCode = assembleModule(\n\t\tgenerateRenderFunction(true),\n\t\t'ssrRender',\n\t\tfalse\n\t);\n\n\tconst clientOutputPath = join(\n\t\toutputDirs.client,\n\t\t`${relativeWithoutExtension}.js`\n\t);\n\tconst serverOutputPath = join(\n\t\toutputDirs.server,\n\t\t`${relativeWithoutExtension}.js`\n\t);\n\n\tawait mkdir(dirname(clientOutputPath), { recursive: true });\n\tawait mkdir(dirname(serverOutputPath), { recursive: true });\n\tawait write(clientOutputPath, clientCode);\n\tawait write(serverOutputPath, serverCode);\n\n\tconst result: BuildResult = {\n\t\tclientPath: clientOutputPath,\n\t\tcssCodes: allCss,\n\t\tcssPaths: cssOutputPaths,\n\t\tserverPath: serverOutputPath,\n\t\ttsHelperPaths: [\n\t\t\t...helperModulePaths.map((helper) =>\n\t\t\t\tresolve(\n\t\t\t\t\tdirname(sourceFilePath),\n\t\t\t\t\thelper.endsWith('.ts') ? helper : `${helper}.ts`\n\t\t\t\t)\n\t\t\t),\n\t\t\t...childBuildResults.flatMap((child) => child.tsHelperPaths)\n\t\t],\n\t\thmrId\n\t};\n\n\tcacheMap.set(sourceFilePath, result);\n\n\treturn result;\n};\n\nexport const compileVue = async (\n\tentryPoints: string[],\n\tvueRootDir: string,\n\tisDev = false\n) => {\n\tconst compiledOutputRoot = join(vueRootDir, 'compiled');\n\tconst clientOutputDir = join(compiledOutputRoot, 'client');\n\tconst indexOutputDir = join(compiledOutputRoot, 'indexes');\n\tconst serverOutputDir = join(compiledOutputRoot, 'pages');\n\tconst cssOutputDir = join(compiledOutputRoot, 'styles');\n\n\tawait Promise.all([\n\t\tmkdir(clientOutputDir, { recursive: true }),\n\t\tmkdir(indexOutputDir, { recursive: true }),\n\t\tmkdir(serverOutputDir, { recursive: true }),\n\t\tmkdir(cssOutputDir, { recursive: true })\n\t]);\n\n\tconst buildCache = new Map<string, BuildResult>();\n\tconst allTsHelperPaths = new Set<string>();\n\n\tconst compiledPages = await Promise.all(\n\t\tentryPoints.map(async (entryPath) => {\n\t\t\tconst result = await compileVueFile(\n\t\t\t\tresolve(entryPath),\n\t\t\t\t{\n\t\t\t\t\tclient: clientOutputDir,\n\t\t\t\t\tcss: cssOutputDir,\n\t\t\t\t\tserver: serverOutputDir\n\t\t\t\t},\n\t\t\t\tbuildCache,\n\t\t\t\ttrue,\n\t\t\t\tvueRootDir\n\t\t\t);\n\n\t\t\tresult.tsHelperPaths.forEach((path) => allTsHelperPaths.add(path));\n\n\t\t\tconst entryBaseName = basename(entryPath, '.vue');\n\t\t\tconst indexOutputFile = join(indexOutputDir, `${entryBaseName}.js`);\n\t\t\tconst clientOutputFile = join(\n\t\t\t\tclientOutputDir,\n\t\t\t\trelative(vueRootDir, entryPath)\n\t\t\t\t\t.replace(/\\\\/g, '/')\n\t\t\t\t\t.replace(/\\.vue$/, '.js')\n\t\t\t);\n\n\t\t\tawait mkdir(dirname(indexOutputFile), { recursive: true });\n\t\t\tconst vueHmrImports = isDev\n\t\t\t\t? [\n\t\t\t\t\t\t`window.__HMR_FRAMEWORK__ = \"vue\";`,\n\t\t\t\t\t\t`import \"${hmrClientPath}\";`\n\t\t\t\t\t]\n\t\t\t\t: [];\n\t\t\tawait write(\n\t\t\t\tindexOutputFile,\n\t\t\t\t[\n\t\t\t\t\t...vueHmrImports,\n\t\t\t\t\t`import Comp from \"${relative(dirname(indexOutputFile), clientOutputFile).replace(/\\\\/g, '/')}\";`,\n\t\t\t\t\t'import { createSSRApp } from \"vue\";',\n\t\t\t\t\t'',\n\t\t\t\t\t'// HMR State Preservation: Check for preserved state from HMR',\n\t\t\t\t\t'let preservedState = (typeof window !== \"undefined\" && window.__HMR_PRESERVED_STATE__) ? window.__HMR_PRESERVED_STATE__ : {};',\n\t\t\t\t\t'',\n\t\t\t\t\t'// Fallback: check sessionStorage if window state is empty',\n\t\t\t\t\t'if (typeof window !== \"undefined\" && Object.keys(preservedState).length === 0) {',\n\t\t\t\t\t' try {',\n\t\t\t\t\t' const stored = sessionStorage.getItem(\"__VUE_HMR_STATE__\");',\n\t\t\t\t\t' if (stored) {',\n\t\t\t\t\t' preservedState = JSON.parse(stored);',\n\t\t\t\t\t' sessionStorage.removeItem(\"__VUE_HMR_STATE__\");',\n\t\t\t\t\t' }',\n\t\t\t\t\t' } catch (e) {}',\n\t\t\t\t\t'}',\n\t\t\t\t\t'',\n\t\t\t\t\t'const mergedProps = { ...(window.__INITIAL_PROPS__ ?? {}), ...preservedState };',\n\t\t\t\t\t'',\n\t\t\t\t\t'// Use createSSRApp for proper hydration of server-rendered content',\n\t\t\t\t\t'const app = createSSRApp(Comp, mergedProps);',\n\t\t\t\t\t'app.mount(\"#root\");',\n\t\t\t\t\t'',\n\t\t\t\t\t'// Store app instance for HMR - used for manual component updates',\n\t\t\t\t\t'if (typeof window !== \"undefined\") {',\n\t\t\t\t\t' window.__VUE_APP__ = app;',\n\t\t\t\t\t'}',\n\t\t\t\t\t'',\n\t\t\t\t\t'// Post-mount: Apply preserved state to reactive refs in component tree',\n\t\t\t\t\t'// This restores state that lives in refs (like count) rather than props',\n\t\t\t\t\t'if (typeof window !== \"undefined\" && Object.keys(preservedState).length > 0) {',\n\t\t\t\t\t' requestAnimationFrame(function() {',\n\t\t\t\t\t' if (window.__VUE_APP__ && window.__VUE_APP__._instance) {',\n\t\t\t\t\t' applyPreservedState(window.__VUE_APP__._instance, preservedState);',\n\t\t\t\t\t' }',\n\t\t\t\t\t' });',\n\t\t\t\t\t'}',\n\t\t\t\t\t'',\n\t\t\t\t\t'function applyPreservedState(instance, state) {',\n\t\t\t\t\t' // Apply to root component setupState',\n\t\t\t\t\t' if (instance.setupState) {',\n\t\t\t\t\t' Object.keys(state).forEach(function(key) {',\n\t\t\t\t\t' const ref = instance.setupState[key];',\n\t\t\t\t\t' if (ref && typeof ref === \"object\" && \"value\" in ref) {',\n\t\t\t\t\t' ref.value = state[key];',\n\t\t\t\t\t' }',\n\t\t\t\t\t' });',\n\t\t\t\t\t' }',\n\t\t\t\t\t' // Also apply to child components',\n\t\t\t\t\t' if (instance.subTree) {',\n\t\t\t\t\t' walkAndApply(instance.subTree, state);',\n\t\t\t\t\t' }',\n\t\t\t\t\t'}',\n\t\t\t\t\t'',\n\t\t\t\t\t'function walkAndApply(vnode, state) {',\n\t\t\t\t\t' if (!vnode) return;',\n\t\t\t\t\t' if (vnode.component && vnode.component.setupState) {',\n\t\t\t\t\t' Object.keys(state).forEach(function(key) {',\n\t\t\t\t\t' const ref = vnode.component.setupState[key];',\n\t\t\t\t\t' if (ref && typeof ref === \"object\" && \"value\" in ref) {',\n\t\t\t\t\t' ref.value = state[key];',\n\t\t\t\t\t' }',\n\t\t\t\t\t' });',\n\t\t\t\t\t' }',\n\t\t\t\t\t' if (vnode.children && Array.isArray(vnode.children)) {',\n\t\t\t\t\t' vnode.children.forEach(function(child) { walkAndApply(child, state); });',\n\t\t\t\t\t' }',\n\t\t\t\t\t' if (vnode.component && vnode.component.subTree) {',\n\t\t\t\t\t' walkAndApply(vnode.component.subTree, state);',\n\t\t\t\t\t' }',\n\t\t\t\t\t'}',\n\t\t\t\t\t'',\n\t\t\t\t\t'// Clear preserved state after applying',\n\t\t\t\t\t'if (typeof window !== \"undefined\") {',\n\t\t\t\t\t' window.__HMR_PRESERVED_STATE__ = undefined;',\n\t\t\t\t\t'}'\n\t\t\t\t].join('\\n')\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tclientPath: clientOutputFile,\n\t\t\t\tcssPaths: result.cssPaths,\n\t\t\t\tindexPath: indexOutputFile,\n\t\t\t\tserverPath: result.serverPath\n\t\t\t};\n\t\t})\n\t);\n\n\tawait Promise.all(\n\t\tArray.from(allTsHelperPaths).map(async (tsPath) => {\n\t\t\tconst sourceCode = await file(tsPath).text();\n\t\t\tconst transpiledCode = transpiler.transformSync(sourceCode);\n\t\t\tconst relativeJsPath = relative(vueRootDir, tsPath).replace(\n\t\t\t\t/\\.ts$/,\n\t\t\t\t'.js'\n\t\t\t);\n\t\t\tconst outClientPath = join(clientOutputDir, relativeJsPath);\n\t\t\tconst outServerPath = join(serverOutputDir, relativeJsPath);\n\t\t\tawait mkdir(dirname(outClientPath), { recursive: true });\n\t\t\tawait mkdir(dirname(outServerPath), { recursive: true });\n\t\t\tawait write(outClientPath, transpiledCode);\n\t\t\tawait write(outServerPath, transpiledCode);\n\t\t})\n\t);\n\n\treturn {\n\t\tvueClientPaths: compiledPages.map((result) => result.clientPath),\n\t\tvueCssPaths: compiledPages.flatMap((result) => result.cssPaths),\n\t\tvueIndexPaths: compiledPages.map((result) => result.indexPath),\n\t\tvueServerPaths: compiledPages.map((result) => result.serverPath),\n\t\t// Export HMR metadata from vueHmrMetadata map (populated during compilation)\n\t\thmrMetadata: new Map(vueHmrMetadata)\n\t};\n};\n",
|
|
8
|
+
"/* Simple HTML HMR Implementation\n Lightweight approach: read HTML file → send HTML patch */\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\n/* Simple HTML HMR handler for server-side\n When an HTML file changes:\n 1. Read the HTML file\n 2. Extract body content (or return full HTML)\n 3. Return the HTML for patching */\nexport const handleHTMLUpdate = async (htmlFilePath: string) => {\n\ttry {\n\t\t// The htmlFilePath is now the BUILT file path (e.g., build/html/pages/HTMLExample.html)\n\t\t// This ensures we read HTML with updated CSS paths from updateAssetPaths\n\t\tconst resolvedPath = resolve(htmlFilePath);\n\n\t\tif (!existsSync(resolvedPath)) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Read the HTML file\n\t\tconst htmlContent = readFileSync(resolvedPath, 'utf-8');\n\n\t\t// Extract both head and body content for patching\n\t\t// We need head to update CSS links when CSS changes\n\t\tconst headMatch = htmlContent.match(/<head[^>]*>([\\s\\S]*?)<\\/head>/i);\n\t\tconst bodyMatch = htmlContent.match(/<body[^>]*>([\\s\\S]*)<\\/body>/i);\n\n\t\tif (bodyMatch && bodyMatch[1]) {\n\t\t\tconst bodyContent = bodyMatch[1].trim();\n\t\t\tconst headContent =\n\t\t\t\theadMatch && headMatch[1] ? headMatch[1].trim() : null;\n\n\t\t\t// Return object with both head and body for comprehensive updates\n\t\t\treturn {\n\t\t\t\tbody: bodyContent,\n\t\t\t\thead: headContent\n\t\t\t};\n\t\t}\n\n\t\t// Fallback: return full HTML if body extraction fails\n\n\t\treturn htmlContent;\n\t} catch {\n\t\treturn null;\n\t}\n};\n",
|
|
9
|
+
"const ESCAPE_LOOKUP: Record<string, string> = {\n\t'\\u2028': '\\\\u2028',\n\t'\\u2029': '\\\\u2029',\n\t'&': '\\\\u0026',\n\t'<': '\\\\u003C',\n\t'>': '\\\\u003E'\n};\n\nconst ESCAPE_REGEX = /[&><\\u2028\\u2029]/g;\n\nexport const escapeScriptContent = (content: string) =>\n\tcontent.replace(ESCAPE_REGEX, (char) => {\n\t\tconst escaped = ESCAPE_LOOKUP[char];\n\n\t\treturn escaped !== undefined ? escaped : char;\n\t});\n",
|
|
10
|
+
"import type { Component } from 'svelte';\nimport { render } from 'svelte/server';\nimport { DEFAULT_CHUNK_SIZE } from '../constants';\nimport { escapeScriptContent } from '../utils/escapeScriptContent';\n\nexport type RenderStreamOptions = {\n\tbootstrapScriptContent?: string;\n\tbootstrapScripts?: string[];\n\tbootstrapModules?: string[];\n\tnonce?: string;\n\tonError?: (error: unknown) => void;\n\tprogressiveChunkSize?: number;\n\tsignal?: AbortSignal;\n\theadContent?: string;\n\tbodyContent?: string;\n};\n\nexport const renderToReadableStream = async <\n\tProps extends Record<string, unknown> = Record<string, never>\n>(\n\tcomponent: Component<Props>,\n\tprops?: Props,\n\t{\n\t\tbootstrapScriptContent,\n\t\tbootstrapScripts = [],\n\t\tbootstrapModules = [],\n\t\tnonce,\n\t\tonError = console.error,\n\t\tprogressiveChunkSize = DEFAULT_CHUNK_SIZE,\n\t\tsignal,\n\t\theadContent,\n\t\tbodyContent\n\t}: RenderStreamOptions = {}\n) => {\n\ttry {\n\t\tconst { head, body } =\n\t\t\ttypeof props === 'undefined'\n\t\t\t\t? // @ts-expect-error Svelte's render function can't determine which overload to choose when the component is generic\n\t\t\t\t\trender(component)\n\t\t\t\t: render(component, { props });\n\t\tconst nonceAttr = nonce ? ` nonce=\"${nonce}\"` : '';\n\t\tconst scripts =\n\t\t\t(bootstrapScriptContent\n\t\t\t\t? `<script${nonceAttr}>${escapeScriptContent(bootstrapScriptContent)}</script>`\n\t\t\t\t: '') +\n\t\t\tbootstrapScripts\n\t\t\t\t.map((src) => `<script${nonceAttr} src=\"${src}\"></script>`)\n\t\t\t\t.join('') +\n\t\t\tbootstrapModules\n\t\t\t\t.map(\n\t\t\t\t\t(src) =>\n\t\t\t\t\t\t`<script${nonceAttr} type=\"module\" src=\"${src}\"></script>`\n\t\t\t\t)\n\t\t\t\t.join('');\n\t\tconst encoder = new TextEncoder();\n\t\t// Warning: this encodes the entire document into memory in one buffer\n\t\tconst full = encoder.encode(\n\t\t\t`<!DOCTYPE html><html lang=\"en\"><head>${head}${headContent ?? ''}</head><body>${body}${scripts}${bodyContent ?? ''}</body></html>`\n\t\t);\n\n\t\tlet offset = 0;\n\n\t\treturn new ReadableStream<Uint8Array>({\n\t\t\ttype: 'bytes',\n\t\t\tcancel(reason) {\n\t\t\t\tonError?.(reason);\n\t\t\t},\n\t\t\tpull(controller) {\n\t\t\t\tif (signal?.aborted) {\n\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (offset >= full.length) {\n\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst end = Math.min(\n\t\t\t\t\toffset + progressiveChunkSize,\n\t\t\t\t\tfull.length\n\t\t\t\t);\n\t\t\t\tcontroller.enqueue(full.subarray(offset, end));\n\t\t\t\toffset = end;\n\t\t\t}\n\t\t});\n\t} catch (error) {\n\t\tonError?.(error);\n\t\tthrow error;\n\t}\n};\n",
|
|
11
|
+
"import { file } from 'bun';\nimport { ComponentType as ReactComponent, createElement } from 'react';\nimport { renderToReadableStream as renderReactToReadableStream } from 'react-dom/server';\nimport { Component as SvelteComponent } from 'svelte';\nimport { Component as VueComponent, createSSRApp, h } from 'vue';\nimport { renderToWebStream as renderVueToWebStream } from 'vue/server-renderer';\nimport { renderToReadableStream as renderSvelteToReadableStream } from '../svelte/renderToReadableStream';\nimport { PropsArgs } from '../../types/build';\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: Props]\n) => {\n\tconst [maybeProps] = props;\n\tconst element =\n\t\tmaybeProps !== undefined\n\t\t\t? createElement(PageComponent, maybeProps)\n\t\t\t: createElement(PageComponent);\n\n\tconst stream = await renderReactToReadableStream(element, {\n\t\tbootstrapModules: [index],\n\t\tbootstrapScriptContent: maybeProps\n\t\t\t? `window.__INITIAL_PROPS__=${JSON.stringify(maybeProps)}`\n\t\t\t: undefined\n\t});\n\n\treturn new Response(stream, {\n\t\theaders: { 'Content-Type': 'text/html' }\n\t});\n};\n\n// Declare overloads matching Svelte's own component API to preserve correct type inference\ntype HandleSveltePageRequest = {\n\t(\n\t\tPageComponent: SvelteComponent<Record<string, never>>,\n\t\tpagePath: string,\n\t\tindexPath: string\n\t): Promise<Response>;\n\t<P extends Record<string, unknown>>(\n\t\tPageComponent: SvelteComponent<P>,\n\t\tpagePath: string,\n\t\tindexPath: string,\n\t\tprops: P\n\t): Promise<Response>;\n};\n\nexport const handleSveltePageRequest: HandleSveltePageRequest = async <\n\tP extends Record<string, unknown>\n>(\n\t_PageComponent: SvelteComponent<P>,\n\tpagePath: string,\n\tindexPath: string,\n\tprops?: P\n) => {\n\tconst { default: ImportedPageComponent } = await import(pagePath);\n\n\tconst stream = await renderSvelteToReadableStream(\n\t\tImportedPageComponent,\n\t\tprops,\n\t\t{\n\t\t\tbootstrapModules: indexPath ? [indexPath] : [],\n\t\t\tbootstrapScriptContent: `window.__INITIAL_PROPS__=${JSON.stringify(\n\t\t\t\tprops\n\t\t\t)}`\n\t\t}\n\t);\n\n\treturn new Response(stream, {\n\t\theaders: { 'Content-Type': 'text/html' }\n\t});\n};\n\nexport const handleVuePageRequest = async <\n\tProps extends Record<string, unknown> = Record<never, never>\n>(\n\t_PageComponent: VueComponent<Props>,\n\tpagePath: string,\n\tindexPath: string,\n\theadTag: `<head>${string}</head>` = '<head></head>',\n\t...props: keyof Props extends never ? [] : [props: Props]\n) => {\n\tconst [maybeProps] = props;\n\n\tconst { default: ImportedPageComponent } = await import(pagePath);\n\n\tconst app = createSSRApp({\n\t\trender: () => h(ImportedPageComponent, maybeProps ?? null)\n\t});\n\n\tconst bodyStream = renderVueToWebStream(app);\n\n\tconst head = `<!DOCTYPE html><html>${headTag}<body><div id=\"root\">`;\n\tconst tail = `</div><script>window.__INITIAL_PROPS__=${JSON.stringify(\n\t\tmaybeProps ?? {}\n\t)}</script><script type=\"module\" src=\"${indexPath}\"></script></body></html>`;\n\n\tconst stream = new ReadableStream({\n\t\tstart(controller) {\n\t\t\tcontroller.enqueue(head);\n\t\t\tconst reader = bodyStream.getReader();\n\t\t\tconst pumpLoop = () => {\n\t\t\t\treader\n\t\t\t\t\t.read()\n\t\t\t\t\t.then(({ done, value }) =>\n\t\t\t\t\t\tdone\n\t\t\t\t\t\t\t? (controller.enqueue(tail), controller.close())\n\t\t\t\t\t\t\t: (controller.enqueue(value), pumpLoop())\n\t\t\t\t\t)\n\t\t\t\t\t.catch((err) => controller.error(err));\n\t\t\t};\n\t\t\tpumpLoop();\n\t\t}\n\t});\n\n\treturn new Response(stream, {\n\t\theaders: { 'Content-Type': 'text/html' }\n\t});\n};\n\nexport const handleHTMLPageRequest = (pagePath: string) => file(pagePath);\n\nexport const handleHTMXPageRequest = (pagePath: string) => file(pagePath);\n\nexport const handlePageRequest = <Component>(\n\tPageComponent: Component,\n\t...props: PropsArgs<Component>\n) => {\n\tconsole.log('handlePageRequest coming soon.', PageComponent, props);\n};\n",
|
|
12
|
+
"type GenerateHeadElementProps = {\n\tcssPath?: string;\n\ttitle?: string;\n\ticon?: string;\n\tdescription?: string;\n\tfont?: string;\n};\n\nexport const generateHeadElement = ({\n\tcssPath,\n\ttitle = 'AbsoluteJS',\n\tdescription = 'A page created using AbsoluteJS',\n\tfont,\n\ticon = '/assets/ico/favicon.ico'\n}: GenerateHeadElementProps = {}) =>\n\t`<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>${title}</title>\n <meta name=\"description\" content=\"${description}\">\n <link rel=\"icon\" href=\"${icon}\" type=\"image/x-icon\">\n ${\n\t\tfont\n\t\t\t? `<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link href=\"https://fonts.googleapis.com/css2?family=${font}:wght@100..900&display=swap\" rel=\"stylesheet\">`\n\t\t\t: ''\n }\n ${cssPath ? `<link rel=\"stylesheet\" href=\"${cssPath}\" type=\"text/css\">` : ''}\n</head>` as const;\n",
|
|
13
|
+
"/* Simple Vue HMR Implementation\n Lightweight approach: use rebuilt files → re-render → send HTML patch */\n\nimport { basename, join, resolve } from 'node:path';\nimport { toPascal } from '../utils/stringModifiers';\n\n/* Simple Vue HMR handler for server-side\n When a Vue file changes:\n 1. The rebuild already compiled Vue and updated the manifest\n 2. Derive manifest keys dynamically from the source file path\n 3. Use manifest paths to import the rebuilt server component\n 4. Re-render the page\n 5. Return the new HTML for patching */\nexport const handleVueUpdate = async (\n\tvueFilePath: string,\n\tmanifest: Record<string, string>,\n\tbuildDir?: string\n) => {\n\ttry {\n\t\tconst resolvedPath = resolve(vueFilePath);\n\n\t\t// Derive manifest keys dynamically from the source file path\n\t\tconst fileName = basename(resolvedPath);\n\t\tconst baseName = fileName.replace(/\\.vue$/, '');\n\t\tconst pascalName = toPascal(baseName);\n\n\t\t// Vue manifest keys follow the pattern:\n\t\t// - {PascalName}: server bundle path\n\t\t// - {PascalName}Index: client bundle path\n\t\t// - {PascalName}CSS: CSS path (optional)\n\t\tconst componentKey = pascalName;\n\t\tconst indexKey = `${pascalName}Index`;\n\t\tconst cssKey = `${pascalName}CSS`;\n\n\t\t// Get server path from manifest (URL path like /vue/compiled/pages/VueExample.abc123.js)\n\t\tconst serverPath = manifest[componentKey];\n\n\t\tif (!serverPath) {\n\t\t\tconsole.warn(\n\t\t\t\t'[Vue HMR] Server path not found in manifest for:',\n\t\t\t\tcomponentKey\n\t\t\t);\n\t\t\tconsole.warn(\n\t\t\t\t'[Vue HMR] Available manifest keys:',\n\t\t\t\tObject.keys(manifest).join(', ')\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\n\t\t// Manifest stores absolute paths for Vue server bundles (artifact.path)\n\t\t// Use directly if absolute; otherwise join with buildDir for relative paths\n\t\tconst absoluteServerPath =\n\t\t\tresolve(serverPath) === serverPath ||\n\t\t\tserverPath.startsWith('/') ||\n\t\t\t/^[A-Za-z]:[\\\\/]/.test(serverPath)\n\t\t\t\t? serverPath\n\t\t\t\t: join(\n\t\t\t\t\t\tbuildDir || process.cwd(),\n\t\t\t\t\t\tserverPath.replace(/^\\//, '')\n\t\t\t\t\t);\n\n\t\tconst cacheBuster = `?t=${Date.now()}`;\n\t\tconst serverModule = await import(\n\t\t\t`${absoluteServerPath}${cacheBuster}`\n\t\t);\n\n\t\tif (!serverModule || !serverModule.default) {\n\t\t\tconsole.warn(\n\t\t\t\t'[Vue HMR] Module has no default export:',\n\t\t\t\tabsoluteServerPath\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\n\t\tconst indexPath = manifest[indexKey];\n\n\t\tif (!indexPath) {\n\t\t\tconsole.warn(\n\t\t\t\t'[Vue HMR] Index path not found in manifest for:',\n\t\t\t\tindexKey\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\n\t\tconst { handleVuePageRequest } = await import('../core/pageHandlers');\n\t\tconst { generateHeadElement } = await import(\n\t\t\t'../utils/generateHeadElement'\n\t\t);\n\n\t\tconst response = await handleVuePageRequest(\n\t\t\tserverModule.default,\n\t\t\tserverPath,\n\t\t\tindexPath,\n\t\t\tgenerateHeadElement({\n\t\t\t\tcssPath: manifest[cssKey] || '',\n\t\t\t\ttitle: 'AbsoluteJS + Vue'\n\t\t\t}),\n\t\t\t{ initialCount: 0 }\n\t\t);\n\n\t\tconst html = await response.text();\n\n\t\t// Extract just the body content for patching (not the full HTML document)\n\t\t// Vue renders to <div id=\"root\"> inside <body>\n\t\tconst bodyMatch = html.match(/<body[^>]*>([\\s\\S]*)<\\/body>/i);\n\t\tif (bodyMatch && bodyMatch[1]) {\n\t\t\tconst bodyContent = bodyMatch[1].trim();\n\n\t\t\treturn bodyContent;\n\t\t}\n\n\t\treturn html;\n\t} catch (err) {\n\t\tconsole.error('[Vue HMR] Error in handleVueUpdate:', err);\n\t\treturn null;\n\t}\n};\n",
|
|
14
|
+
"/* Simple Svelte HMR Implementation\n Lightweight approach: use rebuilt files → re-render → send HTML patch */\n\nimport { basename, join, resolve } from 'node:path';\nimport { toPascal } from '../utils/stringModifiers';\n\n/* Simple Svelte HMR handler for server-side\n When a Svelte file changes:\n 1. The rebuild already compiled Svelte and updated the manifest\n 2. Derive manifest keys dynamically from the source file path\n 3. Use manifest paths to import the rebuilt server component\n 4. Re-render the page\n 5. Return the new HTML for patching */\nexport const handleSvelteUpdate = async (\n\tsvelteFilePath: string,\n\tmanifest: Record<string, string>,\n\tbuildDir?: string\n) => {\n\ttry {\n\t\tconst resolvedPath = resolve(svelteFilePath);\n\n\t\t// Derive manifest keys dynamically from the source file path\n\t\tconst fileName = basename(resolvedPath);\n\t\tconst baseName = fileName.replace(/\\.svelte$/, '');\n\t\tconst pascalName = toPascal(baseName);\n\n\t\t// Svelte manifest keys follow the pattern:\n\t\t// - {PascalName}: server bundle path\n\t\t// - {PascalName}Index: client bundle path\n\t\t// - {PascalName}CSS: CSS path (optional)\n\t\tconst componentKey = pascalName;\n\t\tconst indexKey = `${pascalName}Index`;\n\t\tconst cssKey = `${pascalName}CSS`;\n\n\t\t// Get server path from manifest (URL path like /svelte/compiled/pages/SvelteExample.abc123.js)\n\t\tconst serverPath = manifest[componentKey];\n\n\t\tif (!serverPath) {\n\t\t\tconsole.warn(\n\t\t\t\t'[Svelte HMR] Server path not found in manifest for:',\n\t\t\t\tcomponentKey\n\t\t\t);\n\t\t\tconsole.warn(\n\t\t\t\t'[Svelte HMR] Available manifest keys:',\n\t\t\t\tObject.keys(manifest).join(', ')\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\n\t\t// Manifest stores absolute paths for Svelte server bundles (artifact.path)\n\t\t// Use directly if absolute; otherwise join with buildDir for relative paths\n\t\tconst absoluteServerPath =\n\t\t\tresolve(serverPath) === serverPath ||\n\t\t\tserverPath.startsWith('/') ||\n\t\t\t/^[A-Za-z]:[\\\\/]/.test(serverPath)\n\t\t\t\t? serverPath\n\t\t\t\t: join(\n\t\t\t\t\t\tbuildDir || process.cwd(),\n\t\t\t\t\t\tserverPath.replace(/^\\//, '')\n\t\t\t\t\t);\n\n\t\tconst cacheBuster = `?t=${Date.now()}`;\n\t\tconst serverModule = await import(\n\t\t\t`${absoluteServerPath}${cacheBuster}`\n\t\t);\n\n\t\tif (!serverModule || !serverModule.default) {\n\t\t\tconsole.warn(\n\t\t\t\t'[Svelte HMR] Module has no default export:',\n\t\t\t\tabsoluteServerPath\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\n\t\tconst indexPath = manifest[indexKey];\n\n\t\tif (!indexPath) {\n\t\t\tconsole.warn(\n\t\t\t\t'[Svelte HMR] Index path not found in manifest for:',\n\t\t\t\tindexKey\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\n\t\tconst { handleSveltePageRequest } = await import(\n\t\t\t'../core/pageHandlers'\n\t\t);\n\n\t\tconst response = await handleSveltePageRequest(\n\t\t\tserverModule.default,\n\t\t\tserverPath,\n\t\t\tindexPath,\n\t\t\t{\n\t\t\t\tcssPath: manifest[cssKey] || '',\n\t\t\t\tinitialCount: 0\n\t\t\t}\n\t\t);\n\n\t\tconst html = await response.text();\n\n\t\t// Extract just the body content for patching (not the full HTML document)\n\t\t// Svelte renders to <body> directly\n\t\tconst bodyMatch = html.match(/<body[^>]*>([\\s\\S]*)<\\/body>/i);\n\t\tif (bodyMatch && bodyMatch[1]) {\n\t\t\tconst bodyContent = bodyMatch[1].trim();\n\n\t\t\treturn bodyContent;\n\t\t}\n\n\t\treturn html;\n\t} catch (err) {\n\t\tconsole.error('[Svelte HMR] Error in handleSvelteUpdate:', err);\n\t\treturn null;\n\t}\n};\n",
|
|
15
|
+
"/* Simple HTMX HMR Implementation\n Lightweight approach: read HTMX HTML file → send HTML patch */\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\n/* Simple HTMX HMR handler for server-side\n When an HTMX file changes:\n 1. Read the HTML file\n 2. Extract body content (or return full HTML)\n 3. Return the HTML for patching */\nexport const handleHTMXUpdate = async (htmxFilePath: string) => {\n\ttry {\n\t\tconst resolvedPath = resolve(htmxFilePath);\n\n\t\tif (!existsSync(resolvedPath)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst htmlContent = readFileSync(resolvedPath, 'utf-8');\n\n\t\t// Extract both head and body content for patching\n\t\t// We need head to update CSS links when CSS changes\n\t\tconst headMatch = htmlContent.match(/<head[^>]*>([\\s\\S]*?)<\\/head>/i);\n\t\tconst bodyMatch = htmlContent.match(/<body[^>]*>([\\s\\S]*)<\\/body>/i);\n\n\t\tif (bodyMatch && bodyMatch[1]) {\n\t\t\tconst bodyContent = bodyMatch[1].trim();\n\t\t\tconst headContent =\n\t\t\t\theadMatch && headMatch[1] ? headMatch[1].trim() : null;\n\n\t\t\t// Return object with both head and body for comprehensive updates\n\t\t\treturn {\n\t\t\t\tbody: bodyContent,\n\t\t\t\thead: headContent\n\t\t\t};\n\t\t}\n\n\t\treturn htmlContent;\n\t} catch {\n\t\treturn null;\n\t}\n};\n",
|
|
16
|
+
"/* Client-side HMR type definitions */\n\nexport interface ErrorOverlayOptions {\n\tcolumn?: number;\n\tfile?: string;\n\tframework?: string;\n\tline?: number;\n\tlineText?: string;\n\tmessage?: string;\n}\n\nexport interface DOMStateEntry {\n\tchecked?: boolean;\n\tid?: string;\n\tidx: number;\n\tname?: string;\n\topen?: boolean;\n\tselEnd?: number;\n\tselStart?: number;\n\tselected?: boolean;\n\ttag: string;\n\ttext?: string;\n\ttype?: string;\n\tvalue?: string;\n\tvalues?: string[];\n}\n\nexport interface DOMStateSnapshot {\n\tactiveKey: string | null;\n\titems: DOMStateEntry[];\n}\n\nexport interface SavedComponentState {\n\tcount: number;\n}\n\nexport interface SavedState {\n\tcomponentState: SavedComponentState;\n\tforms: Record<string, Record<string, boolean | string>>;\n\tscroll: { window: { x: number; y: number } };\n}\n\nexport interface ScriptInfo {\n\tsrc: string;\n\ttype: string;\n}\n\nexport interface CSSUpdateResult {\n\tlinksToActivate: HTMLLinkElement[];\n\tlinksToRemove: HTMLLinkElement[];\n\tlinksToWaitFor: Promise<void>[];\n}\n\n/* Shared mutable state for the HMR client */\nexport const hmrState = {\n\tisConnected: false,\n\tisFirstHMRUpdate: true,\n\tisHMRUpdating: false,\n\tpingInterval: null as ReturnType<typeof setInterval> | null,\n\treconnectTimeout: null as ReturnType<typeof setTimeout> | null\n};\n\n/* Window interface extensions for HMR globals */\ndeclare global {\n\tinterface Window {\n\t\t$RefreshReg$?: (type: unknown, id: string) => void;\n\t\t$RefreshRuntime$?: {\n\t\t\tcreateSignatureFunctionForTransform: () => (\n\t\t\t\ttype: unknown\n\t\t\t) => unknown;\n\t\t\tinjectIntoGlobalHook: (win: Window) => void;\n\t\t\tperformReactRefresh: () => void;\n\t\t\tregister: (type: unknown, id: string) => void;\n\t\t};\n\t\t$RefreshSig$?: () => (type: unknown) => unknown;\n\t\t__HMR_DOM_STATE__?: { count?: number; [key: string]: unknown };\n\t\t__HMR_FRAMEWORK__?: string;\n\t\t__HMR_MANIFEST__?: Record<string, string>;\n\t\t__HMR_MODULE_UPDATES__?: Array<unknown>;\n\t\t__HMR_MODULE_VERSIONS__?: Record<string, number>;\n\t\t__HMR_PRESERVED_STATE__?: Record<string, unknown>;\n\t\t__HMR_SERVER_VERSIONS__?: Record<string, number>;\n\t\t__HMR_UPDATE_COUNT__?: number;\n\t\t__HMR_WS__?: WebSocket;\n\t\t__INITIAL_PROPS__?: Record<string, unknown>;\n\t\t__REACT_ROOT__?: { render: (element: unknown) => void };\n\t\t__SVELTE_COMPONENT__?: Record<string, unknown>;\n\t\t__SVELTE_UNMOUNT__?: () => void;\n\t\t__VUE_APP__?:\n\t\t\t| ({\n\t\t\t\t\tunmount: () => void;\n\t\t\t\t\t_instance?: {\n\t\t\t\t\t\tsetupState?: Record<string, unknown>;\n\t\t\t\t\t\tsubTree?: {\n\t\t\t\t\t\t\tchildren?: unknown[];\n\t\t\t\t\t\t\tcomponent?: {\n\t\t\t\t\t\t\t\tsetupState?: Record<string, unknown>;\n\t\t\t\t\t\t\t\tsubTree?: unknown;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t } & Record<string, unknown>)\n\t\t\t| null;\n\t\t__VUE_HMR_COMPONENTS__?: Record<string, unknown>;\n\t\thtmx?: { process: (element: HTMLElement | Document) => void };\n\t}\n}\n\nexport {};\n",
|
|
17
|
+
"/* HMR message types for client-server communication */\n\n/* Client-to-server message types */\nexport type PingMessage = {\n\ttype: 'ping';\n};\n\nexport type ReadyMessage = {\n\ttype: 'ready';\n\tframework?: string | null;\n};\n\nexport type RequestRebuildMessage = {\n\ttype: 'request-rebuild';\n};\n\nexport type HydrationErrorMessage = {\n\ttype: 'hydration-error';\n\tdata?: {\n\t\tcomponentName?: string;\n\t\tcomponentPath?: string;\n\t\terror?: string;\n\t};\n};\n\nexport type HMRClientMessage =\n\t| PingMessage\n\t| ReadyMessage\n\t| RequestRebuildMessage\n\t| HydrationErrorMessage;\n\n/* Server-to-client message types */\nexport type ManifestMessage = {\n\ttype: 'manifest';\n\tdata: {\n\t\tmanifest: Record<string, string>;\n\t\tserverVersions?: Record<string, number>;\n\t};\n\ttimestamp: number;\n};\n\nexport type RebuildStartMessage = {\n\ttype: 'rebuild-start';\n\tdata: {\n\t\taffectedFrameworks: string[];\n\t};\n\ttimestamp: number;\n};\n\nexport type RebuildCompleteMessage = {\n\ttype: 'rebuild-complete';\n\tdata: {\n\t\taffectedFrameworks: string[];\n\t\tmanifest: Record<string, string>;\n\t};\n\ttimestamp: number;\n};\n\nexport type FrameworkUpdateMessage = {\n\ttype: 'framework-update';\n\tdata: {\n\t\tframework: string;\n\t\tmanifest?: Record<string, string>;\n\t};\n\ttimestamp: number;\n};\n\nexport type ModuleUpdateMessage = {\n\ttype: 'module-update';\n\tdata: {\n\t\tframework: string;\n\t\tmanifest?: Record<string, string>;\n\t\tmodules?: Array<{\n\t\t\tsourceFile: string;\n\t\t\tmoduleKeys: string[];\n\t\t\tmodulePaths: Record<string, string>;\n\t\t\tcomponentType?: 'client' | 'server';\n\t\t\tversion?: number;\n\t\t}>;\n\t\tmoduleVersions?: Record<string, number>;\n\t\tserverVersions?: Record<string, number>;\n\t};\n\ttimestamp: number;\n};\n\nexport type ReactUpdateMessage = {\n\ttype: 'react-update';\n\tdata: {\n\t\tsourceFile: string;\n\t\thtml?: string;\n\t\tmanifest?: Record<string, string>;\n\t};\n\ttimestamp: number;\n};\n\nexport type HTMLUpdateMessage = {\n\ttype: 'html-update';\n\tdata: {\n\t\tsourceFile: string;\n\t\thtml?: string;\n\t};\n\ttimestamp: number;\n};\n\nexport type HTMXUpdateMessage = {\n\ttype: 'htmx-update';\n\tdata: {\n\t\tsourceFile: string;\n\t\thtml?: string;\n\t};\n\ttimestamp: number;\n};\n\nexport type SvelteUpdateMessage = {\n\ttype: 'svelte-update';\n\tdata: {\n\t\tsourceFile: string;\n\t\thtml?: string;\n\t\tmanifest?: Record<string, string>;\n\t\tcssUrl?: string;\n\t\tcssBaseName?: string;\n\t\tupdateType?: string;\n\t};\n\ttimestamp: number;\n};\n\nexport type VueUpdateMessage = {\n\ttype: 'vue-update';\n\tdata: {\n\t\tsourceFile: string;\n\t\thtml?: string;\n\t\tmanifest?: Record<string, string>;\n\t\t// Native Vue HMR fields\n\t\thmrId?: string;\n\t\tchangeType?: 'style-only' | 'template-only' | 'script' | 'full';\n\t\tcomponentPath?: string;\n\t\tcssUrl?: string;\n\t\tcssBaseName?: string;\n\t\tupdateType?: 'css-only' | 'full';\n\t};\n\ttimestamp: number;\n};\n\nexport type RebuildErrorMessage = {\n\ttype: 'rebuild-error';\n\tdata: {\n\t\taffectedFrameworks: string[];\n\t\terror: string;\n\t};\n\ttimestamp: number;\n};\n\nexport type PongMessage = {\n\ttype: 'pong';\n\ttimestamp: number;\n};\n\nexport type ConnectedMessage = {\n\ttype: 'connected';\n\tmessage?: string;\n\ttimestamp: number;\n};\n\nexport type HMRServerMessage =\n\t| ManifestMessage\n\t| RebuildStartMessage\n\t| RebuildCompleteMessage\n\t| FrameworkUpdateMessage\n\t| ModuleUpdateMessage\n\t| ReactUpdateMessage\n\t| HTMLUpdateMessage\n\t| HTMXUpdateMessage\n\t| SvelteUpdateMessage\n\t| VueUpdateMessage\n\t| RebuildErrorMessage\n\t| PongMessage\n\t| ConnectedMessage;\n\n/* Type guard for client messages */\nexport const isValidHMRClientMessage = (\n\tdata: unknown\n): data is HMRClientMessage => {\n\tif (!data || typeof data !== 'object') {\n\t\treturn false;\n\t}\n\n\tconst message = data as Record<string, unknown>;\n\n\tif (!('type' in message) || typeof message.type !== 'string') {\n\t\treturn false;\n\t}\n\n\tswitch (message.type) {\n\t\tcase 'ping':\n\t\t\treturn true;\n\t\tcase 'ready':\n\t\t\treturn true;\n\t\tcase 'request-rebuild':\n\t\t\treturn true;\n\t\tcase 'hydration-error':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n};\n",
|
|
18
|
+
"/* WebSocket types for HMR */\n\n/* WebSocket ready state constant */\nexport const WS_READY_STATE_OPEN = 1;\n\n/* Minimal WebSocket interface for HMR clients\n Compatible with Elysia's WebSocket implementation */\nexport interface HMRWebSocket {\n\tsend(data: string): void;\n\tclose(code?: number, reason?: string): void;\n\treadyState: number;\n}\n",
|
|
19
|
+
"export * from '../types';\nexport * from './constants';\nexport * from './core';\nexport * from './plugins/index';\nexport * from './utils/index';\n",
|
|
20
|
+
"import {\n\tcopyFileSync,\n\tcpSync,\n\tmkdirSync,\n\treadFileSync,\n\twriteFileSync\n} from 'node:fs';\nimport { rm } from 'node:fs/promises';\nimport { basename, join, resolve, dirname, relative } from 'node:path';\nimport { cwd, env, exit } from 'node:process';\nimport { $, build as bunBuild, BuildArtifact, Glob } from 'bun';\nimport { compileSvelte } from '../build/compileSvelte';\nimport { compileVue } from '../build/compileVue';\nimport { generateManifest } from '../build/generateManifest';\nimport { generateReactIndexFiles } from '../build/generateReactIndexes';\nimport { createHTMLScriptHMRPlugin } from '../build/htmlScriptHMRPlugin';\nimport { outputLogs } from '../build/outputLogs';\nimport { scanEntryPoints } from '../build/scanEntryPoints';\nimport { updateAssetPaths } from '../build/updateAssetPaths';\nimport { buildHMRClient } from '../dev/buildHMRClient';\nimport type { BuildConfig } from '../../types/build';\nimport { cleanup } from '../utils/cleanup';\nimport { commonAncestor } from '../utils/commonAncestor';\nimport { getDurationString } from '../utils/getDurationString';\nimport { logger } from '../utils/logger';\nimport { normalizePath } from '../utils/normalizePath';\nimport { toPascal } from '../utils/stringModifiers';\nimport { validateSafePath } from '../utils/validateSafePath';\n\nconst isDev = env.NODE_ENV !== 'production';\n\nconst vueFeatureFlags: Record<string, string> = {\n\t__VUE_OPTIONS_API__: 'true',\n\t__VUE_PROD_DEVTOOLS__: isDev ? 'true' : 'false',\n\t__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: isDev ? 'true' : 'false'\n};\n\nexport const build = async ({\n\tbuildDirectory = 'build',\n\tassetsDirectory,\n\tpublicDirectory,\n\treactDirectory,\n\thtmlDirectory,\n\thtmxDirectory,\n\tangularDirectory,\n\tsvelteDirectory,\n\tvueDirectory,\n\ttailwind,\n\toptions,\n\tincrementalFiles\n}: BuildConfig) => {\n\tconst buildStart = performance.now();\n\tconst projectRoot = cwd();\n\tconst isIncremental = incrementalFiles && incrementalFiles.length > 0;\n\n\t// Normalize incrementalFiles for consistent cross-platform path checking\n\tconst normalizedIncrementalFiles = incrementalFiles?.map(normalizePath);\n\n\tif (isIncremental) {\n\t\tconsole.log(\n\t\t\t`⚡ Incremental build: ${incrementalFiles.length} file(s) to rebuild`\n\t\t);\n\t}\n\n\tconst throwOnError = options?.throwOnError === true;\n\tconst buildPath = validateSafePath(buildDirectory, projectRoot);\n\tconst assetsPath =\n\t\tassetsDirectory && validateSafePath(assetsDirectory, projectRoot);\n\tconst reactDir =\n\t\treactDirectory && validateSafePath(reactDirectory, projectRoot);\n\tconst htmlDir =\n\t\thtmlDirectory && validateSafePath(htmlDirectory, projectRoot);\n\tconst htmxDir =\n\t\thtmxDirectory && validateSafePath(htmxDirectory, projectRoot);\n\tconst svelteDir =\n\t\tsvelteDirectory && validateSafePath(svelteDirectory, projectRoot);\n\tconst vueDir = vueDirectory && validateSafePath(vueDirectory, projectRoot);\n\tconst angularDir =\n\t\tangularDirectory && validateSafePath(angularDirectory, projectRoot);\n\n\tconst reactIndexesPath = reactDir && join(reactDir, 'indexes');\n\tconst reactPagesPath = reactDir && join(reactDir, 'pages');\n\tconst htmlPagesPath = htmlDir && join(htmlDir, 'pages');\n\tconst htmlScriptsPath = htmlDir && join(htmlDir, 'scripts');\n\tconst sveltePagesPath = svelteDir && join(svelteDir, 'pages');\n\tconst vuePagesPath = vueDir && join(vueDir, 'pages');\n\tconst htmxPagesPath = htmxDir && join(htmxDir, 'pages');\n\tconst angularPagesPath = angularDir && join(angularDir, 'pages');\n\n\tconst frontends = [\n\t\treactDir,\n\t\thtmlDir,\n\t\thtmxDir,\n\t\tsvelteDir,\n\t\tvueDir,\n\t\tangularDir\n\t].filter(Boolean);\n\tconst isSingle = frontends.length === 1;\n\n\t// Shared root for all client builds so output paths preserve framework directory names.\n\t// generateManifest detects frameworks by checking for \"react\"/\"svelte\"/\"vue\" path segments.\n\tconst clientRoots: string[] = [\n\t\treactDir,\n\t\tsvelteDir,\n\t\thtmlDir,\n\t\tvueDir,\n\t\tangularDir\n\t].filter((dir): dir is string => Boolean(dir));\n\tconst clientRoot = isSingle\n\t\t? (clientRoots[0] ?? projectRoot)\n\t\t: commonAncestor(clientRoots, projectRoot);\n\n\tlet serverOutDir;\n\tif (svelteDir) serverOutDir = join(buildPath, basename(svelteDir), 'pages');\n\telse if (vueDir) serverOutDir = join(buildPath, basename(vueDir), 'pages');\n\n\tlet serverRoot;\n\tif (sveltePagesPath) serverRoot = sveltePagesPath;\n\telse if (vuePagesPath) serverRoot = vuePagesPath;\n\n\tconst publicPath =\n\t\tpublicDirectory && validateSafePath(publicDirectory, projectRoot);\n\n\t// Only delete build directory for full builds, not incremental\n\tif (!isIncremental) {\n\t\tawait rm(buildPath, { force: true, recursive: true });\n\t}\n\tmkdirSync(buildPath, { recursive: true });\n\n\tif (publicPath)\n\t\tcpSync(publicPath, buildPath, { force: true, recursive: true });\n\n\t// Helper to find matching entry points for incremental files\n\t// The dependency graph already includes all dependent files in incrementalFiles\n\tconst filterToIncrementalEntries = (\n\t\tentryPoints: string[],\n\t\tmapToSource: (entry: string) => string | null\n\t) => {\n\t\tif (!isIncremental || !incrementalFiles) return entryPoints;\n\n\t\tconst normalizedIncremental = new Set(\n\t\t\tincrementalFiles.map((f) => resolve(f))\n\t\t);\n\t\tconst matchingEntries: string[] = [];\n\n\t\tfor (const entry of entryPoints) {\n\t\t\tconst sourceFile = mapToSource(entry);\n\t\t\tif (sourceFile && normalizedIncremental.has(resolve(sourceFile))) {\n\t\t\t\tmatchingEntries.push(entry);\n\t\t\t}\n\t\t}\n\n\t\treturn matchingEntries;\n\t};\n\n\t// For incremental React builds, only generate indexes for changed files\n\t// NOTE: We always regenerate index files to ensure they have the latest hydration error handling logic\n\tif (reactIndexesPath && reactPagesPath) {\n\t\t// Always regenerate React index files to ensure latest error handling is included\n\t\t// This is safe because index files are small and generation is fast\n\t\tawait generateReactIndexFiles(reactPagesPath, reactIndexesPath, isDev);\n\t}\n\n\t// Copy assets on full builds or if assets changed\n\tif (\n\t\tassetsPath &&\n\t\t(!isIncremental ||\n\t\t\tnormalizedIncrementalFiles?.some((f) => f.includes('/assets/')))\n\t) {\n\t\tcpSync(assetsPath, join(buildPath, 'assets'), {\n\t\t\tforce: true,\n\t\t\trecursive: true\n\t\t});\n\t}\n\n\t// Tailwind only on full builds or if CSS changed\n\tif (\n\t\ttailwind &&\n\t\t(!isIncremental ||\n\t\t\tnormalizedIncrementalFiles?.some((f) => f.endsWith('.css')))\n\t) {\n\t\tawait $`bunx @tailwindcss/cli -i ${tailwind.input} -o ${join(buildPath, tailwind.output)}`;\n\t}\n\n\tconst allReactEntries = reactIndexesPath\n\t\t? await scanEntryPoints(reactIndexesPath, '*.tsx')\n\t\t: [];\n\tconst allHtmlEntries = htmlScriptsPath\n\t\t? await scanEntryPoints(htmlScriptsPath, '*.{js,ts}')\n\t\t: [];\n\tconst allSvelteEntries = sveltePagesPath\n\t\t? await scanEntryPoints(sveltePagesPath, '*.svelte')\n\t\t: [];\n\tconst allVueEntries = vuePagesPath\n\t\t? await scanEntryPoints(vuePagesPath, '*.vue')\n\t\t: [];\n\tconst allAngularEntries = angularPagesPath\n\t\t? await scanEntryPoints(angularPagesPath, '*.ts')\n\t\t: [];\n\n\tconst allHtmlCssEntries = htmlDir\n\t\t? await scanEntryPoints(join(htmlDir, 'styles'), '*.css')\n\t\t: [];\n\tconst allHtmxCssEntries = htmxDir\n\t\t? await scanEntryPoints(join(htmxDir, 'styles'), '*.css')\n\t\t: [];\n\tconst allReactCssEntries = reactDir\n\t\t? await scanEntryPoints(join(reactDir, 'styles'), '*.css')\n\t\t: [];\n\tconst allSvelteCssEntries = svelteDir\n\t\t? await scanEntryPoints(join(svelteDir, 'styles'), '*.css')\n\t\t: [];\n\n\t// When HTML/HTMX pages change, we must include their CSS and scripts in the build\n\t// so the manifest has those entries for updateAssetPaths. Otherwise incremental\n\t// builds drop them and updateAssetPaths fails with \"no manifest entry\".\n\tconst shouldIncludeHtmlAssets =\n\t\t!isIncremental ||\n\t\tnormalizedIncrementalFiles?.some(\n\t\t\t(f) =>\n\t\t\t\tf.includes('/html/') &&\n\t\t\t\t(f.endsWith('.html') || f.endsWith('.css'))\n\t\t);\n\tconst shouldIncludeHtmxAssets =\n\t\t!isIncremental ||\n\t\tnormalizedIncrementalFiles?.some(\n\t\t\t(f) =>\n\t\t\t\tf.includes('/htmx/') &&\n\t\t\t\t(f.endsWith('.html') || f.endsWith('.css'))\n\t\t);\n\n\t// Filter entries for incremental builds\n\t// For React: map index entries back to their source pages\n\tconst reactEntries =\n\t\tisIncremental && reactIndexesPath && reactPagesPath\n\t\t\t? filterToIncrementalEntries(allReactEntries, (entry) => {\n\t\t\t\t\t// Map index entry (indexes/ReactExample.tsx) to source page (pages/ReactExample.tsx)\n\t\t\t\t\tif (entry.startsWith(resolve(reactIndexesPath))) {\n\t\t\t\t\t\tconst pageName = basename(entry, '.tsx');\n\t\t\t\t\t\treturn join(reactPagesPath, `${pageName}.tsx`);\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t})\n\t\t\t: allReactEntries;\n\n\tconst htmlEntries =\n\t\tisIncremental && htmlScriptsPath && !shouldIncludeHtmlAssets\n\t\t\t? filterToIncrementalEntries(allHtmlEntries, (entry) => entry)\n\t\t\t: allHtmlEntries;\n\n\t// For Svelte/Vue/Angular: entries are the page files themselves\n\tconst svelteEntries = isIncremental\n\t\t? filterToIncrementalEntries(allSvelteEntries, (entry) => entry)\n\t\t: allSvelteEntries;\n\n\tconst vueEntries = isIncremental\n\t\t? filterToIncrementalEntries(allVueEntries, (entry) => entry)\n\t\t: allVueEntries;\n\n\tconst angularEntries = isIncremental\n\t\t? filterToIncrementalEntries(allAngularEntries, (entry) => entry)\n\t\t: allAngularEntries;\n\n\t// CSS entries - entries are the CSS files themselves\n\tconst htmlCssEntries =\n\t\tisIncremental && !shouldIncludeHtmlAssets\n\t\t\t? filterToIncrementalEntries(allHtmlCssEntries, (entry) => entry)\n\t\t\t: allHtmlCssEntries;\n\tconst htmxCssEntries =\n\t\tisIncremental && !shouldIncludeHtmxAssets\n\t\t\t? filterToIncrementalEntries(allHtmxCssEntries, (entry) => entry)\n\t\t\t: allHtmxCssEntries;\n\tconst reactCssEntries = isIncremental\n\t\t? filterToIncrementalEntries(allReactCssEntries, (entry) => entry)\n\t\t: allReactCssEntries;\n\tconst svelteCssEntries = isIncremental\n\t\t? filterToIncrementalEntries(allSvelteCssEntries, (entry) => entry)\n\t\t: allSvelteCssEntries;\n\n\tconst { svelteServerPaths, svelteIndexPaths, svelteClientPaths } = svelteDir\n\t\t? await compileSvelte(svelteEntries, svelteDir, new Map(), isDev)\n\t\t: {\n\t\t\t\tsvelteClientPaths: [],\n\t\t\t\tsvelteIndexPaths: [],\n\t\t\t\tsvelteServerPaths: []\n\t\t\t};\n\n\tconst { vueServerPaths, vueIndexPaths, vueClientPaths, vueCssPaths } =\n\t\tvueDir\n\t\t\t? await compileVue(vueEntries, vueDir, isDev)\n\t\t\t: {\n\t\t\t\t\tvueClientPaths: [],\n\t\t\t\t\tvueCssPaths: [],\n\t\t\t\t\tvueIndexPaths: [],\n\t\t\t\t\tvueServerPaths: []\n\t\t\t\t};\n\n\tconst serverEntryPoints = [...svelteServerPaths, ...vueServerPaths];\n\tconst reactClientEntryPoints = [...reactEntries];\n\tconst nonReactClientEntryPoints = [\n\t\t...svelteIndexPaths,\n\t\t...svelteClientPaths,\n\t\t...htmlEntries,\n\t\t...vueIndexPaths,\n\t\t...vueClientPaths\n\t];\n\tconst cssEntryPoints = [\n\t\t...vueCssPaths,\n\t\t...reactCssEntries,\n\t\t...svelteCssEntries,\n\t\t...htmlCssEntries,\n\t\t...htmxCssEntries\n\t];\n\n\tif (\n\t\tserverEntryPoints.length === 0 &&\n\t\treactClientEntryPoints.length === 0 &&\n\t\tnonReactClientEntryPoints.length === 0 &&\n\t\thtmxDir === undefined &&\n\t\thtmlDir === undefined\n\t) {\n\t\tlogger.warn('No entry points found, manifest will be empty');\n\n\t\treturn {};\n\t}\n\n\tlet serverLogs: (BuildMessage | ResolveMessage)[] = [];\n\tlet serverOutputs: BuildArtifact[] = [];\n\n\tif (serverEntryPoints.length > 0) {\n\t\tconst result = await bunBuild({\n\t\t\tentrypoints: serverEntryPoints,\n\t\t\tformat: 'esm',\n\t\t\tnaming: `[dir]/[name].[hash].[ext]`,\n\t\t\toutdir: serverOutDir,\n\t\t\troot: serverRoot,\n\t\t\ttarget: 'bun',\n\t\t\tthrow: false\n\t\t});\n\t\tserverLogs = result.logs;\n\t\tserverOutputs = result.outputs;\n\t\tif (!result.success && result.logs.length > 0) {\n\t\t\tconst errLog =\n\t\t\t\tresult.logs.find((l) => l.level === 'error') ?? result.logs[0]!;\n\t\t\tconst err = new Error(\n\t\t\t\ttypeof errLog.message === 'string'\n\t\t\t\t\t? errLog.message\n\t\t\t\t\t: String(errLog.message)\n\t\t\t);\n\t\t\t(err as Error & { logs?: unknown }).logs = result.logs;\n\t\t\tlogger.error('Server build failed', err);\n\t\t\tif (throwOnError) throw err;\n\t\t\texit(1);\n\t\t}\n\t}\n\n\tlet reactClientLogs: (BuildMessage | ResolveMessage)[] = [];\n\tlet reactClientOutputs: BuildArtifact[] = [];\n\n\t// In dev, add the _refresh entry to force React into a shared chunk\n\t// so HMR can re-import component entries without duplicating React.\n\t// Only add when React entries exist (i.e. React files actually changed\n\t// or this is a full build) to avoid producing stale React outputs\n\t// during non-React incremental rebuilds.\n\tif (isDev && reactIndexesPath && reactClientEntryPoints.length > 0) {\n\t\tconst refreshEntry = join(reactIndexesPath, '_refresh.tsx');\n\t\tif (!reactClientEntryPoints.includes(refreshEntry)) {\n\t\t\treactClientEntryPoints.push(refreshEntry);\n\t\t}\n\t}\n\n\tif (reactClientEntryPoints.length > 0) {\n\t\tconst reactBuildConfig = {\n\t\t\tentrypoints: reactClientEntryPoints,\n\t\t\tformat: 'esm' as const,\n\t\t\tminify: !isDev,\n\t\t\tnaming: `[dir]/[name].[hash].[ext]`,\n\t\t\toutdir: buildPath,\n\t\t\troot: clientRoot,\n\t\t\tsplitting: true,\n\t\t\ttarget: 'browser' as const,\n\t\t\tthrow: false\n\t\t};\n\n\t\t// Bun's reactFastRefresh option injects $RefreshReg$/$RefreshSig$\n\t\t// calls for React Fast Refresh support in dev\n\t\tif (isDev) {\n\t\t\t(reactBuildConfig as Record<string, unknown>).reactFastRefresh =\n\t\t\t\ttrue;\n\t\t}\n\n\t\tconst reactClientResult = await bunBuild(reactBuildConfig);\n\t\treactClientLogs = reactClientResult.logs;\n\t\treactClientOutputs = reactClientResult.outputs;\n\t\tif (!reactClientResult.success && reactClientResult.logs.length > 0) {\n\t\t\tconst errLog =\n\t\t\t\treactClientResult.logs.find((l) => l.level === 'error') ??\n\t\t\t\treactClientResult.logs[0]!;\n\t\t\tconst err = new Error(\n\t\t\t\ttypeof errLog.message === 'string'\n\t\t\t\t\t? errLog.message\n\t\t\t\t\t: String(errLog.message)\n\t\t\t);\n\t\t\t(err as Error & { logs?: unknown }).logs = reactClientResult.logs;\n\t\t\tlogger.error('React client build failed', err);\n\t\t\tif (throwOnError) throw err;\n\t\t\texit(1);\n\t\t}\n\t}\n\n\tlet nonReactClientLogs: (BuildMessage | ResolveMessage)[] = [];\n\tlet nonReactClientOutputs: BuildArtifact[] = [];\n\n\tif (nonReactClientEntryPoints.length > 0) {\n\t\tconst htmlScriptPlugin = isDev\n\t\t\t? createHTMLScriptHMRPlugin(htmlDir, htmxDir)\n\t\t\t: undefined;\n\n\t\tconst nonReactClientResult = await bunBuild({\n\t\t\tdefine: vueDirectory ? vueFeatureFlags : undefined,\n\t\t\tentrypoints: nonReactClientEntryPoints,\n\t\t\tformat: 'esm',\n\t\t\tminify: !isDev,\n\t\t\tnaming: `[dir]/[name].[hash].[ext]`,\n\t\t\toutdir: buildPath,\n\t\t\tplugins: htmlScriptPlugin ? [htmlScriptPlugin] : undefined,\n\t\t\troot: clientRoot,\n\t\t\ttarget: 'browser',\n\t\t\tsplitting: !isDev,\n\t\t\tthrow: false\n\t\t});\n\t\tnonReactClientLogs = nonReactClientResult.logs;\n\t\tnonReactClientOutputs = nonReactClientResult.outputs;\n\t\tif (\n\t\t\t!nonReactClientResult.success &&\n\t\t\tnonReactClientResult.logs.length > 0\n\t\t) {\n\t\t\tconst errLog =\n\t\t\t\tnonReactClientResult.logs.find((l) => l.level === 'error') ??\n\t\t\t\tnonReactClientResult.logs[0]!;\n\t\t\tconst err = new Error(\n\t\t\t\ttypeof errLog.message === 'string'\n\t\t\t\t\t? errLog.message\n\t\t\t\t\t: String(errLog.message)\n\t\t\t);\n\t\t\t(err as Error & { logs?: unknown }).logs =\n\t\t\t\tnonReactClientResult.logs;\n\t\t\tlogger.error('Non-React client build failed', err);\n\t\t\tif (throwOnError) throw err;\n\t\t\texit(1);\n\t\t}\n\t}\n\n\tlet cssLogs: (BuildMessage | ResolveMessage)[] = [];\n\tlet cssOutputs: BuildArtifact[] = [];\n\n\tif (cssEntryPoints.length > 0) {\n\t\tconst cssResult = await bunBuild({\n\t\t\tentrypoints: cssEntryPoints,\n\t\t\tnaming: `[name].[hash].[ext]`,\n\t\t\toutdir: join(\n\t\t\t\tbuildPath,\n\t\t\t\tassetsPath ? basename(assetsPath) : 'assets',\n\t\t\t\t'css'\n\t\t\t),\n\t\t\ttarget: 'browser',\n\t\t\tthrow: false\n\t\t});\n\t\tcssLogs = cssResult.logs;\n\t\tcssOutputs = cssResult.outputs;\n\t\tif (!cssResult.success && cssResult.logs.length > 0) {\n\t\t\tconst errLog =\n\t\t\t\tcssResult.logs.find((l) => l.level === 'error') ??\n\t\t\t\tcssResult.logs[0]!;\n\t\t\tconst err = new Error(\n\t\t\t\ttypeof errLog.message === 'string'\n\t\t\t\t\t? errLog.message\n\t\t\t\t\t: String(errLog.message)\n\t\t\t);\n\t\t\t(err as Error & { logs?: unknown }).logs = cssResult.logs;\n\t\t\tlogger.error('CSS build failed', err);\n\t\t\tif (throwOnError) throw err;\n\t\t\texit(1);\n\t\t}\n\t}\n\n\tconst allLogs = [\n\t\t...serverLogs,\n\t\t...reactClientLogs,\n\t\t...nonReactClientLogs,\n\t\t...cssLogs\n\t];\n\toutputLogs(allLogs);\n\n\tconst manifest = generateManifest(\n\t\t[\n\t\t\t...serverOutputs,\n\t\t\t...reactClientOutputs,\n\t\t\t...nonReactClientOutputs,\n\t\t\t...cssOutputs\n\t\t],\n\t\tbuildPath\n\t);\n\n\t// Svelte/Vue server pages need absolute file paths for SSR import(),\n\t// not web-relative paths. Overwrite with absolute paths like HTML/HTMX.\n\tfor (const artifact of serverOutputs) {\n\t\tconst fileWithHash = basename(artifact.path);\n\t\tconst [baseName] = fileWithHash.split(`.${artifact.hash}.`);\n\t\tif (!baseName) continue;\n\t\tmanifest[toPascal(baseName)] = artifact.path;\n\t}\n\n\t// For HTML/HTMX, copy pages on full builds or if HTML/HTMX files changed\n\t// Also update asset paths if CSS changed (to update CSS links in HTML files)\n\tconst htmlOrHtmlCssChanged =\n\t\t!isIncremental ||\n\t\tnormalizedIncrementalFiles?.some(\n\t\t\t(f) =>\n\t\t\t\tf.includes('/html/') &&\n\t\t\t\t(f.endsWith('.html') || f.endsWith('.css'))\n\t\t);\n\tconst htmxOrHtmxCssChanged =\n\t\t!isIncremental ||\n\t\tnormalizedIncrementalFiles?.some(\n\t\t\t(f) =>\n\t\t\t\tf.includes('/htmx/') &&\n\t\t\t\t(f.endsWith('.html') || f.endsWith('.css'))\n\t\t);\n\n\tconst shouldCopyHtml = htmlOrHtmlCssChanged;\n\tconst shouldCopyHtmx = htmxOrHtmxCssChanged;\n\n\t// Update asset paths if CSS changed (even if HTML files didn't change)\n\tconst shouldUpdateHtmlAssetPaths =\n\t\t!isIncremental ||\n\t\tnormalizedIncrementalFiles?.some(\n\t\t\t(f) =>\n\t\t\t\tf.includes('/html/') &&\n\t\t\t\t(f.endsWith('.html') || f.endsWith('.css'))\n\t\t);\n\tconst shouldUpdateHtmxAssetPaths =\n\t\t!isIncremental ||\n\t\tnormalizedIncrementalFiles?.some(\n\t\t\t(f) =>\n\t\t\t\tf.includes('/htmx/') &&\n\t\t\t\t(f.endsWith('.html') || f.endsWith('.css'))\n\t\t);\n\n\t// Build HMR client bundle once for HTML/HTMX injection during dev builds\n\tconst hmrClientBundle =\n\t\tisDev && (htmlDir || htmxDir) ? await buildHMRClient() : null;\n\n\tconst injectHMRIntoHTMLFile = (filePath: string, framework: string) => {\n\t\tif (!hmrClientBundle) return;\n\t\tlet html = readFileSync(filePath, 'utf-8');\n\t\tif (html.includes('data-hmr-client')) return;\n\t\tconst tag =\n\t\t\t`<script>window.__HMR_FRAMEWORK__=\"${framework}\";</script>` +\n\t\t\t`<script data-hmr-client>${hmrClientBundle}</script>`;\n\t\tconst bodyClose = /<\\/body\\s*>/i.exec(html);\n\t\thtml = bodyClose\n\t\t\t? html.slice(0, bodyClose.index) + tag + html.slice(bodyClose.index)\n\t\t\t: html + tag;\n\t\twriteFileSync(filePath, html);\n\t};\n\n\tif (htmlDir && htmlPagesPath) {\n\t\tconst outputHtmlPages = isSingle\n\t\t\t? join(buildPath, 'pages')\n\t\t\t: join(buildPath, basename(htmlDir), 'pages');\n\n\t\tif (shouldCopyHtml) {\n\t\t\tmkdirSync(outputHtmlPages, { recursive: true });\n\t\t\tcpSync(htmlPagesPath, outputHtmlPages, {\n\t\t\t\tforce: true,\n\t\t\t\trecursive: true\n\t\t\t});\n\t\t}\n\n\t\t// Update asset paths if HTML files changed OR CSS changed\n\t\tif (shouldUpdateHtmlAssetPaths) {\n\t\t\tawait updateAssetPaths(manifest, outputHtmlPages);\n\t\t}\n\n\t\t// Add HTML pages to manifest (absolute paths for Bun.file())\n\t\tconst htmlPageFiles = await scanEntryPoints(outputHtmlPages, '*.html');\n\t\tfor (const htmlFile of htmlPageFiles) {\n\t\t\tif (isDev) injectHMRIntoHTMLFile(htmlFile, 'html');\n\t\t\tconst fileName = basename(htmlFile, '.html');\n\t\t\tmanifest[fileName] = htmlFile;\n\t\t}\n\t}\n\n\tif (htmxDir && htmxPagesPath) {\n\t\tconst outputHtmxPages = isSingle\n\t\t\t? join(buildPath, 'pages')\n\t\t\t: join(buildPath, basename(htmxDir), 'pages');\n\n\t\tif (shouldCopyHtmx) {\n\t\t\tmkdirSync(outputHtmxPages, { recursive: true });\n\t\t\tcpSync(htmxPagesPath, outputHtmxPages, {\n\t\t\t\tforce: true,\n\t\t\t\trecursive: true\n\t\t\t});\n\t\t}\n\n\t\tif (shouldCopyHtmx) {\n\t\t\tconst htmxDestDir = isSingle\n\t\t\t\t? buildPath\n\t\t\t\t: join(buildPath, basename(htmxDir));\n\n\t\t\tmkdirSync(htmxDestDir, { recursive: true });\n\n\t\t\tconst glob = new Glob('htmx*.min.js');\n\t\t\tfor (const relPath of glob.scanSync({ cwd: htmxDir })) {\n\t\t\t\tconst src = join(htmxDir, relPath);\n\t\t\t\tconst dest = join(htmxDestDir, 'htmx.min.js');\n\t\t\t\tcopyFileSync(src, dest);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Update asset paths if HTMX files changed OR CSS changed\n\t\tif (shouldUpdateHtmxAssetPaths) {\n\t\t\tawait updateAssetPaths(manifest, outputHtmxPages);\n\t\t}\n\n\t\t// Add HTMX pages to manifest (absolute paths for Bun.file())\n\t\tconst htmxPageFiles = await scanEntryPoints(outputHtmxPages, '*.html');\n\t\tfor (const htmxFile of htmxPageFiles) {\n\t\t\tif (isDev) injectHMRIntoHTMLFile(htmxFile, 'htmx');\n\t\t\tconst fileName = basename(htmxFile, '.html');\n\t\t\tmanifest[fileName] = htmxFile;\n\t\t}\n\t}\n\n\tif (!options?.preserveIntermediateFiles)\n\t\tawait cleanup({\n\t\t\treactIndexesPath,\n\t\t\tsvelteDir,\n\t\t\tvueDir\n\t\t});\n\n\tconsole.log(\n\t\t`Build completed in ${getDurationString(performance.now() - buildStart)}`\n\t);\n\n\treturn manifest;\n};\n",
|
|
21
|
+
"import { mkdir, stat } from 'node:fs/promises';\nimport {\n\tdirname,\n\tjoin,\n\tbasename,\n\textname,\n\tresolve,\n\trelative,\n\tsep\n} from 'node:path';\nimport { env } from 'node:process';\nimport { write, file, Transpiler } from 'bun';\nimport { compile, compileModule, preprocess } from 'svelte/compiler';\n\nconst hmrClientPath = resolve(\n\timport.meta.dir,\n\t'../dev/client/hmrClient.ts'\n).replace(/\\\\/g, '/');\n\ntype Built = { ssr: string; client: string };\ntype Cache = Map<string, Built>;\n\nconst transpiler = new Transpiler({ loader: 'ts', target: 'browser' });\n\nconst exists = async (path: string) => {\n\ttry {\n\t\tawait stat(path);\n\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nconst resolveSvelte = async (spec: string, from: string) => {\n\tconst basePath = resolve(dirname(from), spec);\n\tconst explicit = /\\.(svelte|svelte\\.(?:ts|js))$/.test(basePath);\n\n\tif (!explicit) {\n\t\tconst extensions = ['.svelte', '.svelte.ts', '.svelte.js'];\n\t\tconst paths = extensions.map((ext) => `${basePath}${ext}`);\n\t\tconst checks = await Promise.all(paths.map(exists));\n\t\tconst match = paths.find((_, index) => checks[index]);\n\n\t\treturn match ?? null;\n\t}\n\n\tif (await exists(basePath)) return basePath;\n\tif (!basePath.endsWith('.svelte')) return null;\n\n\tconst tsPath = `${basePath}.ts`;\n\tif (await exists(tsPath)) return tsPath;\n\n\tconst jsPath = `${basePath}.js`;\n\tif (await exists(jsPath)) return jsPath;\n\n\treturn null;\n};\n\nexport const compileSvelte = async (\n\tentryPoints: string[],\n\tsvelteRoot: string,\n\tcache: Cache = new Map(),\n\tisDev = false\n) => {\n\tconst compiledRoot = join(svelteRoot, 'compiled');\n\tconst clientDir = join(compiledRoot, 'client');\n\tconst indexDir = join(compiledRoot, 'indexes');\n\tconst pagesDir = join(compiledRoot, 'pages');\n\n\tawait Promise.all(\n\t\t[clientDir, indexDir, pagesDir].map((dir) =>\n\t\t\tmkdir(dir, { recursive: true })\n\t\t)\n\t);\n\n\tconst dev = env.NODE_ENV !== 'production';\n\n\tconst build = async (src: string) => {\n\t\tconst memoized = cache.get(src);\n\t\tif (memoized) return memoized;\n\n\t\tconst raw = await file(src).text();\n\t\tconst isModule =\n\t\t\tsrc.endsWith('.svelte.ts') || src.endsWith('.svelte.js');\n\t\tconst preprocessed = isModule ? raw : (await preprocess(raw, {})).code;\n\t\tconst transpiled =\n\t\t\tsrc.endsWith('.ts') || src.endsWith('.svelte.ts')\n\t\t\t\t? transpiler.transformSync(preprocessed)\n\t\t\t\t: preprocessed;\n\n\t\tconst relDir = dirname(relative(svelteRoot, src)).replace(/\\\\/g, '/');\n\t\tconst baseName = basename(src).replace(/\\.svelte(\\.(ts|js))?$/, '');\n\n\t\tconst importPaths = Array.from(\n\t\t\ttranspiled.matchAll(/from\\s+['\"]([^'\"]+)['\"]/g)\n\t\t)\n\t\t\t.map((match) => match[1])\n\t\t\t.filter((path): path is string => path !== undefined);\n\n\t\tconst resolvedImports = await Promise.all(\n\t\t\timportPaths.map((importPath) => resolveSvelte(importPath, src))\n\t\t);\n\t\tconst childSources = resolvedImports.filter(\n\t\t\t(path): path is string => path !== null\n\t\t);\n\t\tawait Promise.all(childSources.map((child) => build(child)));\n\n\t\tconst generate = (mode: 'server' | 'client') =>\n\t\t\t(isModule\n\t\t\t\t? compileModule(transpiled, { dev, filename: src }).js.code\n\t\t\t\t: compile(transpiled, {\n\t\t\t\t\t\tcss: 'injected',\n\t\t\t\t\t\tdev,\n\t\t\t\t\t\tfilename: src,\n\t\t\t\t\t\tgenerate: mode\n\t\t\t\t\t}).js.code\n\t\t\t).replace(/\\.svelte(?:\\.(?:ts|js))?(['\"])/g, '.js$1');\n\n\t\tconst ssrPath = join(pagesDir, relDir, `${baseName}.js`);\n\t\tconst clientPath = join(clientDir, relDir, `${baseName}.js`);\n\n\t\tawait Promise.all([\n\t\t\tmkdir(dirname(ssrPath), { recursive: true }),\n\t\t\tmkdir(dirname(clientPath), { recursive: true })\n\t\t]);\n\n\t\tif (isModule) {\n\t\t\tconst bundle = generate('client');\n\t\t\tawait Promise.all([\n\t\t\t\twrite(ssrPath, bundle),\n\t\t\t\twrite(clientPath, bundle)\n\t\t\t]);\n\t\t} else {\n\t\t\tconst serverBundle = generate('server');\n\t\t\tconst clientBundle = generate('client');\n\t\t\tawait Promise.all([\n\t\t\t\twrite(ssrPath, serverBundle),\n\t\t\t\twrite(clientPath, clientBundle)\n\t\t\t]);\n\t\t}\n\n\t\tconst built: Built = { client: clientPath, ssr: ssrPath };\n\t\tcache.set(src, built);\n\n\t\treturn built;\n\t};\n\n\tconst roots = await Promise.all(entryPoints.map(build));\n\n\tawait Promise.all(\n\t\troots.map(async ({ client }) => {\n\t\t\tconst relClientDir = dirname(relative(clientDir, client));\n\t\t\tconst name = basename(client, extname(client));\n\t\t\tconst indexPath = join(indexDir, relClientDir, `${name}.js`);\n\t\t\tconst importRaw = relative(dirname(indexPath), client)\n\t\t\t\t.split(sep)\n\t\t\t\t.join('/');\n\t\t\tconst importPath =\n\t\t\t\timportRaw.startsWith('.') || importRaw.startsWith('/')\n\t\t\t\t\t? importRaw\n\t\t\t\t\t: `./${importRaw}`;\n\t\t\tconst hmrImports = isDev\n\t\t\t\t? `window.__HMR_FRAMEWORK__ = \"svelte\";\\nimport \"${hmrClientPath}\";\\n`\n\t\t\t\t: '';\n\t\t\tconst bootstrap = `${hmrImports}import Component from \"${importPath}\";\nimport { hydrate, mount, unmount } from \"svelte\";\n\nvar initialProps = (typeof window !== \"undefined\" && window.__INITIAL_PROPS__) ? window.__INITIAL_PROPS__ : {};\nvar isHMR = typeof window !== \"undefined\" && window.__SVELTE_COMPONENT__ !== undefined;\nvar component;\n\nif (isHMR) {\n var headLinks = document.querySelectorAll('link[rel=\"stylesheet\"]');\n var preservedLinks = [];\n headLinks.forEach(function(link) {\n var clone = link.cloneNode(true);\n clone.setAttribute(\"data-hmr-preserve\", \"true\");\n document.head.appendChild(clone);\n preservedLinks.push(clone);\n });\n if (typeof window.__SVELTE_UNMOUNT__ === \"function\") {\n try { window.__SVELTE_UNMOUNT__(); } catch (err) { console.warn(\"[HMR] unmount error:\", err); }\n }\n var preservedState = window.__HMR_PRESERVED_STATE__;\n if (!preservedState) {\n try {\n var stored = sessionStorage.getItem(\"__SVELTE_HMR_STATE__\");\n if (stored) preservedState = JSON.parse(stored);\n } catch (err) { /* ignore */ }\n }\n var mergedProps = preservedState ? Object.assign({}, initialProps, preservedState) : initialProps;\n component = mount(Component, { target: document.body, props: mergedProps });\n requestAnimationFrame(function() {\n preservedLinks.forEach(function(link) { link.remove(); });\n });\n window.__HMR_PRESERVED_STATE__ = undefined;\n} else {\n component = hydrate(Component, { target: document.body, props: initialProps });\n}\n\nif (typeof window !== \"undefined\") {\n window.__SVELTE_COMPONENT__ = component;\n window.__SVELTE_UNMOUNT__ = function() { unmount(component); };\n}`;\n\n\t\t\tawait mkdir(dirname(indexPath), { recursive: true });\n\n\t\t\treturn write(indexPath, bootstrap);\n\t\t})\n\t);\n\n\treturn {\n\t\t// Index paths (entry points for hydration)\n\t\tsvelteIndexPaths: roots.map(({ client }) => {\n\t\t\tconst rel = dirname(relative(clientDir, client));\n\t\t\treturn join(indexDir, rel, basename(client));\n\t\t}),\n\t\t// Actual client component paths (for official HMR module imports)\n\t\tsvelteClientPaths: roots.map(({ client }) => client),\n\t\tsvelteServerPaths: roots.map(({ ssr }) => ssr)\n\t};\n};\n",
|
|
22
|
+
"import { extname } from 'node:path';\nimport { BuildArtifact } from 'bun';\nimport { UNFOUND_INDEX } from '../constants';\nimport { normalizePath } from '../utils/normalizePath';\nimport { toPascal } from '../utils/stringModifiers';\n\nexport const generateManifest = (outputs: BuildArtifact[], buildPath: string) =>\n\toutputs.reduce<Record<string, string>>((manifest, artifact) => {\n\t\t// Normalize both paths for consistent comparison across platforms\n\t\tconst normalizedArtifactPath = normalizePath(artifact.path);\n\t\tconst normalizedBuildPath = normalizePath(buildPath);\n\n\t\tlet relative = normalizedArtifactPath.startsWith(normalizedBuildPath)\n\t\t\t? normalizedArtifactPath.slice(normalizedBuildPath.length)\n\t\t\t: normalizedArtifactPath;\n\t\trelative = relative.replace(/^\\/+/, '');\n\n\t\tconst segments = relative.split('/');\n\t\tconst fileWithHash = segments.pop();\n\t\tif (!fileWithHash) return manifest;\n\n\t\tconst [baseName] = fileWithHash.split(`.${artifact.hash}.`);\n\t\tif (!baseName) return manifest;\n\n\t\tconst pascalName = toPascal(baseName);\n\t\tconst ext = extname(fileWithHash);\n\n\t\tif (ext === '.css') {\n\t\t\tmanifest[`${pascalName}CSS`] = `/${relative}`;\n\n\t\t\treturn manifest;\n\t\t}\n\n\t\tconst idx = segments.findIndex(\n\t\t\t(seg) => seg === 'indexes' || seg === 'pages' || seg === 'client'\n\t\t);\n\t\tconst folder = idx > UNFOUND_INDEX ? segments[idx] : segments[0];\n\n\t\t// Detect framework from path segments\n\t\tconst isReact = segments.some((seg) => seg === 'react');\n\t\tconst isVue = segments.some((seg) => seg === 'vue');\n\t\tconst isSvelte = segments.some((seg) => seg === 'svelte');\n\n\t\t// Check if this is a client component (for official HMR)\n\t\tconst isClientComponent = segments.includes('client');\n\n\t\tif (folder === 'indexes') {\n\t\t\tmanifest[`${pascalName}Index`] = `/${relative}`;\n\t\t} else if (isClientComponent) {\n\t\t\t// Client components get {Name}Client key for HMR module imports\n\t\t\tmanifest[`${pascalName}Client`] = `/${relative}`;\n\t\t} else if (folder === 'pages') {\n\t\t\t// Only add \"Page\" suffix for React pages\n\t\t\t// Vue and Svelte pages use their base PascalCase name\n\t\t\tif (isReact) {\n\t\t\t\tmanifest[`${pascalName}Page`] = `/${relative}`;\n\t\t\t} else if (isVue || isSvelte) {\n\t\t\t\t// Vue/Svelte pages use base name without suffix\n\t\t\t\tmanifest[pascalName] = `/${relative}`;\n\t\t\t} else {\n\t\t\t\t// Default behavior for other frameworks\n\t\t\t\tmanifest[`${pascalName}Page`] = `/${relative}`;\n\t\t\t}\n\t\t} else {\n\t\t\tmanifest[pascalName] = `/${relative}`;\n\t\t}\n\n\t\treturn manifest;\n\t}, {});\n",
|
|
23
|
+
"/**\n * Normalize file paths to use forward slashes for cross-platform compatibility.\n * Windows uses backslashes, but this codebase standardizes on forward slashes.\n */\nexport const normalizePath = (path: string) => path.replace(/\\\\/g, '/');\n\n/**\n * Normalize all paths in an array.\n */\nexport const normalizePaths = (paths: string[]) => paths.map(normalizePath);\n",
|
|
24
|
+
"import { mkdir, rm, writeFile } from 'fs/promises';\nimport { basename, join, resolve } from 'path';\nimport { Glob } from 'bun';\n\nconst hmrClientPath = resolve(\n\timport.meta.dir,\n\t'../dev/client/hmrClient.ts'\n).replace(/\\\\/g, '/');\n\nconst refreshSetupPath = resolve(\n\timport.meta.dir,\n\t'../dev/client/reactRefreshSetup.ts'\n).replace(/\\\\/g, '/');\n\nexport const generateReactIndexFiles = async (\n\treactPagesDirectory: string,\n\treactIndexesDirectory: string,\n\tisDev = false\n) => {\n\tawait rm(reactIndexesDirectory, { force: true, recursive: true });\n\tawait mkdir(reactIndexesDirectory);\n\n\tconst pagesGlob = new Glob('*.*');\n\tconst files: string[] = [];\n\tfor await (const file of pagesGlob.scan({ cwd: reactPagesDirectory })) {\n\t\tfiles.push(file);\n\t}\n\tconst promises = files.map(async (file) => {\n\t\tconst fileName = basename(file);\n\t\tconst [componentName] = fileName.split('.');\n\n\t\tconst hmrPreamble = isDev\n\t\t\t? [\n\t\t\t\t\t`window.__HMR_FRAMEWORK__ = \"react\";`,\n\t\t\t\t\t`window.__REACT_COMPONENT_KEY__ = \"${componentName}Index\";`,\n\t\t\t\t\t`import '${refreshSetupPath}';`,\n\t\t\t\t\t`import '${hmrClientPath}';\\n`\n\t\t\t\t]\n\t\t\t: [];\n\n\t\tconst content = [\n\t\t\t...hmrPreamble,\n\t\t\t`import { hydrateRoot, createRoot } from 'react-dom/client';`,\n\t\t\t`import { createElement } from 'react';`,\n\t\t\t`import type { ComponentType } from 'react'`,\n\t\t\t`import { ${componentName} } from '../pages/${componentName}';\\n`,\n\t\t\t`type PropsOf<C> = C extends ComponentType<infer P> ? P : never;\\n`,\n\t\t\t`declare global {`,\n\t\t\t`\\tinterface Window {`,\n\t\t\t`\\t\\t__INITIAL_PROPS__?: PropsOf<typeof ${componentName}>`,\n\t\t\t`\\t\\t__REACT_ROOT__?: ReturnType<typeof hydrateRoot | typeof createRoot>`,\n\t\t\t`\\t\\t__HMR_CLIENT_ONLY_MODE__?: boolean`,\n\t\t\t`\\t}`,\n\t\t\t`}\\n`,\n\t\t\t`// Hydration with error handling and fallback`,\n\t\t\t`const isDev = ${isDev};`,\n\t\t\t`const componentPath = '../pages/${componentName}';\\n`,\n\t\t\t`function isHydrationError(error) {`,\n\t\t\t`\\tif (!error) return false;`,\n\t\t\t`\\tconst errorMessage = error instanceof Error ? error.message : String(error);`,\n\t\t\t`\\tconst errorString = String(error);`,\n\t\t\t`\\tconst fullMessage = errorMessage + ' ' + errorString;`,\n\t\t\t`\\tconst hydrationKeywords = ['hydration', 'Hydration', 'mismatch', 'Mismatch', 'did not match', 'server rendered HTML', 'server HTML', 'client HTML', 'Hydration failed'];`,\n\t\t\t`\\tconst isHydration = hydrationKeywords.some(keyword => fullMessage.includes(keyword));`,\n\t\t\t`\\t`,\n\t\t\t`\\t// Ignore whitespace-only mismatches in <head> - these are harmless formatting differences`,\n\t\t\t`\\t// The error often shows: + <link...> vs - {\"\\\\n \"} which is just formatting`,\n\t\t\t`\\tif (isHydration) {`,\n\t\t\t`\\t\\t// Check if this is a head/link/stylesheet related mismatch`,\n\t\t\t`\\t\\tconst isHeadRelated = fullMessage.includes('<head') || fullMessage.includes('</head>') || fullMessage.includes('head>') || fullMessage.includes('<link') || fullMessage.includes('link>') || fullMessage.includes('stylesheet') || fullMessage.includes('fonts.googleapis') || fullMessage.includes('rel=\"stylesheet\"');`,\n\t\t\t`\\t\\t`,\n\t\t\t`\\t\\t// Check if the mismatch involves only whitespace/newlines`,\n\t\t\t`\\t\\t// Pattern: looks for {\"\\\\n\"} or {\"\\\\n \"} or similar whitespace-only content`,\n\t\t\t`\\t\\t// Also check for patterns like: - {\"\\\\n \"} or + <link...>`,\n\t\t\t`\\t\\tconst hasWhitespacePattern = /\\\\{\\\\s*[\"']\\\\\\\\n[^\"']*[\"']\\\\s*\\\\}/.test(fullMessage) || /\\\\{\\\\s*[\"'][\\\\\\\\n\\\\\\\\r\\\\\\\\s]+[\"']\\\\s*\\\\}/.test(fullMessage) || /-\\\\s*\\\\{\\\\s*[\"'][\\\\\\\\n\\\\\\\\r\\\\\\\\s]+[\"']\\\\s*\\\\}/.test(fullMessage);`,\n\t\t\t`\\t\\tconst isWhitespaceOnly = /^[\\\\s\\\\n\\\\r]*$/.test(errorString) || /^[\\\\s\\\\n\\\\r]*$/.test(errorMessage);`,\n\t\t\t`\\t\\tconst hasNewlinePattern = fullMessage.includes('\\\\\\\\n') || fullMessage.includes('\\\\\\\\r') || fullMessage.includes('\\\\n') || fullMessage.includes('\\\\r');`,\n\t\t\t`\\t\\t`,\n\t\t\t`\\t\\t// If it's head-related and involves whitespace/newlines, ignore it`,\n\t\t\t`\\t\\tif (isHeadRelated && (hasWhitespacePattern || isWhitespaceOnly || hasNewlinePattern)) {`,\n\t\t\t`\\t\\t\\treturn false; // Don't treat whitespace-only head mismatches as errors`,\n\t\t\t`\\t\\t}`,\n\t\t\t`\\t}`,\n\t\t\t`\\treturn isHydration;`,\n\t\t\t`}\\n`,\n\t\t\t`function logHydrationError(error, componentName) {`,\n\t\t\t`\\tif (!isDev) return;`,\n\t\t\t`\\tif (window.__HMR_WS__ && window.__HMR_WS__.readyState === WebSocket.OPEN) {`,\n\t\t\t`\\t\\ttry {`,\n\t\t\t`\\t\\t\\twindow.__HMR_WS__.send(JSON.stringify({`,\n\t\t\t`\\t\\t\\t\\ttype: 'hydration-error',`,\n\t\t\t`\\t\\t\\t\\tdata: {`,\n\t\t\t`\\t\\t\\t\\t\\tcomponentName: '${componentName}',`,\n\t\t\t`\\t\\t\\t\\t\\tcomponentPath: componentPath,`,\n\t\t\t`\\t\\t\\t\\t\\terror: error instanceof Error ? error.message : String(error),`,\n\t\t\t`\\t\\t\\t\\t\\ttimestamp: Date.now()`,\n\t\t\t`\\t\\t\\t\\t}`,\n\t\t\t`\\t\\t\\t}));`,\n\t\t\t`\\t\\t} catch (err) {}`,\n\t\t\t`\\t}`,\n\t\t\t`}\\n`,\n\t\t\t`// Track if we've already switched to client-only mode`,\n\t\t\t`let hasSwitchedToClientOnly = false;`,\n\t\t\t`let hydrationErrorDetected = false;\\n`,\n\t\t\t`function handleHydrationFallback(error) {`,\n\t\t\t`\\tif (hasSwitchedToClientOnly) return; // Already handled`,\n\t\t\t`\\thasSwitchedToClientOnly = true;`,\n\t\t\t`\\thydrationErrorDetected = true;\\n`,\n\t\t\t`\\tlogHydrationError(error, '${componentName}');\\n`,\n\t\t\t`\\t// Fallback: client-only render (no hydration)`,\n\t\t\t`\\ttry {`,\n\t\t\t`\\t\\t// Unmount existing root if it exists`,\n\t\t\t`\\t\\tif (window.__REACT_ROOT__ && typeof window.__REACT_ROOT__.unmount === 'function') {`,\n\t\t\t`\\t\\t\\ttry {`,\n\t\t\t`\\t\\t\\twindow.__REACT_ROOT__.unmount();`,\n\t\t\t`\\t\\t\\t} catch (e) {`,\n\t\t\t`\\t\\t\\t\\t// Ignore unmount errors`,\n\t\t\t`\\t\\t\\t}`,\n\t\t\t`\\t\\t}\\n`,\n\t\t\t`\\t\\t// Render into the same root container when falling back to client-only`,\n\t\t\t`\\t\\tconst root = createRoot(container);`,\n\t\t\t`\\t\\troot.render(createElement(${componentName}, mergedProps));`,\n\t\t\t`\\t\\twindow.__REACT_ROOT__ = root;`,\n\t\t\t`\\t\\twindow.__HMR_CLIENT_ONLY_MODE__ = true;`,\n\t\t\t`\\t} catch (fallbackError) {`,\n\t\t\t`\\t\\twindow.location.reload();`,\n\t\t\t`\\t}`,\n\t\t\t`}\\n`,\n\t\t\t`// HMR State Preservation: Check for preserved state and merge with initial props`,\n\t\t\t`// This allows state to be preserved across HMR updates without modifying component files`,\n\t\t\t`let preservedState = (typeof window !== 'undefined' && window.__HMR_PRESERVED_STATE__) ? window.__HMR_PRESERVED_STATE__ : {};\\n`,\n\t\t\t`// Also check sessionStorage for state that survived a page reload (for React HMR)`,\n\t\t\t`if (typeof window !== 'undefined' && typeof sessionStorage !== 'undefined') {`,\n\t\t\t`\\tconst hmrStateJson = sessionStorage.getItem('__REACT_HMR_STATE__');`,\n\t\t\t`\\tif (hmrStateJson) {`,\n\t\t\t`\\t\\ttry {`,\n\t\t\t`\\t\\t\\tconst hmrState = JSON.parse(hmrStateJson);`,\n\t\t\t`\\t\\t\\tpreservedState = { ...preservedState, ...hmrState };`,\n\t\t\t`\\t\\t\\tsessionStorage.removeItem('__REACT_HMR_STATE__');`,\n\t\t\t`\\t\\t} catch (e) {}`,\n\t\t\t`\\t}`,\n\t\t\t`}\\n`,\n\t\t\t`const mergedProps = { ...(window.__INITIAL_PROPS__ || {}), ...preservedState };`,\n\t\t\t`// Clear preserved state after using it (so it doesn't persist across multiple updates)`,\n\t\t\t`if (typeof window !== 'undefined') {`,\n\t\t\t`\\twindow.__HMR_PRESERVED_STATE__ = undefined;`,\n\t\t\t`}\\n`,\n\t\t\t`// Attempt hydration with error handling`,\n\t\t\t`// Use document (not document.body) when the page renders <html><head><body>`,\n\t\t\t`// to avoid \"In HTML, <html> cannot be a child of <body>\" hydration error`,\n\t\t\t`const container = typeof document !== 'undefined' ? document : null;`,\n\t\t\t`if (!container) {`,\n\t\t\t`\\tthrow new Error('React root container not found: document is null');`,\n\t\t\t`}\\n`,\n\t\t\t`// Guard: only hydrate on first load. During HMR re-imports, skip hydration`,\n\t\t\t`// so React Fast Refresh can swap components in-place and preserve state.`,\n\t\t\t`if (!window.__REACT_ROOT__) {`,\n\t\t\t`\\tlet root;`,\n\t\t\t`\\ttry {`,\n\t\t\t`\\t\\t// Use onRecoverableError to catch hydration errors (React 19)`,\n\t\t\t`\\t\\troot = hydrateRoot(`,\n\t\t\t`\\t\\t\\tcontainer,`,\n\t\t\t`\\t\\t\\tcreateElement(${componentName}, mergedProps),`,\n\t\t\t`\\t\\t\\t{`,\n\t\t\t`\\t\\t\\t\\tonRecoverableError: (error) => {`,\n\t\t\t`\\t\\t\\t\\t\\t// Check if this is a hydration error (isHydrationError filters out whitespace-only head mismatches)`,\n\t\t\t`\\t\\t\\t\\t\\tif (isDev && isHydrationError(error)) {`,\n\t\t\t`\\t\\t\\t\\t\\t\\t// Real hydration error - handle it`,\n\t\t\t`\\t\\t\\t\\t\\t\\thandleHydrationFallback(error);`,\n\t\t\t`\\t\\t\\t\\t\\t} else {`,\n\t\t\t`\\t\\t\\t\\t\\t\\t// Not a hydration error, or it's a whitespace-only mismatch that was filtered out`,\n\t\t\t`\\t\\t\\t\\t\\t\\t// Check if it's a whitespace-only head mismatch using the same logic as isHydrationError`,\n\t\t\t`\\t\\t\\t\\t\\t\\tconst errorMessage = error instanceof Error ? error.message : String(error);`,\n\t\t\t`\\t\\t\\t\\t\\t\\tconst errorString = String(error);`,\n\t\t\t`\\t\\t\\t\\t\\t\\tconst fullMessage = errorMessage + ' ' + errorString;`,\n\t\t\t`\\t\\t\\t\\t\\t\\tconst hydrationKeywords = ['hydration', 'Hydration', 'mismatch', 'Mismatch', 'did not match', 'server rendered HTML', 'server HTML', 'client HTML', 'Hydration failed'];`,\n\t\t\t`\\t\\t\\t\\t\\t\\tconst isHydration = hydrationKeywords.some(keyword => fullMessage.includes(keyword));`,\n\t\t\t`\\t\\t\\t\\t\\t\\tif (isHydration) {`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\t// Check if this is a head/link/stylesheet related mismatch`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\tconst isHeadRelated = fullMessage.includes('<head') || fullMessage.includes('</head>') || fullMessage.includes('head>') || fullMessage.includes('<link') || fullMessage.includes('link>') || fullMessage.includes('stylesheet') || fullMessage.includes('fonts.googleapis') || fullMessage.includes('rel=\"stylesheet\"');`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\t// Check if the mismatch involves only whitespace/newlines`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\tconst hasWhitespacePattern = /\\\\{\\\\s*[\"']\\\\\\\\n[^\"']*[\"']\\\\s*\\\\}/.test(fullMessage) || /\\\\{\\\\s*[\"'][\\\\\\\\n\\\\\\\\r\\\\\\\\s]+[\"']\\\\s*\\\\}/.test(fullMessage) || /-\\\\s*\\\\{\\\\s*[\"'][\\\\\\\\n\\\\\\\\r\\\\\\\\s]+[\"']\\\\s*\\\\}/.test(fullMessage);`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\tconst isWhitespaceOnly = /^[\\\\s\\\\n\\\\r]*$/.test(errorString) || /^[\\\\s\\\\n\\\\r]*$/.test(errorMessage);`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\tconst hasNewlinePattern = fullMessage.includes('\\\\\\\\n') || fullMessage.includes('\\\\\\\\r') || fullMessage.includes('\\\\n') || fullMessage.includes('\\\\r');`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\t// If it's head-related and involves whitespace/newlines, silently ignore it`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\tif (isHeadRelated && (hasWhitespacePattern || isWhitespaceOnly || hasNewlinePattern)) {`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\t\\t// Already logged by isHydrationError, just return silently`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\t\\treturn;`,\n\t\t\t`\\t\\t\\t\\t\\t\\t\\t}`,\n\t\t\t`\\t\\t\\t\\t\\t\\t}`,\n\t\t\t`\\t\\t\\t\\t\\t\\t// Log other recoverable errors`,\n\t\t\t`\\t\\t\\t\\t\\t\\tconsole.error('React recoverable error:', error);`,\n\t\t\t`\\t\\t\\t\\t\\t}`,\n\t\t\t`\\t\\t\\t\\t}`,\n\t\t\t`\\t\\t\\t}`,\n\t\t\t`\\t\\t);`,\n\t\t\t`\\t\\twindow.__REACT_ROOT__ = root;`,\n\t\t\t`\\t} catch (error) {`,\n\t\t\t`\\t\\t// Catch synchronous errors (shouldn't happen with hydrateRoot, but safety net)`,\n\t\t\t`\\t\\tif (isDev && isHydrationError(error)) {`,\n\t\t\t`\\t\\t\\thandleHydrationFallback(error);`,\n\t\t\t`\\t\\t} else {`,\n\t\t\t`\\t\\t\\tthrow error;`,\n\t\t\t`\\t\\t}`,\n\t\t\t`\\t}\\n`,\n\t\t\t`\\t// Also listen for hydration errors via console.error (React logs them there)`,\n\t\t\t`\\tif (isDev) {`,\n\t\t\t`\\t\\tconst originalError = console.error;`,\n\t\t\t`\\t\\tconsole.error = function(...args) {`,\n\t\t\t`\\t\\t\\tconst errorMessage = args.map(arg => {`,\n\t\t\t`\\t\\t\\t\\tif (arg instanceof Error) return arg.message;`,\n\t\t\t`\\t\\t\\t\\treturn String(arg);`,\n\t\t\t`\\t\\t\\t}).join(' ');`,\n\t\t\t`\\t\\t\\t`,\n\t\t\t`\\t\\t\\t// Check if this is a hydration error`,\n\t\t\t`\\t\\t\\tif (isHydrationError({ message: errorMessage }) && !hydrationErrorDetected) {`,\n\t\t\t`\\t\\t\\t\\thydrationErrorDetected = true;`,\n\t\t\t`\\t\\t\\t\\t// Create a synthetic error for fallback`,\n\t\t\t`\\t\\t\\t\\tconst syntheticError = new Error(errorMessage);`,\n\t\t\t`\\t\\t\\t\\t// Use setTimeout to ensure this happens after React's error handling`,\n\t\t\t`\\t\\t\\t\\tsetTimeout(() => {`,\n\t\t\t`\\t\\t\\t\\t\\thandleHydrationFallback(syntheticError);`,\n\t\t\t`\\t\\t\\t\\t}, 0);`,\n\t\t\t`\\t\\t\\t}`,\n\t\t\t`\\t\\t\\t`,\n\t\t\t`\\t\\t\\t// Call original console.error`,\n\t\t\t`\\t\\t\\toriginalError.apply(console, args);`,\n\t\t\t`\\t\\t};`,\n\t\t\t`\\t}`,\n\t\t\t`}`\n\t\t].join('\\n');\n\n\t\treturn writeFile(\n\t\t\tjoin(reactIndexesDirectory, `${componentName}.tsx`),\n\t\t\tcontent\n\t\t);\n\t});\n\tawait Promise.all(promises);\n\n\t// Generate a dummy entry that imports React so code splitting extracts\n\t// React into a shared chunk. This lets HMR re-import component entries\n\t// without creating a duplicate React instance.\n\tif (isDev) {\n\t\tawait writeFile(\n\t\t\tjoin(reactIndexesDirectory, '_refresh.tsx'),\n\t\t\t`import 'react';\\nimport 'react-dom/client';\\n`\n\t\t);\n\t}\n};\n",
|
|
25
|
+
"/**\n * Wraps HTML/HTMX TypeScript/JavaScript scripts with import.meta.hot support\n * for granular HMR updates. This allows script changes to hot-reload\n * without triggering a full HTML page rebuild.\n *\n * The wrapper is minimal - it just adds import.meta.hot.accept() so Bun\n * knows this module can be hot-reloaded. Event listener cleanup is handled\n * by the HMR client (cloning elements before script re-execution).\n */\n\n/**\n * Wrap a script with HMR support using Bun's import.meta.hot API\n * @param code - The original script code\n * @param scriptId - Unique identifier for this script (usually the file path)\n * @returns Wrapped code with HMR support\n */\nexport const wrapHTMLScriptWithHMR = (code: string, scriptId: string) => {\n\tconst escapedId = JSON.stringify(scriptId);\n\n\treturn `${code}\n\n// HMR acceptance - allows this script to be hot-reloaded\nif (typeof import.meta !== \"undefined\" && import.meta.hot) {\n import.meta.hot.accept();\n console.log('[HMR] Script ready:', ${escapedId});\n}\n`;\n};\n\n/**\n * Check if a file path is an HTML/HTMX script that should be wrapped\n * @param filePath - The file path to check\n * @param htmlDir - The HTML directory path\n * @param htmxDir - The HTMX directory path\n * @returns true if this script should be wrapped with HMR\n */\nexport const isHTMLScript = (\n\tfilePath: string,\n\thtmlDir?: string,\n\thtmxDir?: string\n) => {\n\tconst normalizedPath = filePath.replace(/\\\\/g, '/');\n\tconst isScript = /\\.(ts|js|tsx|jsx)$/.test(normalizedPath);\n\n\tif (!isScript) return false;\n\n\t// Check if it's in the HTML or HTMX directory\n\tif (htmlDir) {\n\t\tconst normalizedHtmlDir = htmlDir.replace(/\\\\/g, '/');\n\t\tif (normalizedPath.startsWith(normalizedHtmlDir)) return true;\n\t}\n\n\tif (htmxDir) {\n\t\tconst normalizedHtmxDir = htmxDir.replace(/\\\\/g, '/');\n\t\tif (normalizedPath.startsWith(normalizedHtmxDir)) return true;\n\t}\n\n\treturn false;\n};\n",
|
|
26
|
+
"/**\n * Bun build plugin that wraps HTML/HTMX scripts with import.meta.hot support\n * for granular HMR. This allows script changes to hot-reload independently\n * without triggering a full HTML page rebuild.\n */\n\nimport type { BunPlugin } from 'bun';\nimport { wrapHTMLScriptWithHMR } from './wrapHTMLScript';\n\n/**\n * Creates a Bun build plugin that wraps HTML/HTMX scripts with HMR support\n * @param htmlDir - The HTML directory path (normalized with forward slashes)\n * @param htmxDir - The HTMX directory path (normalized with forward slashes)\n * @returns Bun build plugin\n */\nexport const createHTMLScriptHMRPlugin = (\n\thtmlDir?: string,\n\thtmxDir?: string\n): BunPlugin => {\n\treturn {\n\t\tname: 'html-script-hmr',\n\t\tsetup(build) {\n\t\t\t// Only apply to TypeScript/JavaScript files\n\t\t\tbuild.onLoad({ filter: /\\.(ts|js|tsx|jsx)$/ }, async (args) => {\n\t\t\t\tconst normalizedPath = args.path.replace(/\\\\/g, '/');\n\n\t\t\t\t// Check if this file is in the HTML or HTMX scripts directory\n\t\t\t\tconst isHtmlScript =\n\t\t\t\t\thtmlDir &&\n\t\t\t\t\tnormalizedPath.includes(htmlDir.replace(/\\\\/g, '/')) &&\n\t\t\t\t\tnormalizedPath.includes('/scripts/');\n\t\t\t\tconst isHtmxScript =\n\t\t\t\t\thtmxDir &&\n\t\t\t\t\tnormalizedPath.includes(htmxDir.replace(/\\\\/g, '/')) &&\n\t\t\t\t\tnormalizedPath.includes('/scripts/');\n\n\t\t\t\tif (!isHtmlScript && !isHtmxScript) {\n\t\t\t\t\t// Not an HTML/HTMX script, let Bun handle it normally\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\t// Read the original script content\n\t\t\t\tconst text = await Bun.file(args.path).text();\n\n\t\t\t\t// Wrap with HMR support\n\t\t\t\tconst wrapped = wrapHTMLScriptWithHMR(text, normalizedPath);\n\n\t\t\t\t// Determine the loader based on file extension\n\t\t\t\tconst ext = args.path.split('.').pop() || 'ts';\n\t\t\t\tconst loader = ext as 'ts' | 'js' | 'tsx' | 'jsx';\n\n\t\t\t\treturn {\n\t\t\t\t\tcontents: wrapped,\n\t\t\t\t\tloader\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t};\n};\n",
|
|
27
|
+
"import { BUN_BUILD_WARNING_SUPPRESSION } from '../constants';\n\nexport const outputLogs = (logs: (BuildMessage | ResolveMessage)[]) => {\n\tfor (const log of logs) {\n\t\tif (\n\t\t\t// TODO: When bun supports wildcard sideEffects, remove this suppression\n\t\t\tlog.message.includes(BUN_BUILD_WARNING_SUPPRESSION)\n\t\t)\n\t\t\tcontinue;\n\n\t\tif (log.level === 'error') console.error(log);\n\t\telse if (log.level === 'warning') console.warn(log);\n\t\telse console.info(log);\n\t}\n};\n",
|
|
28
|
+
"import { Glob } from 'bun';\n\nexport const scanEntryPoints = async (dir: string, pattern: string) => {\n\tconst entryPaths: string[] = [];\n\tconst glob = new Glob(pattern);\n\tfor await (const file of glob.scan({ absolute: true, cwd: dir })) {\n\t\tentryPaths.push(file);\n\t}\n\n\treturn entryPaths;\n};\n",
|
|
29
|
+
"import { readFile, writeFile } from 'node:fs/promises';\nimport { toPascal } from '../utils/stringModifiers';\nimport { scanEntryPoints } from './scanEntryPoints';\n\nexport const updateAssetPaths = async (\n\tmanifest: Record<string, string>,\n\tdirectory: string\n) => {\n\tconst htmlFiles = await scanEntryPoints(directory, '*.html');\n\tconst assetRegex =\n\t\t/((?:<script[^>]+src=|<link[^>]*?rel=[\"']stylesheet[\"'][^>]*?href=)[\"'])(?!\\/?(?:.*\\/)?htmx\\.min\\.js)(\\/?(?:.*\\/)?)([^./\"']+)(?:\\.[^.\"'/]+)?(\\.(?:js|ts|css))([\"'][^>]*>)/g;\n\n\tconst tasks = htmlFiles.map(async (filePath) => {\n\t\tconst original = await readFile(filePath, 'utf8');\n\t\tconst updated = original.replace(\n\t\t\tassetRegex,\n\t\t\t(match, prefix, dir, name, ext, suffix) => {\n\t\t\t\tconst pascal = toPascal(name);\n\n\t\t\t\tlet key;\n\t\t\t\tif (ext === '.css') {\n\t\t\t\t\tkey = `${pascal}CSS`;\n\t\t\t\t} else if (dir.includes('/indexes/')) {\n\t\t\t\t\tkey = `${pascal}Index`;\n\t\t\t\t} else {\n\t\t\t\t\tkey = pascal;\n\t\t\t\t}\n\n\t\t\t\tconst newPath = manifest[key];\n\t\t\t\tif (newPath) {\n\t\t\t\t\t// For script tags (JS/TS), add type=\"module\" if not already present\n\t\t\t\t\t// Required because Bun bundles with format: 'esm'\n\t\t\t\t\tif (ext === '.js' || ext === '.ts') {\n\t\t\t\t\t\tconst hasTypeModule = /type\\s*=\\s*[\"']module[\"']/i.test(\n\t\t\t\t\t\t\tmatch\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (!hasTypeModule) {\n\t\t\t\t\t\t\t// Inject type=\"module\" before the closing >\n\t\t\t\t\t\t\tconst newSuffix = suffix.replace(\n\t\t\t\t\t\t\t\t/>$/,\n\t\t\t\t\t\t\t\t' type=\"module\">'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn `${prefix}${newPath}${newSuffix}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn `${prefix}${newPath}${suffix}`;\n\t\t\t\t}\n\n\t\t\t\tconsole.error(\n\t\t\t\t\t`error: no manifest entry for ${ext.slice(1)} \"${name}\" referenced in ${filePath}`\n\t\t\t\t);\n\n\t\t\t\treturn match;\n\t\t\t}\n\t\t);\n\t\tawait writeFile(filePath, updated, 'utf8');\n\t});\n\n\tawait Promise.all(tasks);\n};\n",
|
|
30
|
+
"import { build as bunBuild } from 'bun';\nimport { resolve } from 'node:path';\n\nexport const buildHMRClient = async () => {\n\tconst entryPoint = resolve(import.meta.dir, 'client/hmrClient.ts');\n\tconst result = await bunBuild({\n\t\tentrypoints: [entryPoint],\n\t\tformat: 'iife',\n\t\tminify: false,\n\t\ttarget: 'browser'\n\t});\n\tif (!result.success) {\n\t\tconsole.error('Failed to build HMR client:', result.logs);\n\t\treturn '// HMR client build failed';\n\t}\n\treturn await result.outputs[0]!.text();\n};\n",
|
|
31
|
+
"import { rm } from 'node:fs/promises';\nimport { join } from 'node:path';\n\ntype CleanupProps = {\n\tsvelteDir?: string;\n\tvueDir?: string;\n\treactIndexesPath?: string;\n};\n\nexport const cleanup = async ({\n\tsvelteDir,\n\tvueDir,\n\treactIndexesPath\n}: CleanupProps) => {\n\tif (svelteDir) {\n\t\tawait rm(join(svelteDir, 'compiled'), { force: true, recursive: true });\n\t}\n\n\tif (vueDir) {\n\t\tawait rm(join(vueDir, 'compiled'), { force: true, recursive: true });\n\t}\n\n\tif (reactIndexesPath)\n\t\tawait rm(reactIndexesPath, { force: true, recursive: true });\n};\n",
|
|
32
|
+
"import { normalizePath } from './normalizePath';\n\nexport const commonAncestor = (paths: string[], fallback?: string) => {\n\tif (paths.length === 0) return fallback;\n\t// Normalize all paths and split by forward slash for cross-platform compatibility\n\tconst segmentsList = paths.map((p) => normalizePath(p).split('/'));\n\tconst [first] = segmentsList;\n\tif (!first) return fallback;\n\tconst commonSegments = first.filter((segment, index) =>\n\t\tsegmentsList.every((pathSegs) => pathSegs[index] === segment)\n\t);\n\n\t// Always join with forward slash for normalized output\n\treturn commonSegments.length ? commonSegments.join('/') : fallback;\n};\n",
|
|
33
|
+
"import {\n\tMILLISECONDS_IN_A_SECOND,\n\tTIME_PRECISION,\n\tMILLISECONDS_IN_A_MINUTE\n} from '../constants';\n\nexport const getDurationString = (duration: number) => {\n\tlet durationString;\n\n\tif (duration < MILLISECONDS_IN_A_SECOND) {\n\t\tdurationString = `${duration.toFixed(TIME_PRECISION)}ms`;\n\t} else if (duration < MILLISECONDS_IN_A_MINUTE) {\n\t\tdurationString = `${(duration / MILLISECONDS_IN_A_SECOND).toFixed(TIME_PRECISION)}s`;\n\t} else {\n\t\tdurationString = `${(duration / MILLISECONDS_IN_A_MINUTE).toFixed(TIME_PRECISION)}m`;\n\t}\n\n\treturn durationString;\n};\n",
|
|
34
|
+
"/**\n * Centralized logger utility for AbsoluteJS\n * Provides Vite-style formatted output with ANSI colors and timestamps\n */\n\n// ANSI color codes\nconst colors = {\n\treset: '\\x1b[0m',\n\tbold: '\\x1b[1m',\n\tdim: '\\x1b[2m',\n\n\t// Core colors\n\tcyan: '\\x1b[36m',\n\tgreen: '\\x1b[32m',\n\tyellow: '\\x1b[33m',\n\tred: '\\x1b[31m',\n\tblue: '\\x1b[34m',\n\tmagenta: '\\x1b[35m',\n\twhite: '\\x1b[37m'\n} as const;\n\n// Framework color mapping\nconst frameworkColors: Record<string, string> = {\n\treact: colors.blue,\n\tvue: colors.green,\n\tsvelte: colors.yellow,\n\tangular: colors.magenta,\n\thtml: colors.white,\n\thtmx: colors.white,\n\tcss: colors.cyan,\n\tassets: colors.dim\n};\n\n/**\n * Format timestamp as \"HH:MM:SS AM/PM\" (Vite style)\n */\nconst formatTimestamp = () => {\n\tconst now = new Date();\n\tlet hours = now.getHours();\n\tconst minutes = now.getMinutes().toString().padStart(2, '0');\n\tconst seconds = now.getSeconds().toString().padStart(2, '0');\n\tconst ampm = hours >= 12 ? 'PM' : 'AM';\n\thours = hours % 12 || 12;\n\treturn `${hours}:${minutes}:${seconds} ${ampm}`;\n};\n\n/**\n * Format a file path for display (relative, clean)\n */\nconst formatPath = (filePath: string) => {\n\tconst cwd = process.cwd();\n\tlet relative = filePath.startsWith(cwd)\n\t\t? filePath.slice(cwd.length + 1)\n\t\t: filePath;\n\t// Normalize slashes\n\trelative = relative.replace(/\\\\/g, '/');\n\t// Ensure it starts with / for consistency with Vite\n\tif (!relative.startsWith('/')) {\n\t\trelative = '/' + relative;\n\t}\n\treturn relative;\n};\n\n/**\n * Get color for a framework\n */\nconst getFrameworkColor = (framework: string) => {\n\treturn frameworkColors[framework] || colors.white;\n};\n\n/**\n * Core logging function with Vite-style format\n */\nconst log = (\n\taction: string,\n\toptions?: {\n\t\tframework?: string;\n\t\tduration?: number;\n\t\tpath?: string;\n\t\tcolor?: string;\n\t}\n) => {\n\tconst timestamp = `${colors.dim}${formatTimestamp()}${colors.reset}`;\n\tconst tag = `${colors.cyan}[hmr]${colors.reset}`;\n\n\tlet message = action;\n\n\t// Apply framework color to path if present\n\tif (options?.path) {\n\t\tconst pathColor = options.framework\n\t\t\t? getFrameworkColor(options.framework)\n\t\t\t: colors.white;\n\t\tmessage += ` ${pathColor}${formatPath(options.path)}${colors.reset}`;\n\t}\n\n\t// Add duration if present\n\tif (options?.duration !== undefined) {\n\t\tmessage += ` ${colors.dim}(${options.duration}ms)${colors.reset}`;\n\t}\n\n\tconsole.log(`${timestamp} ${tag} ${message}`);\n};\n\n/**\n * Error logging with red color\n */\nconst logError = (message: string, error?: Error | string) => {\n\tconst timestamp = `${colors.dim}${formatTimestamp()}${colors.reset}`;\n\tconst tag = `${colors.red}[hmr]${colors.reset}`;\n\tconst errorMsg = error instanceof Error ? error.message : error;\n\tconst fullMessage = `${colors.red}error${colors.reset} ${message}${errorMsg ? `: ${errorMsg}` : ''}`;\n\tconsole.error(`${timestamp} ${tag} ${fullMessage}`);\n};\n\n/**\n * Warning logging with yellow color\n */\nconst logWarn = (message: string) => {\n\tconst timestamp = `${colors.dim}${formatTimestamp()}${colors.reset}`;\n\tconst tag = `${colors.yellow}[hmr]${colors.reset}`;\n\tconsole.warn(\n\t\t`${timestamp} ${tag} ${colors.yellow}warning${colors.reset} ${message}`\n\t);\n};\n\n// Public API\nexport const logger = {\n\t/**\n\t * HMR update message\n\t * Format: \"10:30:45 AM [hmr] hmr update /pages/App.tsx\"\n\t */\n\thmrUpdate(path: string, framework?: string) {\n\t\tlog('hmr update', { path, framework });\n\t},\n\n\t/**\n\t * Page reload message\n\t * Format: \"10:30:45 AM [hmr] page reload /src/App.tsx\"\n\t */\n\tpageReload(path: string, framework?: string) {\n\t\tlog('page reload', { path, framework });\n\t},\n\n\t/**\n\t * CSS update message\n\t * Format: \"10:30:45 AM [hmr] css update /styles/main.css\"\n\t */\n\tcssUpdate(path: string, framework?: string) {\n\t\tlog('css update', { path, framework: framework ?? 'css' });\n\t},\n\n\t/**\n\t * Script update message\n\t * Format: \"10:30:45 AM [hmr] script update /scripts/counter.ts\"\n\t */\n\tscriptUpdate(path: string, framework?: string) {\n\t\tlog('script update', { path, framework });\n\t},\n\n\t/**\n\t * Rebuild complete message\n\t * Format: \"10:30:45 AM [hmr] rebuilt (125ms)\"\n\t */\n\trebuilt(duration: number) {\n\t\tconst timestamp = `${colors.dim}${formatTimestamp()}${colors.reset}`;\n\t\tconst tag = `${colors.cyan}[hmr]${colors.reset}`;\n\t\tconst message = `${colors.green}rebuilt${colors.reset} ${colors.dim}(${duration}ms)${colors.reset}`;\n\t\tconsole.log(`${timestamp} ${tag} ${message}`);\n\t},\n\n\t/**\n\t * Build error\n\t * Format: \"10:30:45 AM [hmr] error Build failed: ...\"\n\t */\n\terror(message: string, error?: Error | string) {\n\t\tlogError(message, error);\n\t},\n\n\t/**\n\t * Warning message\n\t * Format: \"10:30:45 AM [hmr] warning ...\"\n\t */\n\twarn(message: string) {\n\t\tlogWarn(message);\n\t},\n\n\t/**\n\t * Generic info message\n\t */\n\tinfo(message: string) {\n\t\tlog(message);\n\t}\n};\n",
|
|
35
|
+
"import { resolve, relative } from 'node:path';\nimport { normalizePath } from './normalizePath';\n\nexport const validateSafePath = (targetPath: string, baseDirectory: string) => {\n\tconst absoluteBase = resolve(baseDirectory);\n\tconst absoluteTarget = resolve(baseDirectory, targetPath);\n\t// Normalize relative path for consistent cross-platform traversal check\n\tconst relativePath = normalizePath(relative(absoluteBase, absoluteTarget));\n\n\tif (relativePath.startsWith('../') || relativePath === '..') {\n\t\tthrow new Error(`Unsafe path: ${targetPath}`);\n\t}\n\n\treturn absoluteTarget;\n};\n",
|
|
36
|
+
"import { statSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { build } from './build';\nimport type { BuildConfig } from '../../types/build';\nimport { createHMRState, type HMRState } from '../dev/clientManager';\nimport { broadcastToClients } from '../dev/webSocket';\nimport { buildInitialDependencyGraph } from '../dev/dependencyGraph';\nimport { startFileWatching } from '../dev/fileWatcher';\nimport { getWatchPaths } from '../dev/pathUtils';\nimport { cleanStaleAssets, populateAssetStore } from '../dev/assetStore';\nimport { queueFileChange } from '../dev/rebuildTrigger';\n\n/* Development mode function - replaces build() during development\n Returns DevResult with manifest, buildDir, asset(), and hmrState for use with the hmr() plugin */\nexport const devBuild = async (config: BuildConfig) => {\n\t// On Bun --hot reload, return cached result instead of rebuilding\n\tconst cached = (globalThis as Record<string, unknown>).__hmrDevResult as\n\t\t| {\n\t\t\t\thmrState: HMRState;\n\t\t\t\tmanifest: Record<string, string>;\n\t\t }\n\t\t| undefined;\n\tif (cached) {\n\t\tconst serverMtime = statSync(resolve(Bun.main)).mtimeMs;\n\t\tconst lastMtime = (globalThis as Record<string, unknown>)\n\t\t\t.__hmrServerMtime as number;\n\t\t(globalThis as Record<string, unknown>).__hmrServerMtime = serverMtime;\n\n\t\tif (serverMtime !== lastMtime) {\n\t\t\tconsole.log('\\x1b[36m[hmr] Server module reloaded\\x1b[0m');\n\t\t} else {\n\t\t\t// Framework file changed — skip server restart, let HMR handle it\n\t\t\t(globalThis as Record<string, unknown>).__hmrSkipServerRestart =\n\t\t\t\ttrue;\n\t\t\tconsole.log('\\x1b[36m[hmr] Hot module update detected\\x1b[0m');\n\t\t}\n\t\treturn cached;\n\t}\n\n\t// Create initial HMR state with config\n\tconst state = createHMRState(config);\n\n\t// Initialize dependency graph by scanning all source files\n\tconst watchPaths = getWatchPaths(config, state.resolvedPaths);\n\tbuildInitialDependencyGraph(state.dependencyGraph, watchPaths);\n\n\tconsole.log('🔨 Building AbsoluteJS with HMR...');\n\n\t// Initial build (HMR client is baked into index files and HTML/HTMX pages)\n\tconst manifest = await build({\n\t\t...config,\n\t\toptions: {\n\t\t\t...config.options,\n\t\t\tpreserveIntermediateFiles: true\n\t\t}\n\t});\n\n\tif (!manifest || Object.keys(manifest).length === 0) {\n\t\t// Allow empty manifests for HTML/HTMX-only projects\n\t\tconsole.log(\n\t\t\t'⚠️ Manifest is empty - this is OK for HTML/HTMX-only projects'\n\t\t);\n\t}\n\n\t// Populate in-memory asset store so client assets are served from memory\n\tawait populateAssetStore(\n\t\tstate.assetStore,\n\t\tmanifest ?? {},\n\t\tstate.resolvedPaths.buildDir\n\t);\n\tawait cleanStaleAssets(\n\t\tstate.assetStore,\n\t\tmanifest ?? {},\n\t\tstate.resolvedPaths.buildDir\n\t);\n\n\tconsole.log('✅ Build completed successfully');\n\n\tstartFileWatching(state, config, (filePath: string) => {\n\t\tqueueFileChange(state, filePath, config, (newBuildResult) => {\n\t\t\tObject.assign(manifest, newBuildResult.manifest);\n\t\t});\n\t});\n\n\tconsole.log('👀 File watching: Active');\n\tconsole.log('🔥 HMR: Ready');\n\n\tconst result = {\n\t\thmrState: state,\n\t\tmanifest\n\t};\n\n\t(globalThis as Record<string, unknown>).__hmrServerStartup =\n\t\tDate.now().toString();\n\n\t// Cache for Bun --hot reloads\n\t(globalThis as Record<string, unknown>).__hmrDevResult = result;\n\t(globalThis as Record<string, unknown>).__hmrServerMtime = statSync(\n\t\tresolve(Bun.main)\n\t).mtimeMs;\n\n\treturn result;\n};\n",
|
|
37
|
+
"import { readFileSync, readdirSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\n/* Dependency graph for tracking file relationships\n This handles the \"what depends on what\" problem for incremental HMR */\nexport type DependencyGraph = {\n\t// filePath -> Set of files that depend on this file\n\tdependents: Map<string, Set<string>>;\n\t// filePath -> Set of files this file depends on\n\tdependencies: Map<string, Set<string>>;\n};\n\nexport const createDependencyGraph = () => ({\n\tdependencies: new Map(),\n\tdependents: new Map()\n});\n\n/* Extract import/require statements from a file\n This handles the \"find dependencies\" problem */\nexport const extractDependencies = (filePath: string) => {\n\ttry {\n\t\t// Check if file exists before trying to read\n\t\tif (!existsSync(filePath)) {\n\t\t\treturn [];\n\t\t}\n\t\tconst content = readFileSync(filePath, 'utf-8');\n\t\tconst dependencies: string[] = [];\n\t\tconst lowerPath = filePath.toLowerCase();\n\t\tconst isHtml =\n\t\t\tlowerPath.endsWith('.html') || lowerPath.endsWith('.htm');\n\n\t\t// Special-case HTML/HTMX: detect linked stylesheets so CSS changes map back to pages\n\t\tif (isHtml) {\n\t\t\tconst linkRegex =\n\t\t\t\t/<link\\s+[^>]*rel=[\"']stylesheet[\"'][^>]*href=[\"']([^\"']+)[\"'][^>]*>/gi;\n\t\t\tlet matchLink;\n\t\t\twhile ((matchLink = linkRegex.exec(content)) !== null) {\n\t\t\t\tconst href = matchLink[1];\n\t\t\t\tif (!href) continue;\n\t\t\t\t// Resolve relative to the HTML file\n\t\t\t\tconst resolvedHref = resolveImportPath(href, filePath);\n\t\t\t\tif (resolvedHref) {\n\t\t\t\t\tdependencies.push(resolvedHref);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dependencies;\n\t\t}\n\n\t\t// Match various import patterns\n\t\tconst importRegex = /import\\s+.*?\\s+from\\s+['\"]([^'\"]+)['\"]/g;\n\t\tconst importWithoutFromRegex = /import\\s+['\"]([^'\"]+)['\"]/g; // For CSS and side-effect imports\n\t\tconst requireRegex = /require\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n\t\tconst dynamicImportRegex = /import\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n\n\t\tlet match;\n\n\t\t// Find static imports with 'from'\n\t\twhile ((match = importRegex.exec(content)) !== null) {\n\t\t\tif (match[1]) {\n\t\t\t\tconst resolved = resolveImportPath(match[1], filePath);\n\t\t\t\tif (resolved) dependencies.push(resolved);\n\t\t\t}\n\t\t}\n\n\t\t// Find imports without 'from' (side-effect imports like CSS)\n\t\twhile ((match = importWithoutFromRegex.exec(content)) !== null) {\n\t\t\tif (match[1]) {\n\t\t\t\tconst resolved = resolveImportPath(match[1], filePath);\n\t\t\t\tif (resolved) dependencies.push(resolved);\n\t\t\t}\n\t\t}\n\n\t\t// Find require statements\n\t\twhile ((match = requireRegex.exec(content)) !== null) {\n\t\t\tif (match[1]) {\n\t\t\t\tconst resolved = resolveImportPath(match[1], filePath);\n\t\t\t\tif (resolved) dependencies.push(resolved);\n\t\t\t}\n\t\t}\n\n\t\t// Find dynamic imports\n\t\twhile ((match = dynamicImportRegex.exec(content)) !== null) {\n\t\t\tif (match[1]) {\n\t\t\t\tconst resolved = resolveImportPath(match[1], filePath);\n\t\t\t\tif (resolved) dependencies.push(resolved);\n\t\t\t}\n\t\t}\n\n\t\treturn dependencies;\n\t} catch {\n\t\treturn [];\n\t}\n};\n\n/* Resolve relative import paths to absolute paths\n This handles the \"resolve imports\" problem */\nconst resolveImportPath = (importPath: string, fromFile: string) => {\n\t// Skip external packages\n\tif (!importPath.startsWith('.') && !importPath.startsWith('/')) {\n\t\treturn null;\n\t}\n\n\tconst fromDir = resolve(fromFile, '..');\n\tconst resolved = resolve(fromDir, importPath);\n\n\t// Normalize the path to ensure consistent format (absolute path)\n\tconst normalized = resolve(resolved);\n\n\t// Try common extensions\n\tconst extensions = [\n\t\t'.ts',\n\t\t'.tsx',\n\t\t'.js',\n\t\t'.jsx',\n\t\t'.vue',\n\t\t'.svelte',\n\t\t'.css',\n\t\t'.html'\n\t];\n\n\tfor (const ext of extensions) {\n\t\tconst withExt = normalized + ext;\n\t\ttry {\n\t\t\treadFileSync(withExt);\n\n\t\t\treturn normalized + ext; // Return absolute path\n\t\t} catch {\n\t\t\t// File doesn't exist with this extension\n\t\t}\n\t}\n\n\t// Try without extension\n\ttry {\n\t\treadFileSync(normalized);\n\n\t\treturn normalized; // Return absolute path\n\t} catch {\n\t\treturn null;\n\t}\n};\n\n/* Add a file and its dependencies to the graph\n This handles the \"build graph\" problem */\nexport const addFileToGraph = (graph: DependencyGraph, filePath: string) => {\n\t// Normalize the file path to ensure consistent format\n\tconst normalizedPath = resolve(filePath);\n\n\tif (!existsSync(normalizedPath)) {\n\t\treturn;\n\t}\n\n\tconst dependencies = extractDependencies(normalizedPath);\n\n\t// Clear existing dependencies for this file\n\tconst existingDeps = graph.dependencies.get(normalizedPath);\n\tif (existingDeps) {\n\t\tfor (const dep of existingDeps) {\n\t\t\tconst dependents = graph.dependents.get(dep);\n\t\t\tif (dependents) {\n\t\t\t\tdependents.delete(normalizedPath);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Add new dependencies\n\tconst newDeps = new Set(dependencies);\n\tgraph.dependencies.set(normalizedPath, newDeps);\n\n\t// Update dependents (reverse relationship)\n\tfor (const dep of dependencies) {\n\t\tif (!graph.dependents.has(dep)) {\n\t\t\tgraph.dependents.set(dep, new Set());\n\t\t}\n\t\tgraph.dependents.get(dep)!.add(normalizedPath);\n\t}\n};\n\n/* Get all files that depend on a changed file\n This handles the \"find affected files\" problem */\nexport const getAffectedFiles = (\n\tgraph: DependencyGraph,\n\tchangedFile: string\n) => {\n\t// Normalize the changed file path to ensure consistent lookup\n\tconst normalizedPath = resolve(changedFile);\n\tconst affected = new Set<string>();\n\tconst toProcess = [normalizedPath];\n\n\twhile (toProcess.length > 0) {\n\t\tconst current = toProcess.pop()!;\n\n\t\tif (affected.has(current)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\taffected.add(current);\n\n\t\tconst dependents = graph.dependents.get(current);\n\t\tif (dependents) {\n\t\t\tfor (const dependent of dependents) {\n\t\t\t\ttoProcess.push(dependent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn Array.from(affected);\n};\n\n/* Remove a file from the graph\n This handles the \"cleanup deleted files\" problem */\nexport const removeFileFromGraph = (\n\tgraph: DependencyGraph,\n\tfilePath: string\n) => {\n\t// Normalize the file path to ensure consistent format\n\tconst normalizedPath = resolve(filePath);\n\n\t// Remove from dependencies\n\tconst deps = graph.dependencies.get(normalizedPath);\n\tif (deps) {\n\t\tfor (const dep of deps) {\n\t\t\tconst dependents = graph.dependents.get(dep);\n\t\t\tif (dependents) {\n\t\t\t\tdependents.delete(normalizedPath);\n\t\t\t}\n\t\t}\n\t\tgraph.dependencies.delete(normalizedPath);\n\t}\n\n\t// Remove from dependents\n\tconst dependents = graph.dependents.get(normalizedPath);\n\tif (dependents) {\n\t\tfor (const dependent of dependents) {\n\t\t\tconst depList = graph.dependencies.get(dependent);\n\t\t\tif (depList) {\n\t\t\t\tdepList.delete(normalizedPath);\n\t\t\t}\n\t\t}\n\t\tgraph.dependents.delete(normalizedPath);\n\t}\n};\n\n/* Build dependency graph for all files in a directory\n This handles the \"initialize graph\" problem */\nexport const buildInitialDependencyGraph = (\n\tgraph: DependencyGraph,\n\tdirectories: string[]\n) => {\n\tconst processedFiles = new Set<string>();\n\n\tconst scanDirectory = (dir: string) => {\n\t\t// Normalize directory path\n\t\tconst normalizedDir = resolve(dir);\n\t\ttry {\n\t\t\tconst entries = readdirSync(normalizedDir, { withFileTypes: true });\n\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst fullPath = resolve(normalizedDir, entry.name);\n\n\t\t\t\t// Skip ignored paths\n\t\t\t\tif (\n\t\t\t\t\tfullPath.includes('/node_modules/') ||\n\t\t\t\t\tfullPath.includes('/.git/') ||\n\t\t\t\t\tfullPath.includes('/build/') ||\n\t\t\t\t\tfullPath.includes('/compiled/') ||\n\t\t\t\t\tfullPath.includes('/indexes/') ||\n\t\t\t\t\tentry.name.startsWith('.')\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (entry.isDirectory()) {\n\t\t\t\t\tscanDirectory(fullPath);\n\t\t\t\t} else if (entry.isFile()) {\n\t\t\t\t\t// Process source files (TypeScript, JavaScript, Vue, Svelte, HTML)\n\t\t\t\t\tconst ext = entry.name.split('.').pop()?.toLowerCase();\n\t\t\t\t\tif (\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t'ts',\n\t\t\t\t\t\t\t'tsx',\n\t\t\t\t\t\t\t'js',\n\t\t\t\t\t\t\t'jsx',\n\t\t\t\t\t\t\t'vue',\n\t\t\t\t\t\t\t'svelte',\n\t\t\t\t\t\t\t'html',\n\t\t\t\t\t\t\t'htm'\n\t\t\t\t\t\t].includes(ext || '')\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (!processedFiles.has(fullPath)) {\n\t\t\t\t\t\t\taddFileToGraph(graph, fullPath);\n\t\t\t\t\t\t\tprocessedFiles.add(fullPath);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {}\n\t};\n\n\tfor (const dir of directories) {\n\t\tconst resolvedDir = resolve(dir);\n\t\t// Only scan directories that exist\n\t\tif (existsSync(resolvedDir)) {\n\t\t\tscanDirectory(resolvedDir); // Normalize directory paths\n\t\t}\n\t}\n};\n",
|
|
38
|
+
"/* Module Version Tracker for Server-Client Synchronization\n Tracks module versions to ensure server and client stay in sync */\n\n/* Module version: increments each time a module is updated */\nexport type ModuleVersion = number;\n\n/* Module version map: module path -> version */\nexport type ModuleVersions = Map<string, ModuleVersion>;\n\n/* Global module version counter */\nlet globalVersionCounter = 0;\n\n/* Get next version number */\nexport const getNextVersion = () => ++globalVersionCounter;\n\n/* Create a new module version tracker */\nexport const createModuleVersionTracker = () =>\n\tnew Map<string, ModuleVersion>();\n\n/* Increment version for a module */\nexport const incrementModuleVersion = (\n\tversions: ModuleVersions,\n\tmodulePath: string\n) => {\n\tconst newVersion = getNextVersion();\n\tversions.set(modulePath, newVersion);\n\n\treturn newVersion;\n};\n\n/* Increment versions for multiple modules */\nexport const incrementModuleVersions = (\n\tversions: ModuleVersions,\n\tmodulePaths: string[]\n) => {\n\tconst updated = new Map<string, ModuleVersion>();\n\tfor (const path of modulePaths) {\n\t\tconst version = incrementModuleVersion(versions, path);\n\t\tupdated.set(path, version);\n\t}\n\n\treturn updated;\n};\n\n/* Serialize module versions for transmission */\nexport const serializeModuleVersions = (versions: ModuleVersions) => {\n\tconst serialized: Record<string, number> = {};\n\tfor (const [path, version] of versions.entries()) {\n\t\tserialized[path] = version;\n\t}\n\n\treturn serialized;\n};\n",
|
|
39
|
+
"import { resolve } from 'node:path';\nimport type { BuildConfig } from '../../types/build';\n\ntype ResolvedPaths = {\n\tbuildDir: string;\n\tassetsDir?: string;\n\treactDir?: string;\n\tsvelteDir?: string;\n\tvueDir?: string;\n\tangularDir?: string;\n\thtmlDir?: string;\n\thtmxDir?: string;\n};\n\n/** Normalize and default build paths so HMR works outside the example app. */\nexport const resolveBuildPaths = (config: BuildConfig) => {\n\tconst cwd = process.cwd();\n\t// Normalize to forward slashes for cross-platform compatibility (Windows uses backslashes)\n\tconst normalize = (path: string) => path.replace(/\\\\/g, '/');\n\tconst withDefault = (value: string | undefined, fallback: string) =>\n\t\tnormalize(resolve(cwd, value ?? fallback));\n\tconst optional = (value: string | undefined) =>\n\t\tvalue ? normalize(resolve(cwd, value)) : undefined;\n\n\treturn {\n\t\tbuildDir: withDefault(config.buildDirectory, 'build'),\n\t\tassetsDir: optional(config.assetsDirectory),\n\t\treactDir: optional(config.reactDirectory),\n\t\tsvelteDir: optional(config.svelteDirectory),\n\t\tvueDir: optional(config.vueDirectory),\n\t\tangularDir: optional(config.angularDirectory),\n\t\thtmlDir: optional(config.htmlDirectory),\n\t\thtmxDir: optional(config.htmxDirectory)\n\t};\n};\n\nexport type ResolvedBuildPaths = ReturnType<typeof resolveBuildPaths>;\n",
|
|
40
|
+
"import type { FSWatcher } from 'fs';\nimport { createDependencyGraph, type DependencyGraph } from './dependencyGraph';\nimport {\n\tcreateModuleVersionTracker,\n\ttype ModuleVersions\n} from './moduleVersionTracker';\nimport type { HMRWebSocket } from '../../types/websocket';\nimport type { BuildConfig } from '../../types/build';\nimport { resolveBuildPaths, type ResolvedBuildPaths } from './configResolver';\n\n/* This handles the \"tracking clients\" problem */\nexport type HMRState = {\n\tconnectedClients: Set<HMRWebSocket>;\n\tdependencyGraph: DependencyGraph;\n\tisRebuilding: boolean;\n\trebuildQueue: Set<string>;\n\trebuildTimeout: NodeJS.Timeout | null;\n\tfileChangeQueue: Map<string, string[]>;\n\tdebounceTimeout: NodeJS.Timeout | null;\n\tfileHashes: Map<string, string>; // filename -> SHA-256 hash\n\twatchers: FSWatcher[];\n\tmoduleVersions: ModuleVersions; // module path -> version number (for client-server sync)\n\tsourceFileVersions: Map<string, number>; // source file path -> version number (for cache busting)\n\tconfig: BuildConfig; // Build configuration for path resolution\n\tresolvedPaths: ResolvedBuildPaths; // Normalized paths derived from config\n\tvueChangeTypes: Map<string, 'template-only' | 'script' | 'full'>; // Vue HMR change type tracking\n\tassetStore: Map<string, Uint8Array>; // In-memory client asset store for dev mode\n};\n\n/* Initialize HMR state */\nexport const createHMRState = (config: BuildConfig): HMRState => ({\n\tconnectedClients: new Set<HMRWebSocket>(),\n\tdebounceTimeout: null,\n\tdependencyGraph: createDependencyGraph(),\n\tfileChangeQueue: new Map(),\n\tfileHashes: new Map(),\n\tisRebuilding: false,\n\tmoduleVersions: createModuleVersionTracker(),\n\trebuildQueue: new Set(),\n\trebuildTimeout: null,\n\tsourceFileVersions: new Map(),\n\twatchers: [],\n\tconfig,\n\tresolvedPaths: resolveBuildPaths(config), // Track versions for source files to bypass Bun's cache\n\tvueChangeTypes: new Map(), // Vue HMR change type tracking\n\tassetStore: new Map() // In-memory client asset store for dev mode\n});\n\n/* Increment version for a source file (forces Bun to treat it as a new module) */\nexport const incrementSourceFileVersion = (\n\tstate: HMRState,\n\tfilePath: string\n) => {\n\tconst currentVersion = state.sourceFileVersions.get(filePath) || 0;\n\tconst newVersion = currentVersion + 1;\n\tstate.sourceFileVersions.set(filePath, newVersion);\n\n\treturn newVersion;\n};\n\n/* Increment versions for multiple source files */\nexport const incrementSourceFileVersions = (\n\tstate: HMRState,\n\tfilePaths: string[]\n) => {\n\tfor (const filePath of filePaths) {\n\t\tincrementSourceFileVersion(state, filePath);\n\t}\n};\n",
|
|
41
|
+
"import { watch } from 'fs';\nimport { existsSync } from 'node:fs';\nimport { join, resolve } from 'path';\nimport type { BuildConfig } from '../../types/build';\nimport type { HMRState } from './clientManager';\nimport { addFileToGraph, removeFileFromGraph } from './dependencyGraph';\nimport { getWatchPaths, shouldIgnorePath } from './pathUtils';\n\n/* Set up file watching for all configured directories\n This handles the \"watch files\" problem */\nexport const startFileWatching = (\n\tstate: HMRState,\n\tconfig: BuildConfig,\n\tonFileChange: (filePath: string) => void\n) => {\n\tconst watchPaths = getWatchPaths(config, state.resolvedPaths);\n\n\t// Set up a watcher for each directory\n\tfor (const path of watchPaths) {\n\t\t// Resolve to absolute path for existsSync check (normalize to forward slashes for cross-platform)\n\t\tconst absolutePath = resolve(path).replace(/\\\\/g, '/');\n\n\t\tif (!existsSync(absolutePath)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst watcher = watch(\n\t\t\tabsolutePath,\n\t\t\t{ recursive: true },\n\t\t\t(event, filename) => {\n\t\t\t\t// Skip if no filename\n\t\t\t\tif (!filename) return;\n\n\t\t\t\t// Skip directory changes\n\t\t\t\tif (\n\t\t\t\t\tfilename === 'compiled' ||\n\t\t\t\t\tfilename === 'build' ||\n\t\t\t\t\tfilename === 'indexes' ||\n\t\t\t\t\tfilename.includes('/compiled') ||\n\t\t\t\t\tfilename.includes('/build') ||\n\t\t\t\t\tfilename.includes('/indexes') ||\n\t\t\t\t\tfilename.endsWith('/')\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Build the full path (normalize to forward slashes for cross-platform compatibility)\n\t\t\t\tconst fullPath = join(absolutePath, filename).replace(\n\t\t\t\t\t/\\\\/g,\n\t\t\t\t\t'/'\n\t\t\t\t);\n\n\t\t\t\t// Apply ignore patterns\n\t\t\t\tif (shouldIgnorePath(fullPath)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Handle file deletion\n\t\t\t\tif (event === 'rename' && !existsSync(fullPath)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tremoveFileFromGraph(state.dependencyGraph, fullPath);\n\t\t\t\t\t} catch {}\n\n\t\t\t\t\t// Still trigger rebuild for files that depended on this one\n\t\t\t\t\tonFileChange(fullPath);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Handle file creation/modification\n\t\t\t\tif (existsSync(fullPath)) {\n\t\t\t\t\t// Call the callback handler\n\t\t\t\t\tonFileChange(fullPath);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\taddFileToGraph(state.dependencyGraph, fullPath);\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tstate.watchers.push(watcher);\n\t}\n};\n",
|
|
42
|
+
"import { BuildConfig } from '../../types/build';\nimport { normalizePath } from '../utils/normalizePath';\nimport type { ResolvedBuildPaths } from './configResolver';\n\n/* Get the directories we should watch based on our config\n This handles the \"where to watch\" problem */\nexport const getWatchPaths = (\n\tconfig: BuildConfig,\n\tresolved?: ResolvedBuildPaths\n) => {\n\tconst paths: string[] = [];\n\n\t// helper to push only when base exists, normalizing for cross-platform compatibility\n\tconst push = (base?: string, sub?: string) => {\n\t\tif (!base) return;\n\t\tconst normalizedBase = normalizePath(base);\n\t\tpaths.push(sub ? `${normalizedBase}/${sub}` : normalizedBase);\n\t};\n\n\tconst cfg = resolved ?? {\n\t\treactDir: config.reactDirectory,\n\t\tsvelteDir: config.svelteDirectory,\n\t\tvueDir: config.vueDirectory,\n\t\tangularDir: config.angularDirectory,\n\t\thtmlDir: config.htmlDirectory,\n\t\thtmxDir: config.htmxDirectory,\n\t\tassetsDir: config.assetsDirectory\n\t};\n\n\t// Watch source directories (pages/components/styles etc.)\n\tpush(cfg.reactDir, 'components');\n\tpush(cfg.reactDir, 'pages');\n\tpush(cfg.reactDir, 'styles');\n\n\tpush(cfg.svelteDir, 'components');\n\tpush(cfg.svelteDir, 'pages');\n\tpush(cfg.svelteDir, 'composables');\n\tpush(cfg.svelteDir, 'styles');\n\n\tpush(cfg.vueDir, 'components');\n\tpush(cfg.vueDir, 'pages');\n\tpush(cfg.vueDir, 'composables');\n\tpush(cfg.vueDir, 'styles');\n\n\tpush(cfg.angularDir, 'components');\n\tpush(cfg.angularDir, 'pages');\n\tpush(cfg.angularDir, 'styles');\n\n\tpush(cfg.htmlDir, 'pages');\n\tpush(cfg.htmlDir, 'scripts');\n\tpush(cfg.htmlDir, 'styles');\n\n\tpush(cfg.htmxDir, 'pages');\n\tpush(cfg.htmxDir, 'styles');\n\n\tpush(cfg.assetsDir);\n\n\treturn paths;\n};\n\n/* Check if we should ignore a file path\n This handles the \"what to ignore\" problem */\nexport const shouldIgnorePath = (path: string) => {\n\tconst normalizedPath = path.replace(/\\\\/g, '/');\n\n\t// Be more aggressive with ignoring compiled directories\n\treturn (\n\t\tnormalizedPath.includes('/build/') ||\n\t\tnormalizedPath.includes('/compiled/') || // This should catch it\n\t\tnormalizedPath.includes('/indexes/') ||\n\t\tnormalizedPath.includes('/node_modules/') ||\n\t\tnormalizedPath.includes('/.git/') ||\n\t\tnormalizedPath.endsWith('.log') ||\n\t\tnormalizedPath.endsWith('.tmp') ||\n\t\tnormalizedPath.startsWith('.') ||\n\t\t// Add this to be extra safe\n\t\tnormalizedPath === 'compiled' ||\n\t\tnormalizedPath.endsWith('/compiled') ||\n\t\tnormalizedPath.endsWith('/compiled/')\n\t);\n};\n\n/* Detect which framework a file belongs to based on its path and extension\n This handles the \"what framework\" problem */\nexport const detectFramework = (\n\tfilePath: string,\n\tresolved?: ResolvedBuildPaths\n) => {\n\t// Check if this is an ignored file first\n\tif (shouldIgnorePath(filePath)) {\n\t\treturn 'ignored';\n\t}\n\n\tconst normalized = filePath.replace(/\\\\/g, '/');\n\n\tconst startsWithDir = (dir?: string) =>\n\t\tdir ? normalized.startsWith(dir.replace(/\\\\/g, '/')) : false;\n\n\t// Prefer resolved directory prefixes when available\n\tif (resolved) {\n\t\tif (startsWithDir(resolved.htmxDir)) return 'htmx';\n\t\tif (startsWithDir(resolved.reactDir)) return 'react';\n\t\tif (startsWithDir(resolved.svelteDir)) return 'svelte';\n\t\tif (startsWithDir(resolved.vueDir)) return 'vue';\n\t\tif (startsWithDir(resolved.angularDir)) return 'angular';\n\t\tif (startsWithDir(resolved.htmlDir)) return 'html';\n\t\tif (startsWithDir(resolved.assetsDir)) return 'assets';\n\t} else {\n\t\t// Fallback heuristics when resolved paths are not provided\n\t\tif (normalized.includes('/htmx/')) return 'htmx';\n\t\tif (normalized.includes('/react/')) return 'react';\n\t\tif (normalized.includes('/svelte/')) return 'svelte';\n\t\tif (normalized.includes('/vue/')) return 'vue';\n\t\tif (normalized.includes('/angular/')) return 'angular';\n\t\tif (normalized.includes('/html/')) return 'html';\n\t}\n\n\t// Then check file extensions for files not in framework directories\n\tif (normalized.endsWith('.tsx') || normalized.endsWith('.jsx'))\n\t\treturn 'react';\n\tif (normalized.endsWith('.svelte')) return 'svelte';\n\tif (normalized.endsWith('.vue')) return 'vue';\n\tif (normalized.endsWith('.html')) return 'html';\n\tif (normalized.endsWith('.ts') && normalized.includes('angular'))\n\t\treturn 'angular';\n\n\t// Generic assets (CSS in root /assets/, images, etc.)\n\t// IMPORTANT: Only return 'assets' for CSS files that are NOT in framework directories\n\t// CSS files in framework directories (like /vue/styles/ or /svelte/styles/) should have\n\t// been caught by the framework checks above. If we reach here with a .css file, it means\n\t// the file wasn't in a framework directory, so it's a true asset.\n\tif (normalized.includes('/assets/')) return 'assets';\n\n\t// For CSS files not caught by framework directory checks, check one more time\n\t// using path segment matching (handles cases where resolved paths might not match exactly)\n\tif (normalized.endsWith('.css')) {\n\t\t// Check if this CSS is in a framework styles directory by looking for common patterns\n\t\tif (normalized.includes('/vue/') || normalized.includes('/vue-'))\n\t\t\treturn 'vue';\n\t\tif (normalized.includes('/svelte/') || normalized.includes('/svelte-'))\n\t\t\treturn 'svelte';\n\t\tif (normalized.includes('/react/') || normalized.includes('/react-'))\n\t\t\treturn 'react';\n\t\tif (\n\t\t\tnormalized.includes('/angular/') ||\n\t\t\tnormalized.includes('/angular-')\n\t\t)\n\t\t\treturn 'angular';\n\t\tif (normalized.includes('/html/') || normalized.includes('/html-'))\n\t\t\treturn 'html';\n\t\tif (normalized.includes('/htmx/') || normalized.includes('/htmx-'))\n\t\t\treturn 'htmx';\n\t\t// If no framework match, it's a generic asset\n\t\treturn 'assets';\n\t}\n\n\treturn 'unknown';\n};\n",
|
|
43
|
+
"import { resolve } from 'node:path';\nimport { readdir, unlink } from 'node:fs/promises';\n\nconst mimeTypes: Record<string, string> = {\n\t'.css': 'text/css',\n\t'.html': 'text/html',\n\t'.js': 'application/javascript',\n\t'.mjs': 'application/javascript',\n\t'.json': 'application/json',\n\t'.svg': 'image/svg+xml',\n\t'.woff': 'font/woff',\n\t'.woff2': 'font/woff2'\n};\n\n/** Determine Content-Type from a file path extension */\nexport const getMimeType = (filePath: string): string => {\n\tconst ext = filePath.slice(filePath.lastIndexOf('.'));\n\n\treturn mimeTypes[ext] ?? 'application/octet-stream';\n};\n\n/** Matches Bun's hashed output naming: name.XXXXXXXX.ext */\nconst HASHED_FILE_RE = /\\.[a-z0-9]{8}\\.(js|css|mjs)$/;\n\n/** Strip the 8-char hash from a hashed path to get its logical identity.\n * e.g. /react/indexes/ReactExample.abc12345.js → /react/indexes/ReactExample.js */\nconst stripHash = (webPath: string): string =>\n\twebPath.replace(/\\.[a-z0-9]{8}(\\.(js|css|mjs))$/, '$1');\n\n/** Upsert build outputs into the in-memory asset store.\n * Evicts previous entries for the same logical asset (same base name,\n * different hash) so stale paths don't accumulate. */\nexport const populateAssetStore = async (\n\tstore: Map<string, Uint8Array>,\n\tmanifest: Record<string, string>,\n\tbuildDir: string\n) => {\n\tconst loadPromises: Promise<void>[] = [];\n\n\t// Build a set of logical identities from the new manifest so we can\n\t// evict old entries with different hashes for the same asset.\n\tconst newIdentities = new Map<string, string>();\n\tfor (const webPath of Object.values(manifest)) {\n\t\tif (!webPath.startsWith('/')) continue;\n\t\tnewIdentities.set(stripHash(webPath), webPath);\n\t}\n\n\t// Evict old store entries whose logical identity is being replaced\n\tfor (const existingPath of store.keys()) {\n\t\tconst identity = stripHash(existingPath);\n\t\tconst replacement = newIdentities.get(identity);\n\t\tif (replacement && replacement !== existingPath) {\n\t\t\tstore.delete(existingPath);\n\t\t}\n\t}\n\n\tfor (const webPath of newIdentities.values()) {\n\t\tloadPromises.push(\n\t\t\tBun.file(resolve(buildDir, webPath.slice(1)))\n\t\t\t\t.bytes()\n\t\t\t\t.then((bytes) => {\n\t\t\t\t\tstore.set(webPath, bytes);\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\t/* file may not exist yet (SSR-only entry) — ignore */\n\t\t\t\t})\n\t\t);\n\t}\n\n\t// Also pick up chunk files produced by Bun code-splitting that aren't\n\t// listed in the manifest (e.g. chunk-XXXX.js).\n\ttry {\n\t\tconst scanDir = async (dir: string, prefix: string) => {\n\t\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\t\t\tconst subTasks: Promise<void>[] = [];\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (entry.isDirectory()) {\n\t\t\t\t\tsubTasks.push(\n\t\t\t\t\t\tscanDir(\n\t\t\t\t\t\t\tresolve(dir, entry.name),\n\t\t\t\t\t\t\t`${prefix}${entry.name}/`\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t} else if (entry.name.startsWith('chunk-')) {\n\t\t\t\t\tconst webPath = `/${prefix}${entry.name}`;\n\t\t\t\t\tif (!store.has(webPath)) {\n\t\t\t\t\t\tsubTasks.push(\n\t\t\t\t\t\t\tBun.file(resolve(dir, entry.name))\n\t\t\t\t\t\t\t\t.bytes()\n\t\t\t\t\t\t\t\t.then((bytes) => {\n\t\t\t\t\t\t\t\t\tstore.set(webPath, bytes);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.catch(() => {})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait Promise.all(subTasks);\n\t\t};\n\t\tawait scanDir(buildDir, '');\n\t} catch {\n\t\t/* buildDir may not exist yet */\n\t}\n\n\tawait Promise.all(loadPromises);\n};\n\n/** Remove hashed build files whose logical identity has a newer version.\n * Checks both client assets (from the store) and SSR server files (from\n * the manifest's absolute-path entries). Non-blocking async version. */\nexport const cleanStaleAssets = async (\n\tstore: Map<string, Uint8Array>,\n\tmanifest: Record<string, string>,\n\tbuildDir: string\n) => {\n\t// Build a map of logical identity → live disk path\n\tconst liveByIdentity = new Map<string, string>();\n\n\t// Client assets from the in-memory store\n\tfor (const webPath of store.keys()) {\n\t\tconst diskPath = resolve(buildDir, webPath.slice(1));\n\t\tliveByIdentity.set(stripHash(diskPath), diskPath);\n\t}\n\n\t// SSR server files from the manifest (absolute disk paths like\n\t// /home/.../build/svelte/.../SvelteExample.hash.js)\n\tconst absBuildDir = resolve(buildDir);\n\tfor (const val of Object.values(manifest)) {\n\t\tif (!HASHED_FILE_RE.test(val)) continue;\n\t\t// Absolute disk paths start with the buildDir; web-relative\n\t\t// paths (e.g. /svelte/compiled/...) are short and already\n\t\t// covered by the store above.\n\t\tif (val.startsWith(absBuildDir)) {\n\t\t\tliveByIdentity.set(stripHash(val), val);\n\t\t}\n\t}\n\n\ttry {\n\t\tconst walkAndClean = async (dir: string) => {\n\t\t\tconst entries = await readdir(dir, { withFileTypes: true });\n\t\t\tconst tasks: Promise<void>[] = [];\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst fullPath = resolve(dir, entry.name);\n\t\t\t\tif (entry.isDirectory()) {\n\t\t\t\t\ttasks.push(walkAndClean(fullPath));\n\t\t\t\t} else if (HASHED_FILE_RE.test(entry.name)) {\n\t\t\t\t\tconst identity = stripHash(fullPath);\n\t\t\t\t\tconst livePath = liveByIdentity.get(identity);\n\t\t\t\t\t// Only delete if we have a DIFFERENT version of the\n\t\t\t\t\t// same logical file. Untracked files are left alone.\n\t\t\t\t\tif (livePath && livePath !== fullPath) {\n\t\t\t\t\t\ttasks.push(unlink(fullPath).catch(() => {}));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait Promise.all(tasks);\n\t\t};\n\t\tawait walkAndClean(buildDir);\n\t} catch {\n\t\t/* buildDir may not exist */\n\t}\n};\n\n/** Look up an asset by its web path. Returns bytes or undefined. */\nexport const lookupAsset = (\n\tstore: Map<string, Uint8Array>,\n\tpath: string\n): Uint8Array | undefined => store.get(path);\n",
|
|
44
|
+
"import { existsSync } from 'node:fs';\nimport { basename, resolve } from 'node:path';\nimport { build } from '../core/build';\nimport type { BuildConfig } from '../../types/build';\nimport { logger } from '../utils/logger';\nimport type { HMRState } from './clientManager';\nimport { incrementSourceFileVersions } from './clientManager';\nimport { getAffectedFiles } from './dependencyGraph';\nimport { computeFileHash, hasFileChanged } from './fileHashTracker';\nimport {\n\tcreateModuleUpdates,\n\tgroupModuleUpdatesByFramework\n} from './moduleMapper';\nimport {\n\tincrementModuleVersions,\n\tserializeModuleVersions\n} from './moduleVersionTracker';\nimport { cleanStaleAssets, populateAssetStore } from './assetStore';\nimport { detectFramework } from './pathUtils';\nimport type { ResolvedBuildPaths } from './configResolver';\nimport { broadcastToClients } from './webSocket';\n\ntype BuildLog = {\n\tlevel?: string;\n\tmessage: string | { text: string };\n\tposition?: {\n\t\tfile?: string;\n\t\tline?: number;\n\t\tcolumn?: number;\n\t\tlineText?: string;\n\t};\n};\n\n/** Parse file:line:column or similar from error message (Svelte, Vue, Angular, etc.) */\nconst parseErrorLocationFromMessage = (msg: string) => {\n\t// file:line:column or file:line\n\tconst pathLineCol = msg.match(/^([^\\s:]+):(\\d+)(?::(\\d+))?/);\n\tif (pathLineCol) {\n\t\tconst [, file, lineStr, colStr] = pathLineCol;\n\t\treturn {\n\t\t\tfile,\n\t\t\tline: lineStr ? parseInt(lineStr, 10) : undefined,\n\t\t\tcolumn: colStr ? parseInt(colStr, 10) : undefined\n\t\t};\n\t}\n\t// \"at path (line: col:)\" or \"at path:line:col\"\n\tconst atMatch = msg.match(\n\t\t/(?:at|in)\\s+([^(:\\s]+)(?:\\s*\\([^)]*line\\s*(\\d+)[^)]*col(?:umn)?\\s*(\\d+)[^)]*\\)|:(\\d+):(\\d+)?)/i\n\t);\n\tif (atMatch) {\n\t\tconst [, file, line1, col1, line2, col2] = atMatch;\n\t\treturn {\n\t\t\tfile: file?.trim(),\n\t\t\tline: line1\n\t\t\t\t? parseInt(line1, 10)\n\t\t\t\t: line2\n\t\t\t\t\t? parseInt(line2, 10)\n\t\t\t\t\t: undefined,\n\t\t\tcolumn: col1\n\t\t\t\t? parseInt(col1, 10)\n\t\t\t\t: col2\n\t\t\t\t\t? parseInt(col2, 10)\n\t\t\t\t\t: undefined\n\t\t};\n\t}\n\t// \"path (line X, column Y)\"\n\tconst parenMatch = msg.match(\n\t\t/([^\\s(]+)\\s*\\([^)]*line\\s*(\\d+)[^)]*col(?:umn)?\\s*(\\d+)/i\n\t);\n\tif (parenMatch) {\n\t\tconst [, file, lineStr, colStr] = parenMatch;\n\t\treturn {\n\t\t\tfile: file ?? undefined,\n\t\t\tline: lineStr ? parseInt(lineStr, 10) : undefined,\n\t\t\tcolumn: colStr ? parseInt(colStr, 10) : undefined\n\t\t};\n\t}\n\treturn {};\n};\n\n/** Extract file, line, column, lineText, and framework from build error for the overlay */\nconst extractBuildErrorDetails = (\n\terror: unknown,\n\taffectedFrameworks: string[],\n\tresolvedPaths?: ResolvedBuildPaths\n) => {\n\t// AggregateError (Bun 1.2+ throws this) - errors array may contain BuildMessage-like objects\n\tlet logs = (error as { logs?: BuildLog[] })?.logs;\n\tif (\n\t\t!logs &&\n\t\terror instanceof AggregateError &&\n\t\t(error as AggregateError).errors?.length\n\t) {\n\t\tlogs = (error as AggregateError).errors as BuildLog[];\n\t}\n\tif (logs && Array.isArray(logs) && logs.length > 0) {\n\t\tconst errLog = logs.find((l) => l.level === 'error') ?? logs[0];\n\t\tconst pos = errLog?.position;\n\t\t// Position can be a class instance - ensure we read properties\n\t\tconst file =\n\t\t\tpos && 'file' in pos ? (pos as { file?: string }).file : undefined;\n\t\tconst line =\n\t\t\tpos && 'line' in pos ? (pos as { line?: number }).line : undefined;\n\t\tconst column =\n\t\t\tpos && 'column' in pos\n\t\t\t\t? (pos as { column?: number }).column\n\t\t\t\t: undefined;\n\t\tconst lineText =\n\t\t\tpos && 'lineText' in pos\n\t\t\t\t? (pos as { lineText?: string }).lineText\n\t\t\t\t: undefined;\n\t\tconst framework =\n\t\t\tfile && resolvedPaths\n\t\t\t\t? detectFramework(file, resolvedPaths)\n\t\t\t\t: (affectedFrameworks[0] ?? 'unknown');\n\t\treturn {\n\t\t\tfile,\n\t\t\tline,\n\t\t\tcolumn,\n\t\t\tlineText,\n\t\t\tframework:\n\t\t\t\tframework !== 'ignored' ? framework : affectedFrameworks[0]\n\t\t};\n\t}\n\tconst msg = error instanceof Error ? error.message : String(error);\n\tconst parsed = parseErrorLocationFromMessage(msg);\n\tlet fw = affectedFrameworks[0];\n\tif (parsed.file && resolvedPaths) {\n\t\tconst detected = detectFramework(parsed.file, resolvedPaths);\n\t\tfw = detected !== 'ignored' ? detected : affectedFrameworks[0];\n\t}\n\treturn { ...parsed, framework: fw };\n};\n\n/* Queue a file change for processing\n This handles the \"queue changes\" problem with debouncing */\nexport const queueFileChange = (\n\tstate: HMRState,\n\tfilePath: string,\n\tconfig: BuildConfig,\n\tonRebuildComplete: (result: {\n\t\tmanifest: Record<string, string>;\n\t\thmrState: HMRState;\n\t}) => void\n) => {\n\tconst framework = detectFramework(filePath, state.resolvedPaths);\n\n\tif (framework === 'ignored') {\n\t\treturn;\n\t}\n\n\t// Compute current hash\n\tconst currentHash = computeFileHash(filePath);\n\n\t// Check if file actually changed\n\tif (!hasFileChanged(filePath, currentHash, state.fileHashes)) {\n\t\treturn;\n\t}\n\n\t// Get or create queue for this framework\n\tif (!state.fileChangeQueue.has(framework)) {\n\t\tstate.fileChangeQueue.set(framework, []);\n\t}\n\n\t// Deduplicate: don't add the same file to the queue multiple times\n\tconst queue = state.fileChangeQueue.get(framework)!;\n\tif (!queue.includes(filePath)) {\n\t\tqueue.push(filePath);\n\t}\n\n\t// If we're already rebuilding, just queue it and wait\n\tif (state.isRebuilding) {\n\t\treturn;\n\t}\n\n\t// Clear any existing rebuild trigger\n\tif (state.rebuildTimeout) {\n\t\tclearTimeout(state.rebuildTimeout);\n\t}\n\n\t// EVENT-DRIVEN APPROACH: Wait for a short window to collect all changes\n\tconst DEBOUNCE_MS = config.options?.hmr?.debounceMs ?? 500;\n\tstate.rebuildTimeout = setTimeout(() => {\n\t\t// Re-check hashes at the last moment to catch rapid edit/undo\n\t\tconst filesToProcess: Map<string, string[]> = new Map(); // framework -> filePaths\n\n\t\t// Deduplicate files across the entire queue first\n\t\tconst uniqueFilesByFramework = new Map<string, Set<string>>();\n\t\tfor (const [fwKey, filePaths] of state.fileChangeQueue) {\n\t\t\tuniqueFilesByFramework.set(fwKey, new Set(filePaths));\n\t\t}\n\n\t\tfor (const [fwKey, filePathSet] of uniqueFilesByFramework) {\n\t\t\tconst validFiles: string[] = [];\n\t\t\tconst processedFiles = new Set<string>(); // Track files we've already added\n\n\t\t\tfor (const filePathInSet of filePathSet) {\n\t\t\t\t// Skip files that no longer exist (deleted)\n\t\t\t\tif (!existsSync(filePathInSet)) {\n\t\t\t\t\t// Remove from hash tracking\n\t\t\t\t\tstate.fileHashes.delete(filePathInSet);\n\t\t\t\t\t// Still need to rebuild files that depended on this deleted file\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst affectedFiles = getAffectedFiles(\n\t\t\t\t\t\t\tstate.dependencyGraph,\n\t\t\t\t\t\t\tfilePathInSet\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst deletedPathResolved = resolve(filePathInSet);\n\t\t\t\t\t\tfor (const affectedFile of affectedFiles) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\taffectedFile !== deletedPathResolved &&\n\t\t\t\t\t\t\t\t!processedFiles.has(affectedFile) &&\n\t\t\t\t\t\t\t\texistsSync(affectedFile)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tvalidFiles.push(affectedFile);\n\t\t\t\t\t\t\t\tprocessedFiles.add(affectedFile);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Compute hash at the LAST moment to catch rapid edit/undo\n\t\t\t\tconst fileHash = computeFileHash(filePathInSet);\n\t\t\t\tconst storedHash = state.fileHashes.get(filePathInSet);\n\n\t\t\t\t// Check if file actually changed since last rebuild\n\t\t\t\t// This is the critical check that prevents double rebuilds on edit/undo\n\t\t\t\tif (!storedHash || storedHash !== fileHash) {\n\t\t\t\t\t// Normalize filePath to absolute path for consistent comparison\n\t\t\t\t\t// getAffectedFiles returns absolute paths, so we need to normalize here too\n\t\t\t\t\tconst normalizedFilePath = resolve(filePathInSet);\n\n\t\t\t\t\t// Add the changed file itself (using normalized path)\n\t\t\t\t\tif (!processedFiles.has(normalizedFilePath)) {\n\t\t\t\t\t\tvalidFiles.push(normalizedFilePath);\n\t\t\t\t\t\tprocessedFiles.add(normalizedFilePath);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update hash NOW - this prevents the same file from being processed twice\n\t\t\t\t\t// if it was queued multiple times (edit then undo)\n\t\t\t\t\tstate.fileHashes.set(normalizedFilePath, fileHash);\n\n\t\t\t\t\t// Increment source file version to force Bun to treat it as a new module\n\t\t\t\t\t// This bypasses Bun's module cache by appending version to import path\n\t\t\t\t\tincrementSourceFileVersions(state, [normalizedFilePath]);\n\n\t\t\t\t\t// CRITICAL: Also increment versions of files that import this file\n\t\t\t\t\t// When App.tsx changes, ReactExample.tsx needs a new version too\n\t\t\t\t\t// This forces ReactExample.tsx to re-import App.tsx fresh (bypassing cache)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst dependents =\n\t\t\t\t\t\t\tstate.dependencyGraph.dependents.get(\n\t\t\t\t\t\t\t\tnormalizedFilePath\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\tif (dependents && dependents.size > 0) {\n\t\t\t\t\t\t\tconst dependentFiles = Array.from(\n\t\t\t\t\t\t\t\tdependents\n\t\t\t\t\t\t\t).filter((f) => existsSync(f));\n\t\t\t\t\t\t\tif (dependentFiles.length > 0) {\n\t\t\t\t\t\t\t\tincrementSourceFileVersions(\n\t\t\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\t\t\tdependentFiles\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {}\n\n\t\t\t\t\t// Get all files that depend on this changed file\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst affectedFiles = getAffectedFiles(\n\t\t\t\t\t\t\tstate.dependencyGraph,\n\t\t\t\t\t\t\tnormalizedFilePath\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Add affected files to the rebuild queue\n\t\t\t\t\t\tfor (const affectedFile of affectedFiles) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t!processedFiles.has(affectedFile) &&\n\t\t\t\t\t\t\t\taffectedFile !== normalizedFilePath &&\n\t\t\t\t\t\t\t\texistsSync(affectedFile)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tvalidFiles.push(affectedFile);\n\t\t\t\t\t\t\t\tprocessedFiles.add(affectedFile);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tif (!processedFiles.has(normalizedFilePath)) {\n\t\t\t\t\t\t\tvalidFiles.push(normalizedFilePath);\n\t\t\t\t\t\t\tprocessedFiles.add(normalizedFilePath);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (validFiles.length > 0) {\n\t\t\t\t// Re-detect framework from actual file paths (more reliable than using fwKey from queue)\n\t\t\t\t// This ensures HTMX files are correctly identified even if they were queued with wrong framework\n\t\t\t\t// Use the first valid file to determine the framework (all files in this set should have the same framework)\n\t\t\t\tconst firstFile = validFiles[0];\n\t\t\t\tif (firstFile) {\n\t\t\t\t\tconst detectedFramework = detectFramework(\n\t\t\t\t\t\tfirstFile,\n\t\t\t\t\t\tstate.resolvedPaths\n\t\t\t\t\t);\n\t\t\t\t\tfilesToProcess.set(detectedFramework, validFiles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tstate.fileChangeQueue.clear();\n\n\t\tif (filesToProcess.size === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst affectedFrameworks = Array.from(filesToProcess.keys());\n\n\t\t// Add affected frameworks to the rebuild queue\n\t\tfor (const frameworkKey of affectedFrameworks) {\n\t\t\tstate.rebuildQueue.add(frameworkKey);\n\t\t}\n\n\t\t// Collect all files to rebuild\n\t\tconst filesToRebuild: string[] = [];\n\t\tfor (const [, filePaths] of filesToProcess) {\n\t\t\tfilesToRebuild.push(...filePaths);\n\t\t}\n\n\t\t// Trigger rebuild - the callback will be called with the manifest\n\t\tvoid triggerRebuild(state, config, onRebuildComplete, filesToRebuild);\n\t}, DEBOUNCE_MS);\n};\n\n/* Trigger a rebuild of the project\n This handles the \"rebuild when needed\" problem */\nexport const triggerRebuild = async (\n\tstate: HMRState,\n\tconfig: BuildConfig,\n\tonRebuildComplete: (result: {\n\t\tmanifest: Record<string, string>;\n\t\thmrState: HMRState;\n\t}) => void,\n\tfilesToRebuild?: string[]\n) => {\n\tif (state.isRebuilding) {\n\t\treturn null;\n\t}\n\n\tstate.isRebuilding = true;\n\tconst affectedFrameworks = Array.from(state.rebuildQueue);\n\tstate.rebuildQueue.clear();\n\n\tconst startTime = Date.now();\n\n\t// Notify clients that rebuild is starting\n\tbroadcastToClients(state, {\n\t\tdata: { affectedFrameworks },\n\t\tmessage: 'Rebuild started...',\n\t\ttype: 'rebuild-start'\n\t});\n\n\ttry {\n\t\tconst manifest = await build({\n\t\t\t...config,\n\t\t\tincrementalFiles:\n\t\t\t\tfilesToRebuild && filesToRebuild.length > 0\n\t\t\t\t\t? filesToRebuild\n\t\t\t\t\t: undefined,\n\t\t\toptions: {\n\t\t\t\t...config.options,\n\t\t\t\tpreserveIntermediateFiles: true,\n\t\t\t\tthrowOnError: true\n\t\t\t}\n\t\t});\n\n\t\tif (!manifest) {\n\t\t\tthrow new Error('Build failed - no manifest generated');\n\t\t}\n\n\t\tconst duration = Date.now() - startTime;\n\t\tlogger.rebuilt(duration);\n\n\t\t// Notify clients of successful rebuild\n\t\tbroadcastToClients(state, {\n\t\t\tdata: {\n\t\t\t\taffectedFrameworks,\n\t\t\t\tmanifest\n\t\t\t},\n\t\t\tmessage: 'Rebuild completed successfully',\n\t\t\ttype: 'rebuild-complete'\n\t\t});\n\n\t\t// Create smart module updates from changed files\n\t\tif (filesToRebuild && filesToRebuild.length > 0) {\n\t\t\tconst allModuleUpdates: Array<{\n\t\t\t\tsourceFile: string;\n\t\t\t\tframework: string;\n\t\t\t\tmoduleKeys: string[];\n\t\t\t\tmodulePaths: Record<string, string>;\n\t\t\t\tcomponentType?: 'client' | 'server';\n\t\t\t}> = [];\n\n\t\t\t// Group changed files by framework and create module updates\n\t\t\tfor (const framework of affectedFrameworks) {\n\t\t\t\tconst frameworkFiles = filesToRebuild.filter(\n\t\t\t\t\t(file) =>\n\t\t\t\t\t\tdetectFramework(file, state.resolvedPaths) === framework\n\t\t\t\t);\n\n\t\t\t\tif (frameworkFiles.length > 0) {\n\t\t\t\t\tconst moduleUpdates = createModuleUpdates(\n\t\t\t\t\t\tframeworkFiles,\n\t\t\t\t\t\tframework,\n\t\t\t\t\t\tmanifest,\n\t\t\t\t\t\tstate.resolvedPaths\n\t\t\t\t\t);\n\n\t\t\t\t\tif (moduleUpdates.length > 0) {\n\t\t\t\t\t\tallModuleUpdates.push(...moduleUpdates);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Simple React HMR: Re-render and send HTML patch\n\t\t\tif (\n\t\t\t\taffectedFrameworks.includes('react') &&\n\t\t\t\tfilesToRebuild &&\n\t\t\t\tstate.resolvedPaths.reactDir\n\t\t\t) {\n\t\t\t\tconst reactFiles = filesToRebuild.filter(\n\t\t\t\t\t(file) =>\n\t\t\t\t\t\tdetectFramework(file, state.resolvedPaths) === 'react'\n\t\t\t\t);\n\n\t\t\t\tif (reactFiles.length > 0) {\n\t\t\t\t\t// Prefer changed page files; fall back to any React file\n\t\t\t\t\tconst reactPageFiles = reactFiles.filter((file) => {\n\t\t\t\t\t\tconst normalized = file.replace(/\\\\/g, '/');\n\t\t\t\t\t\treturn normalized.includes('/pages/');\n\t\t\t\t\t});\n\t\t\t\t\tconst sourceFiles =\n\t\t\t\t\t\treactPageFiles.length > 0 ? reactPageFiles : reactFiles;\n\t\t\t\t\tconst primarySource = sourceFiles[0];\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// Check if only CSS files changed (no component files)\n\t\t\t\t\t\tconst hasComponentChanges = reactFiles.some(\n\t\t\t\t\t\t\t(file) =>\n\t\t\t\t\t\t\t\tfile.endsWith('.tsx') ||\n\t\t\t\t\t\t\t\tfile.endsWith('.ts') ||\n\t\t\t\t\t\t\t\tfile.endsWith('.jsx')\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst hasCSSChanges = reactFiles.some((file) =>\n\t\t\t\t\t\t\tfile.endsWith('.css')\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Log the HMR update\n\t\t\t\t\t\tif (hasCSSChanges && !hasComponentChanges) {\n\t\t\t\t\t\t\tlogger.cssUpdate(\n\t\t\t\t\t\t\t\tprimarySource ?? reactFiles[0] ?? '',\n\t\t\t\t\t\t\t\t'react'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlogger.hmrUpdate(\n\t\t\t\t\t\t\t\tprimarySource ?? reactFiles[0] ?? '',\n\t\t\t\t\t\t\t\t'react'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Send react-update message without HTML - client will import and re-render\n\t\t\t\t\t\tbroadcastToClients(state, {\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tframework: 'react',\n\t\t\t\t\t\t\t\tmanifest,\n\t\t\t\t\t\t\t\tsourceFiles,\n\t\t\t\t\t\t\t\tprimarySource,\n\t\t\t\t\t\t\t\thasComponentChanges: hasComponentChanges,\n\t\t\t\t\t\t\t\thasCSSChanges: hasCSSChanges\n\t\t\t\t\t\t\t\t// No html field - client handles the update\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttype: 'react-update'\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// SCRIPT-ONLY HMR: If only TypeScript/JavaScript scripts changed (not HTML pages),\n\t\t\t// send a lightweight script-update message. The client will use import.meta.hot to\n\t\t\t// hot-reload just the script, preserving DOM and state.\n\t\t\tif (\n\t\t\t\taffectedFrameworks.includes('html') &&\n\t\t\t\tfilesToRebuild &&\n\t\t\t\tstate.resolvedPaths.htmlDir\n\t\t\t) {\n\t\t\t\tconst htmlFrameworkFiles = filesToRebuild.filter(\n\t\t\t\t\t(file) =>\n\t\t\t\t\t\tdetectFramework(file, state.resolvedPaths) === 'html'\n\t\t\t\t);\n\n\t\t\t\tif (htmlFrameworkFiles.length > 0) {\n\t\t\t\t\t// Separate script files from HTML page files\n\t\t\t\t\tconst scriptFiles = htmlFrameworkFiles.filter(\n\t\t\t\t\t\t(f) =>\n\t\t\t\t\t\t\t(f.endsWith('.ts') ||\n\t\t\t\t\t\t\t\tf.endsWith('.js') ||\n\t\t\t\t\t\t\t\tf.endsWith('.tsx') ||\n\t\t\t\t\t\t\t\tf.endsWith('.jsx')) &&\n\t\t\t\t\t\t\tf.replace(/\\\\/g, '/').includes('/scripts/')\n\t\t\t\t\t);\n\t\t\t\t\tconst htmlPageFiles = htmlFrameworkFiles.filter((f) =>\n\t\t\t\t\t\tf.endsWith('.html')\n\t\t\t\t\t);\n\n\t\t\t\t\t// If ONLY scripts changed (no HTML pages), send script-update for each\n\t\t\t\t\tif (scriptFiles.length > 0 && htmlPageFiles.length === 0) {\n\t\t\t\t\t\tfor (const scriptFile of scriptFiles) {\n\t\t\t\t\t\t\t// Get the built script path from manifest\n\t\t\t\t\t\t\tconst { basename } = await import('node:path');\n\t\t\t\t\t\t\tconst { toPascal } = await import(\n\t\t\t\t\t\t\t\t'../utils/stringModifiers'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst scriptBaseName = basename(scriptFile).replace(\n\t\t\t\t\t\t\t\t/\\.(ts|js|tsx|jsx)$/,\n\t\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst pascalName = toPascal(scriptBaseName);\n\t\t\t\t\t\t\tconst manifestKey = pascalName;\n\t\t\t\t\t\t\tconst scriptPath = manifest[manifestKey] || null;\n\n\t\t\t\t\t\t\tif (scriptPath) {\n\t\t\t\t\t\t\t\tlogger.scriptUpdate(scriptFile, 'html');\n\t\t\t\t\t\t\t\tbroadcastToClients(state, {\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\tframework: 'html',\n\t\t\t\t\t\t\t\t\t\tscriptPath,\n\t\t\t\t\t\t\t\t\t\tsourceFile: scriptFile,\n\t\t\t\t\t\t\t\t\t\tmanifest\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttype: 'script-update'\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t\t\t\t`Script not found in manifest: ${manifestKey}`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Skip full HTML update since we handled the scripts\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Simple HTML HMR: Read HTML file and send HTML patch\n\t\t\t// Trigger if HTML files changed OR if CSS files in HTML directory changed (CSS updates need to push new HTML with updated CSS links)\n\t\t\tif (\n\t\t\t\taffectedFrameworks.includes('html') &&\n\t\t\t\tfilesToRebuild &&\n\t\t\t\tstate.resolvedPaths.htmlDir\n\t\t\t) {\n\t\t\t\tconst htmlFrameworkFiles = filesToRebuild.filter(\n\t\t\t\t\t(file) =>\n\t\t\t\t\t\tdetectFramework(file, state.resolvedPaths) === 'html'\n\t\t\t\t);\n\n\t\t\t\t// Trigger update if any HTML framework files changed (HTML files OR CSS files in HTML directory)\n\t\t\t\tif (htmlFrameworkFiles.length > 0) {\n\t\t\t\t\t// Collect all affected HTML pages (from dependency graph + direct edits)\n\t\t\t\t\tconst htmlPageFiles = htmlFrameworkFiles.filter((f) =>\n\t\t\t\t\t\tf.endsWith('.html')\n\t\t\t\t\t);\n\t\t\t\t\t// Only process if we have actual HTML files - skip if only scripts/CSS changed\n\t\t\t\t\tconst pagesToUpdate = htmlPageFiles;\n\n\t\t\t\t\t// Use the BUILT file path (which has updated CSS paths from updateAssetPaths)\n\t\t\t\t\t// Build path: build/html/pages/HTMLExample.html (or build/pages/HTMLExample.html if single)\n\t\t\t\t\tconst isSingle =\n\t\t\t\t\t\t!config.reactDirectory &&\n\t\t\t\t\t\t!config.svelteDirectory &&\n\t\t\t\t\t\t!config.vueDirectory &&\n\t\t\t\t\t\t!config.htmxDirectory;\n\t\t\t\t\tconst outputHtmlPages = isSingle\n\t\t\t\t\t\t? resolve(state.resolvedPaths.buildDir, 'pages')\n\t\t\t\t\t\t: resolve(\n\t\t\t\t\t\t\t\tstate.resolvedPaths.buildDir,\n\t\t\t\t\t\t\t\tbasename(config.htmlDirectory ?? 'html'),\n\t\t\t\t\t\t\t\t'pages'\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\tfor (const pageFile of pagesToUpdate) {\n\t\t\t\t\t\tconst htmlPageName = basename(pageFile);\n\t\t\t\t\t\tconst builtHtmlPagePath = resolve(\n\t\t\t\t\t\t\toutputHtmlPages,\n\t\t\t\t\t\t\thtmlPageName\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Simple approach: Read HTML file, extract body, send HTML patch\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { handleHTMLUpdate } = await import(\n\t\t\t\t\t\t\t\t'./simpleHTMLHMR'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst newHTML =\n\t\t\t\t\t\t\t\tawait handleHTMLUpdate(builtHtmlPagePath);\n\n\t\t\t\t\t\t\tif (newHTML) {\n\t\t\t\t\t\t\t\tlogger.hmrUpdate(pageFile, 'html');\n\t\t\t\t\t\t\t\t// Send simple HTML update to clients (includes updated CSS links from updateAssetPaths)\n\t\t\t\t\t\t\t\tbroadcastToClients(state, {\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\tframework: 'html',\n\t\t\t\t\t\t\t\t\t\thtml: newHTML,\n\t\t\t\t\t\t\t\t\t\tsourceFile: builtHtmlPagePath\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttype: 'html-update'\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Simple Vue HMR: Re-compile and re-render, send HTML patch\n\t\t\t// NOTE: Vue HMR happens AFTER the rebuild completes, so we have the updated manifest\n\t\t\tif (\n\t\t\t\taffectedFrameworks.includes('vue') &&\n\t\t\t\tfilesToRebuild &&\n\t\t\t\tconfig.vueDirectory\n\t\t\t) {\n\t\t\t\tconst vueFiles = filesToRebuild.filter(\n\t\t\t\t\t(file) =>\n\t\t\t\t\t\tdetectFramework(file, state.resolvedPaths) === 'vue'\n\t\t\t\t);\n\n\t\t\t\tif (vueFiles.length > 0) {\n\t\t\t\t\t// Detect CSS-only changes (no .vue files changed, only .css files)\n\t\t\t\t\tconst vueComponentFiles = vueFiles.filter((f) =>\n\t\t\t\t\t\tf.endsWith('.vue')\n\t\t\t\t\t);\n\t\t\t\t\tconst vueCssFiles = vueFiles.filter((f) =>\n\t\t\t\t\t\tf.endsWith('.css')\n\t\t\t\t\t);\n\t\t\t\t\tconst isCssOnlyChange =\n\t\t\t\t\t\tvueComponentFiles.length === 0 &&\n\t\t\t\t\t\tvueCssFiles.length > 0;\n\n\t\t\t\t\t// Find all Vue page components from changed files (supports multi-component)\n\t\t\t\t\tconst vuePageFiles = vueFiles.filter((f) =>\n\t\t\t\t\t\tf.replace(/\\\\/g, '/').includes('/pages/')\n\t\t\t\t\t);\n\t\t\t\t\t// If no pages found, use all .vue files (component changes trigger page rebuilds via dependency graph)\n\t\t\t\t\tconst pagesToUpdate =\n\t\t\t\t\t\tvuePageFiles.length > 0\n\t\t\t\t\t\t\t? vuePageFiles\n\t\t\t\t\t\t\t: vueComponentFiles;\n\n\t\t\t\t\t// For CSS-only changes (no .vue files changed), send CSS-only update\n\t\t\t\t\tif (isCssOnlyChange && vueCssFiles.length > 0) {\n\t\t\t\t\t\tconst { basename } = await import('node:path');\n\t\t\t\t\t\tconst { toPascal } = await import(\n\t\t\t\t\t\t\t'../utils/stringModifiers'\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Get CSS file info\n\t\t\t\t\t\tconst cssFile = vueCssFiles[0];\n\t\t\t\t\t\tif (cssFile) {\n\t\t\t\t\t\t\tconst cssBaseName = basename(cssFile, '.css');\n\t\t\t\t\t\t\tconst cssPascalName = toPascal(cssBaseName);\n\t\t\t\t\t\t\tconst cssKey = `${cssPascalName}CSS`;\n\t\t\t\t\t\t\tconst cssUrl = manifest[cssKey] || null;\n\n\t\t\t\t\t\t\tlogger.cssUpdate(cssFile, 'vue');\n\t\t\t\t\t\t\t// Broadcast CSS-only update\n\t\t\t\t\t\t\tbroadcastToClients(state, {\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\tframework: 'vue',\n\t\t\t\t\t\t\t\t\tupdateType: 'css-only',\n\t\t\t\t\t\t\t\t\tcssUrl,\n\t\t\t\t\t\t\t\t\tcssBaseName,\n\t\t\t\t\t\t\t\t\tmanifest,\n\t\t\t\t\t\t\t\t\tsourceFile: cssFile\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttype: 'vue-update'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Process each affected Vue page\n\t\t\t\t\tfor (const vuePagePath of pagesToUpdate) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { basename, relative } = await import(\n\t\t\t\t\t\t\t\t'node:path'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst { toPascal } = await import(\n\t\t\t\t\t\t\t\t'../utils/stringModifiers'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst fileName = basename(vuePagePath);\n\t\t\t\t\t\t\tconst baseName = fileName.replace(/\\.vue$/, '');\n\t\t\t\t\t\t\tconst pascalName = toPascal(baseName);\n\n\t\t\t\t\t\t\t// Calculate HMR ID (relative path without .vue extension, matches compileVue.ts)\n\t\t\t\t\t\t\tconst vueRoot = config.vueDirectory;\n\t\t\t\t\t\t\tconst hmrId = vueRoot\n\t\t\t\t\t\t\t\t? relative(vueRoot, vuePagePath)\n\t\t\t\t\t\t\t\t\t\t.replace(/\\\\/g, '/')\n\t\t\t\t\t\t\t\t\t\t.replace(/\\.vue$/, '')\n\t\t\t\t\t\t\t\t: baseName;\n\n\t\t\t\t\t\t\t// Get CSS URL from manifest\n\t\t\t\t\t\t\tconst cssKey = `${pascalName}CSS`;\n\t\t\t\t\t\t\tconst cssUrl = manifest[cssKey] || null;\n\n\t\t\t\t\t\t\t// Get change type from vueHmrMetadata (populated during compile)\n\t\t\t\t\t\t\t// Enables native Vue HMR: rerender() for template-only, reload() for script\n\t\t\t\t\t\t\t// style-only changes get CSS hot-swap (state preserved!)\n\t\t\t\t\t\t\tconst { vueHmrMetadata } = await import(\n\t\t\t\t\t\t\t\t'../build/compileVue'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst hmrMeta = vueHmrMetadata.get(\n\t\t\t\t\t\t\t\tresolve(vuePagePath)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst changeType = hmrMeta?.changeType ?? 'full';\n\n\t\t\t\t\t\t\t// Check for style-only change - send CSS-only update (preserves state!)\n\t\t\t\t\t\t\tif (changeType === 'style-only') {\n\t\t\t\t\t\t\t\tlogger.cssUpdate(vuePagePath, 'vue');\n\t\t\t\t\t\t\t\tbroadcastToClients(state, {\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\tframework: 'vue',\n\t\t\t\t\t\t\t\t\t\tupdateType: 'css-only',\n\t\t\t\t\t\t\t\t\t\tchangeType: 'style-only',\n\t\t\t\t\t\t\t\t\t\tcssUrl,\n\t\t\t\t\t\t\t\t\t\tcssBaseName: baseName,\n\t\t\t\t\t\t\t\t\t\thmrId,\n\t\t\t\t\t\t\t\t\t\tmanifest,\n\t\t\t\t\t\t\t\t\t\tsourceFile: vuePagePath\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttype: 'vue-update'\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst { handleVueUpdate } = await import(\n\t\t\t\t\t\t\t\t'./simpleVueHMR'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst newHTML = await handleVueUpdate(\n\t\t\t\t\t\t\t\tvuePagePath,\n\t\t\t\t\t\t\t\tmanifest,\n\t\t\t\t\t\t\t\tstate.resolvedPaths.buildDir\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst componentPath =\n\t\t\t\t\t\t\t\tmanifest[`${pascalName}Client`] || null;\n\n\t\t\t\t\t\t\tlogger.hmrUpdate(vuePagePath, 'vue');\n\t\t\t\t\t\t\tbroadcastToClients(state, {\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\tframework: 'vue',\n\t\t\t\t\t\t\t\t\thtml: newHTML,\n\t\t\t\t\t\t\t\t\thmrId,\n\t\t\t\t\t\t\t\t\tchangeType,\n\t\t\t\t\t\t\t\t\tcomponentPath,\n\t\t\t\t\t\t\t\t\tcssUrl,\n\t\t\t\t\t\t\t\t\tupdateType: 'full',\n\t\t\t\t\t\t\t\t\tmanifest,\n\t\t\t\t\t\t\t\t\tsourceFile: vuePagePath\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttype: 'vue-update'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Simple Svelte HMR: Re-compile and re-render, send HTML patch\n\t\t\t// NOTE: Svelte HMR happens AFTER the rebuild completes, so we have the updated manifest\n\t\t\tif (\n\t\t\t\taffectedFrameworks.includes('svelte') &&\n\t\t\t\tfilesToRebuild &&\n\t\t\t\tconfig.svelteDirectory\n\t\t\t) {\n\t\t\t\tconst svelteFiles = filesToRebuild.filter(\n\t\t\t\t\t(file) =>\n\t\t\t\t\t\tdetectFramework(file, state.resolvedPaths) === 'svelte'\n\t\t\t\t);\n\n\t\t\t\tif (svelteFiles.length > 0) {\n\t\t\t\t\t// Detect CSS-only changes (no .svelte files changed, only .css files)\n\t\t\t\t\tconst svelteComponentFiles = svelteFiles.filter((f) =>\n\t\t\t\t\t\tf.endsWith('.svelte')\n\t\t\t\t\t);\n\t\t\t\t\tconst svelteCssFiles = svelteFiles.filter((f) =>\n\t\t\t\t\t\tf.endsWith('.css')\n\t\t\t\t\t);\n\t\t\t\t\tconst isCssOnlyChange =\n\t\t\t\t\t\tsvelteComponentFiles.length === 0 &&\n\t\t\t\t\t\tsvelteCssFiles.length > 0;\n\n\t\t\t\t\t// Find all Svelte page components from changed files (supports multi-component)\n\t\t\t\t\tconst sveltePageFiles = svelteFiles.filter((f) =>\n\t\t\t\t\t\tf.replace(/\\\\/g, '/').includes('/pages/')\n\t\t\t\t\t);\n\t\t\t\t\t// If no pages found, use all .svelte files (component changes trigger page rebuilds via dependency graph)\n\t\t\t\t\tconst pagesToUpdate =\n\t\t\t\t\t\tsveltePageFiles.length > 0\n\t\t\t\t\t\t\t? sveltePageFiles\n\t\t\t\t\t\t\t: svelteComponentFiles;\n\n\t\t\t\t\t// For CSS-only changes, send CSS-only update (preserves component state!)\n\t\t\t\t\tif (isCssOnlyChange && svelteCssFiles.length > 0) {\n\t\t\t\t\t\tconst { basename } = await import('node:path');\n\t\t\t\t\t\tconst { toPascal } = await import(\n\t\t\t\t\t\t\t'../utils/stringModifiers'\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// Get CSS file info\n\t\t\t\t\t\tconst cssFile = svelteCssFiles[0];\n\t\t\t\t\t\tif (cssFile) {\n\t\t\t\t\t\t\tconst cssBaseName = basename(cssFile, '.css');\n\t\t\t\t\t\t\tconst cssPascalName = toPascal(cssBaseName);\n\t\t\t\t\t\t\tconst cssKey = `${cssPascalName}CSS`;\n\t\t\t\t\t\t\tconst cssUrl = manifest[cssKey] || null;\n\n\t\t\t\t\t\t\tlogger.cssUpdate(cssFile, 'svelte');\n\t\t\t\t\t\t\t// Broadcast CSS-only update\n\t\t\t\t\t\t\tbroadcastToClients(state, {\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\tframework: 'svelte',\n\t\t\t\t\t\t\t\t\tupdateType: 'css-only',\n\t\t\t\t\t\t\t\t\tcssUrl,\n\t\t\t\t\t\t\t\t\tcssBaseName,\n\t\t\t\t\t\t\t\t\tmanifest,\n\t\t\t\t\t\t\t\t\tsourceFile: cssFile\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttype: 'svelte-update'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Process each affected Svelte page\n\t\t\t\t\tfor (const sveltePagePath of pagesToUpdate) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { handleSvelteUpdate } = await import(\n\t\t\t\t\t\t\t\t'./simpleSvelteHMR'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst newHTML = await handleSvelteUpdate(\n\t\t\t\t\t\t\t\tsveltePagePath,\n\t\t\t\t\t\t\t\tmanifest,\n\t\t\t\t\t\t\t\tstate.resolvedPaths.buildDir\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst { basename } = await import('node:path');\n\t\t\t\t\t\t\tconst { toPascal } = await import(\n\t\t\t\t\t\t\t\t'../utils/stringModifiers'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst fileName = basename(sveltePagePath);\n\t\t\t\t\t\t\tconst baseName = fileName.replace(/\\.svelte$/, '');\n\t\t\t\t\t\t\tconst pascalName = toPascal(baseName);\n\n\t\t\t\t\t\t\t// Get CSS URL from manifest\n\t\t\t\t\t\t\tconst cssKey = `${pascalName}CSS`;\n\t\t\t\t\t\t\tconst cssUrl = manifest[cssKey] || null;\n\n\t\t\t\t\t\t\tlogger.hmrUpdate(sveltePagePath, 'svelte');\n\t\t\t\t\t\t\tbroadcastToClients(state, {\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\tframework: 'svelte',\n\t\t\t\t\t\t\t\t\thtml: newHTML,\n\t\t\t\t\t\t\t\t\tcssUrl,\n\t\t\t\t\t\t\t\t\tcssBaseName: baseName,\n\t\t\t\t\t\t\t\t\tupdateType: 'full',\n\t\t\t\t\t\t\t\t\tmanifest,\n\t\t\t\t\t\t\t\t\tsourceFile: sveltePagePath\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttype: 'svelte-update'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// HTMX SCRIPT-ONLY HMR: Same as HTML - if only scripts changed, send script-update\n\t\t\tif (\n\t\t\t\taffectedFrameworks.includes('htmx') &&\n\t\t\t\tfilesToRebuild &&\n\t\t\t\tstate.resolvedPaths.htmxDir\n\t\t\t) {\n\t\t\t\tconst htmxFrameworkFiles = filesToRebuild.filter(\n\t\t\t\t\t(file) =>\n\t\t\t\t\t\tdetectFramework(file, state.resolvedPaths) === 'htmx'\n\t\t\t\t);\n\n\t\t\t\tif (htmxFrameworkFiles.length > 0) {\n\t\t\t\t\tconst htmxScriptFiles = htmxFrameworkFiles.filter(\n\t\t\t\t\t\t(f) =>\n\t\t\t\t\t\t\t(f.endsWith('.ts') ||\n\t\t\t\t\t\t\t\tf.endsWith('.js') ||\n\t\t\t\t\t\t\t\tf.endsWith('.tsx') ||\n\t\t\t\t\t\t\t\tf.endsWith('.jsx')) &&\n\t\t\t\t\t\t\tf.replace(/\\\\/g, '/').includes('/scripts/')\n\t\t\t\t\t);\n\t\t\t\t\tconst htmxHtmlFiles = htmxFrameworkFiles.filter((f) =>\n\t\t\t\t\t\tf.endsWith('.html')\n\t\t\t\t\t);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\thtmxScriptFiles.length > 0 &&\n\t\t\t\t\t\thtmxHtmlFiles.length === 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tfor (const scriptFile of htmxScriptFiles) {\n\t\t\t\t\t\t\tconst { basename } = await import('node:path');\n\t\t\t\t\t\t\tconst { toPascal } = await import(\n\t\t\t\t\t\t\t\t'../utils/stringModifiers'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst scriptBaseName = basename(scriptFile).replace(\n\t\t\t\t\t\t\t\t/\\.(ts|js|tsx|jsx)$/,\n\t\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst pascalName = toPascal(scriptBaseName);\n\t\t\t\t\t\t\tconst manifestKey = pascalName;\n\t\t\t\t\t\t\tconst scriptPath = manifest[manifestKey] || null;\n\n\t\t\t\t\t\t\tif (scriptPath) {\n\t\t\t\t\t\t\t\tlogger.scriptUpdate(scriptFile, 'htmx');\n\t\t\t\t\t\t\t\tbroadcastToClients(state, {\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\tframework: 'htmx',\n\t\t\t\t\t\t\t\t\t\tscriptPath,\n\t\t\t\t\t\t\t\t\t\tsourceFile: scriptFile,\n\t\t\t\t\t\t\t\t\t\tmanifest\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttype: 'script-update'\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Simple HTMX HMR: Read HTMX file and send HTML patch\n\t\t\t// Trigger if HTMX files changed OR if CSS files in HTMX directory changed (CSS updates need to push new HTML with updated CSS links)\n\t\t\tif (\n\t\t\t\taffectedFrameworks.includes('htmx') &&\n\t\t\t\tfilesToRebuild &&\n\t\t\t\tstate.resolvedPaths.htmxDir\n\t\t\t) {\n\t\t\t\tconst htmxFrameworkFiles = filesToRebuild.filter(\n\t\t\t\t\t(file) =>\n\t\t\t\t\t\tdetectFramework(file, state.resolvedPaths) === 'htmx'\n\t\t\t\t);\n\n\t\t\t\t// Trigger update if any HTMX framework files changed (HTML files OR CSS files in HTMX directory)\n\t\t\t\tif (htmxFrameworkFiles.length > 0) {\n\t\t\t\t\t// Only process if we have actual HTML page files - skip if only scripts/CSS changed\n\t\t\t\t\tconst htmxPageFiles = htmxFrameworkFiles.filter((f) =>\n\t\t\t\t\t\tf.endsWith('.html')\n\t\t\t\t\t);\n\n\t\t\t\t\t// Use the BUILT file path (which has updated CSS paths from updateAssetPaths)\n\t\t\t\t\t// Build path: build/htmx/pages/*.html (or build/pages/*.html if single)\n\t\t\t\t\tconst isSingle =\n\t\t\t\t\t\t!config.reactDirectory &&\n\t\t\t\t\t\t!config.svelteDirectory &&\n\t\t\t\t\t\t!config.vueDirectory &&\n\t\t\t\t\t\t!config.htmlDirectory;\n\t\t\t\t\tconst outputHtmxPages = isSingle\n\t\t\t\t\t\t? resolve(state.resolvedPaths.buildDir, 'pages')\n\t\t\t\t\t\t: resolve(\n\t\t\t\t\t\t\t\tstate.resolvedPaths.buildDir,\n\t\t\t\t\t\t\t\tbasename(config.htmxDirectory ?? 'htmx'),\n\t\t\t\t\t\t\t\t'pages'\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t// Process each affected HTMX page\n\t\t\t\t\tfor (const htmxPageFile of htmxPageFiles) {\n\t\t\t\t\t\tconst htmxPageName = basename(htmxPageFile);\n\t\t\t\t\t\tconst builtHtmxPagePath = resolve(\n\t\t\t\t\t\t\toutputHtmxPages,\n\t\t\t\t\t\t\thtmxPageName\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst { handleHTMXUpdate } = await import(\n\t\t\t\t\t\t\t\t'./simpleHTMXHMR'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst newHTML =\n\t\t\t\t\t\t\t\tawait handleHTMXUpdate(builtHtmxPagePath);\n\n\t\t\t\t\t\t\tif (newHTML) {\n\t\t\t\t\t\t\t\tlogger.hmrUpdate(htmxPageFile, 'htmx');\n\t\t\t\t\t\t\t\tbroadcastToClients(state, {\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\tframework: 'htmx',\n\t\t\t\t\t\t\t\t\t\thtml: newHTML,\n\t\t\t\t\t\t\t\t\t\tsourceFile: builtHtmxPagePath\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttype: 'htmx-update'\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increment module versions for all updated modules\n\t\t\tconst updatedModulePaths: string[] = [];\n\t\t\tfor (const update of allModuleUpdates) {\n\t\t\t\t// Add source file path\n\t\t\t\tupdatedModulePaths.push(update.sourceFile);\n\t\t\t\t// Add all manifest module paths\n\t\t\t\tfor (const modulePath of Object.values(update.modulePaths)) {\n\t\t\t\t\tupdatedModulePaths.push(modulePath);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (updatedModulePaths.length > 0) {\n\t\t\t\tincrementModuleVersions(\n\t\t\t\t\tstate.moduleVersions,\n\t\t\t\t\tupdatedModulePaths\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Send module-level updates grouped by framework\n\t\t\tif (allModuleUpdates.length > 0) {\n\t\t\t\tconst updatesByFramework =\n\t\t\t\t\tgroupModuleUpdatesByFramework(allModuleUpdates);\n\t\t\t\tconst serverVersions = serializeModuleVersions(\n\t\t\t\t\tstate.moduleVersions\n\t\t\t\t);\n\n\t\t\t\tfor (const [framework, updates] of updatesByFramework) {\n\t\t\t\t\t// Get versions for updated modules\n\t\t\t\t\tconst moduleVersions: Record<string, number> = {};\n\t\t\t\t\tfor (const update of updates) {\n\t\t\t\t\t\tconst sourceVersion = state.moduleVersions.get(\n\t\t\t\t\t\t\tupdate.sourceFile\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (sourceVersion !== undefined) {\n\t\t\t\t\t\t\tmoduleVersions[update.sourceFile] = sourceVersion;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const [, path] of Object.entries(\n\t\t\t\t\t\t\tupdate.modulePaths\n\t\t\t\t\t\t)) {\n\t\t\t\t\t\t\tconst pathVersion = state.moduleVersions.get(path);\n\t\t\t\t\t\t\tif (pathVersion !== undefined) {\n\t\t\t\t\t\t\t\tmoduleVersions[path] = pathVersion;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbroadcastToClients(state, {\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tframework,\n\t\t\t\t\t\t\tmanifest,\n\t\t\t\t\t\t\tmodules: updates.map((update) => ({\n\t\t\t\t\t\t\t\tcomponentType: update.componentType,\n\t\t\t\t\t\t\t\tmoduleKeys: update.moduleKeys,\n\t\t\t\t\t\t\t\tmodulePaths: update.modulePaths,\n\t\t\t\t\t\t\t\tsourceFile: update.sourceFile, // Include component type for React Fast Refresh\n\t\t\t\t\t\t\t\tversion: state.moduleVersions.get(\n\t\t\t\t\t\t\t\t\tupdate.sourceFile\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t// Include version // Include version\n\t\t\t\t\t\t\t})), // Include full manifest for reference\n\t\t\t\t\t\t\tmoduleVersions: moduleVersions, // Include versions for updated modules\n\t\t\t\t\t\t\tserverVersions: serverVersions\n\t\t\t\t\t\t\t// Include all server versions for sync check // Include all server versions for sync check\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmessage: `${framework} modules updated`,\n\t\t\t\t\t\ttype: 'module-update'\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Send individual framework updates (for backward compatibility)\n\t\tfor (const framework of affectedFrameworks) {\n\t\t\tbroadcastToClients(state, {\n\t\t\t\tdata: {\n\t\t\t\t\tframework,\n\t\t\t\t\tmanifest\n\t\t\t\t},\n\t\t\t\tmessage: `${framework} framework updated`,\n\t\t\t\ttype: 'framework-update'\n\t\t\t});\n\t\t}\n\n\t\t// Call the callback with the new build result\n\t\tonRebuildComplete({ manifest, hmrState: state });\n\n\t\t// Refresh in-memory asset store and clean stale files AFTER all\n\t\t// broadcasts are sent. This must come last because populateAssetStore\n\t\t// is async — if it runs before broadcasts, Bun --hot can restart\n\t\t// the server in the gap, dropping WebSocket clients before they\n\t\t// receive the HMR update.\n\t\tawait populateAssetStore(\n\t\t\tstate.assetStore,\n\t\t\tmanifest,\n\t\t\tstate.resolvedPaths.buildDir\n\t\t);\n\t\tawait cleanStaleAssets(\n\t\t\tstate.assetStore,\n\t\t\tmanifest,\n\t\t\tstate.resolvedPaths.buildDir\n\t\t);\n\n\t\treturn manifest;\n\t} catch (error) {\n\t\tconst errorData = extractBuildErrorDetails(\n\t\t\terror,\n\t\t\taffectedFrameworks,\n\t\t\tstate.resolvedPaths\n\t\t);\n\t\tbroadcastToClients(state, {\n\t\t\tdata: {\n\t\t\t\taffectedFrameworks,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t...errorData\n\t\t\t},\n\t\t\tmessage: 'Rebuild failed',\n\t\t\ttype: 'rebuild-error'\n\t\t});\n\n\t\treturn null;\n\t} finally {\n\t\tstate.isRebuilding = false;\n\t\t// Flush changes accumulated during rebuild\n\t\tif (state.fileChangeQueue.size > 0) {\n\t\t\tconst pending = Array.from(state.fileChangeQueue.keys());\n\t\t\tconst queuedFiles: string[] = [];\n\t\t\tfor (const [, filePaths] of state.fileChangeQueue) {\n\t\t\t\tqueuedFiles.push(...filePaths);\n\t\t\t}\n\t\t\tstate.fileChangeQueue.clear();\n\t\t\tfor (const f of pending) state.rebuildQueue.add(f);\n\t\t\tif (state.rebuildTimeout) clearTimeout(state.rebuildTimeout);\n\t\t\tstate.rebuildTimeout = setTimeout(() => {\n\t\t\t\tvoid triggerRebuild(\n\t\t\t\t\tstate,\n\t\t\t\t\tconfig,\n\t\t\t\t\tonRebuildComplete,\n\t\t\t\t\tqueuedFiles.length > 0 ? queuedFiles : undefined\n\t\t\t\t);\n\t\t\t}, 50);\n\t\t}\n\t}\n};\n",
|
|
45
|
+
"import { createHash } from 'node:crypto';\nimport { readFileSync } from 'node:fs';\nimport { normalizePath } from '../utils/normalizePath';\n\n/* This function computes SHA-256 hash of a file's contents\n satisfying the file hashing portion of HMR optimization */\nexport const computeFileHash = (filePath: string) => {\n\ttry {\n\t\tconst fileContent = readFileSync(filePath);\n\t\tconst hash = createHash('sha256');\n\t\thash.update(fileContent);\n\n\t\treturn hash.digest('hex');\n\t} catch {\n\t\treturn Date.now().toString();\n\t}\n};\n\n/* This function checks if the file has changed by comparing its\n current hash to the previous hash\n this handles the detection of actual changes */\nexport const hasFileChanged = (\n\tfilePath: string,\n\tcurrentHash: string,\n\tpreviousHashes: Map<string, string>\n) => {\n\t// Normalize path for consistent Map key lookup across platforms\n\tconst normalizedPath = normalizePath(filePath);\n\tconst previousHash = previousHashes.get(normalizedPath);\n\n\tif (!previousHash) {\n\t\t// \"First time seeing this file, definitely changed\" essentially\n\t\treturn true;\n\t}\n\n\treturn previousHash !== currentHash;\n};\n",
|
|
46
|
+
"import { basename, resolve } from 'node:path';\nimport { toPascal } from '../utils/stringModifiers';\nimport {\n\tclassifyComponent,\n\ttype ComponentType\n} from './reactComponentClassifier';\n\n/* Maps source files to their manifest entries\n This handles the \"what modules changed\" problem for Smart Module Updates */\nexport type ModuleUpdate = {\n\tsourceFile: string;\n\tframework: string;\n\tmoduleKeys: string[]; // Manifest keys for this module (e.g., ['ReactExampleIndex', 'ReactExampleCSS'])\n\tmodulePaths: Record<string, string>; // Map of manifest keys to their new paths\n\tcomponentType?: ComponentType; // 'client' | 'server' - only for React components\n};\n\n/* Map a source file to its manifest entry keys\n This handles framework-specific manifest key derivation */\nexport const mapSourceFileToManifestKeys = (\n\tsourceFile: string,\n\tframework: string,\n\tresolvedPaths?: {\n\t\treactDir?: string;\n\t\tsvelteDir?: string;\n\t\tvueDir?: string;\n\t\tangularDir?: string;\n\t}\n) => {\n\tconst normalizedFile = resolve(sourceFile);\n\tconst fileName = basename(normalizedFile);\n\n\t// Extract base name without extension\n\tconst baseName = fileName.replace(/\\.(tsx?|jsx?|vue|svelte|css|html)$/, '');\n\tconst pascalName = toPascal(baseName);\n\n\tconst keys: string[] = [];\n\n\tconst inSubdir = (dir: string | undefined, sub: string) => {\n\t\tif (!dir) return false;\n\t\tconst prefix = `${dir.replace(/\\\\/g, '/')}/${sub}/`;\n\t\treturn normalizedFile.startsWith(prefix);\n\t};\n\n\tswitch (framework) {\n\t\tcase 'react':\n\t\t\t// React pages (in pages/ directory) have Index entries\n\t\t\tif (\n\t\t\t\tinSubdir(resolvedPaths?.reactDir, 'pages') ||\n\t\t\t\tnormalizedFile.includes('/react/pages/')\n\t\t\t) {\n\t\t\t\tkeys.push(`${pascalName}Index`);\n\t\t\t\tkeys.push(`${pascalName}CSS`); // CSS might exist\n\t\t\t}\n\t\t\t// React components don't have direct manifest entries\n\t\t\t// They're bundled into the page that imports them\n\t\t\t// The dependency graph ensures the page is rebuilt when a component changes\n\t\t\tbreak;\n\n\t\tcase 'svelte':\n\t\t\t// Svelte pages have both main entry and index\n\t\t\tif (\n\t\t\t\tinSubdir(resolvedPaths?.svelteDir, 'pages') ||\n\t\t\t\tnormalizedFile.includes('/svelte/pages/')\n\t\t\t) {\n\t\t\t\tkeys.push(pascalName);\n\t\t\t\tkeys.push(`${pascalName}Index`);\n\t\t\t\tkeys.push(`${pascalName}CSS`); // CSS might exist\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'vue':\n\t\t\t// Vue pages have main entry, index, and CSS\n\t\t\tif (\n\t\t\t\tinSubdir(resolvedPaths?.vueDir, 'pages') ||\n\t\t\t\tnormalizedFile.includes('/vue/pages/')\n\t\t\t) {\n\t\t\t\tkeys.push(pascalName);\n\t\t\t\tkeys.push(`${pascalName}Index`);\n\t\t\t\tkeys.push(`${pascalName}CSS`);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'angular':\n\t\t\t// Angular pages have main entry and index\n\t\t\tif (\n\t\t\t\tinSubdir(resolvedPaths?.angularDir, 'pages') ||\n\t\t\t\tnormalizedFile.includes('/angular/pages/')\n\t\t\t) {\n\t\t\t\tkeys.push(pascalName);\n\t\t\t\tkeys.push(`${pascalName}Index`);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'html':\n\t\tcase 'htmx':\n\t\t\t// HTML/HTMX files are directly referenced, no manifest entries needed\n\t\t\tbreak;\n\n\t\tcase 'assets':\n\t\t\t// CSS files use CSS suffix\n\t\t\tif (normalizedFile.endsWith('.css')) {\n\t\t\t\tkeys.push(`${pascalName}CSS`);\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\treturn keys;\n};\n\n/* Create module update payloads from changed files\n This handles the \"build module updates\" problem */\nexport const createModuleUpdates = (\n\tchangedFiles: string[],\n\tframework: string,\n\tmanifest: Record<string, string>,\n\tresolvedPaths?: {\n\t\treactDir?: string;\n\t\tsvelteDir?: string;\n\t\tvueDir?: string;\n\t\tangularDir?: string;\n\t}\n) => {\n\tconst updates: ModuleUpdate[] = [];\n\tconst processedFiles = new Set<string>();\n\n\tfor (const sourceFile of changedFiles) {\n\t\tconst normalizedFile = resolve(sourceFile);\n\t\tconst normalizedPath = normalizedFile.replace(/\\\\/g, '/');\n\n\t\t// Skip if already processed\n\t\tif (processedFiles.has(normalizedFile)) continue;\n\t\tprocessedFiles.add(normalizedFile);\n\n\t\t// Get manifest keys for this file\n\t\tconst moduleKeys = mapSourceFileToManifestKeys(\n\t\t\tnormalizedFile,\n\t\t\tframework,\n\t\t\tresolvedPaths\n\t\t);\n\n\t\t// Special handling: For React components, check if we need to look for page-level entries\n\t\t// Components don't have direct manifest entries, but the dependency graph ensures\n\t\t// that any page importing this component is also in changedFiles\n\t\t// So we'll find it when processing that page file\n\n\t\t// For React, if this is a component (not a page), we still want to track it\n\t\t// for Fast Refresh, even though it doesn't have direct manifest entries.\n\t\t// The dependency graph ensures dependent pages are rebuilt, but we need\n\t\t// to know about component changes for client-side HMR.\n\t\t//\n\t\t// However, components don't have manifest entries, so we'll skip creating\n\t\t// a ModuleUpdate here. Instead, we'll handle component updates separately\n\t\t// in the rebuild trigger by checking if changed files include components.\n\t\tconst isReactPage = resolvedPaths?.reactDir\n\t\t\t? normalizedPath.startsWith(\n\t\t\t\t\t`${resolvedPaths.reactDir.replace(/\\\\/g, '/')}/pages/`\n\t\t\t\t)\n\t\t\t: normalizedPath.includes('/react/pages/');\n\n\t\tif (framework === 'react' && !isReactPage) {\n\t\t\t// This is a component - components are handled via dependency graph\n\t\t\t// The page that imports it will be rebuilt and have a ModuleUpdate\n\t\t\t// Component updates will be handled in Phase 2 (Client HMR)\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Build module paths from manifest (only include keys that exist)\n\t\tconst modulePaths: Record<string, string> = {};\n\t\tfor (const key of moduleKeys) {\n\t\t\tif (manifest[key]) {\n\t\t\t\tmodulePaths[key] = manifest[key];\n\t\t\t}\n\t\t}\n\n\t\t// Only create update if we found manifest entries\n\t\tif (Object.keys(modulePaths).length > 0) {\n\t\t\t// Classify React components for Fast Refresh\n\t\t\tconst componentType =\n\t\t\t\tframework === 'react'\n\t\t\t\t\t? classifyComponent(normalizedFile)\n\t\t\t\t\t: undefined;\n\n\t\t\tupdates.push({\n\t\t\t\tcomponentType,\n\t\t\t\tframework,\n\t\t\t\tmoduleKeys: Object.keys(modulePaths),\n\t\t\t\tmodulePaths,\n\t\t\t\tsourceFile: normalizedFile\n\t\t\t});\n\t\t}\n\t}\n\n\treturn updates;\n};\n\n/* Group module updates by framework\n This handles the \"organize updates\" problem */\nexport const groupModuleUpdatesByFramework = (updates: ModuleUpdate[]) => {\n\tconst grouped = new Map<string, ModuleUpdate[]>();\n\n\tfor (const update of updates) {\n\t\tif (!grouped.has(update.framework)) {\n\t\t\tgrouped.set(update.framework, []);\n\t\t}\n\t\tgrouped.get(update.framework)!.push(update);\n\t}\n\n\treturn grouped;\n};\n",
|
|
47
|
+
"import { resolve } from 'node:path';\n\n/* Component classification for React Fast Refresh\n Distinguishes between Client Components and Server Components */\nexport type ComponentType = 'client' | 'server';\n\n/* Classify a React component file as either 'client' or 'server'\n \n Rules:\n - Files in /react/pages/ → 'server' (Server Components - rendered on server)\n - Files in /react/components/ → 'client' (Client Components - client-only)\n - Files in /react/composables/ → 'client' (Client Components - client-only)\n - All other React files → 'client' (default to client for safety)\n \n This classification determines how HMR updates are handled:\n - Server Components: Re-render on server, send flight data, patch DOM\n - Client Components: Hot-replace module, re-render in client tree\n*/\nexport const classifyComponent = (filePath: string) => {\n\tconst normalizedPath = resolve(filePath);\n\n\t// Server Components: Pages are rendered on the server\n\tif (normalizedPath.includes('/react/pages/')) {\n\t\treturn 'server';\n\t}\n\n\t// Client Components: Components and composables are client-only\n\tif (\n\t\tnormalizedPath.includes('/react/components/') ||\n\t\tnormalizedPath.includes('/react/composables/')\n\t) {\n\t\treturn 'client';\n\t}\n\n\t// Default to 'client' for any other React files\n\t// This is safer than defaulting to 'server' because client components\n\t// can always be hot-replaced, but server components require special handling\n\treturn 'client';\n};\n",
|
|
48
|
+
"import type { HMRState } from './clientManager';\nimport { serializeModuleVersions } from './moduleVersionTracker';\nimport type { HMRWebSocket } from '../../types/websocket';\nimport { WS_READY_STATE_OPEN } from '../../types/websocket';\nimport type { HMRClientMessage } from '../../types/messages';\nimport { isValidHMRClientMessage } from '../../types/messages';\n\n/* Magic pt. 2 - when a browser connects to our WebSocket\n We send them the current manifest so they know what files exist\n Like giving them a menu of all the dishes we can serve */\nexport const handleClientConnect = (\n\tstate: HMRState,\n\tclient: HMRWebSocket,\n\tmanifest: Record<string, string>\n) => {\n\tstate.connectedClients.add(client);\n\n\t// Send them the current state of the menu (manifest) and module versions\n\tconst serverVersions = serializeModuleVersions(state.moduleVersions);\n\tclient.send(\n\t\tJSON.stringify({\n\t\t\tdata: {\n\t\t\t\tmanifest,\n\t\t\t\tserverVersions\n\t\t\t},\n\t\t\ttimestamp: Date.now(),\n\t\t\ttype: 'manifest'\n\t\t})\n\t);\n\n\t// And confirm they're connected\n\tclient.send(\n\t\tJSON.stringify({\n\t\t\tmessage: 'HMR client connected successfully',\n\t\t\ttimestamp: Date.now(),\n\t\t\ttype: 'connected'\n\t\t})\n\t);\n};\n\n/* When a client disconnects, remove them from our tracking\n This prevents memory leaks and keeps our client list clean */\nexport const handleClientDisconnect = (\n\tstate: HMRState,\n\tclient: HMRWebSocket\n) => {\n\tstate.connectedClients.delete(client);\n};\n\n/* Handle messages from clients - they might ping us or request rebuilds\n We need to handle different message types because WebSocket is just a pipe/stream */\nexport const handleHMRMessage = (\n\tstate: HMRState,\n\tclient: HMRWebSocket,\n\tmessage: unknown\n) => {\n\ttry {\n\t\t/* WebSocket messages can come in different formats\n sometimes they're strings, sometimes they're Buffers, sometimes they're objects...\n we need to handle all of them because JavaScript is weird like that */\n\t\tlet parsedData: unknown;\n\n\t\tif (typeof message === 'string') {\n\t\t\tparsedData = JSON.parse(message);\n\t\t} else if (message instanceof Buffer) {\n\t\t\tparsedData = JSON.parse(message.toString());\n\t\t} else if (message instanceof ArrayBuffer) {\n\t\t\tparsedData = JSON.parse(\n\t\t\t\tnew TextDecoder().decode(new Uint8Array(message))\n\t\t\t);\n\t\t} else if (ArrayBuffer.isView(message)) {\n\t\t\tparsedData = JSON.parse(\n\t\t\t\tnew TextDecoder().decode(message as Uint8Array)\n\t\t\t);\n\t\t} else if (typeof message === 'object' && message !== null) {\n\t\t\t// Message is already an object - no parsing needed\n\t\t\tparsedData = message;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!isValidHMRClientMessage(parsedData)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst data: HMRClientMessage = parsedData;\n\n\t\tswitch (data.type) {\n\t\t\tcase 'ping':\n\t\t\t\t// Client is checking if we're alive - respond with pong\n\t\t\t\tclient.send(\n\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\ttype: 'pong'\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'request-rebuild':\n\t\t\t\t// Note: triggerRebuild would be called from outside\n\t\t\t\tbreak;\n\n\t\t\tcase 'ready':\n\t\t\t\tbreak;\n\n\t\t\tcase 'hydration-error':\n\t\t\t\tbreak;\n\t\t}\n\t} catch {}\n};\n\n/* Send messages to all connected WebSocket clients\n this is how we notify browsers when files change */\nexport const broadcastToClients = (\n\tstate: HMRState,\n\tmessage: { type: string; [key: string]: any }\n) => {\n\tconst messageStr = JSON.stringify({\n\t\t...message,\n\t\ttimestamp: Date.now()\n\t});\n\n\tlet sentCount = 0;\n\tconst clientsToRemove: HMRWebSocket[] = [];\n\n\tfor (const client of state.connectedClients) {\n\t\tif (client.readyState === WS_READY_STATE_OPEN) {\n\t\t\ttry {\n\t\t\t\tclient.send(messageStr);\n\t\t\t\tsentCount++;\n\t\t\t} catch {\n\t\t\t\tclientsToRemove.push(client);\n\t\t\t}\n\t\t} else {\n\t\t\t// Mark closed clients for removal\n\t\t\tclientsToRemove.push(client);\n\t\t}\n\t}\n\n\t// Remove closed/failed clients\n\tfor (const client of clientsToRemove) {\n\t\tstate.connectedClients.delete(client);\n\t}\n};\n",
|
|
49
|
+
"const isWrapped = (\n\tsource: Record<string, string> | { manifest: Record<string, string> }\n): source is { manifest: Record<string, string> } =>\n\t'manifest' in source &&\n\ttypeof source.manifest === 'object' &&\n\t!Array.isArray(source.manifest);\n\nexport const asset = (\n\tsource: Record<string, string> | { manifest: Record<string, string> },\n\tname: string\n) => {\n\tconst assetPath = isWrapped(source) ? source.manifest[name] : source[name];\n\n\tif (assetPath === undefined) {\n\t\tthrow new Error(`Asset \"${name}\" not found in manifest.`);\n\t}\n\n\treturn assetPath;\n};\n",
|
|
50
|
+
"export * from './build';\nexport * from './devBuild';\nexport * from './lookup';\nexport * from './pageHandlers';\n",
|
|
51
|
+
"export const pageRouterPlugin = () => {\n\tconsole.log('Page Router Plugin Not Implemented Yet');\n};\n",
|
|
52
|
+
"import Elysia from 'elysia';\nimport { HMRState } from '../dev/clientManager';\nimport { getMimeType, lookupAsset } from '../dev/assetStore';\nimport {\n\thandleClientConnect,\n\thandleClientDisconnect,\n\thandleHMRMessage\n} from '../dev/webSocket';\n\nconst STORE_KEY = '__elysiaStore';\n\n/* Preserve Elysia store across bun --hot reloads.\n globalThis survives re-evaluation, so we save the store reference\n before each reload and restore values into the fresh instance. */\nconst restoreStore = (app: Elysia) => {\n\tconst saved = (globalThis as Record<string, unknown>)[STORE_KEY] as\n\t\t| Record<string, unknown>\n\t\t| undefined;\n\n\tif (saved) {\n\t\tconst store = app.store as Record<string, unknown>;\n\t\tfor (const key of Object.keys(saved)) {\n\t\t\tstore[key] = saved[key];\n\t\t}\n\t}\n\n\t(globalThis as Record<string, unknown>)[STORE_KEY] = app.store;\n};\n\n/* HMR plugin for Elysia\n Adds WebSocket endpoint and status endpoint.\n HMR client code is baked into framework index files (React/Svelte/Vue)\n and injected into HTML/HTMX files at build time.\n Also preserves Elysia store state across hot reloads. */\nexport const hmr = (hmrState: HMRState, manifest: Record<string, string>) => {\n\treturn (app: Elysia) => {\n\t\trestoreStore(app);\n\n\t\treturn app\n\t\t\t.onBeforeHandle(({ request }) => {\n\t\t\t\t/* Fast path: only parse URL for requests that could be assets.\n\t\t\t\t Asset paths always start with / and contain a dot (extension).\n\t\t\t\t Skip API routes, WebSocket upgrades, and page navigations. */\n\t\t\t\tconst rawUrl = request.url;\n\t\t\t\tconst qIdx = rawUrl.indexOf('?');\n\t\t\t\tconst pathEnd = qIdx === -1 ? rawUrl.length : qIdx;\n\t\t\t\t/* URL is absolute (http://host/path), find the path portion */\n\t\t\t\tconst pathStart = rawUrl.indexOf('/', rawUrl.indexOf('//') + 2);\n\t\t\t\tconst pathname = rawUrl.slice(pathStart, pathEnd);\n\n\t\t\t\tconst bytes = lookupAsset(hmrState.assetStore, pathname);\n\t\t\t\tif (bytes) {\n\t\t\t\t\treturn new Response(new Uint8Array(bytes).buffer, {\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Cache-Control':\n\t\t\t\t\t\t\t\t'public, max-age=31536000, immutable',\n\t\t\t\t\t\t\t'Content-Type': getMimeType(pathname)\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.ws('/hmr', {\n\t\t\t\tclose: (ws) => handleClientDisconnect(hmrState, ws),\n\t\t\t\tmessage: (ws, msg) => handleHMRMessage(hmrState, ws, msg),\n\t\t\t\topen: (ws) => handleClientConnect(hmrState, ws, manifest)\n\t\t\t})\n\t\t\t.get('/hmr-status', () => ({\n\t\t\t\tconnectedClients: hmrState.connectedClients.size,\n\t\t\t\tisRebuilding: hmrState.isRebuilding,\n\t\t\t\tmanifestKeys: Object.keys(manifest),\n\t\t\t\trebuildQueue: Array.from(hmrState.rebuildQueue),\n\t\t\t\ttimestamp: Date.now()\n\t\t\t}));\n\t};\n};\n",
|
|
53
|
+
"import { argv } from 'node:process';\nimport { env } from 'bun';\nimport { Elysia } from 'elysia';\nimport { DEFAULT_PORT } from '../constants';\nimport { getLocalIPAddress } from '../utils/networking';\n\nlet host = env.HOST ?? 'localhost';\nconst port = env.PORT ?? DEFAULT_PORT;\nlet localIP: string | undefined;\n\nconst args = argv;\nconst hostFlag = args.includes('--host');\n\nif (hostFlag) {\n\tlocalIP = getLocalIPAddress();\n\thost = '0.0.0.0';\n}\n\nexport const networking = (app: Elysia) =>\n\tapp.listen(\n\t\t{\n\t\t\thostname: host,\n\t\t\tport: port\n\t\t},\n\t\t() => {\n\t\t\tif (hostFlag) {\n\t\t\t\tconsole.log(`Server started on http://localhost:${port}`);\n\t\t\t\tconsole.log(\n\t\t\t\t\t`Server started on network: http://${localIP}:${port}`\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tconsole.log(`Server started on http://${host}:${port}`);\n\t\t\t}\n\t\t}\n\t);\n",
|
|
54
|
+
"import os from 'os';\n\n/* Get all network IP addresses (IPv4 only)\n This handles the \"detect all network interfaces\" problem */\nexport const getAllNetworkIPs = () => {\n\tconst interfaces = os.networkInterfaces();\n\tconst addresses = Object.values(interfaces)\n\t\t.flat()\n\t\t.filter(\n\t\t\t(iface): iface is os.NetworkInterfaceInfo => iface !== undefined\n\t\t);\n\n\t// Only collect IPv4 addresses\n\tconst ipv4Addresses: string[] = [];\n\n\tfor (const addr of addresses) {\n\t\t// Skip loopback and internal addresses\n\t\tif (addr.internal) continue;\n\n\t\t// Only include IPv4 addresses\n\t\tif (addr.family === 'IPv4') {\n\t\t\tipv4Addresses.push(addr.address);\n\t\t}\n\t\t// IPv6 addresses are excluded completely\n\t}\n\n\treturn ipv4Addresses;\n};\n\n/* Get the first network IP address (for backward compatibility)\n This maintains compatibility with existing code that expects a single IP */\nexport const getLocalIPAddress = () => {\n\tconst allIPs = getAllNetworkIPs();\n\n\tif (allIPs.length > 0 && allIPs[0]) {\n\t\treturn allIPs[0]; // Return first IPv4 address (or first available)\n\t}\n\n\tconsole.warn('No IP address found, falling back to localhost');\n\treturn 'localhost'; // Fallback to localhost if no IP found\n};\n",
|
|
55
|
+
"import { env } from 'bun';\n\nexport const getEnv = (key: string) => {\n\tconst environmentVariable = env[key];\n\tif (\n\t\ttypeof environmentVariable !== 'string' ||\n\t\tenvironmentVariable.length === 0\n\t) {\n\t\tthrow new Error(`Missing environment variable ${key}`);\n\t}\n\n\treturn environmentVariable;\n};\n",
|
|
56
|
+
"/**\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/**\n * Register a client-side script to be injected into the HTML response.\n *\n * @param script - A function containing the client-side code to execute\n * @param requestId - Optional request ID. If not provided, uses the current request context.\n * @returns The request ID for this script registration\n */\nexport const registerClientScript = (\n\tscript: () => void,\n\trequestId?: string\n) => {\n\t// If no requestId provided, try to get it from global context (set by page handler during SSR)\n\tconst id =\n\t\trequestId ||\n\t\t(globalThis as any).__absolutejs_requestId ||\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};\n\n// Make registerClientScript available globally during SSR for Angular components\n// Using type assertion for globalThis extension\nif (typeof globalThis !== 'undefined') {\n\t(\n\t\tglobalThis as {\n\t\t\tregisterClientScript?: (script: () => void) => string;\n\t\t}\n\t).registerClientScript = 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 getAndClearClientScripts = (requestId: string) => {\n\tconst scripts = scriptRegistry.get(requestId);\n\tif (!scripts) {\n\t\treturn [];\n\t}\n\n\tconst scriptArray = Array.from(scripts);\n\tscriptRegistry.delete(requestId);\n\n\treturn scriptArray;\n};\n\n/**\n * Generate JavaScript code from registered scripts.\n * Wraps each script in an IIFE and combines them.\n *\n * @param scripts - Array of script functions\n * @returns JavaScript code string to inject\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 retry logic for DOM readiness\n\t\t\treturn `\n\t(function() {\n\t\tfunction executeScript_${index}() {\n\t\t\t${body}\n\t\t}\n\t\t\n\t\t// Try executing immediately if DOM is ready\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\t\t\n\t\t// Also try with delays to ensure element is available after hydration\n\t\tsetTimeout(executeScript_${index}, 100);\n\t\tsetTimeout(executeScript_${index}, 300);\n\t\tsetTimeout(executeScript_${index}, 500);\n\t\tsetTimeout(executeScript_${index}, 1000);\n\t\t\n\t\t// Fallback on window load\n\t\twindow.addEventListener('load', executeScript_${index});\n\t})();`;\n\t\t})\n\t\t.join('\\n');\n\n\treturn `<script>\n(function() {\n${scriptCode}\n})();\n</script>`;\n};\n\n/**\n * Clear all registered scripts (useful for cleanup or testing)\n */\nexport const clearAllClientScripts = () => {\n\tscriptRegistry.clear();\n};\n",
|
|
57
|
+
"/**\n * Type-safe helper to get the registerClientScript function during SSR.\n *\n * This function safely accesses the global registerClientScript that's made\n * available during Angular SSR rendering. It returns null if not available\n * (e.g., when running outside of SSR context).\n *\n * @returns The registerClientScript function if available, null otherwise\n */\nexport const getRegisterClientScript = () => {\n\t// Type-safe access to global registerClientScript\n\tconst globalRegister = (\n\t\tglobalThis as {\n\t\t\tregisterClientScript?: (script: () => void) => string;\n\t\t}\n\t).registerClientScript;\n\n\tif (globalRegister && typeof globalRegister === 'function') {\n\t\treturn globalRegister;\n\t}\n\n\treturn null;\n};\n"
|
|
28
58
|
],
|
|
29
|
-
"mappings": "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",
|
|
30
|
-
"debugId": "
|
|
59
|
+
"mappings": "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",
|
|
60
|
+
"debugId": "FE1A3F856A389BB564756E2164756E21",
|
|
31
61
|
"names": []
|
|
32
62
|
}
|