meno-core 1.0.45 → 1.0.47

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.
Files changed (63) hide show
  1. package/build-astro.ts +211 -124
  2. package/dist/bin/cli.js +2 -2
  3. package/dist/build-static.js +7 -7
  4. package/dist/chunks/{chunk-NZTSJS5C.js → chunk-2QK6U5UK.js} +3 -2
  5. package/dist/chunks/{chunk-NZTSJS5C.js.map → chunk-2QK6U5UK.js.map} +2 -2
  6. package/dist/chunks/{chunk-TVH3TC2T.js → chunk-47UNLQUU.js} +6 -6
  7. package/dist/chunks/{chunk-F7MA62WG.js → chunk-BCLGRZ3U.js} +5 -5
  8. package/dist/chunks/{chunk-F7MA62WG.js.map → chunk-BCLGRZ3U.js.map} +2 -2
  9. package/dist/chunks/{chunk-5ZASE4IG.js → chunk-FED5MME6.js} +234 -11
  10. package/dist/chunks/{chunk-5ZASE4IG.js.map → chunk-FED5MME6.js.map} +3 -3
  11. package/dist/chunks/{chunk-BZQKEJQY.js → chunk-FGUZOYJX.js} +49 -30
  12. package/dist/chunks/chunk-FGUZOYJX.js.map +7 -0
  13. package/dist/chunks/{chunk-5Z5VQRTJ.js → chunk-I7YIGZXT.js} +4 -4
  14. package/dist/chunks/{chunk-5Z5VQRTJ.js.map → chunk-I7YIGZXT.js.map} +2 -2
  15. package/dist/chunks/{chunk-OUNJ76QM.js → chunk-LJFB5EBT.js} +5 -5
  16. package/dist/chunks/{chunk-GYF3ABI3.js → chunk-UUA5LEWF.js} +3 -3
  17. package/dist/chunks/{chunk-GYF3ABI3.js.map → chunk-UUA5LEWF.js.map} +2 -2
  18. package/dist/chunks/{chunk-WQSG5WHC.js → chunk-ZTKHJQ2Z.js} +2 -2
  19. package/dist/chunks/{configService-6KTT6GRT.js → configService-DYCUEURL.js} +3 -3
  20. package/dist/chunks/{constants-L5IKLB6U.js → constants-GWBAD66U.js} +2 -2
  21. package/dist/entries/server-router.js +7 -7
  22. package/dist/lib/client/index.js +7 -5
  23. package/dist/lib/client/index.js.map +2 -2
  24. package/dist/lib/server/index.js +631 -208
  25. package/dist/lib/server/index.js.map +3 -3
  26. package/dist/lib/shared/index.js +7 -3
  27. package/dist/lib/shared/index.js.map +2 -2
  28. package/dist/lib/test-utils/index.js +1 -1
  29. package/lib/client/core/ComponentBuilder.test.ts +21 -0
  30. package/lib/client/core/ComponentBuilder.ts +8 -1
  31. package/lib/client/templateEngine.test.ts +64 -0
  32. package/lib/server/astro/astroEmitHelpers.ts +23 -0
  33. package/lib/server/astro/cmsPageEmitter.ts +46 -3
  34. package/lib/server/astro/componentEmitter.test.ts +59 -0
  35. package/lib/server/astro/componentEmitter.ts +53 -12
  36. package/lib/server/astro/cssCollector.ts +58 -11
  37. package/lib/server/astro/nodeToAstro.test.ts +397 -5
  38. package/lib/server/astro/nodeToAstro.ts +494 -65
  39. package/lib/server/astro/pageEmitter.ts +46 -3
  40. package/lib/server/astro/tailwindMapper.test.ts +119 -0
  41. package/lib/server/astro/tailwindMapper.ts +67 -1
  42. package/lib/server/runtime/httpServer.ts +12 -4
  43. package/lib/server/ssr/htmlGenerator.test.ts +3 -2
  44. package/lib/server/ssr/htmlGenerator.ts +6 -1
  45. package/lib/server/ssr/imageMetadata.ts +15 -9
  46. package/lib/server/ssr/jsCollector.ts +2 -2
  47. package/lib/server/ssr/ssrRenderer.test.ts +79 -0
  48. package/lib/server/ssr/ssrRenderer.ts +35 -20
  49. package/lib/shared/constants.ts +1 -0
  50. package/lib/shared/cssGeneration.test.ts +109 -3
  51. package/lib/shared/cssGeneration.ts +98 -13
  52. package/lib/shared/cssNamedColors.ts +47 -0
  53. package/lib/shared/cssProperties.ts +2 -2
  54. package/lib/shared/index.ts +1 -0
  55. package/lib/shared/styleNodeUtils.test.ts +47 -1
  56. package/lib/shared/styleNodeUtils.ts +7 -7
  57. package/package.json +1 -1
  58. package/dist/chunks/chunk-BZQKEJQY.js.map +0 -7
  59. /package/dist/chunks/{chunk-TVH3TC2T.js.map → chunk-47UNLQUU.js.map} +0 -0
  60. /package/dist/chunks/{chunk-OUNJ76QM.js.map → chunk-LJFB5EBT.js.map} +0 -0
  61. /package/dist/chunks/{chunk-WQSG5WHC.js.map → chunk-ZTKHJQ2Z.js.map} +0 -0
  62. /package/dist/chunks/{configService-6KTT6GRT.js.map → configService-DYCUEURL.js.map} +0 -0
  63. /package/dist/chunks/{constants-L5IKLB6U.js.map → constants-GWBAD66U.js.map} +0 -0
@@ -272,8 +272,8 @@ function createBunServer(options) {
272
272
  const server = Bun.serve(bunConfig);
273
273
  return {
274
274
  port: server.port ?? port,
275
- stop() {
276
- server.stop();
275
+ stop(force) {
276
+ server.stop(force === true);
277
277
  }
278
278
  };
279
279
  }
@@ -391,7 +391,7 @@ async function createNodeServer(options) {
391
391
  const actualPort = typeof addr === "object" && addr ? addr.port : port;
392
392
  resolve({
393
393
  port: actualPort,
394
- stop() {
394
+ stop(_force) {
395
395
  server.close();
396
396
  }
397
397
  });
@@ -464,4 +464,4 @@ export {
464
464
  resolveProjectPath,
465
465
  resolvePackagePath
466
466
  };
467
- //# sourceMappingURL=chunk-5Z5VQRTJ.js.map
467
+ //# sourceMappingURL=chunk-I7YIGZXT.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../lib/server/runtime/bundler.ts", "../../lib/server/runtime/httpServer.ts", "../../lib/server/runtime/index.ts", "../../lib/server/projectContext.ts"],
4
- "sourcesContent": ["/**\n * Runtime-agnostic bundler abstraction.\n * Uses Bun.build when available, falls back to esbuild for Node.js.\n */\n\nconst isBun = typeof (globalThis as any).Bun !== 'undefined';\n\nexport interface BundleResult {\n code: string;\n success: boolean;\n errors: string[];\n}\n\nexport interface BundleOptions {\n target?: 'browser' | 'node';\n format?: 'esm' | 'cjs';\n minify?: boolean;\n sourcemap?: 'inline' | 'external' | boolean;\n /** When true, throw on build errors instead of returning them */\n throw?: boolean;\n}\n\n/**\n * Bundle a file entry point.\n * Returns the bundled code as a string.\n */\nexport async function bundleFile(\n entrypoint: string,\n opts: BundleOptions = {},\n): Promise<BundleResult> {\n if (isBun) {\n return bundleWithBun(entrypoint, opts);\n }\n return bundleWithEsbuild(entrypoint, opts);\n}\n\n/**\n * Minify JavaScript code.\n */\nexport async function minifyJS(code: string): Promise<BundleResult> {\n if (isBun) {\n return minifyWithBun(code);\n }\n return minifyWithEsbuild(code);\n}\n\n/**\n * Validate JavaScript syntax (check for errors without producing output).\n */\nexport async function validateJS(code: string): Promise<string | null> {\n try {\n if (isBun) {\n return await validateWithBun(code);\n }\n return await validateWithEsbuild(code);\n } catch {\n // Validation not available (e.g., Cloudflare Workers) \u2014 skip and trust the JS\n return null;\n }\n}\n\n// \u2500\u2500 Bun implementations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function bundleWithBun(\n entrypoint: string,\n opts: BundleOptions,\n): Promise<BundleResult> {\n try {\n const result = await Bun.build({\n entrypoints: [entrypoint],\n target: opts.target || 'browser',\n format: opts.format || 'esm',\n minify: opts.minify ?? false,\n sourcemap: opts.sourcemap === true ? 'inline' : (opts.sourcemap || 'none'),\n throw: opts.throw ?? false,\n });\n\n if (result.success && result.outputs[0]) {\n const code = await result.outputs[0].text();\n return { code, success: true, errors: [] };\n }\n\n const errors = (result.logs || []).map((log: any) => {\n const parts: string[] = [];\n if (log.position?.file) parts.push(`File: ${log.position.file}`);\n if (log.position?.line) parts.push(`Line ${log.position.line}:${log.position.column || 0}`);\n if (log.position?.lineText) parts.push(log.position.lineText);\n if (log.message) parts.push(log.message);\n return parts.length > 0 ? parts.join('\\n') : String(log);\n });\n\n return { code: '', success: false, errors };\n } catch (err: any) {\n if (opts.throw) throw err;\n\n const errors: string[] = [];\n if (err.logs && Array.isArray(err.logs)) {\n for (const log of err.logs) {\n const parts: string[] = [];\n if (log.position?.line) parts.push(`Line ${log.position.line}:${log.position.column || 0}`);\n if (log.position?.lineText) parts.push(log.position.lineText);\n if (log.message) parts.push(log.message);\n errors.push(parts.length > 0 ? parts.join('\\n') : String(log));\n }\n } else {\n errors.push(err.message || String(err));\n }\n\n return { code: '', success: false, errors };\n }\n}\n\nasync function minifyWithBun(code: string): Promise<BundleResult> {\n const { writeFile, rm } = await import('fs/promises');\n const { join } = await import('path');\n const tempFile = join('/tmp', `meno-minify-${Date.now()}.js`);\n\n try {\n await writeFile(tempFile, code, 'utf-8');\n\n const result = await Bun.build({\n entrypoints: [tempFile],\n minify: true,\n throw: true,\n });\n\n if (result.outputs.length > 0) {\n const minified = await result.outputs[0].text();\n return { code: minified, success: true, errors: [] };\n }\n\n return { code: '', success: false, errors: ['Minification produced no output'] };\n } catch (err: any) {\n const { inspect } = await import('./fs');\n let details = '';\n if (err.logs && Array.isArray(err.logs)) {\n details = err.logs.map((log: any) => {\n const parts: string[] = [];\n if (log.position?.line) parts.push(`Line ${log.position.line}:${log.position.column || 0}`);\n if (log.position?.lineText) parts.push(log.position.lineText);\n if (log.message) parts.push(log.message);\n return parts.length > 0 ? parts.join('\\n') : String(log);\n }).join('\\n\\n');\n }\n if (!details) {\n try { details = inspect(err); } catch { details = err.stack || err.message || String(err); }\n }\n return { code: '', success: false, errors: [details] };\n } finally {\n try { const { rm } = await import('fs/promises'); await rm(tempFile, { force: true }); } catch {}\n }\n}\n\nasync function validateWithBun(code: string): Promise<string | null> {\n const { writeFile, rm } = await import('fs/promises');\n const { join } = await import('path');\n const tempFile = join('/tmp', `meno-validate-${Date.now()}-${Math.random().toString(36).slice(2)}.js`);\n\n try {\n await writeFile(tempFile, code, 'utf-8');\n await Bun.build({\n entrypoints: [tempFile],\n minify: true,\n throw: true,\n });\n return null; // Valid\n } catch (err: any) {\n const { inspect } = await import('./fs');\n let details = '';\n if (err.logs && Array.isArray(err.logs)) {\n details = err.logs.map((log: any) => {\n const parts: string[] = [];\n if (log.position?.line) parts.push(`Line ${log.position.line}:${log.position.column || 0}`);\n if (log.position?.lineText) parts.push(log.position.lineText);\n if (log.message) parts.push(log.message);\n return parts.length > 0 ? parts.join('\\n') : String(log);\n }).join('\\n\\n');\n }\n if (!details) {\n try { details = inspect(err); } catch { details = err.stack || err.message || String(err); }\n }\n return details || 'Unknown JavaScript error';\n } finally {\n try { await rm(tempFile, { force: true }); } catch {}\n }\n}\n\n// \u2500\u2500 esbuild implementations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function getEsbuild() {\n return await import('esbuild');\n}\n\nasync function bundleWithEsbuild(\n entrypoint: string,\n opts: BundleOptions,\n): Promise<BundleResult> {\n const esbuild = await getEsbuild();\n\n try {\n const result = await esbuild.build({\n entryPoints: [entrypoint],\n bundle: true,\n write: false,\n platform: opts.target === 'node' ? 'node' : 'browser',\n format: opts.format || 'esm',\n minify: opts.minify ?? false,\n sourcemap: opts.sourcemap === true ? 'inline' : (opts.sourcemap === 'inline' ? 'inline' : opts.sourcemap === 'external' ? true : false),\n jsx: 'automatic',\n jsxImportSource: 'react',\n logLevel: 'silent',\n });\n\n if (result.outputFiles && result.outputFiles.length > 0) {\n return { code: result.outputFiles[0].text, success: true, errors: [] };\n }\n\n return { code: '', success: false, errors: ['Build produced no output'] };\n } catch (err: any) {\n if (opts.throw) throw err;\n\n const errors: string[] = [];\n if (err.errors && Array.isArray(err.errors)) {\n for (const e of err.errors) {\n const parts: string[] = [];\n if (e.location?.file) parts.push(`File: ${e.location.file}`);\n if (e.location?.line) parts.push(`Line ${e.location.line}:${e.location.column || 0}`);\n if (e.location?.lineText) parts.push(e.location.lineText);\n if (e.text) parts.push(e.text);\n errors.push(parts.length > 0 ? parts.join('\\n') : String(e));\n }\n } else {\n errors.push(err.message || String(err));\n }\n\n return { code: '', success: false, errors };\n }\n}\n\nasync function minifyWithEsbuild(code: string): Promise<BundleResult> {\n const esbuild = await getEsbuild();\n\n try {\n const result = await esbuild.transform(code, {\n minify: true,\n loader: 'js',\n });\n\n return { code: result.code, success: true, errors: [] };\n } catch (err: any) {\n const errors: string[] = [];\n if (err.errors && Array.isArray(err.errors)) {\n for (const e of err.errors) {\n const parts: string[] = [];\n if (e.location?.line) parts.push(`Line ${e.location.line}:${e.location.column || 0}`);\n if (e.location?.lineText) parts.push(e.location.lineText);\n if (e.text) parts.push(e.text);\n errors.push(parts.length > 0 ? parts.join('\\n') : String(e));\n }\n } else {\n errors.push(err.message || String(err));\n }\n\n return { code: '', success: false, errors };\n }\n}\n\nasync function validateWithEsbuild(code: string): Promise<string | null> {\n const esbuild = await getEsbuild();\n\n try {\n await esbuild.transform(code, { loader: 'js' });\n return null; // Valid\n } catch (err: any) {\n const errors: string[] = [];\n if (err.errors && Array.isArray(err.errors)) {\n for (const e of err.errors) {\n const parts: string[] = [];\n if (e.location?.line) parts.push(`Line ${e.location.line}:${e.location.column || 0}`);\n if (e.location?.lineText) parts.push(e.location.lineText);\n if (e.text) parts.push(e.text);\n errors.push(parts.length > 0 ? parts.join('\\n') : String(e));\n }\n } else {\n errors.push(err.message || String(err));\n }\n\n return errors.join('\\n\\n') || 'Unknown JavaScript error';\n }\n}\n", "/**\n * Runtime-agnostic HTTP server abstraction.\n * Uses Bun.serve when available, falls back to Node.js http + ws.\n */\n\nconst isBun = typeof globalThis.Bun !== 'undefined';\n\nexport interface RuntimeServer {\n port: number;\n stop(): void;\n}\n\nexport interface RuntimeWSClient {\n send(data: string | ArrayBuffer | Uint8Array): void;\n readyState: number;\n close(code?: number, reason?: string): void;\n}\n\nexport interface ServerOptions {\n port: number;\n hostname?: string;\n fetch: (req: Request, upgradeWebSocket: (req: Request) => boolean) => Promise<Response | undefined>;\n websocket?: {\n open(ws: RuntimeWSClient): void;\n message(ws: RuntimeWSClient, data: string): void;\n close(ws: RuntimeWSClient): void;\n };\n /** Path to upgrade to WebSocket (e.g., \"/__hmr\") */\n wsPath?: string;\n}\n\nexport async function createRuntimeServer(\n options: ServerOptions,\n): Promise<RuntimeServer> {\n if (isBun) {\n return createBunServer(options);\n }\n return createNodeServer(options);\n}\n\n// \u2500\u2500 Bun implementation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction createBunServer(options: ServerOptions): RuntimeServer {\n const { port, hostname, fetch, websocket, wsPath } = options;\n\n const bunConfig: any = {\n port,\n hostname: hostname || 'localhost',\n\n async fetch(req: Request, server: any) {\n // Create upgrade function that delegates to Bun's server.upgrade\n const upgradeWebSocket = (upgradeReq: Request): boolean => {\n return server.upgrade(upgradeReq);\n };\n\n const response = await fetch(req, upgradeWebSocket);\n return response || new Response('Not Found', { status: 404 });\n },\n };\n\n if (websocket) {\n bunConfig.websocket = {\n open(ws: RuntimeWSClient) {\n websocket.open(ws);\n },\n message(ws: RuntimeWSClient, message: unknown) {\n websocket.message(ws, String(message));\n },\n close(ws: RuntimeWSClient) {\n websocket.close(ws);\n },\n };\n }\n\n const server = Bun.serve(bunConfig);\n\n return {\n port: server.port ?? port,\n stop() {\n server.stop();\n },\n };\n}\n\n// \u2500\u2500 Node.js implementation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function createNodeServer(options: ServerOptions): Promise<RuntimeServer> {\n const { port, hostname, fetch, websocket, wsPath } = options;\n const http = await import('http');\n\n const server = http.createServer(async (nodeReq, nodeRes) => {\n try {\n // Convert Node.js IncomingMessage \u2192 Web Request\n const url = `http://${hostname || 'localhost'}:${port}${nodeReq.url || '/'}`;\n const headers = new Headers();\n for (const [key, value] of Object.entries(nodeReq.headers)) {\n if (value) {\n if (Array.isArray(value)) {\n for (const v of value) headers.append(key, v);\n } else {\n headers.set(key, value);\n }\n }\n }\n\n let body: ReadableStream | null = null;\n if (nodeReq.method !== 'GET' && nodeReq.method !== 'HEAD') {\n const { Readable } = await import('stream');\n body = Readable.toWeb(nodeReq) as unknown as ReadableStream;\n }\n\n const request = new Request(url, {\n method: nodeReq.method || 'GET',\n headers,\n body,\n // @ts-ignore - duplex is needed for streaming request bodies in Node\n duplex: body ? 'half' : undefined,\n });\n\n // No-op upgrade function for non-upgrade requests\n const upgradeWebSocket = (): boolean => false;\n\n const response = await fetch(request, upgradeWebSocket);\n if (!response) {\n nodeRes.writeHead(404);\n nodeRes.end('Not Found');\n return;\n }\n\n // Convert Web Response \u2192 Node.js ServerResponse\n nodeRes.writeHead(response.status, Object.fromEntries(response.headers.entries()));\n\n if (response.body) {\n const reader = response.body.getReader();\n const pump = async () => {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n nodeRes.end();\n break;\n }\n const canContinue = nodeRes.write(value);\n if (!canContinue) {\n await new Promise<void>((resolve) => nodeRes.once('drain', resolve));\n }\n }\n };\n await pump();\n } else {\n const text = await response.text();\n nodeRes.end(text);\n }\n } catch (err) {\n console.error('Server error:', err);\n if (!nodeRes.headersSent) {\n nodeRes.writeHead(500);\n nodeRes.end('Internal Server Error');\n }\n }\n });\n\n // WebSocket support via 'ws' package\n if (websocket && wsPath) {\n try {\n const { WebSocketServer } = await import('ws');\n const wss = new WebSocketServer({ noServer: true });\n\n server.on('upgrade', (request, socket, head) => {\n const pathname = new URL(\n request.url || '/',\n `http://${hostname || 'localhost'}:${port}`,\n ).pathname;\n\n if (pathname === wsPath) {\n wss.handleUpgrade(request, socket, head, (ws) => {\n wss.emit('connection', ws, request);\n });\n } else {\n socket.destroy();\n }\n });\n\n wss.on('connection', (ws) => {\n const client: RuntimeWSClient = {\n send(data) {\n if (ws.readyState === 1) { // OPEN\n ws.send(data);\n }\n },\n get readyState() {\n return ws.readyState;\n },\n close(code, reason) {\n ws.close(code, reason);\n },\n };\n\n websocket.open(client);\n\n ws.on('message', (data) => {\n websocket.message(client, data.toString());\n });\n\n ws.on('close', () => {\n websocket.close(client);\n });\n });\n } catch {\n console.warn('WebSocket support requires the \"ws\" package. Install it with: npm install ws');\n }\n }\n\n // Start listening\n return new Promise((resolve, reject) => {\n server.on('error', reject);\n server.listen(port, hostname || 'localhost', () => {\n const addr = server.address();\n const actualPort = typeof addr === 'object' && addr ? addr.port : port;\n\n resolve({\n port: actualPort,\n stop() {\n server.close();\n },\n });\n });\n });\n}\n", "/**\n * Runtime Abstraction\n * Detects Bun vs Node.js and re-exports runtime-agnostic utilities.\n */\n\nexport const isBun = typeof globalThis.Bun !== 'undefined';\n\nexport {\n readTextFile,\n readJsonFile,\n fileExists,\n writeFile,\n serveFile,\n hashContent,\n inspect,\n ensureDir,\n getModuleDir,\n spawnProcess,\n getFileSize,\n getMimeType,\n} from './fs';\n\nexport {\n bundleFile,\n minifyJS,\n validateJS,\n type BundleResult,\n type BundleOptions,\n} from './bundler';\n\nexport {\n createRuntimeServer,\n type RuntimeServer,\n type RuntimeWSClient,\n type ServerOptions,\n} from './httpServer';\n", "import { join, dirname } from 'path';\nimport { getModuleDir } from './runtime';\n\nlet projectRoot: string = process.cwd();\n\n// Package root is where the editor files are installed (2 levels up from this file)\n// In packaged Electron builds, MENO_CORE_ROOT overrides import.meta.url resolution\nconst packageRoot = process.env.MENO_CORE_ROOT\n || join(dirname(getModuleDir(import.meta.url)), '..');\n\nexport function setProjectRoot(root: string): void {\n projectRoot = root;\n}\n\nexport function getProjectRoot(): string {\n return projectRoot;\n}\n\nexport function getPackageRoot(): string {\n return packageRoot;\n}\n\n// Path getters for project files (user's project)\nexport const projectPaths = {\n pages: () => join(projectRoot, 'pages'),\n templates: () => join(projectRoot, 'templates'),\n components: () => join(projectRoot, 'components'),\n fonts: () => join(projectRoot, 'fonts'),\n images: () => join(projectRoot, 'images'),\n videos: () => join(projectRoot, 'videos'),\n assets: () => join(projectRoot, 'assets'),\n icons: () => join(projectRoot, 'icons'),\n cms: () => join(projectRoot, 'cms'),\n libraries: () => join(projectRoot, 'libraries'),\n functions: () => join(projectRoot, 'functions'),\n config: () => join(projectRoot, 'project.config.json'),\n componentsConfig: () => join(projectRoot, 'components.config.json'),\n colors: () => join(projectRoot, 'colors.json'),\n variables: () => join(projectRoot, 'variables.json'),\n enums: () => join(projectRoot, 'enums.json'),\n dist: () => join(projectRoot, 'dist'),\n env: () => join(projectRoot, '.env'),\n get project() { return projectRoot; }, // Direct access to project root\n};\n\n// Path getters for package files (core assets)\n// Note: Editor-specific paths (editorHtml) are now in @meno/studio\nexport const packagePaths = {\n indexHtml: () => join(packageRoot, 'templates', 'index-router.html'),\n clientRouter: () => join(packageRoot, 'entries', 'client-router.tsx'),\n};\n\nexport function resolveProjectPath(...segments: string[]): string {\n return join(projectRoot, ...segments);\n}\n\nexport function resolvePackagePath(...segments: string[]): string {\n return join(packageRoot, ...segments);\n}\n"],
5
- "mappings": ";;;;;AAKA,IAAM,QAAQ,OAAQ,WAAmB,QAAQ;AAqBjD,eAAsB,WACpB,YACA,OAAsB,CAAC,GACA;AACvB,MAAI,OAAO;AACT,WAAO,cAAc,YAAY,IAAI;AAAA,EACvC;AACA,SAAO,kBAAkB,YAAY,IAAI;AAC3C;AAKA,eAAsB,SAAS,MAAqC;AAClE,MAAI,OAAO;AACT,WAAO,cAAc,IAAI;AAAA,EAC3B;AACA,SAAO,kBAAkB,IAAI;AAC/B;AAKA,eAAsB,WAAW,MAAsC;AACrE,MAAI;AACF,QAAI,OAAO;AACT,aAAO,MAAM,gBAAgB,IAAI;AAAA,IACnC;AACA,WAAO,MAAM,oBAAoB,IAAI;AAAA,EACvC,QAAQ;AAEN,WAAO;AAAA,EACT;AACF;AAIA,eAAe,cACb,YACA,MACuB;AACvB,MAAI;AACF,UAAM,SAAS,MAAM,IAAI,MAAM;AAAA,MAC7B,aAAa,CAAC,UAAU;AAAA,MACxB,QAAQ,KAAK,UAAU;AAAA,MACvB,QAAQ,KAAK,UAAU;AAAA,MACvB,QAAQ,KAAK,UAAU;AAAA,MACvB,WAAW,KAAK,cAAc,OAAO,WAAY,KAAK,aAAa;AAAA,MACnE,OAAO,KAAK,SAAS;AAAA,IACvB,CAAC;AAED,QAAI,OAAO,WAAW,OAAO,QAAQ,CAAC,GAAG;AACvC,YAAM,OAAO,MAAM,OAAO,QAAQ,CAAC,EAAE,KAAK;AAC1C,aAAO,EAAE,MAAM,SAAS,MAAM,QAAQ,CAAC,EAAE;AAAA,IAC3C;AAEA,UAAM,UAAU,OAAO,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAa;AACnD,YAAM,QAAkB,CAAC;AACzB,UAAI,IAAI,UAAU,KAAM,OAAM,KAAK,SAAS,IAAI,SAAS,IAAI,EAAE;AAC/D,UAAI,IAAI,UAAU,KAAM,OAAM,KAAK,QAAQ,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,UAAU,CAAC,EAAE;AAC1F,UAAI,IAAI,UAAU,SAAU,OAAM,KAAK,IAAI,SAAS,QAAQ;AAC5D,UAAI,IAAI,QAAS,OAAM,KAAK,IAAI,OAAO;AACvC,aAAO,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,IACzD,CAAC;AAED,WAAO,EAAE,MAAM,IAAI,SAAS,OAAO,OAAO;AAAA,EAC5C,SAAS,KAAU;AACjB,QAAI,KAAK,MAAO,OAAM;AAEtB,UAAM,SAAmB,CAAC;AAC1B,QAAI,IAAI,QAAQ,MAAM,QAAQ,IAAI,IAAI,GAAG;AACvC,iBAAW,OAAO,IAAI,MAAM;AAC1B,cAAM,QAAkB,CAAC;AACzB,YAAI,IAAI,UAAU,KAAM,OAAM,KAAK,QAAQ,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,UAAU,CAAC,EAAE;AAC1F,YAAI,IAAI,UAAU,SAAU,OAAM,KAAK,IAAI,SAAS,QAAQ;AAC5D,YAAI,IAAI,QAAS,OAAM,KAAK,IAAI,OAAO;AACvC,eAAO,KAAK,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG,CAAC;AAAA,MAC/D;AAAA,IACF,OAAO;AACL,aAAO,KAAK,IAAI,WAAW,OAAO,GAAG,CAAC;AAAA,IACxC;AAEA,WAAO,EAAE,MAAM,IAAI,SAAS,OAAO,OAAO;AAAA,EAC5C;AACF;AAEA,eAAe,cAAc,MAAqC;AAChE,QAAM,EAAE,WAAAA,YAAW,GAAG,IAAI,MAAM,OAAO,aAAa;AACpD,QAAM,EAAE,MAAAC,MAAK,IAAI,MAAM,OAAO,MAAM;AACpC,QAAM,WAAWA,MAAK,QAAQ,eAAe,KAAK,IAAI,CAAC,KAAK;AAE5D,MAAI;AACF,UAAMD,WAAU,UAAU,MAAM,OAAO;AAEvC,UAAM,SAAS,MAAM,IAAI,MAAM;AAAA,MAC7B,aAAa,CAAC,QAAQ;AAAA,MACtB,QAAQ;AAAA,MACR,OAAO;AAAA,IACT,CAAC;AAED,QAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,YAAM,WAAW,MAAM,OAAO,QAAQ,CAAC,EAAE,KAAK;AAC9C,aAAO,EAAE,MAAM,UAAU,SAAS,MAAM,QAAQ,CAAC,EAAE;AAAA,IACrD;AAEA,WAAO,EAAE,MAAM,IAAI,SAAS,OAAO,QAAQ,CAAC,iCAAiC,EAAE;AAAA,EACjF,SAAS,KAAU;AACjB,UAAM,EAAE,SAAAE,SAAQ,IAAI,MAAM,OAAO,kBAAM;AACvC,QAAI,UAAU;AACd,QAAI,IAAI,QAAQ,MAAM,QAAQ,IAAI,IAAI,GAAG;AACvC,gBAAU,IAAI,KAAK,IAAI,CAAC,QAAa;AACnC,cAAM,QAAkB,CAAC;AACzB,YAAI,IAAI,UAAU,KAAM,OAAM,KAAK,QAAQ,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,UAAU,CAAC,EAAE;AAC1F,YAAI,IAAI,UAAU,SAAU,OAAM,KAAK,IAAI,SAAS,QAAQ;AAC5D,YAAI,IAAI,QAAS,OAAM,KAAK,IAAI,OAAO;AACvC,eAAO,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MACzD,CAAC,EAAE,KAAK,MAAM;AAAA,IAChB;AACA,QAAI,CAAC,SAAS;AACZ,UAAI;AAAE,kBAAUA,SAAQ,GAAG;AAAA,MAAG,QAAQ;AAAE,kBAAU,IAAI,SAAS,IAAI,WAAW,OAAO,GAAG;AAAA,MAAG;AAAA,IAC7F;AACA,WAAO,EAAE,MAAM,IAAI,SAAS,OAAO,QAAQ,CAAC,OAAO,EAAE;AAAA,EACvD,UAAE;AACA,QAAI;AAAE,YAAM,EAAE,IAAAC,IAAG,IAAI,MAAM,OAAO,aAAa;AAAG,YAAMA,IAAG,UAAU,EAAE,OAAO,KAAK,CAAC;AAAA,IAAG,QAAQ;AAAA,IAAC;AAAA,EAClG;AACF;AAEA,eAAe,gBAAgB,MAAsC;AACnE,QAAM,EAAE,WAAAH,YAAW,GAAG,IAAI,MAAM,OAAO,aAAa;AACpD,QAAM,EAAE,MAAAC,MAAK,IAAI,MAAM,OAAO,MAAM;AACpC,QAAM,WAAWA,MAAK,QAAQ,iBAAiB,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK;AAErG,MAAI;AACF,UAAMD,WAAU,UAAU,MAAM,OAAO;AACvC,UAAM,IAAI,MAAM;AAAA,MACd,aAAa,CAAC,QAAQ;AAAA,MACtB,QAAQ;AAAA,MACR,OAAO;AAAA,IACT,CAAC;AACD,WAAO;AAAA,EACT,SAAS,KAAU;AACjB,UAAM,EAAE,SAAAE,SAAQ,IAAI,MAAM,OAAO,kBAAM;AACvC,QAAI,UAAU;AACd,QAAI,IAAI,QAAQ,MAAM,QAAQ,IAAI,IAAI,GAAG;AACvC,gBAAU,IAAI,KAAK,IAAI,CAAC,QAAa;AACnC,cAAM,QAAkB,CAAC;AACzB,YAAI,IAAI,UAAU,KAAM,OAAM,KAAK,QAAQ,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,UAAU,CAAC,EAAE;AAC1F,YAAI,IAAI,UAAU,SAAU,OAAM,KAAK,IAAI,SAAS,QAAQ;AAC5D,YAAI,IAAI,QAAS,OAAM,KAAK,IAAI,OAAO;AACvC,eAAO,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MACzD,CAAC,EAAE,KAAK,MAAM;AAAA,IAChB;AACA,QAAI,CAAC,SAAS;AACZ,UAAI;AAAE,kBAAUA,SAAQ,GAAG;AAAA,MAAG,QAAQ;AAAE,kBAAU,IAAI,SAAS,IAAI,WAAW,OAAO,GAAG;AAAA,MAAG;AAAA,IAC7F;AACA,WAAO,WAAW;AAAA,EACpB,UAAE;AACA,QAAI;AAAE,YAAM,GAAG,UAAU,EAAE,OAAO,KAAK,CAAC;AAAA,IAAG,QAAQ;AAAA,IAAC;AAAA,EACtD;AACF;AAIA,eAAe,aAAa;AAC1B,SAAO,MAAM,OAAO,SAAS;AAC/B;AAEA,eAAe,kBACb,YACA,MACuB;AACvB,QAAM,UAAU,MAAM,WAAW;AAEjC,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ,MAAM;AAAA,MACjC,aAAa,CAAC,UAAU;AAAA,MACxB,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU,KAAK,WAAW,SAAS,SAAS;AAAA,MAC5C,QAAQ,KAAK,UAAU;AAAA,MACvB,QAAQ,KAAK,UAAU;AAAA,MACvB,WAAW,KAAK,cAAc,OAAO,WAAY,KAAK,cAAc,WAAW,WAAW,KAAK,cAAc,aAAa,OAAO;AAAA,MACjI,KAAK;AAAA,MACL,iBAAiB;AAAA,MACjB,UAAU;AAAA,IACZ,CAAC;AAED,QAAI,OAAO,eAAe,OAAO,YAAY,SAAS,GAAG;AACvD,aAAO,EAAE,MAAM,OAAO,YAAY,CAAC,EAAE,MAAM,SAAS,MAAM,QAAQ,CAAC,EAAE;AAAA,IACvE;AAEA,WAAO,EAAE,MAAM,IAAI,SAAS,OAAO,QAAQ,CAAC,0BAA0B,EAAE;AAAA,EAC1E,SAAS,KAAU;AACjB,QAAI,KAAK,MAAO,OAAM;AAEtB,UAAM,SAAmB,CAAC;AAC1B,QAAI,IAAI,UAAU,MAAM,QAAQ,IAAI,MAAM,GAAG;AAC3C,iBAAW,KAAK,IAAI,QAAQ;AAC1B,cAAM,QAAkB,CAAC;AACzB,YAAI,EAAE,UAAU,KAAM,OAAM,KAAK,SAAS,EAAE,SAAS,IAAI,EAAE;AAC3D,YAAI,EAAE,UAAU,KAAM,OAAM,KAAK,QAAQ,EAAE,SAAS,IAAI,IAAI,EAAE,SAAS,UAAU,CAAC,EAAE;AACpF,YAAI,EAAE,UAAU,SAAU,OAAM,KAAK,EAAE,SAAS,QAAQ;AACxD,YAAI,EAAE,KAAM,OAAM,KAAK,EAAE,IAAI;AAC7B,eAAO,KAAK,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC;AAAA,MAC7D;AAAA,IACF,OAAO;AACL,aAAO,KAAK,IAAI,WAAW,OAAO,GAAG,CAAC;AAAA,IACxC;AAEA,WAAO,EAAE,MAAM,IAAI,SAAS,OAAO,OAAO;AAAA,EAC5C;AACF;AAEA,eAAe,kBAAkB,MAAqC;AACpE,QAAM,UAAU,MAAM,WAAW;AAEjC,MAAI;AACF,UAAM,SAAS,MAAM,QAAQ,UAAU,MAAM;AAAA,MAC3C,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV,CAAC;AAED,WAAO,EAAE,MAAM,OAAO,MAAM,SAAS,MAAM,QAAQ,CAAC,EAAE;AAAA,EACxD,SAAS,KAAU;AACjB,UAAM,SAAmB,CAAC;AAC1B,QAAI,IAAI,UAAU,MAAM,QAAQ,IAAI,MAAM,GAAG;AAC3C,iBAAW,KAAK,IAAI,QAAQ;AAC1B,cAAM,QAAkB,CAAC;AACzB,YAAI,EAAE,UAAU,KAAM,OAAM,KAAK,QAAQ,EAAE,SAAS,IAAI,IAAI,EAAE,SAAS,UAAU,CAAC,EAAE;AACpF,YAAI,EAAE,UAAU,SAAU,OAAM,KAAK,EAAE,SAAS,QAAQ;AACxD,YAAI,EAAE,KAAM,OAAM,KAAK,EAAE,IAAI;AAC7B,eAAO,KAAK,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC;AAAA,MAC7D;AAAA,IACF,OAAO;AACL,aAAO,KAAK,IAAI,WAAW,OAAO,GAAG,CAAC;AAAA,IACxC;AAEA,WAAO,EAAE,MAAM,IAAI,SAAS,OAAO,OAAO;AAAA,EAC5C;AACF;AAEA,eAAe,oBAAoB,MAAsC;AACvE,QAAM,UAAU,MAAM,WAAW;AAEjC,MAAI;AACF,UAAM,QAAQ,UAAU,MAAM,EAAE,QAAQ,KAAK,CAAC;AAC9C,WAAO;AAAA,EACT,SAAS,KAAU;AACjB,UAAM,SAAmB,CAAC;AAC1B,QAAI,IAAI,UAAU,MAAM,QAAQ,IAAI,MAAM,GAAG;AAC3C,iBAAW,KAAK,IAAI,QAAQ;AAC1B,cAAM,QAAkB,CAAC;AACzB,YAAI,EAAE,UAAU,KAAM,OAAM,KAAK,QAAQ,EAAE,SAAS,IAAI,IAAI,EAAE,SAAS,UAAU,CAAC,EAAE;AACpF,YAAI,EAAE,UAAU,SAAU,OAAM,KAAK,EAAE,SAAS,QAAQ;AACxD,YAAI,EAAE,KAAM,OAAM,KAAK,EAAE,IAAI;AAC7B,eAAO,KAAK,MAAM,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC;AAAA,MAC7D;AAAA,IACF,OAAO;AACL,aAAO,KAAK,IAAI,WAAW,OAAO,GAAG,CAAC;AAAA,IACxC;AAEA,WAAO,OAAO,KAAK,MAAM,KAAK;AAAA,EAChC;AACF;;;AC5RA,IAAME,SAAQ,OAAO,WAAW,QAAQ;AA0BxC,eAAsB,oBACpB,SACwB;AACxB,MAAIA,QAAO;AACT,WAAO,gBAAgB,OAAO;AAAA,EAChC;AACA,SAAO,iBAAiB,OAAO;AACjC;AAIA,SAAS,gBAAgB,SAAuC;AAC9D,QAAM,EAAE,MAAM,UAAU,OAAO,WAAW,OAAO,IAAI;AAErD,QAAM,YAAiB;AAAA,IACrB;AAAA,IACA,UAAU,YAAY;AAAA,IAEtB,MAAM,MAAM,KAAcC,SAAa;AAErC,YAAM,mBAAmB,CAAC,eAAiC;AACzD,eAAOA,QAAO,QAAQ,UAAU;AAAA,MAClC;AAEA,YAAM,WAAW,MAAM,MAAM,KAAK,gBAAgB;AAClD,aAAO,YAAY,IAAI,SAAS,aAAa,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC9D;AAAA,EACF;AAEA,MAAI,WAAW;AACb,cAAU,YAAY;AAAA,MACpB,KAAK,IAAqB;AACxB,kBAAU,KAAK,EAAE;AAAA,MACnB;AAAA,MACA,QAAQ,IAAqB,SAAkB;AAC7C,kBAAU,QAAQ,IAAI,OAAO,OAAO,CAAC;AAAA,MACvC;AAAA,MACA,MAAM,IAAqB;AACzB,kBAAU,MAAM,EAAE;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,IAAI,MAAM,SAAS;AAElC,SAAO;AAAA,IACL,MAAM,OAAO,QAAQ;AAAA,IACrB,OAAO;AACL,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AACF;AAIA,eAAe,iBAAiB,SAAgD;AAC9E,QAAM,EAAE,MAAM,UAAU,OAAO,WAAW,OAAO,IAAI;AACrD,QAAM,OAAO,MAAM,OAAO,MAAM;AAEhC,QAAM,SAAS,KAAK,aAAa,OAAO,SAAS,YAAY;AAC3D,QAAI;AAEF,YAAM,MAAM,UAAU,YAAY,WAAW,IAAI,IAAI,GAAG,QAAQ,OAAO,GAAG;AAC1E,YAAM,UAAU,IAAI,QAAQ;AAC5B,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,OAAO,GAAG;AAC1D,YAAI,OAAO;AACT,cAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,uBAAW,KAAK,MAAO,SAAQ,OAAO,KAAK,CAAC;AAAA,UAC9C,OAAO;AACL,oBAAQ,IAAI,KAAK,KAAK;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAEA,UAAI,OAA8B;AAClC,UAAI,QAAQ,WAAW,SAAS,QAAQ,WAAW,QAAQ;AACzD,cAAM,EAAE,SAAS,IAAI,MAAM,OAAO,QAAQ;AAC1C,eAAO,SAAS,MAAM,OAAO;AAAA,MAC/B;AAEA,YAAM,UAAU,IAAI,QAAQ,KAAK;AAAA,QAC/B,QAAQ,QAAQ,UAAU;AAAA,QAC1B;AAAA,QACA;AAAA;AAAA,QAEA,QAAQ,OAAO,SAAS;AAAA,MAC1B,CAAC;AAGD,YAAM,mBAAmB,MAAe;AAExC,YAAM,WAAW,MAAM,MAAM,SAAS,gBAAgB;AACtD,UAAI,CAAC,UAAU;AACb,gBAAQ,UAAU,GAAG;AACrB,gBAAQ,IAAI,WAAW;AACvB;AAAA,MACF;AAGA,cAAQ,UAAU,SAAS,QAAQ,OAAO,YAAY,SAAS,QAAQ,QAAQ,CAAC,CAAC;AAEjF,UAAI,SAAS,MAAM;AACjB,cAAM,SAAS,SAAS,KAAK,UAAU;AACvC,cAAM,OAAO,YAAY;AACvB,iBAAO,MAAM;AACX,kBAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,gBAAI,MAAM;AACR,sBAAQ,IAAI;AACZ;AAAA,YACF;AACA,kBAAM,cAAc,QAAQ,MAAM,KAAK;AACvC,gBAAI,CAAC,aAAa;AAChB,oBAAM,IAAI,QAAc,CAAC,YAAY,QAAQ,KAAK,SAAS,OAAO,CAAC;AAAA,YACrE;AAAA,UACF;AAAA,QACF;AACA,cAAM,KAAK;AAAA,MACb,OAAO;AACL,cAAM,OAAO,MAAM,SAAS,KAAK;AACjC,gBAAQ,IAAI,IAAI;AAAA,MAClB;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAM,iBAAiB,GAAG;AAClC,UAAI,CAAC,QAAQ,aAAa;AACxB,gBAAQ,UAAU,GAAG;AACrB,gBAAQ,IAAI,uBAAuB;AAAA,MACrC;AAAA,IACF;AAAA,EACF,CAAC;AAGD,MAAI,aAAa,QAAQ;AACvB,QAAI;AACF,YAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,IAAI;AAC7C,YAAM,MAAM,IAAI,gBAAgB,EAAE,UAAU,KAAK,CAAC;AAElD,aAAO,GAAG,WAAW,CAAC,SAAS,QAAQ,SAAS;AAC9C,cAAM,WAAW,IAAI;AAAA,UACnB,QAAQ,OAAO;AAAA,UACf,UAAU,YAAY,WAAW,IAAI,IAAI;AAAA,QAC3C,EAAE;AAEF,YAAI,aAAa,QAAQ;AACvB,cAAI,cAAc,SAAS,QAAQ,MAAM,CAAC,OAAO;AAC/C,gBAAI,KAAK,cAAc,IAAI,OAAO;AAAA,UACpC,CAAC;AAAA,QACH,OAAO;AACL,iBAAO,QAAQ;AAAA,QACjB;AAAA,MACF,CAAC;AAED,UAAI,GAAG,cAAc,CAAC,OAAO;AAC3B,cAAM,SAA0B;AAAA,UAC9B,KAAK,MAAM;AACT,gBAAI,GAAG,eAAe,GAAG;AACvB,iBAAG,KAAK,IAAI;AAAA,YACd;AAAA,UACF;AAAA,UACA,IAAI,aAAa;AACf,mBAAO,GAAG;AAAA,UACZ;AAAA,UACA,MAAM,MAAM,QAAQ;AAClB,eAAG,MAAM,MAAM,MAAM;AAAA,UACvB;AAAA,QACF;AAEA,kBAAU,KAAK,MAAM;AAErB,WAAG,GAAG,WAAW,CAAC,SAAS;AACzB,oBAAU,QAAQ,QAAQ,KAAK,SAAS,CAAC;AAAA,QAC3C,CAAC;AAED,WAAG,GAAG,SAAS,MAAM;AACnB,oBAAU,MAAM,MAAM;AAAA,QACxB,CAAC;AAAA,MACH,CAAC;AAAA,IACH,QAAQ;AACN,cAAQ,KAAK,8EAA8E;AAAA,IAC7F;AAAA,EACF;AAGA,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,WAAO,GAAG,SAAS,MAAM;AACzB,WAAO,OAAO,MAAM,YAAY,aAAa,MAAM;AACjD,YAAM,OAAO,OAAO,QAAQ;AAC5B,YAAM,aAAa,OAAO,SAAS,YAAY,OAAO,KAAK,OAAO;AAElE,cAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AACL,iBAAO,MAAM;AAAA,QACf;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;;;AC9NO,IAAMC,SAAQ,OAAO,WAAW,QAAQ;;;ACL/C,SAAS,MAAM,eAAe;AAG9B,IAAI,cAAsB,QAAQ,IAAI;AAItC,IAAM,cAAc,QAAQ,IAAI,kBAC3B,KAAK,QAAQ,aAAa,YAAY,GAAG,CAAC,GAAG,IAAI;AAE/C,SAAS,eAAe,MAAoB;AACjD,gBAAc;AAChB;AAEO,SAAS,iBAAyB;AACvC,SAAO;AACT;AAEO,SAAS,iBAAyB;AACvC,SAAO;AACT;AAGO,IAAM,eAAe;AAAA,EAC1B,OAAO,MAAM,KAAK,aAAa,OAAO;AAAA,EACtC,WAAW,MAAM,KAAK,aAAa,WAAW;AAAA,EAC9C,YAAY,MAAM,KAAK,aAAa,YAAY;AAAA,EAChD,OAAO,MAAM,KAAK,aAAa,OAAO;AAAA,EACtC,QAAQ,MAAM,KAAK,aAAa,QAAQ;AAAA,EACxC,QAAQ,MAAM,KAAK,aAAa,QAAQ;AAAA,EACxC,QAAQ,MAAM,KAAK,aAAa,QAAQ;AAAA,EACxC,OAAO,MAAM,KAAK,aAAa,OAAO;AAAA,EACtC,KAAK,MAAM,KAAK,aAAa,KAAK;AAAA,EAClC,WAAW,MAAM,KAAK,aAAa,WAAW;AAAA,EAC9C,WAAW,MAAM,KAAK,aAAa,WAAW;AAAA,EAC9C,QAAQ,MAAM,KAAK,aAAa,qBAAqB;AAAA,EACrD,kBAAkB,MAAM,KAAK,aAAa,wBAAwB;AAAA,EAClE,QAAQ,MAAM,KAAK,aAAa,aAAa;AAAA,EAC7C,WAAW,MAAM,KAAK,aAAa,gBAAgB;AAAA,EACnD,OAAO,MAAM,KAAK,aAAa,YAAY;AAAA,EAC3C,MAAM,MAAM,KAAK,aAAa,MAAM;AAAA,EACpC,KAAK,MAAM,KAAK,aAAa,MAAM;AAAA,EACnC,IAAI,UAAU;AAAE,WAAO;AAAA,EAAa;AAAA;AACtC;AAIO,IAAM,eAAe;AAAA,EAC1B,WAAW,MAAM,KAAK,aAAa,aAAa,mBAAmB;AAAA,EACnE,cAAc,MAAM,KAAK,aAAa,WAAW,mBAAmB;AACtE;AAEO,SAAS,sBAAsB,UAA4B;AAChE,SAAO,KAAK,aAAa,GAAG,QAAQ;AACtC;AAEO,SAAS,sBAAsB,UAA4B;AAChE,SAAO,KAAK,aAAa,GAAG,QAAQ;AACtC;",
4
+ "sourcesContent": ["/**\n * Runtime-agnostic bundler abstraction.\n * Uses Bun.build when available, falls back to esbuild for Node.js.\n */\n\nconst isBun = typeof (globalThis as any).Bun !== 'undefined';\n\nexport interface BundleResult {\n code: string;\n success: boolean;\n errors: string[];\n}\n\nexport interface BundleOptions {\n target?: 'browser' | 'node';\n format?: 'esm' | 'cjs';\n minify?: boolean;\n sourcemap?: 'inline' | 'external' | boolean;\n /** When true, throw on build errors instead of returning them */\n throw?: boolean;\n}\n\n/**\n * Bundle a file entry point.\n * Returns the bundled code as a string.\n */\nexport async function bundleFile(\n entrypoint: string,\n opts: BundleOptions = {},\n): Promise<BundleResult> {\n if (isBun) {\n return bundleWithBun(entrypoint, opts);\n }\n return bundleWithEsbuild(entrypoint, opts);\n}\n\n/**\n * Minify JavaScript code.\n */\nexport async function minifyJS(code: string): Promise<BundleResult> {\n if (isBun) {\n return minifyWithBun(code);\n }\n return minifyWithEsbuild(code);\n}\n\n/**\n * Validate JavaScript syntax (check for errors without producing output).\n */\nexport async function validateJS(code: string): Promise<string | null> {\n try {\n if (isBun) {\n return await validateWithBun(code);\n }\n return await validateWithEsbuild(code);\n } catch {\n // Validation not available (e.g., Cloudflare Workers) \u2014 skip and trust the JS\n return null;\n }\n}\n\n// \u2500\u2500 Bun implementations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function bundleWithBun(\n entrypoint: string,\n opts: BundleOptions,\n): Promise<BundleResult> {\n try {\n const result = await Bun.build({\n entrypoints: [entrypoint],\n target: opts.target || 'browser',\n format: opts.format || 'esm',\n minify: opts.minify ?? false,\n sourcemap: opts.sourcemap === true ? 'inline' : (opts.sourcemap || 'none'),\n throw: opts.throw ?? false,\n });\n\n if (result.success && result.outputs[0]) {\n const code = await result.outputs[0].text();\n return { code, success: true, errors: [] };\n }\n\n const errors = (result.logs || []).map((log: any) => {\n const parts: string[] = [];\n if (log.position?.file) parts.push(`File: ${log.position.file}`);\n if (log.position?.line) parts.push(`Line ${log.position.line}:${log.position.column || 0}`);\n if (log.position?.lineText) parts.push(log.position.lineText);\n if (log.message) parts.push(log.message);\n return parts.length > 0 ? parts.join('\\n') : String(log);\n });\n\n return { code: '', success: false, errors };\n } catch (err: any) {\n if (opts.throw) throw err;\n\n const errors: string[] = [];\n if (err.logs && Array.isArray(err.logs)) {\n for (const log of err.logs) {\n const parts: string[] = [];\n if (log.position?.line) parts.push(`Line ${log.position.line}:${log.position.column || 0}`);\n if (log.position?.lineText) parts.push(log.position.lineText);\n if (log.message) parts.push(log.message);\n errors.push(parts.length > 0 ? parts.join('\\n') : String(log));\n }\n } else {\n errors.push(err.message || String(err));\n }\n\n return { code: '', success: false, errors };\n }\n}\n\nasync function minifyWithBun(code: string): Promise<BundleResult> {\n const { writeFile, rm } = await import('fs/promises');\n const { join } = await import('path');\n const tempFile = join('/tmp', `meno-minify-${Date.now()}.js`);\n\n try {\n await writeFile(tempFile, code, 'utf-8');\n\n const result = await Bun.build({\n entrypoints: [tempFile],\n minify: true,\n throw: true,\n });\n\n if (result.outputs.length > 0) {\n const minified = await result.outputs[0].text();\n return { code: minified, success: true, errors: [] };\n }\n\n return { code: '', success: false, errors: ['Minification produced no output'] };\n } catch (err: any) {\n const { inspect } = await import('./fs');\n let details = '';\n if (err.logs && Array.isArray(err.logs)) {\n details = err.logs.map((log: any) => {\n const parts: string[] = [];\n if (log.position?.line) parts.push(`Line ${log.position.line}:${log.position.column || 0}`);\n if (log.position?.lineText) parts.push(log.position.lineText);\n if (log.message) parts.push(log.message);\n return parts.length > 0 ? parts.join('\\n') : String(log);\n }).join('\\n\\n');\n }\n if (!details) {\n try { details = inspect(err); } catch { details = err.stack || err.message || String(err); }\n }\n return { code: '', success: false, errors: [details] };\n } finally {\n try { const { rm } = await import('fs/promises'); await rm(tempFile, { force: true }); } catch {}\n }\n}\n\nasync function validateWithBun(code: string): Promise<string | null> {\n const { writeFile, rm } = await import('fs/promises');\n const { join } = await import('path');\n const tempFile = join('/tmp', `meno-validate-${Date.now()}-${Math.random().toString(36).slice(2)}.js`);\n\n try {\n await writeFile(tempFile, code, 'utf-8');\n await Bun.build({\n entrypoints: [tempFile],\n minify: true,\n throw: true,\n });\n return null; // Valid\n } catch (err: any) {\n const { inspect } = await import('./fs');\n let details = '';\n if (err.logs && Array.isArray(err.logs)) {\n details = err.logs.map((log: any) => {\n const parts: string[] = [];\n if (log.position?.line) parts.push(`Line ${log.position.line}:${log.position.column || 0}`);\n if (log.position?.lineText) parts.push(log.position.lineText);\n if (log.message) parts.push(log.message);\n return parts.length > 0 ? parts.join('\\n') : String(log);\n }).join('\\n\\n');\n }\n if (!details) {\n try { details = inspect(err); } catch { details = err.stack || err.message || String(err); }\n }\n return details || 'Unknown JavaScript error';\n } finally {\n try { await rm(tempFile, { force: true }); } catch {}\n }\n}\n\n// \u2500\u2500 esbuild implementations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function getEsbuild() {\n return await import('esbuild');\n}\n\nasync function bundleWithEsbuild(\n entrypoint: string,\n opts: BundleOptions,\n): Promise<BundleResult> {\n const esbuild = await getEsbuild();\n\n try {\n const result = await esbuild.build({\n entryPoints: [entrypoint],\n bundle: true,\n write: false,\n platform: opts.target === 'node' ? 'node' : 'browser',\n format: opts.format || 'esm',\n minify: opts.minify ?? false,\n sourcemap: opts.sourcemap === true ? 'inline' : (opts.sourcemap === 'inline' ? 'inline' : opts.sourcemap === 'external' ? true : false),\n jsx: 'automatic',\n jsxImportSource: 'react',\n logLevel: 'silent',\n });\n\n if (result.outputFiles && result.outputFiles.length > 0) {\n return { code: result.outputFiles[0].text, success: true, errors: [] };\n }\n\n return { code: '', success: false, errors: ['Build produced no output'] };\n } catch (err: any) {\n if (opts.throw) throw err;\n\n const errors: string[] = [];\n if (err.errors && Array.isArray(err.errors)) {\n for (const e of err.errors) {\n const parts: string[] = [];\n if (e.location?.file) parts.push(`File: ${e.location.file}`);\n if (e.location?.line) parts.push(`Line ${e.location.line}:${e.location.column || 0}`);\n if (e.location?.lineText) parts.push(e.location.lineText);\n if (e.text) parts.push(e.text);\n errors.push(parts.length > 0 ? parts.join('\\n') : String(e));\n }\n } else {\n errors.push(err.message || String(err));\n }\n\n return { code: '', success: false, errors };\n }\n}\n\nasync function minifyWithEsbuild(code: string): Promise<BundleResult> {\n const esbuild = await getEsbuild();\n\n try {\n const result = await esbuild.transform(code, {\n minify: true,\n loader: 'js',\n });\n\n return { code: result.code, success: true, errors: [] };\n } catch (err: any) {\n const errors: string[] = [];\n if (err.errors && Array.isArray(err.errors)) {\n for (const e of err.errors) {\n const parts: string[] = [];\n if (e.location?.line) parts.push(`Line ${e.location.line}:${e.location.column || 0}`);\n if (e.location?.lineText) parts.push(e.location.lineText);\n if (e.text) parts.push(e.text);\n errors.push(parts.length > 0 ? parts.join('\\n') : String(e));\n }\n } else {\n errors.push(err.message || String(err));\n }\n\n return { code: '', success: false, errors };\n }\n}\n\nasync function validateWithEsbuild(code: string): Promise<string | null> {\n const esbuild = await getEsbuild();\n\n try {\n await esbuild.transform(code, { loader: 'js' });\n return null; // Valid\n } catch (err: any) {\n const errors: string[] = [];\n if (err.errors && Array.isArray(err.errors)) {\n for (const e of err.errors) {\n const parts: string[] = [];\n if (e.location?.line) parts.push(`Line ${e.location.line}:${e.location.column || 0}`);\n if (e.location?.lineText) parts.push(e.location.lineText);\n if (e.text) parts.push(e.text);\n errors.push(parts.length > 0 ? parts.join('\\n') : String(e));\n }\n } else {\n errors.push(err.message || String(err));\n }\n\n return errors.join('\\n\\n') || 'Unknown JavaScript error';\n }\n}\n", "/**\n * Runtime-agnostic HTTP server abstraction.\n * Uses Bun.serve when available, falls back to Node.js http + ws.\n */\n\nconst isBun = typeof globalThis.Bun !== 'undefined';\n\nexport interface RuntimeServer {\n port: number;\n /**\n * Stop the server. When `force` is true, active connections are\n * closed immediately (Bun: closeActiveConnections=true). Defaults to\n * a graceful stop that lets in-flight requests finish.\n */\n stop(force?: boolean): void;\n}\n\nexport interface RuntimeWSClient {\n send(data: string | ArrayBuffer | Uint8Array): void;\n readyState: number;\n close(code?: number, reason?: string): void;\n}\n\nexport interface ServerOptions {\n port: number;\n hostname?: string;\n fetch: (req: Request, upgradeWebSocket: (req: Request) => boolean) => Promise<Response | undefined>;\n websocket?: {\n open(ws: RuntimeWSClient): void;\n message(ws: RuntimeWSClient, data: string): void;\n close(ws: RuntimeWSClient): void;\n };\n /** Path to upgrade to WebSocket (e.g., \"/__hmr\") */\n wsPath?: string;\n}\n\nexport async function createRuntimeServer(\n options: ServerOptions,\n): Promise<RuntimeServer> {\n if (isBun) {\n return createBunServer(options);\n }\n return createNodeServer(options);\n}\n\n// \u2500\u2500 Bun implementation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction createBunServer(options: ServerOptions): RuntimeServer {\n const { port, hostname, fetch, websocket, wsPath } = options;\n\n const bunConfig: any = {\n port,\n hostname: hostname || 'localhost',\n\n async fetch(req: Request, server: any) {\n // Create upgrade function that delegates to Bun's server.upgrade\n const upgradeWebSocket = (upgradeReq: Request): boolean => {\n return server.upgrade(upgradeReq);\n };\n\n const response = await fetch(req, upgradeWebSocket);\n return response || new Response('Not Found', { status: 404 });\n },\n };\n\n if (websocket) {\n bunConfig.websocket = {\n open(ws: RuntimeWSClient) {\n websocket.open(ws);\n },\n message(ws: RuntimeWSClient, message: unknown) {\n websocket.message(ws, String(message));\n },\n close(ws: RuntimeWSClient) {\n websocket.close(ws);\n },\n };\n }\n\n const server = Bun.serve(bunConfig);\n\n return {\n port: server.port ?? port,\n stop(force?: boolean) {\n server.stop(force === true);\n },\n };\n}\n\n// \u2500\u2500 Node.js implementation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function createNodeServer(options: ServerOptions): Promise<RuntimeServer> {\n const { port, hostname, fetch, websocket, wsPath } = options;\n const http = await import('http');\n\n const server = http.createServer(async (nodeReq, nodeRes) => {\n try {\n // Convert Node.js IncomingMessage \u2192 Web Request\n const url = `http://${hostname || 'localhost'}:${port}${nodeReq.url || '/'}`;\n const headers = new Headers();\n for (const [key, value] of Object.entries(nodeReq.headers)) {\n if (value) {\n if (Array.isArray(value)) {\n for (const v of value) headers.append(key, v);\n } else {\n headers.set(key, value);\n }\n }\n }\n\n let body: ReadableStream | null = null;\n if (nodeReq.method !== 'GET' && nodeReq.method !== 'HEAD') {\n const { Readable } = await import('stream');\n body = Readable.toWeb(nodeReq) as unknown as ReadableStream;\n }\n\n const request = new Request(url, {\n method: nodeReq.method || 'GET',\n headers,\n body,\n // @ts-ignore - duplex is needed for streaming request bodies in Node\n duplex: body ? 'half' : undefined,\n });\n\n // No-op upgrade function for non-upgrade requests\n const upgradeWebSocket = (): boolean => false;\n\n const response = await fetch(request, upgradeWebSocket);\n if (!response) {\n nodeRes.writeHead(404);\n nodeRes.end('Not Found');\n return;\n }\n\n // Convert Web Response \u2192 Node.js ServerResponse\n nodeRes.writeHead(response.status, Object.fromEntries(response.headers.entries()));\n\n if (response.body) {\n const reader = response.body.getReader();\n const pump = async () => {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n nodeRes.end();\n break;\n }\n const canContinue = nodeRes.write(value);\n if (!canContinue) {\n await new Promise<void>((resolve) => nodeRes.once('drain', resolve));\n }\n }\n };\n await pump();\n } else {\n const text = await response.text();\n nodeRes.end(text);\n }\n } catch (err) {\n console.error('Server error:', err);\n if (!nodeRes.headersSent) {\n nodeRes.writeHead(500);\n nodeRes.end('Internal Server Error');\n }\n }\n });\n\n // WebSocket support via 'ws' package\n if (websocket && wsPath) {\n try {\n const { WebSocketServer } = await import('ws');\n const wss = new WebSocketServer({ noServer: true });\n\n server.on('upgrade', (request, socket, head) => {\n const pathname = new URL(\n request.url || '/',\n `http://${hostname || 'localhost'}:${port}`,\n ).pathname;\n\n if (pathname === wsPath) {\n wss.handleUpgrade(request, socket, head, (ws) => {\n wss.emit('connection', ws, request);\n });\n } else {\n socket.destroy();\n }\n });\n\n wss.on('connection', (ws) => {\n const client: RuntimeWSClient = {\n send(data) {\n if (ws.readyState === 1) { // OPEN\n ws.send(data);\n }\n },\n get readyState() {\n return ws.readyState;\n },\n close(code, reason) {\n ws.close(code, reason);\n },\n };\n\n websocket.open(client);\n\n ws.on('message', (data) => {\n websocket.message(client, data.toString());\n });\n\n ws.on('close', () => {\n websocket.close(client);\n });\n });\n } catch {\n console.warn('WebSocket support requires the \"ws\" package. Install it with: npm install ws');\n }\n }\n\n // Start listening\n return new Promise((resolve, reject) => {\n server.on('error', reject);\n server.listen(port, hostname || 'localhost', () => {\n const addr = server.address();\n const actualPort = typeof addr === 'object' && addr ? addr.port : port;\n\n resolve({\n port: actualPort,\n stop(_force?: boolean) {\n // Node http.Server.close is graceful by default; the force\n // flag is accepted for API parity with Bun but currently has\n // no additional effect on the Node path.\n server.close();\n },\n });\n });\n });\n}\n", "/**\n * Runtime Abstraction\n * Detects Bun vs Node.js and re-exports runtime-agnostic utilities.\n */\n\nexport const isBun = typeof globalThis.Bun !== 'undefined';\n\nexport {\n readTextFile,\n readJsonFile,\n fileExists,\n writeFile,\n serveFile,\n hashContent,\n inspect,\n ensureDir,\n getModuleDir,\n spawnProcess,\n getFileSize,\n getMimeType,\n} from './fs';\n\nexport {\n bundleFile,\n minifyJS,\n validateJS,\n type BundleResult,\n type BundleOptions,\n} from './bundler';\n\nexport {\n createRuntimeServer,\n type RuntimeServer,\n type RuntimeWSClient,\n type ServerOptions,\n} from './httpServer';\n", "import { join, dirname } from 'path';\nimport { getModuleDir } from './runtime';\n\nlet projectRoot: string = process.cwd();\n\n// Package root is where the editor files are installed (2 levels up from this file)\n// In packaged Electron builds, MENO_CORE_ROOT overrides import.meta.url resolution\nconst packageRoot = process.env.MENO_CORE_ROOT\n || join(dirname(getModuleDir(import.meta.url)), '..');\n\nexport function setProjectRoot(root: string): void {\n projectRoot = root;\n}\n\nexport function getProjectRoot(): string {\n return projectRoot;\n}\n\nexport function getPackageRoot(): string {\n return packageRoot;\n}\n\n// Path getters for project files (user's project)\nexport const projectPaths = {\n pages: () => join(projectRoot, 'pages'),\n templates: () => join(projectRoot, 'templates'),\n components: () => join(projectRoot, 'components'),\n fonts: () => join(projectRoot, 'fonts'),\n images: () => join(projectRoot, 'images'),\n videos: () => join(projectRoot, 'videos'),\n assets: () => join(projectRoot, 'assets'),\n icons: () => join(projectRoot, 'icons'),\n cms: () => join(projectRoot, 'cms'),\n libraries: () => join(projectRoot, 'libraries'),\n functions: () => join(projectRoot, 'functions'),\n config: () => join(projectRoot, 'project.config.json'),\n componentsConfig: () => join(projectRoot, 'components.config.json'),\n colors: () => join(projectRoot, 'colors.json'),\n variables: () => join(projectRoot, 'variables.json'),\n enums: () => join(projectRoot, 'enums.json'),\n dist: () => join(projectRoot, 'dist'),\n env: () => join(projectRoot, '.env'),\n get project() { return projectRoot; }, // Direct access to project root\n};\n\n// Path getters for package files (core assets)\n// Note: Editor-specific paths (editorHtml) are now in @meno/studio\nexport const packagePaths = {\n indexHtml: () => join(packageRoot, 'templates', 'index-router.html'),\n clientRouter: () => join(packageRoot, 'entries', 'client-router.tsx'),\n};\n\nexport function resolveProjectPath(...segments: string[]): string {\n return join(projectRoot, ...segments);\n}\n\nexport function resolvePackagePath(...segments: string[]): string {\n return join(packageRoot, ...segments);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["writeFile", "join", "inspect", "rm", "isBun", "server", "isBun"]
7
7
  }
@@ -15,18 +15,18 @@ import {
15
15
  migrateTemplatesDirectory,
16
16
  parseJSON,
17
17
  prepareClientData
18
- } from "./chunk-BZQKEJQY.js";
18
+ } from "./chunk-FGUZOYJX.js";
19
19
  import {
20
20
  minifyJS,
21
21
  projectPaths
22
- } from "./chunk-5Z5VQRTJ.js";
22
+ } from "./chunk-I7YIGZXT.js";
23
23
  import {
24
24
  inspect
25
25
  } from "./chunk-WQFG7PAH.js";
26
26
  import {
27
27
  isItemDraftForLocale,
28
28
  isItemFullyPublished
29
- } from "./chunk-5ZASE4IG.js";
29
+ } from "./chunk-FED5MME6.js";
30
30
  import {
31
31
  isI18nValue,
32
32
  resolveI18nValue
@@ -754,7 +754,7 @@ async function buildStaticPages() {
754
754
  console.log("\u{1F3D7}\uFE0F Building static HTML files...\n");
755
755
  buildErrors.length = 0;
756
756
  clearJSValidationCache();
757
- const { configService } = await import("./configService-6KTT6GRT.js");
757
+ const { configService } = await import("./configService-DYCUEURL.js");
758
758
  configService.reset();
759
759
  const projectConfig = await loadProjectConfig();
760
760
  const siteUrl = projectConfig.siteUrl?.replace(/\/$/, "");
@@ -1132,4 +1132,4 @@ export {
1132
1132
  injectTrackingScript,
1133
1133
  buildStaticPages
1134
1134
  };
1135
- //# sourceMappingURL=chunk-OUNJ76QM.js.map
1135
+ //# sourceMappingURL=chunk-LJFB5EBT.js.map
@@ -425,7 +425,7 @@ function matchesAbbreviation(property, input) {
425
425
  return true;
426
426
  }
427
427
  function filterCSSProperties(input) {
428
- const normalizedInput = input.trim();
428
+ const normalizedInput = (input ?? "").trim();
429
429
  if (!normalizedInput) {
430
430
  return CSS_PROPERTIES.slice(0, 15);
431
431
  }
@@ -451,7 +451,7 @@ function filterPropertyValues(propertyName, input) {
451
451
  if (!values.length) {
452
452
  return [];
453
453
  }
454
- const normalizedInput = input.trim().toLowerCase();
454
+ const normalizedInput = (input ?? "").trim().toLowerCase();
455
455
  if (!normalizedInput) {
456
456
  return values;
457
457
  }
@@ -515,4 +515,4 @@ export {
515
515
  logRuntimeError,
516
516
  logNetworkError
517
517
  };
518
- //# sourceMappingURL=chunk-GYF3ABI3.js.map
518
+ //# sourceMappingURL=chunk-UUA5LEWF.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../lib/shared/cssProperties.ts", "../../lib/shared/errorLogger.ts"],
4
- "sourcesContent": ["/**\n * CSS Property Definition structure\n */\ninterface CSSPropertyDefinition {\n values?: readonly string[];\n type?: 'string' | 'select' | 'boolean' | 'number';\n}\n\n/**\n * CSS Properties with their valid values and metadata\n * Used for autocomplete suggestions for both property names and values\n */\nexport const CSS_PROPERTIES_DEFINITION: Record<string, CSSPropertyDefinition> = {\n // Display & Layout\n display: {\n values: ['block', 'flex', 'grid', 'inline', 'inline-block', 'inline-flex', 'inline-grid', 'none'],\n type: 'select',\n },\n position: {\n values: ['static', 'relative', 'absolute', 'fixed', 'sticky'],\n type: 'select',\n },\n top: { type: 'string' },\n right: { type: 'string' },\n bottom: { type: 'string' },\n left: { type: 'string' },\n inset: { type: 'string' },\n zIndex: { type: 'number' },\n\n // Dimensions\n width: { type: 'string' },\n height: { type: 'string' },\n minWidth: { type: 'string' },\n maxWidth: { type: 'string' },\n minHeight: { type: 'string' },\n maxHeight: { type: 'string' },\n aspectRatio: { type: 'string' },\n\n // Spacing\n margin: { type: 'string' },\n marginTop: { type: 'string' },\n marginRight: { type: 'string' },\n marginBottom: { type: 'string' },\n marginLeft: { type: 'string' },\n padding: { type: 'string' },\n paddingTop: { type: 'string' },\n paddingRight: { type: 'string' },\n paddingBottom: { type: 'string' },\n paddingLeft: { type: 'string' },\n gap: { type: 'string' },\n rowGap: { type: 'string' },\n columnGap: { type: 'string' },\n\n // Borders\n border: { type: 'string' },\n borderWidth: { type: 'string' },\n borderStyle: {\n values: ['solid', 'dashed', 'dotted', 'double', 'groove', 'ridge', 'inset', 'outset', 'none'],\n type: 'select',\n },\n borderColor: { type: 'string' },\n borderTop: { type: 'string' },\n borderRight: { type: 'string' },\n borderBottom: { type: 'string' },\n borderLeft: { type: 'string' },\n borderRadius: { type: 'string' },\n borderTopLeftRadius: { type: 'string' },\n borderTopRightRadius: { type: 'string' },\n borderBottomLeftRadius: { type: 'string' },\n borderBottomRightRadius: { type: 'string' },\n\n // Background & Colors\n background: { type: 'string' },\n backgroundColor: { type: 'string' },\n backgroundImage: { type: 'string' },\n backgroundSize: {\n values: ['auto', 'cover', 'contain'],\n type: 'select',\n },\n backgroundPosition: {\n values: ['top', 'bottom', 'left', 'right', 'center'],\n type: 'select',\n },\n backgroundRepeat: {\n values: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'],\n type: 'select',\n },\n color: { type: 'string' },\n opacity: { type: 'number' },\n\n // Flexbox\n flex: { type: 'string' },\n flexDirection: {\n values: ['row', 'column', 'row-reverse', 'column-reverse'],\n type: 'select',\n },\n flexWrap: {\n values: ['nowrap', 'wrap', 'wrap-reverse'],\n type: 'select',\n },\n flexFlow: { type: 'string' },\n justifyContent: {\n values: ['flex-start', 'flex-end', 'center', 'space-between', 'space-around', 'space-evenly'],\n type: 'select',\n },\n alignItems: {\n values: ['flex-start', 'flex-end', 'center', 'stretch', 'baseline'],\n type: 'select',\n },\n alignContent: {\n values: ['flex-start', 'flex-end', 'center', 'space-between', 'space-around', 'stretch'],\n type: 'select',\n },\n alignSelf: {\n values: ['auto', 'flex-start', 'flex-end', 'center', 'stretch', 'baseline'],\n type: 'select',\n },\n flexGrow: { type: 'number' },\n flexShrink: { type: 'number' },\n flexBasis: { type: 'string' },\n order: { type: 'number' },\n\n // Grid\n grid: { type: 'string' },\n gridTemplateColumns: { type: 'string' },\n gridTemplateRows: { type: 'string' },\n gridTemplateAreas: { type: 'string' },\n gridGap: { type: 'string' },\n gridColumn: { type: 'string' },\n gridRow: { type: 'string' },\n gridArea: { type: 'string' },\n gridAutoFlow: {\n values: ['row', 'column', 'row dense', 'column dense'],\n type: 'select',\n },\n gridAutoColumns: { type: 'string' },\n gridAutoRows: { type: 'string' },\n justifyItems: {\n values: ['start', 'end', 'center', 'stretch'],\n type: 'select',\n },\n justifySelf: {\n values: ['auto', 'start', 'end', 'center', 'stretch'],\n type: 'select',\n },\n placeContent: { type: 'string' },\n placeItems: { type: 'string' },\n placeSelf: { type: 'string' },\n\n // Text & Font\n fontSize: { type: 'string' },\n fontWeight: {\n values: ['100', '200', '300', '400', '500', '600', '700', '800', '900', 'normal', 'bold'],\n type: 'select',\n },\n fontFamily: { type: 'string' },\n fontStyle: {\n values: ['normal', 'italic', 'oblique'],\n type: 'select',\n },\n lineHeight: { type: 'string' },\n textAlign: {\n values: ['left', 'right', 'center', 'justify', 'start', 'end'],\n type: 'select',\n },\n textDecoration: {\n values: ['none', 'underline', 'overline', 'line-through'],\n type: 'select',\n },\n textTransform: {\n values: ['none', 'capitalize', 'uppercase', 'lowercase'],\n type: 'select',\n },\n letterSpacing: { type: 'string' },\n wordSpacing: { type: 'string' },\n wordBreak: {\n values: ['normal', 'break-all', 'keep-all', 'break-word'],\n type: 'select',\n },\n overflowWrap: {\n values: ['normal', 'break-word', 'anywhere'],\n type: 'select',\n },\n textIndent: { type: 'string' },\n verticalAlign: {\n values: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super'],\n type: 'select',\n },\n\n // Box Shadow & Effects\n boxShadow: { type: 'string' },\n textShadow: { type: 'string' },\n filter: { type: 'string' },\n backdropFilter: { type: 'string' },\n transform: { type: 'string' },\n transformOrigin: { type: 'string' },\n transition: { type: 'string' },\n animation: { type: 'string' },\n backfaceVisibility: {\n values: ['visible', 'hidden'],\n type: 'select',\n },\n mixBlendMode: {\n values: ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'],\n type: 'select',\n },\n clipPath: { type: 'string' },\n\n // Overflow & Content\n overflow: {\n values: ['visible', 'hidden', 'scroll', 'auto'],\n type: 'select',\n },\n overflowX: {\n values: ['visible', 'hidden', 'scroll', 'auto'],\n type: 'select',\n },\n overflowY: {\n values: ['visible', 'hidden', 'scroll', 'auto'],\n type: 'select',\n },\n whiteSpace: {\n values: ['normal', 'nowrap', 'pre', 'pre-wrap', 'pre-line'],\n type: 'select',\n },\n textOverflow: {\n values: ['clip', 'ellipsis'],\n type: 'select',\n },\n visibility: {\n values: ['visible', 'hidden', 'collapse'],\n type: 'select',\n },\n content: { type: 'string' },\n\n // Cursor & Interaction\n cursor: {\n values: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'not-allowed', 'help'],\n type: 'select',\n },\n pointerEvents: {\n values: ['auto', 'none'],\n type: 'select',\n },\n userSelect: {\n values: ['auto', 'none', 'text', 'all'],\n type: 'select',\n },\n\n // Outline\n outline: { type: 'string' },\n outlineWidth: { type: 'string' },\n outlineStyle: {\n values: ['none', 'solid', 'dashed', 'dotted', 'double', 'groove', 'ridge', 'inset', 'outset'],\n type: 'select',\n },\n outlineColor: { type: 'string' },\n outlineOffset: { type: 'string' },\n\n // Lists\n listStyle: { type: 'string' },\n listStyleType: {\n values: ['none', 'disc', 'circle', 'square', 'decimal', 'decimal-leading-zero', 'lower-roman', 'upper-roman', 'lower-alpha', 'upper-alpha'],\n type: 'select',\n },\n listStylePosition: {\n values: ['inside', 'outside'],\n type: 'select',\n },\n\n // Miscellaneous\n float: {\n values: ['left', 'right', 'none'],\n type: 'select',\n },\n clear: {\n values: ['left', 'right', 'both', 'none'],\n type: 'select',\n },\n boxSizing: {\n values: ['content-box', 'border-box'],\n type: 'select',\n },\n objectFit: {\n values: ['fill', 'contain', 'cover', 'scale-down'],\n type: 'select',\n },\n objectPosition: {\n values: ['top', 'bottom', 'left', 'right', 'center'],\n type: 'select',\n },\n resize: {\n values: ['none', 'both', 'horizontal', 'vertical'],\n type: 'select',\n },\n scrollBehavior: {\n values: ['auto', 'smooth'],\n type: 'select',\n },\n accentColor: { type: 'string' },\n\n // SVG\n stroke: { type: 'string' },\n strokeWidth: { type: 'string' },\n strokeDasharray: { type: 'string' },\n strokeDashoffset: { type: 'string' },\n strokeLinecap: {\n values: ['butt', 'round', 'square'],\n type: 'select',\n },\n strokeLinejoin: {\n values: ['miter', 'round', 'bevel'],\n type: 'select',\n },\n strokeOpacity: { type: 'number' },\n fill: { type: 'string' },\n fillOpacity: { type: 'number' },\n fillRule: {\n values: ['nonzero', 'evenodd'],\n type: 'select',\n },\n};\n\n/**\n * Common CSS properties for autocomplete suggestions (camelCase for React/JS)\n * Derived from CSS_PROPERTIES_DEFINITION keys\n */\nexport const CSS_PROPERTIES = Object.keys(CSS_PROPERTIES_DEFINITION);\n\n/**\n * Popularity tiers for CSS properties (lower = more common).\n * Properties not listed default to tier 3.\n * Used to sort autocomplete suggestions within each match group.\n */\nconst CSS_PROPERTY_PRIORITY: Record<string, number> = {\n // Tier 1: Most commonly used\n display: 1,\n position: 1,\n width: 1,\n height: 1,\n margin: 1,\n padding: 1,\n color: 1,\n backgroundColor: 1,\n fontSize: 1,\n fontWeight: 1,\n border: 1,\n borderRadius: 1,\n flex: 1,\n flexDirection: 1,\n justifyContent: 1,\n alignItems: 1,\n gap: 1,\n opacity: 1,\n overflow: 1,\n zIndex: 1,\n top: 1,\n right: 1,\n bottom: 1,\n left: 1,\n cursor: 1,\n background: 1,\n boxShadow: 1,\n transition: 1,\n transform: 1,\n lineHeight: 1,\n textAlign: 1,\n\n // Tier 2: Common but less frequent\n maxWidth: 2,\n maxHeight: 2,\n minWidth: 3,\n minHeight: 3,\n marginTop: 2,\n marginBottom: 2,\n marginLeft: 2,\n marginRight: 2,\n paddingTop: 2,\n paddingBottom: 2,\n paddingLeft: 2,\n paddingRight: 2,\n fontFamily: 2,\n fontStyle: 2,\n textDecoration: 2,\n textTransform: 2,\n letterSpacing: 2,\n borderWidth: 2,\n borderStyle: 2,\n borderColor: 2,\n borderBottom: 2,\n borderTop: 2,\n flexWrap: 2,\n flexGrow: 2,\n flexShrink: 2,\n flexBasis: 2,\n alignSelf: 2,\n gridTemplateColumns: 2,\n gridTemplateRows: 2,\n backgroundImage: 2,\n backgroundSize: 2,\n backgroundPosition: 2,\n whiteSpace: 2,\n textOverflow: 2,\n visibility: 2,\n pointerEvents: 2,\n userSelect: 2,\n boxSizing: 2,\n objectFit: 2,\n filter: 2,\n animation: 2,\n outline: 2,\n inset: 2,\n};\n\nfunction getPropertyPriority(property: string): number {\n return CSS_PROPERTY_PRIORITY[property] ?? 3;\n}\n\n/**\n * CSS Property Groups for organizing styles in the editor\n * Order determines display order in the UI\n */\nexport const CSS_PROPERTY_GROUPS: Record<string, string[]> = {\n 'Layout': ['display', 'position', 'top', 'right', 'bottom', 'left', 'inset', 'zIndex'],\n 'Dimensions': ['width', 'height', 'minWidth', 'maxWidth', 'minHeight', 'maxHeight', 'aspectRatio'],\n 'Spacing': ['margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'gap', 'rowGap', 'columnGap'],\n 'Flexbox': ['flex', 'flexDirection', 'flexWrap', 'flexFlow', 'justifyContent', 'alignItems', 'alignContent', 'alignSelf', 'flexGrow', 'flexShrink', 'flexBasis', 'order'],\n 'Grid': ['grid', 'gridTemplateColumns', 'gridTemplateRows', 'gridTemplateAreas', 'gridGap', 'gridColumn', 'gridRow', 'gridArea', 'gridAutoFlow', 'gridAutoColumns', 'gridAutoRows', 'justifyItems', 'justifySelf', 'placeContent', 'placeItems', 'placeSelf'],\n 'Typography': ['fontSize', 'fontWeight', 'fontFamily', 'fontStyle', 'lineHeight', 'textAlign', 'textDecoration', 'textTransform', 'letterSpacing', 'wordSpacing', 'wordBreak', 'overflowWrap', 'textIndent', 'verticalAlign', 'color'],\n 'Background': ['background', 'backgroundColor', 'backgroundImage', 'backgroundSize', 'backgroundPosition', 'backgroundRepeat', 'opacity'],\n 'Borders': ['border', 'borderWidth', 'borderStyle', 'borderColor', 'borderTop', 'borderRight', 'borderBottom', 'borderLeft', 'borderRadius', 'borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomLeftRadius', 'borderBottomRightRadius'],\n 'Outline': ['outline', 'outlineWidth', 'outlineStyle', 'outlineColor', 'outlineOffset'],\n 'Effects': ['boxShadow', 'textShadow', 'filter', 'backdropFilter', 'transform', 'transformOrigin', 'transition', 'animation', 'backfaceVisibility', 'mixBlendMode', 'clipPath'],\n 'Overflow': ['overflow', 'overflowX', 'overflowY', 'whiteSpace', 'textOverflow', 'visibility', 'content'],\n 'Interaction': ['cursor', 'pointerEvents', 'userSelect'],\n 'Lists': ['listStyle', 'listStyleType', 'listStylePosition'],\n 'Other': ['float', 'clear', 'boxSizing', 'objectFit', 'objectPosition', 'resize', 'scrollBehavior', 'accentColor'],\n 'SVG': ['stroke', 'strokeWidth', 'strokeDasharray', 'strokeDashoffset', 'strokeLinecap', 'strokeLinejoin', 'strokeOpacity', 'fill', 'fillOpacity', 'fillRule'],\n};\n\n/**\n * Get the group name for a CSS property\n * @param propertyName - The CSS property name\n * @returns The group name or 'Other' if not found\n */\nexport function getPropertyGroup(propertyName: string): string {\n for (const [groupName, properties] of Object.entries(CSS_PROPERTY_GROUPS)) {\n if (properties.includes(propertyName)) {\n return groupName;\n }\n }\n return 'Other';\n}\n\n/**\n * Check if property matches the abbreviation pattern\n * For example, \"bC\" matches \"backgroundColor\" (b\u2192b, C\u2192C capital letter)\n */\nfunction matchesAbbreviation(property: string, input: string): boolean {\n if (!input) return false;\n\n let propertyIndex = 0;\n\n for (let inputIndex = 0; inputIndex < input.length; inputIndex++) {\n const inputChar = input[inputIndex];\n let found = false;\n\n // Search from current position to end of property for a match at a word boundary\n while (propertyIndex < property.length) {\n const propChar = property[propertyIndex];\n // Word boundary = first character OR capital letter\n const isWordBoundary = propertyIndex === 0 ||\n (propChar === propChar.toUpperCase() && propChar !== propChar.toLowerCase());\n\n if (isWordBoundary && inputChar.toLowerCase() === propChar.toLowerCase()) {\n // Match found at word boundary\n found = true;\n propertyIndex++; // Move past this character for next search\n break;\n }\n\n propertyIndex++;\n }\n\n if (!found) {\n return false; // Couldn't find this input character at a word boundary\n }\n }\n\n return true;\n}\n\n/**\n * Filter CSS properties based on input value\n * Supports both startsWith matching and camelCase abbreviation matching\n */\nexport function filterCSSProperties(input: string): string[] {\n const normalizedInput = input.trim();\n if (!normalizedInput) {\n return CSS_PROPERTIES.slice(0, 15); // Show first 15 by default\n }\n\n // First, try startsWith matching (exact prefix match)\n const startsWithMatches = CSS_PROPERTIES.filter(prop =>\n prop.toLowerCase().startsWith(normalizedInput.toLowerCase())\n );\n\n // Then, try abbreviation/fuzzy matching\n const abbreviationMatches = CSS_PROPERTIES.filter(prop =>\n matchesAbbreviation(prop, normalizedInput) &&\n !startsWithMatches.includes(prop) // Don't duplicate startsWith matches\n );\n\n // Sort each group by popularity, then combine: exact matches first, then fuzzy matches\n const byPriority = (a: string, b: string) =>\n getPropertyPriority(a) - getPropertyPriority(b);\n\n return [\n ...startsWithMatches.sort(byPriority),\n ...abbreviationMatches.sort(byPriority),\n ];\n}\n\n/**\n * Get available values for a specific CSS property\n * @param propertyName - The CSS property name (e.g., 'flexDirection')\n * @returns Array of valid values for the property, or empty array if property has no predefined values\n */\nexport function getPropertyValues(propertyName: string): string[] {\n const values = CSS_PROPERTIES_DEFINITION[propertyName]?.values;\n return values ? Array.from(values) : [];\n}\n\n/**\n * Filter values for a specific CSS property based on input\n * Supports substring matching and returns values that contain the input\n * @param propertyName - The CSS property name (e.g., 'flexDirection')\n * @param input - The user input to filter values by\n * @returns Filtered array of valid values for the property\n */\nexport function filterPropertyValues(propertyName: string, input: string): string[] {\n const values = getPropertyValues(propertyName);\n if (!values.length) {\n return []; // No predefined values for this property\n }\n\n const normalizedInput = input.trim().toLowerCase();\n if (!normalizedInput) {\n return values; // Return all values if no input\n }\n\n // Filter values that contain the input (substring match)\n return values.filter(value =>\n value.toLowerCase().includes(normalizedInput)\n );\n}\n\n/**\n * Get the property type for a CSS property\n * @param propertyName - The CSS property name\n * @returns The property type ('string' | 'select' | 'boolean' | 'number') or undefined\n */\nexport function getPropertyType(propertyName: string): 'string' | 'select' | 'boolean' | 'number' | undefined {\n return CSS_PROPERTIES_DEFINITION[propertyName]?.type;\n}\n", "/**\n * Error Logger\n * Centralized error logging with optional telemetry integration\n */\n\nimport type { ErrorCategory } from './errors';\n\ninterface ErrorLogEntry {\n location: string;\n category: ErrorCategory;\n error: unknown;\n context?: Record<string, unknown>;\n timestamp: number;\n}\n\ntype ErrorHandler = (entry: ErrorLogEntry) => void;\n\nlet errorHandler: ErrorHandler | null = null;\n\n/**\n * Set custom error handler (for telemetry integration)\n */\nexport function setErrorHandler(handler: ErrorHandler | null): void {\n errorHandler = handler;\n}\n\n/**\n * Check if running in development mode\n */\nfunction isDevelopment(): boolean {\n // Check for Node.js environment\n if (typeof process !== 'undefined' && process.env?.NODE_ENV) {\n return process.env.NODE_ENV === 'development';\n }\n // Browser environment - assume development if no production indicators\n return true;\n}\n\n/**\n * Log runtime error with context\n * Use for graceful degradation scenarios where error is handled but should be visible\n */\nexport function logRuntimeError(\n location: string,\n error: unknown,\n context?: Record<string, unknown>\n): void {\n const entry: ErrorLogEntry = {\n location,\n category: 'runtime',\n error,\n context,\n timestamp: Date.now(),\n };\n\n // Development: always log to console\n if (isDevelopment()) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(`[${location}] ${errorMessage}`, context ?? '');\n }\n\n // Custom handler (telemetry, etc.)\n errorHandler?.(entry);\n}\n\n/**\n * Log network/API error\n */\nexport function logNetworkError(\n location: string,\n error: unknown,\n context?: Record<string, unknown>\n): void {\n const entry: ErrorLogEntry = {\n location,\n category: 'network',\n error,\n context,\n timestamp: Date.now(),\n };\n\n if (isDevelopment()) {\n console.error(`[${location}] Network error:`, error, context ?? '');\n }\n\n errorHandler?.(entry);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * CSS Property Definition structure\n */\ninterface CSSPropertyDefinition {\n values?: readonly string[];\n type?: 'string' | 'select' | 'boolean' | 'number';\n}\n\n/**\n * CSS Properties with their valid values and metadata\n * Used for autocomplete suggestions for both property names and values\n */\nexport const CSS_PROPERTIES_DEFINITION: Record<string, CSSPropertyDefinition> = {\n // Display & Layout\n display: {\n values: ['block', 'flex', 'grid', 'inline', 'inline-block', 'inline-flex', 'inline-grid', 'none'],\n type: 'select',\n },\n position: {\n values: ['static', 'relative', 'absolute', 'fixed', 'sticky'],\n type: 'select',\n },\n top: { type: 'string' },\n right: { type: 'string' },\n bottom: { type: 'string' },\n left: { type: 'string' },\n inset: { type: 'string' },\n zIndex: { type: 'number' },\n\n // Dimensions\n width: { type: 'string' },\n height: { type: 'string' },\n minWidth: { type: 'string' },\n maxWidth: { type: 'string' },\n minHeight: { type: 'string' },\n maxHeight: { type: 'string' },\n aspectRatio: { type: 'string' },\n\n // Spacing\n margin: { type: 'string' },\n marginTop: { type: 'string' },\n marginRight: { type: 'string' },\n marginBottom: { type: 'string' },\n marginLeft: { type: 'string' },\n padding: { type: 'string' },\n paddingTop: { type: 'string' },\n paddingRight: { type: 'string' },\n paddingBottom: { type: 'string' },\n paddingLeft: { type: 'string' },\n gap: { type: 'string' },\n rowGap: { type: 'string' },\n columnGap: { type: 'string' },\n\n // Borders\n border: { type: 'string' },\n borderWidth: { type: 'string' },\n borderStyle: {\n values: ['solid', 'dashed', 'dotted', 'double', 'groove', 'ridge', 'inset', 'outset', 'none'],\n type: 'select',\n },\n borderColor: { type: 'string' },\n borderTop: { type: 'string' },\n borderRight: { type: 'string' },\n borderBottom: { type: 'string' },\n borderLeft: { type: 'string' },\n borderRadius: { type: 'string' },\n borderTopLeftRadius: { type: 'string' },\n borderTopRightRadius: { type: 'string' },\n borderBottomLeftRadius: { type: 'string' },\n borderBottomRightRadius: { type: 'string' },\n\n // Background & Colors\n background: { type: 'string' },\n backgroundColor: { type: 'string' },\n backgroundImage: { type: 'string' },\n backgroundSize: {\n values: ['auto', 'cover', 'contain'],\n type: 'select',\n },\n backgroundPosition: {\n values: ['top', 'bottom', 'left', 'right', 'center'],\n type: 'select',\n },\n backgroundRepeat: {\n values: ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'],\n type: 'select',\n },\n color: { type: 'string' },\n opacity: { type: 'number' },\n\n // Flexbox\n flex: { type: 'string' },\n flexDirection: {\n values: ['row', 'column', 'row-reverse', 'column-reverse'],\n type: 'select',\n },\n flexWrap: {\n values: ['nowrap', 'wrap', 'wrap-reverse'],\n type: 'select',\n },\n flexFlow: { type: 'string' },\n justifyContent: {\n values: ['flex-start', 'flex-end', 'center', 'space-between', 'space-around', 'space-evenly'],\n type: 'select',\n },\n alignItems: {\n values: ['flex-start', 'flex-end', 'center', 'stretch', 'baseline'],\n type: 'select',\n },\n alignContent: {\n values: ['flex-start', 'flex-end', 'center', 'space-between', 'space-around', 'stretch'],\n type: 'select',\n },\n alignSelf: {\n values: ['auto', 'flex-start', 'flex-end', 'center', 'stretch', 'baseline'],\n type: 'select',\n },\n flexGrow: { type: 'number' },\n flexShrink: { type: 'number' },\n flexBasis: { type: 'string' },\n order: { type: 'number' },\n\n // Grid\n grid: { type: 'string' },\n gridTemplateColumns: { type: 'string' },\n gridTemplateRows: { type: 'string' },\n gridTemplateAreas: { type: 'string' },\n gridGap: { type: 'string' },\n gridColumn: { type: 'string' },\n gridRow: { type: 'string' },\n gridArea: { type: 'string' },\n gridAutoFlow: {\n values: ['row', 'column', 'row dense', 'column dense'],\n type: 'select',\n },\n gridAutoColumns: { type: 'string' },\n gridAutoRows: { type: 'string' },\n justifyItems: {\n values: ['start', 'end', 'center', 'stretch'],\n type: 'select',\n },\n justifySelf: {\n values: ['auto', 'start', 'end', 'center', 'stretch'],\n type: 'select',\n },\n placeContent: { type: 'string' },\n placeItems: { type: 'string' },\n placeSelf: { type: 'string' },\n\n // Text & Font\n fontSize: { type: 'string' },\n fontWeight: {\n values: ['100', '200', '300', '400', '500', '600', '700', '800', '900', 'normal', 'bold'],\n type: 'select',\n },\n fontFamily: { type: 'string' },\n fontStyle: {\n values: ['normal', 'italic', 'oblique'],\n type: 'select',\n },\n lineHeight: { type: 'string' },\n textAlign: {\n values: ['left', 'right', 'center', 'justify', 'start', 'end'],\n type: 'select',\n },\n textDecoration: {\n values: ['none', 'underline', 'overline', 'line-through'],\n type: 'select',\n },\n textTransform: {\n values: ['none', 'capitalize', 'uppercase', 'lowercase'],\n type: 'select',\n },\n letterSpacing: { type: 'string' },\n wordSpacing: { type: 'string' },\n wordBreak: {\n values: ['normal', 'break-all', 'keep-all', 'break-word'],\n type: 'select',\n },\n overflowWrap: {\n values: ['normal', 'break-word', 'anywhere'],\n type: 'select',\n },\n textIndent: { type: 'string' },\n verticalAlign: {\n values: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super'],\n type: 'select',\n },\n\n // Box Shadow & Effects\n boxShadow: { type: 'string' },\n textShadow: { type: 'string' },\n filter: { type: 'string' },\n backdropFilter: { type: 'string' },\n transform: { type: 'string' },\n transformOrigin: { type: 'string' },\n transition: { type: 'string' },\n animation: { type: 'string' },\n backfaceVisibility: {\n values: ['visible', 'hidden'],\n type: 'select',\n },\n mixBlendMode: {\n values: ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'],\n type: 'select',\n },\n clipPath: { type: 'string' },\n\n // Overflow & Content\n overflow: {\n values: ['visible', 'hidden', 'scroll', 'auto'],\n type: 'select',\n },\n overflowX: {\n values: ['visible', 'hidden', 'scroll', 'auto'],\n type: 'select',\n },\n overflowY: {\n values: ['visible', 'hidden', 'scroll', 'auto'],\n type: 'select',\n },\n whiteSpace: {\n values: ['normal', 'nowrap', 'pre', 'pre-wrap', 'pre-line'],\n type: 'select',\n },\n textOverflow: {\n values: ['clip', 'ellipsis'],\n type: 'select',\n },\n visibility: {\n values: ['visible', 'hidden', 'collapse'],\n type: 'select',\n },\n content: { type: 'string' },\n\n // Cursor & Interaction\n cursor: {\n values: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'not-allowed', 'help'],\n type: 'select',\n },\n pointerEvents: {\n values: ['auto', 'none'],\n type: 'select',\n },\n userSelect: {\n values: ['auto', 'none', 'text', 'all'],\n type: 'select',\n },\n\n // Outline\n outline: { type: 'string' },\n outlineWidth: { type: 'string' },\n outlineStyle: {\n values: ['none', 'solid', 'dashed', 'dotted', 'double', 'groove', 'ridge', 'inset', 'outset'],\n type: 'select',\n },\n outlineColor: { type: 'string' },\n outlineOffset: { type: 'string' },\n\n // Lists\n listStyle: { type: 'string' },\n listStyleType: {\n values: ['none', 'disc', 'circle', 'square', 'decimal', 'decimal-leading-zero', 'lower-roman', 'upper-roman', 'lower-alpha', 'upper-alpha'],\n type: 'select',\n },\n listStylePosition: {\n values: ['inside', 'outside'],\n type: 'select',\n },\n\n // Miscellaneous\n float: {\n values: ['left', 'right', 'none'],\n type: 'select',\n },\n clear: {\n values: ['left', 'right', 'both', 'none'],\n type: 'select',\n },\n boxSizing: {\n values: ['content-box', 'border-box'],\n type: 'select',\n },\n objectFit: {\n values: ['fill', 'contain', 'cover', 'scale-down'],\n type: 'select',\n },\n objectPosition: {\n values: ['top', 'bottom', 'left', 'right', 'center'],\n type: 'select',\n },\n resize: {\n values: ['none', 'both', 'horizontal', 'vertical'],\n type: 'select',\n },\n scrollBehavior: {\n values: ['auto', 'smooth'],\n type: 'select',\n },\n accentColor: { type: 'string' },\n\n // SVG\n stroke: { type: 'string' },\n strokeWidth: { type: 'string' },\n strokeDasharray: { type: 'string' },\n strokeDashoffset: { type: 'string' },\n strokeLinecap: {\n values: ['butt', 'round', 'square'],\n type: 'select',\n },\n strokeLinejoin: {\n values: ['miter', 'round', 'bevel'],\n type: 'select',\n },\n strokeOpacity: { type: 'number' },\n fill: { type: 'string' },\n fillOpacity: { type: 'number' },\n fillRule: {\n values: ['nonzero', 'evenodd'],\n type: 'select',\n },\n};\n\n/**\n * Common CSS properties for autocomplete suggestions (camelCase for React/JS)\n * Derived from CSS_PROPERTIES_DEFINITION keys\n */\nexport const CSS_PROPERTIES = Object.keys(CSS_PROPERTIES_DEFINITION);\n\n/**\n * Popularity tiers for CSS properties (lower = more common).\n * Properties not listed default to tier 3.\n * Used to sort autocomplete suggestions within each match group.\n */\nconst CSS_PROPERTY_PRIORITY: Record<string, number> = {\n // Tier 1: Most commonly used\n display: 1,\n position: 1,\n width: 1,\n height: 1,\n margin: 1,\n padding: 1,\n color: 1,\n backgroundColor: 1,\n fontSize: 1,\n fontWeight: 1,\n border: 1,\n borderRadius: 1,\n flex: 1,\n flexDirection: 1,\n justifyContent: 1,\n alignItems: 1,\n gap: 1,\n opacity: 1,\n overflow: 1,\n zIndex: 1,\n top: 1,\n right: 1,\n bottom: 1,\n left: 1,\n cursor: 1,\n background: 1,\n boxShadow: 1,\n transition: 1,\n transform: 1,\n lineHeight: 1,\n textAlign: 1,\n\n // Tier 2: Common but less frequent\n maxWidth: 2,\n maxHeight: 2,\n minWidth: 3,\n minHeight: 3,\n marginTop: 2,\n marginBottom: 2,\n marginLeft: 2,\n marginRight: 2,\n paddingTop: 2,\n paddingBottom: 2,\n paddingLeft: 2,\n paddingRight: 2,\n fontFamily: 2,\n fontStyle: 2,\n textDecoration: 2,\n textTransform: 2,\n letterSpacing: 2,\n borderWidth: 2,\n borderStyle: 2,\n borderColor: 2,\n borderBottom: 2,\n borderTop: 2,\n flexWrap: 2,\n flexGrow: 2,\n flexShrink: 2,\n flexBasis: 2,\n alignSelf: 2,\n gridTemplateColumns: 2,\n gridTemplateRows: 2,\n backgroundImage: 2,\n backgroundSize: 2,\n backgroundPosition: 2,\n whiteSpace: 2,\n textOverflow: 2,\n visibility: 2,\n pointerEvents: 2,\n userSelect: 2,\n boxSizing: 2,\n objectFit: 2,\n filter: 2,\n animation: 2,\n outline: 2,\n inset: 2,\n};\n\nfunction getPropertyPriority(property: string): number {\n return CSS_PROPERTY_PRIORITY[property] ?? 3;\n}\n\n/**\n * CSS Property Groups for organizing styles in the editor\n * Order determines display order in the UI\n */\nexport const CSS_PROPERTY_GROUPS: Record<string, string[]> = {\n 'Layout': ['display', 'position', 'top', 'right', 'bottom', 'left', 'inset', 'zIndex'],\n 'Dimensions': ['width', 'height', 'minWidth', 'maxWidth', 'minHeight', 'maxHeight', 'aspectRatio'],\n 'Spacing': ['margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'gap', 'rowGap', 'columnGap'],\n 'Flexbox': ['flex', 'flexDirection', 'flexWrap', 'flexFlow', 'justifyContent', 'alignItems', 'alignContent', 'alignSelf', 'flexGrow', 'flexShrink', 'flexBasis', 'order'],\n 'Grid': ['grid', 'gridTemplateColumns', 'gridTemplateRows', 'gridTemplateAreas', 'gridGap', 'gridColumn', 'gridRow', 'gridArea', 'gridAutoFlow', 'gridAutoColumns', 'gridAutoRows', 'justifyItems', 'justifySelf', 'placeContent', 'placeItems', 'placeSelf'],\n 'Typography': ['fontSize', 'fontWeight', 'fontFamily', 'fontStyle', 'lineHeight', 'textAlign', 'textDecoration', 'textTransform', 'letterSpacing', 'wordSpacing', 'wordBreak', 'overflowWrap', 'textIndent', 'verticalAlign', 'color'],\n 'Background': ['background', 'backgroundColor', 'backgroundImage', 'backgroundSize', 'backgroundPosition', 'backgroundRepeat', 'opacity'],\n 'Borders': ['border', 'borderWidth', 'borderStyle', 'borderColor', 'borderTop', 'borderRight', 'borderBottom', 'borderLeft', 'borderRadius', 'borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomLeftRadius', 'borderBottomRightRadius'],\n 'Outline': ['outline', 'outlineWidth', 'outlineStyle', 'outlineColor', 'outlineOffset'],\n 'Effects': ['boxShadow', 'textShadow', 'filter', 'backdropFilter', 'transform', 'transformOrigin', 'transition', 'animation', 'backfaceVisibility', 'mixBlendMode', 'clipPath'],\n 'Overflow': ['overflow', 'overflowX', 'overflowY', 'whiteSpace', 'textOverflow', 'visibility', 'content'],\n 'Interaction': ['cursor', 'pointerEvents', 'userSelect'],\n 'Lists': ['listStyle', 'listStyleType', 'listStylePosition'],\n 'Other': ['float', 'clear', 'boxSizing', 'objectFit', 'objectPosition', 'resize', 'scrollBehavior', 'accentColor'],\n 'SVG': ['stroke', 'strokeWidth', 'strokeDasharray', 'strokeDashoffset', 'strokeLinecap', 'strokeLinejoin', 'strokeOpacity', 'fill', 'fillOpacity', 'fillRule'],\n};\n\n/**\n * Get the group name for a CSS property\n * @param propertyName - The CSS property name\n * @returns The group name or 'Other' if not found\n */\nexport function getPropertyGroup(propertyName: string): string {\n for (const [groupName, properties] of Object.entries(CSS_PROPERTY_GROUPS)) {\n if (properties.includes(propertyName)) {\n return groupName;\n }\n }\n return 'Other';\n}\n\n/**\n * Check if property matches the abbreviation pattern\n * For example, \"bC\" matches \"backgroundColor\" (b\u2192b, C\u2192C capital letter)\n */\nfunction matchesAbbreviation(property: string, input: string): boolean {\n if (!input) return false;\n\n let propertyIndex = 0;\n\n for (let inputIndex = 0; inputIndex < input.length; inputIndex++) {\n const inputChar = input[inputIndex];\n let found = false;\n\n // Search from current position to end of property for a match at a word boundary\n while (propertyIndex < property.length) {\n const propChar = property[propertyIndex];\n // Word boundary = first character OR capital letter\n const isWordBoundary = propertyIndex === 0 ||\n (propChar === propChar.toUpperCase() && propChar !== propChar.toLowerCase());\n\n if (isWordBoundary && inputChar.toLowerCase() === propChar.toLowerCase()) {\n // Match found at word boundary\n found = true;\n propertyIndex++; // Move past this character for next search\n break;\n }\n\n propertyIndex++;\n }\n\n if (!found) {\n return false; // Couldn't find this input character at a word boundary\n }\n }\n\n return true;\n}\n\n/**\n * Filter CSS properties based on input value\n * Supports both startsWith matching and camelCase abbreviation matching\n */\nexport function filterCSSProperties(input: string): string[] {\n const normalizedInput = (input ?? '').trim();\n if (!normalizedInput) {\n return CSS_PROPERTIES.slice(0, 15); // Show first 15 by default\n }\n\n // First, try startsWith matching (exact prefix match)\n const startsWithMatches = CSS_PROPERTIES.filter(prop =>\n prop.toLowerCase().startsWith(normalizedInput.toLowerCase())\n );\n\n // Then, try abbreviation/fuzzy matching\n const abbreviationMatches = CSS_PROPERTIES.filter(prop =>\n matchesAbbreviation(prop, normalizedInput) &&\n !startsWithMatches.includes(prop) // Don't duplicate startsWith matches\n );\n\n // Sort each group by popularity, then combine: exact matches first, then fuzzy matches\n const byPriority = (a: string, b: string) =>\n getPropertyPriority(a) - getPropertyPriority(b);\n\n return [\n ...startsWithMatches.sort(byPriority),\n ...abbreviationMatches.sort(byPriority),\n ];\n}\n\n/**\n * Get available values for a specific CSS property\n * @param propertyName - The CSS property name (e.g., 'flexDirection')\n * @returns Array of valid values for the property, or empty array if property has no predefined values\n */\nexport function getPropertyValues(propertyName: string): string[] {\n const values = CSS_PROPERTIES_DEFINITION[propertyName]?.values;\n return values ? Array.from(values) : [];\n}\n\n/**\n * Filter values for a specific CSS property based on input\n * Supports substring matching and returns values that contain the input\n * @param propertyName - The CSS property name (e.g., 'flexDirection')\n * @param input - The user input to filter values by\n * @returns Filtered array of valid values for the property\n */\nexport function filterPropertyValues(propertyName: string, input: string): string[] {\n const values = getPropertyValues(propertyName);\n if (!values.length) {\n return []; // No predefined values for this property\n }\n\n const normalizedInput = (input ?? '').trim().toLowerCase();\n if (!normalizedInput) {\n return values; // Return all values if no input\n }\n\n // Filter values that contain the input (substring match)\n return values.filter(value =>\n value.toLowerCase().includes(normalizedInput)\n );\n}\n\n/**\n * Get the property type for a CSS property\n * @param propertyName - The CSS property name\n * @returns The property type ('string' | 'select' | 'boolean' | 'number') or undefined\n */\nexport function getPropertyType(propertyName: string): 'string' | 'select' | 'boolean' | 'number' | undefined {\n return CSS_PROPERTIES_DEFINITION[propertyName]?.type;\n}\n", "/**\n * Error Logger\n * Centralized error logging with optional telemetry integration\n */\n\nimport type { ErrorCategory } from './errors';\n\ninterface ErrorLogEntry {\n location: string;\n category: ErrorCategory;\n error: unknown;\n context?: Record<string, unknown>;\n timestamp: number;\n}\n\ntype ErrorHandler = (entry: ErrorLogEntry) => void;\n\nlet errorHandler: ErrorHandler | null = null;\n\n/**\n * Set custom error handler (for telemetry integration)\n */\nexport function setErrorHandler(handler: ErrorHandler | null): void {\n errorHandler = handler;\n}\n\n/**\n * Check if running in development mode\n */\nfunction isDevelopment(): boolean {\n // Check for Node.js environment\n if (typeof process !== 'undefined' && process.env?.NODE_ENV) {\n return process.env.NODE_ENV === 'development';\n }\n // Browser environment - assume development if no production indicators\n return true;\n}\n\n/**\n * Log runtime error with context\n * Use for graceful degradation scenarios where error is handled but should be visible\n */\nexport function logRuntimeError(\n location: string,\n error: unknown,\n context?: Record<string, unknown>\n): void {\n const entry: ErrorLogEntry = {\n location,\n category: 'runtime',\n error,\n context,\n timestamp: Date.now(),\n };\n\n // Development: always log to console\n if (isDevelopment()) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(`[${location}] ${errorMessage}`, context ?? '');\n }\n\n // Custom handler (telemetry, etc.)\n errorHandler?.(entry);\n}\n\n/**\n * Log network/API error\n */\nexport function logNetworkError(\n location: string,\n error: unknown,\n context?: Record<string, unknown>\n): void {\n const entry: ErrorLogEntry = {\n location,\n category: 'network',\n error,\n context,\n timestamp: Date.now(),\n };\n\n if (isDevelopment()) {\n console.error(`[${location}] Network error:`, error, context ?? '');\n }\n\n errorHandler?.(entry);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  projectPaths
3
- } from "./chunk-5Z5VQRTJ.js";
3
+ } from "./chunk-I7YIGZXT.js";
4
4
  import {
5
5
  fileExists,
6
6
  readTextFile
@@ -235,4 +235,4 @@ export {
235
235
  ConfigService,
236
236
  configService
237
237
  };
238
- //# sourceMappingURL=chunk-WQSG5WHC.js.map
238
+ //# sourceMappingURL=chunk-ZTKHJQ2Z.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  ConfigService,
3
3
  configService
4
- } from "./chunk-WQSG5WHC.js";
5
- import "./chunk-5Z5VQRTJ.js";
4
+ } from "./chunk-ZTKHJQ2Z.js";
5
+ import "./chunk-I7YIGZXT.js";
6
6
  import "./chunk-WQFG7PAH.js";
7
7
  import "./chunk-XSWR3QLI.js";
8
8
  import "./chunk-KSBZ2L7C.js";
@@ -10,4 +10,4 @@ export {
10
10
  ConfigService,
11
11
  configService
12
12
  };
13
- //# sourceMappingURL=configService-6KTT6GRT.js.map
13
+ //# sourceMappingURL=configService-DYCUEURL.js.map
@@ -19,7 +19,7 @@ import {
19
19
  TREE_SCROLL_DELAY_MS,
20
20
  WEBSOCKET_STATES,
21
21
  init_constants
22
- } from "./chunk-NZTSJS5C.js";
22
+ } from "./chunk-2QK6U5UK.js";
23
23
  import "./chunk-KSBZ2L7C.js";
24
24
  init_constants();
25
25
  export {
@@ -43,4 +43,4 @@ export {
43
43
  TREE_SCROLL_DELAY_MS,
44
44
  WEBSOCKET_STATES
45
45
  };
46
- //# sourceMappingURL=constants-L5IKLB6U.js.map
46
+ //# sourceMappingURL=constants-GWBAD66U.js.map
@@ -6,27 +6,27 @@ import {
6
6
  PageService,
7
7
  WebSocketManager,
8
8
  createServer
9
- } from "../chunks/chunk-TVH3TC2T.js";
9
+ } from "../chunks/chunk-47UNLQUU.js";
10
10
  import {
11
11
  CMSService,
12
12
  FileSystemCMSProvider,
13
13
  loadProjectConfig,
14
14
  migrateTemplatesDirectory
15
- } from "../chunks/chunk-BZQKEJQY.js";
15
+ } from "../chunks/chunk-FGUZOYJX.js";
16
16
  import {
17
17
  configService
18
- } from "../chunks/chunk-WQSG5WHC.js";
18
+ } from "../chunks/chunk-ZTKHJQ2Z.js";
19
19
  import {
20
20
  projectPaths
21
- } from "../chunks/chunk-5Z5VQRTJ.js";
21
+ } from "../chunks/chunk-I7YIGZXT.js";
22
22
  import "../chunks/chunk-WQFG7PAH.js";
23
23
  import "../chunks/chunk-IF3RATBY.js";
24
24
  import "../chunks/chunk-KITQJYZV.js";
25
- import "../chunks/chunk-F7MA62WG.js";
26
- import "../chunks/chunk-5ZASE4IG.js";
25
+ import "../chunks/chunk-BCLGRZ3U.js";
26
+ import "../chunks/chunk-FED5MME6.js";
27
27
  import "../chunks/chunk-XSWR3QLI.js";
28
28
  import "../chunks/chunk-UB44F4Z2.js";
29
- import "../chunks/chunk-NZTSJS5C.js";
29
+ import "../chunks/chunk-2QK6U5UK.js";
30
30
  import "../chunks/chunk-KSBZ2L7C.js";
31
31
 
32
32
  // entries/server-router.tsx
@@ -12,12 +12,12 @@ import {
12
12
  resolveLinkMapping,
13
13
  resolveStyleMapping,
14
14
  skipEmptyTemplateAttributes
15
- } from "../../chunks/chunk-F7MA62WG.js";
15
+ } from "../../chunks/chunk-BCLGRZ3U.js";
16
16
  import {
17
17
  filterCSSProperties,
18
18
  logNetworkError,
19
19
  logRuntimeError
20
- } from "../../chunks/chunk-GYF3ABI3.js";
20
+ } from "../../chunks/chunk-UUA5LEWF.js";
21
21
  import {
22
22
  BaseComponentRegistry,
23
23
  DEFAULT_PREFETCH_CONFIG,
@@ -59,7 +59,7 @@ import {
59
59
  singularize,
60
60
  sortClassesByPropertyOrder,
61
61
  validatePageData
62
- } from "../../chunks/chunk-5ZASE4IG.js";
62
+ } from "../../chunks/chunk-FED5MME6.js";
63
63
  import {
64
64
  DEFAULT_BREAKPOINTS,
65
65
  DEFAULT_I18N_CONFIG,
@@ -83,7 +83,7 @@ import {
83
83
  NOT_FOUND_TIMEOUT_MS,
84
84
  RAW_HTML_PREFIX,
85
85
  init_constants
86
- } from "../../chunks/chunk-NZTSJS5C.js";
86
+ } from "../../chunks/chunk-2QK6U5UK.js";
87
87
  import "../../chunks/chunk-KSBZ2L7C.js";
88
88
 
89
89
  // lib/client/core/ComponentBuilder.ts
@@ -1619,6 +1619,7 @@ function buildLink(props, children, ctx, deps) {
1619
1619
  }
1620
1620
 
1621
1621
  // lib/client/core/ComponentBuilder.ts
1622
+ var DOCUMENT_STRUCTURE_TAGS = /* @__PURE__ */ new Set(["body", "html", "head"]);
1622
1623
  var ComponentBuilder = class {
1623
1624
  componentRegistry;
1624
1625
  elementRegistry;
@@ -2295,7 +2296,8 @@ var ComponentBuilder = class {
2295
2296
  componentResolvedProps = null,
2296
2297
  isSlotContent: isSlotContent2 = false
2297
2298
  } = options;
2298
- const finalTag = tag || "div";
2299
+ const requestedTag = (tag || "div").toLowerCase();
2300
+ const finalTag = DOCUMENT_STRUCTURE_TAGS.has(requestedTag) ? "div" : tag || "div";
2299
2301
  const effectiveParentComponentName = this.getEffectiveParentComponentName(componentContext, parentComponentName);
2300
2302
  const { __componentProps, ...customPropsForDOM } = customProps || {};
2301
2303
  const isComponentRoot = !!(customProps && "__componentProps" in customProps);