@kosmojs/dev 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +15 -15
- package/pkg/chassis.js +20 -1396
- package/pkg/chassis.js.map +1 -1
- package/pkg/index.js +16 -5688
- package/pkg/index.js.map +1 -1
- package/pkg/assets/pkg-BO-iPG8y.js +0 -54
- package/pkg/assets/pkg-BO-iPG8y.js.map +0 -1
package/pkg/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["defaults","RequestMetadataTargets$1","RequestBodyTargets$1","defineGenerator","defineGeneratorFactory","pathResolver","pathExists","render","renderToFile","renderFactory","segmentWeight","sortRoutes","package_default","RequestMetadataTargets","RequestBodyTargets","RequestValidationTargets","routeRenderHelpers","route_default","unwrap_default","factory_default","defaults","RequestMetadataTargets","RequestBodyTargets","defineGenerator","defineGeneratorFactory","createTemplateResolver","pathResolver","pathExists","render","renderToFile","renderFactory","pathTokensFactory","normalizeStaticValue","segmentWeight","sortRoutes","nodePrefix","vitePlugins","package_default","app_default$1","bodyparser_default","dev_default$1","errors_default$1","router_default$1","routes_default","server_default$1","api_default","api_factory_default","app_default","dev_default","env_d_default","errors_default","route_default","use_default$1","router_default","server_default","use_default","factory_default","src_default","defaults","RequestMetadataTargets","RequestBodyTargets","defineGenerator","defineGeneratorFactory","createTemplateResolver","pathResolver","pathExists","render","renderToFile","renderFactory","normalizeStaticValue","segmentWeight","sortRoutes","nodePrefix","vitePlugins","package_default","router_default$1","server_default$1","env_d_default","router_default","server_default","use_default","factory_default","src_default","defaults$1","RequestMetadataTargets$1","RequestBodyTargets$1","defineGenerator","defineGeneratorFactory","createTemplateResolver","pathResolver","pathExists","render","renderToFile","renderFactory","segmentWeight","sortRoutes","package_default","defaults","RequestMetadataTargets","RequestBodyTargets","routeRenderHelpers","randomCongratMessage","client_default$1","server_default$1","env_d_default","_404_default$1","page_default$1","styles_default","welcome_default$1","router_default$1","App_default","Link_default","client_default","server_default","src_default$1","_404_default","layout_default","page_default","welcome_default","router_default","factory_default","src_default","defaults","RequestMetadataTargets$1","RequestBodyTargets$1","defineGenerator","defineGeneratorFactory","pathResolver","pathExists","render","renderToFile","segmentWeight","sortRoutes","typeboxLiteralText","RequestMetadataTargets","RequestBodyTargets","factory_default","src_default","defaults$1","RequestMetadataTargets$1","RequestBodyTargets$1","defineGenerator","defineGeneratorFactory","createTemplateResolver","pathResolver","pathExists","render","renderToFile","renderFactory","normalizeStaticValue","API_INDEX_PATTERN","API_USE_PATTERN","PAGE_INDEX_BASENAME","PAGE_INDEX_PATTERN","PAGE_LAYOUT_BASENAME","PAGE_LAYOUT_PATTERN","segmentWeight","sortRoutes","nestedRoutesFactory","package_default","defaults","RequestMetadataTargets","RequestBodyTargets","routeRenderHelpers","pathFactory","traverseFactory","randomCongratMessage","client_default$1","routePartial_default","server_default$1","_404_default$1","page_default$1","styles_default","welcome_default$1","router_default$1","App_default","Link_default","client_default","server_default","src_default$1","_404_default","layout_default","page_default","welcome_default","router_default","factory_default","src_default","defaults$1","RequestMetadataTargets$1","RequestBodyTargets$1","defineGenerator","defineGeneratorFactory","createTemplateResolver","pathResolver","pathExists","render","renderToFile","renderFactory","normalizeStaticValue","API_INDEX_PATTERN","API_USE_PATTERN","PAGE_INDEX_BASENAME","PAGE_INDEX_PATTERN","PAGE_LAYOUT_BASENAME","PAGE_LAYOUT_PATTERN","segmentWeight","sortRoutes","nestedRoutesFactory","package_default","defaults","RequestMetadataTargets","RequestBodyTargets","routeRenderHelpers","traverseFactory","pathFactory","randomCongratMessage","client_default$1","routePartial_default","server_default$1","_404_default$1","page_default$1","styles_default","welcome_default$1","router_default$1","unwrap_default","App_default","Link_default","client_default","server_default","src_default$1","_404_default","layout_default","page_default","welcome_default","router_default","factory_default","src_default","defaults","RequestMetadataTargets","RequestBodyTargets","defineGenerator","defineGeneratorFactory","pathResolver","factory_default","src_default","defaults","RequestMetadataTargets","RequestBodyTargets","defineGenerator","defineGeneratorFactory","pathResolver","pathExists","render","renderToFile","renderFactory","segmentWeight","sortRoutes","package_default","factory_default","src_default","defaults","RequestMetadataTargets$1","RequestBodyTargets$1","defineGenerator","defineGeneratorFactory","pathResolver","pathExists","render","renderToFile","renderFactory","package_default","RequestMetadataTargets","RequestBodyTargets","factory_default","src_default","src_default$1","src_default"],"sources":["../../../generators/fetch-generator/pkg/index.js","../../../generators/hono-generator/pkg/index.js","../../../generators/koa-generator/pkg/index.js","../../../generators/mdx-generator/pkg/index.js","../../../generators/openapi-generator/pkg/index.js","../../../generators/react-generator/pkg/index.js","../../../generators/solid-generator/pkg/index.js","../../../generators/ssg-generator/pkg/index.js","../../../generators/ssr-generator/pkg/index.js","../../../generators/typebox-generator/pkg/index.js","../../../generators/vue-generator/pkg/index.js","../src/index.ts"],"sourcesContent":["import { dirname, join, resolve } from \"node:path\";\nimport crc from \"crc/crc32\";\nimport \"tfusion\";\nimport \"ts-morph\";\nimport { access, constants, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport handlebars from \"handlebars\";\nimport \"path-to-regexp\";\nimport \"mime-types\";\nimport \"@topcli/spinner\";\n//#region ../../packages/lib/pkg/index.js\nvar defaults = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets$1 = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets$1 = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets$1,\n\t...RequestBodyTargets$1\n});\nvar defineGenerator = (f) => f;\nvar defineGeneratorFactory = (f) => f;\nvar pathResolver = (sourceFolder) => {\n\tconst createPath = (...a) => {\n\t\treturn sourceFolder.root ? resolve(sourceFolder.root, join(...a)) : join(...a);\n\t};\n\tconst createImport = {\n\t\tsrc(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.srcPrefix, ...a) : join(defaults.appPrefix, defaults.srcDir, sourceFolder.name, ...a);\n\t\t},\n\t\tapi(a, o) {\n\t\t\treturn this.src([defaults.apiDir, ...a], o);\n\t\t},\n\t\tpages(a, o) {\n\t\t\treturn this.src([defaults.pagesDir, ...a], o);\n\t\t},\n\t\tlib(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.libPrefix, ...a) : join(defaults.appPrefix, defaults.libDir, sourceFolder.name, ...a);\n\t\t},\n\t\tlibCore(a, o) {\n\t\t\treturn this.lib([\"core\", ...a], o);\n\t\t},\n\t\tlibApi(a, o) {\n\t\t\treturn this.lib([defaults.apiDir, ...a], o);\n\t\t},\n\t\tlibEntry(a, o) {\n\t\t\treturn this.lib([defaults.entryDir, ...a], o);\n\t\t}\n\t};\n\treturn {\n\t\tcreatePath: {\n\t\t\tsrc(...a) {\n\t\t\t\treturn createPath(defaults.srcDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tapi(...a) {\n\t\t\t\treturn this.src(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tpages(...a) {\n\t\t\t\treturn this.src(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tentry(...a) {\n\t\t\t\treturn this.src(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlib(...a) {\n\t\t\t\treturn createPath(defaults.libDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tlibCore(...a) {\n\t\t\t\treturn this.lib(\"core\", ...a);\n\t\t\t},\n\t\t\tlibApi(...a) {\n\t\t\t\treturn this.lib(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tlibEntry(...a) {\n\t\t\t\treturn this.lib(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlibPages(...a) {\n\t\t\t\treturn this.lib(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tdistDir(...a) {\n\t\t\t\treturn createPath(sourceFolder.distDir, sourceFolder.name, ...a);\n\t\t\t}\n\t\t},\n\t\tcreateImport,\n\t\tcreateImportHelpers(o) {\n\t\t\tif (![\"src\", \"lib\"].includes(o?.origin)) throw new Error(`createImportHelpers: required exactly one argument of shape { origin: \"src|lib\" }`);\n\t\t\treturn { createImport(key, ...a) {\n\t\t\t\treturn createImport[key](a.slice(0, -1), o);\n\t\t\t} };\n\t\t}\n\t};\n};\nvar pathExists = async (path) => {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\nvar render = (template, context, options) => {\n\tconst { noEscape = true, renderer = handlebars } = { ...options };\n\treturn renderer.compile(template, { noEscape })(context);\n};\nvar renderToFile = async (file, template, context, options) => {\n\tconst content = render(template, context, options);\n\t/**\n\t* Two fs calls (exists + read) are worth it to avoid touching the file\n\t* and triggering watchers unnecessarily.\n\t* */\n\tif (await pathExists(file)) {\n\t\tconst { overwrite = true } = { ...options };\n\t\tif (overwrite === false) return;\n\t\tconst fileContent = await readFile(file, \"utf8\");\n\t\tif (typeof overwrite === \"function\" && !overwrite(fileContent)) return;\n\t\tif (crc(content) === crc(fileContent)) return;\n\t}\n\tawait mkdir(dirname(file), { recursive: true });\n\tawait writeFile(file, content, \"utf8\");\n};\nvar renderFactory = (options) => {\n\tconst createRenderer = (selfOoptions) => {\n\t\tconst renderer = handlebars.create();\n\t\trenderer.registerPartial({\n\t\t\t...options?.partials,\n\t\t\t...selfOoptions?.partials\n\t\t});\n\t\trenderer.registerHelper({\n\t\t\t...options?.helpers,\n\t\t\t...selfOoptions?.helpers\n\t\t});\n\t\treturn renderer;\n\t};\n\treturn {\n\t\trender(template, context, selfOoptions) {\n\t\t\treturn render(template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t},\n\t\tasync renderToFile(file, template, context, selfOoptions) {\n\t\t\treturn renderToFile(options?.outdir ? join(options.outdir, file) : file, template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t}\n\t};\n};\n`${defaults.apiDir}`, `${defaults.apiDir}`, `${defaults.pagesDir}`, `${defaults.pagesDir}`;\n/**\n* Weight of a single path segment.\n*\n* Fixed values per kind prevent complex mixed segments\n* from outscoring multiple statics.\n*\n* static: 4 (exact match, most specific)\n* mixed: 3+ (static + param parts; more statics = slightly higher)\n* required: 2 (matches any single segment)\n* optional: 1 (may or may not match)\n* splat: 0 (matches anything, least specific)\n* */\nvar segmentWeight = (token) => {\n\tif (token.kind === \"static\") return 4;\n\tif (token.kind === \"mixed\") {\n\t\tlet statics = 0;\n\t\tlet optionals = 0;\n\t\tfor (const part of token.parts) if (part.type === \"static\") statics += 1;\n\t\telse if (part.kind === \"optional\" || part.kind === \"splat\") optionals += 1;\n\t\treturn 3 + statics * .01 - optionals * .005;\n\t}\n\tswitch (token.parts[0].kind) {\n\t\tcase \"required\": return 2;\n\t\tcase \"optional\": return 1;\n\t\tcase \"splat\": return 0;\n\t}\n};\n/**\n* Compare two route entries for registration order.\n*\n* More specific routes sort first (higher priority).\n* Segments are compared left-to-right; first difference wins.\n*\n* When one route is a prefix of the other, the trailing segment\n* determines order: a trailing splat loses (shorter sibling first),\n* anything else wins (longer route is more specific).\n*\n* At equal weight and length, lexicographic tiebreak ensures\n* deterministic ordering across JS engines.\n* */\nvar sortRoutes = (a, b) => {\n\tconst pairs = Array.from({ length: Math.max(a.pathTokens.length, b.pathTokens.length) }, (_, i) => [a.pathTokens[i], b.pathTokens[i]]);\n\tfor (const [at, bt] of pairs) {\n\t\tif (!at || !bt) {\n\t\t\tconst extra = at ?? bt;\n\t\t\tif (extra?.kind === \"param\" ? extra.parts[0].kind === \"splat\" : false) return at ? 1 : -1;\n\t\t\treturn at ? -1 : 1;\n\t\t}\n\t\tconst aw = segmentWeight(at);\n\t\tconst bw = segmentWeight(bt);\n\t\tif (aw !== bw) return bw - aw;\n\t}\n\treturn a.pathPattern.localeCompare(b.pathPattern);\n};\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/fetch-generator\",\n\tversion: \"0.1.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\n\timports: { \"#templates/*\": \"./src/templates/*\" },\n\texports: { \".\": {\n\t\t\"types\": \"./pkg/index.d.ts\",\n\t\t\"default\": \"./pkg/index.js\"\n\t} },\n\tscripts: {\n\t\t\"build\": \"wsbuild src/index.ts\",\n\t\t\"test\": \"vitest --root ../.. --project generators/fetch-generator\"\n\t},\n\tdevDependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@kosmojs/core-generator\": \"workspace:^\",\n\t\t\"@kosmojs/koa-generator\": \"workspace:^\",\n\t\t\"@kosmojs/typebox-generator\": \"workspace:^\",\n\t\t\"@types/mime-types\": \"^3.0.1\",\n\t\t\"@types/qs\": \"^6.15.0\",\n\t\t\"mime-types\": \"^3.0.2\",\n\t\t\"path-to-regexp\": \"^8.4.2\",\n\t\t\"qs\": \"^6.15.1\",\n\t\t\"typebox\": \"^1.1.34\"\n\t}\n};\n//#endregion\n//#region ../../packages/core/pkg/index.js\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\nvar RequestValidationTargets = {\n\t...RequestMetadataTargets,\n\t...RequestBodyTargets\n};\n//#endregion\n//#region ../../packages/core/pkg/generators/index.js\nvar routeRenderHelpers = () => {\n\treturn {\n\t\tpageLinkBase({ name, pathPattern, params }) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tname,\n\t\t\t\tpathPattern,\n\t\t\t\tparams\n\t\t\t});\n\t\t},\n\t\tserializeParamsTupleElements: (route) => {\n\t\t\treturn route.params.schema.map((p, i) => {\n\t\t\t\tif (p.kind === \"splat\") {\n\t\t\t\t\tconst suffix = route.params.schema[i + 1] ? \"\" : \"?\";\n\t\t\t\t\treturn `${p.const + suffix}: Array<string | number>`;\n\t\t\t\t}\n\t\t\t\treturn p.kind === \"optional\" ? `${p.const}?: string | number` : `${p.const}: string | number`;\n\t\t\t}).join(\", \");\n\t\t},\n\t\tserializeParamsLiteral(route) {\n\t\t\treturn `{ ${route.params.schema.map((e) => {\n\t\t\t\treturn [[e.name, e.kind === \"required\" ? \"\" : \"?\"].join(\"\"), e.kind === \"splat\" ? \"Array<string>\" : \"string\"].join(\": \");\n\t\t\t}).join(\"; \")} }`;\n\t\t}\n\t};\n};\n//#endregion\n//#region src/templates/lib/fetch.hbs?raw\nvar fetch_default = \"{{#each routes}}\\nimport {{id}} from \\\"{{ createImport \\\"libApi\\\" name \\\"fetch\\\" }}\\\";\\n{{/each}}\\n\\nexport { ValidationError } from \\\"@kosmojs/core/errors\\\";\\n\\nexport type ResponseT = {\\n{{#each routes}}\\n \\\"{{name}}\\\": import(\\\"{{ createImport \\\"libApi\\\" name \\\"fetch\\\" }}\\\").ResponseT;\\n{{/each}}\\n}\\n\\nexport default {\\n{{#each routes}} \\\"{{name}}\\\": {{id}},\\n{{#each alias }} \\\"{{this}}\\\": {{../id}},\\n{{/each}}\\n{{/each}}\\n}\\n\";\n//#endregion\n//#region src/templates/lib/route.hbs?raw\nvar route_default = \"import fetchFactory, {\\n join,\\n stringify,\\n payloadResolver,\\n} from \\\"@kosmojs/core/fetch\\\";\\n\\nimport { base, apiBase, apiRouteMap } from \\\"{{ createImport \\\"libCore\\\" }}\\\";\\n\\nimport {\\n type MaybeWrapped,\\n unwrap,\\n} from \\\"{{ createImport \\\"lib\\\" \\\"unwrap\\\" }}\\\";\\n\\n{{#each validationTypes}}\\nimport type { {{id}} } from \\\"./types\\\";\\n{{/each}}\\n\\nimport { validationSchemas } from \\\"./schemas\\\";\\n\\nexport { ValidationError } from \\\"@kosmojs/core/errors\\\";\\n\\nexport { validationSchemas };\\n\\nexport type ParamsT = [\\n {{serializeParamsTupleElements route}}\\n];\\n\\n{{#each payloadTypes}}\\nexport type {{name}} = {\\n {{#each types}}{{method}}: {{id}};\\n {{/each}}\\n}\\n{{/each}}\\n\\nexport type ResponseT = {\\n {{#each responseTypes}}\\n {{method}}: {{#each types}}{{#unless @first}}|{{/unless}} {{id}}{{/each}};\\n {{/each}}\\n}\\n\\nconst {\\n paramsMapper,\\n parametrize,\\n path,\\n href,\\n} = apiRouteMap[\\\"{{route.name}}\\\"];\\n\\nconst fetchApi = fetchFactory(join(base, apiBase), { stringify });\\n\\n{{#each routeMethods}}\\nexport const {{method}} = (\\n _params{{#if ../route.optionalParams}}?{{/if}}: MaybeWrapped<ParamsT>,\\n _payload?: {\\n {{#each ../payloadTargets}}\\n {{#if payloadType}}\\n {{target}}: {{payloadType.name}} extends { {{../method}}: unknown }\\n ? MaybeWrapped<{{payloadType.name}}[\\\"{{../method}}\\\"]>\\n : unknown,\\n {{else}}\\n {{target}}?: unknown;\\n {{/if}}\\n {{/each}}\\n },\\n opt?: {\\n unwrap?: <T>(data: MaybeWrapped<T>) => T;\\n },\\n): Promise<\\n {{#if responseType}}\\n ResponseT[\\\"{{method}}\\\"]\\n {{else}}\\n unknown\\n {{/if}}\\n> => {\\n const [params, payload] = [_params, _payload].map((data) => {\\n return typeof opt?.unwrap === \\\"function\\\" ? opt.unwrap(data) : unwrap(data);\\n })\\n if (validationSchemas.params) {\\n validationSchemas.params.validate(paramsMapper(params as never));\\n }\\n {{#each ../payloadTypes}}\\n if (validationSchemas.{{target}}?.{{../method}}) {\\n validationSchemas.{{target}}.{{../method}}.validate(\\n payloadResolver(payload, \\\"{{target}}\\\")\\n );\\n }\\n {{/each}}\\n return fetchApi.{{method}}(parametrize(params as never), payload as never);\\n};\\n{{/each}}\\n\\nexport default {\\n {{#each routeMethods}}\\n {{method}},\\n {{/each}}\\n path,\\n href,\\n {{#if runtimeValidation}}\\n validationSchemas,\\n {{/if}}\\n};\\n\";\n//#endregion\n//#region src/templates/lib/unwrap.hbs?raw\nvar unwrap_default = \"export type MaybeWrapped<T> = T;\\nexport const unwrap = <T>(data: T) => data;\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((meta, sourceFolder) => {\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { renderToFile: deployLibFile } = renderFactory({ helpers: {\n\t\t...createImportHelpers({ origin: \"lib\" }),\n\t\t...routeRenderHelpers()\n\t} });\n\tconst generateLibFiles = async (entries, updatedEntries) => {\n\t\tconst routes = entries.flatMap(({ kind, entry }) => kind === \"apiRoute\" ? [entry] : []).sort(sortRoutes);\n\t\tawait deployLibFile(createPath.lib(\"fetch.ts\"), fetch_default, { routes });\n\t\tfor (const { kind, entry } of updatedEntries) if (kind === \"apiRoute\") {\n\t\t\tconst validationTypes = [];\n\t\t\tfor (const def of entry.validationDefinitions) if (def.target === \"response\") {\n\t\t\t\tfor (const { id, body, resolvedType } of def.variants) if (body) validationTypes.push({\n\t\t\t\t\tid,\n\t\t\t\t\ttarget: def.target,\n\t\t\t\t\tmethod: def.method,\n\t\t\t\t\tresolvedType\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst { id, resolvedType } = def.schema;\n\t\t\t\tvalidationTypes.push({\n\t\t\t\t\tid,\n\t\t\t\t\ttarget: def.target,\n\t\t\t\t\tmethod: def.method,\n\t\t\t\t\tresolvedType\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst routeMethods = entry.methods.map((method) => {\n\t\t\t\treturn {\n\t\t\t\t\tmethod,\n\t\t\t\t\tresponseType: validationTypes.find((e) => {\n\t\t\t\t\t\treturn e.target === \"response\" ? e.method === method : false;\n\t\t\t\t\t})\n\t\t\t\t};\n\t\t\t});\n\t\t\tconst payloadTypes = Object.entries(validationTypes.reduce((map, { id, target, method, resolvedType }) => {\n\t\t\t\tif (target !== \"response\") {\n\t\t\t\t\tconst key = `${target.replace(/^./, (c) => c.toUpperCase())}T`;\n\t\t\t\t\tif (!map[key]) map[key] = [];\n\t\t\t\t\tmap[key].push({\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\tresolvedType\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn map;\n\t\t\t}, {})).map(([name, types]) => {\n\t\t\t\treturn {\n\t\t\t\t\tname,\n\t\t\t\t\ttypes,\n\t\t\t\t\ttarget: types[0].target\n\t\t\t\t};\n\t\t\t});\n\t\t\tconst payloadTargets = Object.keys(RequestValidationTargets).map((target) => {\n\t\t\t\treturn {\n\t\t\t\t\ttarget,\n\t\t\t\t\tpayloadType: payloadTypes.find((e) => e.target === target)\n\t\t\t\t};\n\t\t\t});\n\t\t\tconst responseTypes = Object.values(validationTypes.reduce((map, { id, target, method, resolvedType }) => {\n\t\t\t\tif (target === \"response\") {\n\t\t\t\t\tif (!map[method]) map[method] = {\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\ttypes: []\n\t\t\t\t\t};\n\t\t\t\t\tmap[method].types.push({\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\tresolvedType\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn map;\n\t\t\t}, {}));\n\t\t\tawait deployLibFile(createPath.libApi(entry.name, \"fetch.ts\"), route_default, {\n\t\t\t\troute: entry,\n\t\t\t\tvalidationTypes,\n\t\t\t\trouteMethods,\n\t\t\t\tpayloadTypes,\n\t\t\t\tpayloadTargets,\n\t\t\t\tresponseTypes\n\t\t\t});\n\t\t}\n\t};\n\treturn {\n\t\tmeta,\n\t\tasync start() {\n\t\t\tawait deployLibFile(createPath.lib(\"unwrap.ts\"), unwrap_default, {});\n\t\t},\n\t\tasync watch(entries, event) {\n\t\t\tawait generateLibFiles(entries, event ? entries.filter(({ kind, entry }) => {\n\t\t\t\treturn event.kind === \"update\" ? kind === \"apiRoute\" ? entry.fileFullpath === event.file : false : false;\n\t\t\t}) : entries);\n\t\t},\n\t\tasync build(entries) {\n\t\t\tawait generateLibFiles(entries, entries);\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator(() => {\n\tconst meta = {\n\t\tname: \"Fetch\",\n\t\tslot: \"fetch\",\n\t\tdependencies: { \"path-to-regexp\": package_default.devDependencies[\"path-to-regexp\"] }\n\t};\n\treturn {\n\t\tmeta,\n\t\tfactory: (sourceFolder) => factory_default(meta, sourceFolder)\n\t};\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { builtinModules } from \"node:module\";\nimport { dirname, join, resolve } from \"node:path\";\nimport crc from \"crc/crc32\";\nimport \"tfusion\";\nimport \"ts-morph\";\nimport picomatch from \"picomatch\";\nimport { access, constants, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport handlebars from \"handlebars\";\nimport { parse } from \"path-to-regexp\";\nimport \"mime-types\";\nimport \"@topcli/spinner\";\n//#region ../../packages/lib/pkg/index.js\nvar defaults = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets,\n\t...RequestBodyTargets\n});\nvar defineGenerator = (f) => f;\nvar defineGeneratorFactory = (f) => f;\nvar createTemplateResolver = (customTemplates, defaultTemplate) => {\n\tconst templates = Object.entries({ ...customTemplates }).map(([pattern, template]) => [picomatch(pattern), template]);\n\treturn (pattern, entry) => {\n\t\tconst match = templates.find(([isMatch]) => isMatch(pattern));\n\t\tif (!match) return defaultTemplate;\n\t\treturn typeof match[1] === \"function\" ? match[1](entry) : match[1];\n\t};\n};\nvar pathResolver = (sourceFolder) => {\n\tconst createPath = (...a) => {\n\t\treturn sourceFolder.root ? resolve(sourceFolder.root, join(...a)) : join(...a);\n\t};\n\tconst createImport = {\n\t\tsrc(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.srcPrefix, ...a) : join(defaults.appPrefix, defaults.srcDir, sourceFolder.name, ...a);\n\t\t},\n\t\tapi(a, o) {\n\t\t\treturn this.src([defaults.apiDir, ...a], o);\n\t\t},\n\t\tpages(a, o) {\n\t\t\treturn this.src([defaults.pagesDir, ...a], o);\n\t\t},\n\t\tlib(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.libPrefix, ...a) : join(defaults.appPrefix, defaults.libDir, sourceFolder.name, ...a);\n\t\t},\n\t\tlibCore(a, o) {\n\t\t\treturn this.lib([\"core\", ...a], o);\n\t\t},\n\t\tlibApi(a, o) {\n\t\t\treturn this.lib([defaults.apiDir, ...a], o);\n\t\t},\n\t\tlibEntry(a, o) {\n\t\t\treturn this.lib([defaults.entryDir, ...a], o);\n\t\t}\n\t};\n\treturn {\n\t\tcreatePath: {\n\t\t\tsrc(...a) {\n\t\t\t\treturn createPath(defaults.srcDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tapi(...a) {\n\t\t\t\treturn this.src(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tpages(...a) {\n\t\t\t\treturn this.src(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tentry(...a) {\n\t\t\t\treturn this.src(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlib(...a) {\n\t\t\t\treturn createPath(defaults.libDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tlibCore(...a) {\n\t\t\t\treturn this.lib(\"core\", ...a);\n\t\t\t},\n\t\t\tlibApi(...a) {\n\t\t\t\treturn this.lib(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tlibEntry(...a) {\n\t\t\t\treturn this.lib(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlibPages(...a) {\n\t\t\t\treturn this.lib(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tdistDir(...a) {\n\t\t\t\treturn createPath(sourceFolder.distDir, sourceFolder.name, ...a);\n\t\t\t}\n\t\t},\n\t\tcreateImport,\n\t\tcreateImportHelpers(o) {\n\t\t\tif (![\"src\", \"lib\"].includes(o?.origin)) throw new Error(`createImportHelpers: required exactly one argument of shape { origin: \"src|lib\" }`);\n\t\t\treturn { createImport(key, ...a) {\n\t\t\t\treturn createImport[key](a.slice(0, -1), o);\n\t\t\t} };\n\t\t}\n\t};\n};\nvar pathExists = async (path) => {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\nvar render = (template, context, options) => {\n\tconst { noEscape = true, renderer = handlebars } = { ...options };\n\treturn renderer.compile(template, { noEscape })(context);\n};\nvar renderToFile = async (file, template, context, options) => {\n\tconst content = render(template, context, options);\n\t/**\n\t* Two fs calls (exists + read) are worth it to avoid touching the file\n\t* and triggering watchers unnecessarily.\n\t* */\n\tif (await pathExists(file)) {\n\t\tconst { overwrite = true } = { ...options };\n\t\tif (overwrite === false) return;\n\t\tconst fileContent = await readFile(file, \"utf8\");\n\t\tif (typeof overwrite === \"function\" && !overwrite(fileContent)) return;\n\t\tif (crc(content) === crc(fileContent)) return;\n\t}\n\tawait mkdir(dirname(file), { recursive: true });\n\tawait writeFile(file, content, \"utf8\");\n};\nvar renderFactory = (options) => {\n\tconst createRenderer = (selfOoptions) => {\n\t\tconst renderer = handlebars.create();\n\t\trenderer.registerPartial({\n\t\t\t...options?.partials,\n\t\t\t...selfOoptions?.partials\n\t\t});\n\t\trenderer.registerHelper({\n\t\t\t...options?.helpers,\n\t\t\t...selfOoptions?.helpers\n\t\t});\n\t\treturn renderer;\n\t};\n\treturn {\n\t\trender(template, context, selfOoptions) {\n\t\t\treturn render(template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t},\n\t\tasync renderToFile(file, template, context, selfOoptions) {\n\t\t\treturn renderToFile(options?.outdir ? join(options.outdir, file) : file, template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t}\n\t};\n};\n/**\n* Parse a filesystem route path into structured PathToken array.\n*\n* Uses path-to-regexp v8 AST for parsing, with directory-friendly syntax:\n* - [param] => required param - :param\n* - {param} => optional param - {:param}\n* - {...param} => splat - {*param}\n*\n* Direct :param syntax is prohibited outside {} to avoid ambiguity.\n* Inside {} it is treated as path-to-regexp power syntax and used as-is.\n*\n* Examples:\n* Required: [id], [name]\n* Optional: {name}, {format}\n* Splat: {...path}\n* Mixed segments: shop/[id]-{name}\n* Power syntax: {-v:version{-:pre}}, :name{@:version{.:min}}.js\n* */\nvar pathTokensFactory = (path, { transformStaticValue = normalizeStaticValue } = {}) => {\n\t/**\n\t* Recursively extract parts from path-to-regexp AST tokens.\n\t* A param inside a group is optional; top-level params are required.\n\t* Wildcard tokens are always splat.\n\t* Slash-only text nodes (restored for parsing) are skipped.\n\t* */\n\tconst extractParts = (tokens, createConst, insideGroup = false) => {\n\t\tconst parts = [];\n\t\tfor (const token of tokens) switch (token.type) {\n\t\t\tcase \"text\":\n\t\t\t\tif (token.value !== \"/\") parts.push({\n\t\t\t\t\ttype: \"static\",\n\t\t\t\t\tvalue: transformStaticValue(token.value)\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"param\":\n\t\t\t\tparts.push({\n\t\t\t\t\ttype: \"param\",\n\t\t\t\t\tkind: insideGroup ? \"optional\" : \"required\",\n\t\t\t\t\tname: token.name,\n\t\t\t\t\tconst: createConst(token.name)\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"wildcard\":\n\t\t\t\tparts.push({\n\t\t\t\t\ttype: \"param\",\n\t\t\t\t\tkind: \"splat\",\n\t\t\t\t\tname: token.name,\n\t\t\t\t\tconst: createConst(token.name)\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"group\":\n\t\t\t\tparts.push(...extractParts(token.tokens, createConst, true));\n\t\t\t\tbreak;\n\t\t}\n\t\treturn parts;\n\t};\n\tconst patternTransforms = [\n\t\t(s) => s.replace(/\\[(\\w+)\\]/g, \":$1\"),\n\t\t(s) => s.replace(/\\{(\\w+)\\}/g, \"{:$1}\"),\n\t\t(s) => s.replace(/\\{\\.\\.\\./g, \"{*\"),\n\t\t(s) => {\n\t\t\treturn s.startsWith(\"{\") ? s.replace(/^\\{/, \"{/\") : s;\n\t\t}\n\t];\n\tconst detectBareParams = (s) => {\n\t\tlet depth = 0;\n\t\tfor (const [i, ch] of [...s].entries()) if (ch === \"{\") depth += 1;\n\t\telse if (ch === \"}\") depth -= 1;\n\t\telse if (ch === \":\" && depth === 0) return s.slice(i + 1).match(/^\\w+/)?.[0] || \":\";\n\t};\n\treturn path.replace(/^index\\/?/, \"\").split(\"/\").flatMap((orig) => {\n\t\tif (!orig.length) return [];\n\t\tconst bareParam = detectBareParams(orig);\n\t\tif (bareParam === \":\") throw new Error(`${path} contains colons outside braces, use : only within {}`);\n\t\telse if (bareParam) throw new Error(`${path} contains bare params, use [${bareParam}] instead of :${bareParam}`);\n\t\tconst pattern = patternTransforms.reduce((src, fn) => fn(src), orig);\n\t\tconst { tokens } = parse(pattern.replace(/\\{[^}]*\\}|(\\+)/g, (m, p1) => p1 ? \"\\\\+\" : m));\n\t\tconst parts = extractParts(tokens, (val) => {\n\t\t\treturn /\\W/.test(val) || /^\\d/.test(val) ? [val.replace(/^\\d+|\\W/g, \"_\"), crc(orig)].join(\"_\") : val;\n\t\t});\n\t\tconst isStatic = parts.length === 1 ? parts[0].type === \"static\" : false;\n\t\tconst isParam = parts.length === 1 ? parts[0].type === \"param\" : false;\n\t\treturn [{\n\t\t\tkind: isStatic ? \"static\" : isParam ? \"param\" : \"mixed\",\n\t\t\torig,\n\t\t\tpattern,\n\t\t\tparts\n\t\t}];\n\t});\n};\nvar createHonoPattern = (tokens) => {\n\tconst staticValue = ({ value }) => {\n\t\treturn normalizeStaticValue(value);\n\t};\n\tconst paramValue = (p) => {\n\t\tif (p.kind === \"splat\") return `*`;\n\t\tif (p.kind === \"optional\") return `:${p.name}?`;\n\t\treturn `:${p.name}`;\n\t};\n\tconst escapeRegex = (s) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\tconst tokensToRegex = (tokens) => {\n\t\treturn tokens.flatMap((t) => {\n\t\t\tif (t.type === \"text\") return t.value === \"/\" ? [] : [escapeRegex(t.value)];\n\t\t\tif (t.type === \"wildcard\") return [\".+\"];\n\t\t\tif (t.type === \"param\") return [\"[^/]+\"];\n\t\t\tif (t.type === \"group\") return [`(?:${tokensToRegex(t.tokens)})?`];\n\t\t\treturn [];\n\t\t}).join(\"\");\n\t};\n\treturn tokens.flatMap((token, i) => {\n\t\tif (token.kind === \"static\") return [staticValue(token.parts[0])];\n\t\tif (token.kind === \"param\") return [paramValue(token.parts[0])];\n\t\tconst { tokens } = parse(token.pattern.replace(/\\//g, \"\"));\n\t\treturn [`:_${i}{${tokensToRegex(tokens)}}`];\n\t}).join(\"/\");\n};\nvar normalizeStaticValue = (value) => {\n\treturn value.replace(/\\+/g, \"\\\\\\\\+\");\n};\n`${defaults.apiDir}`, `${defaults.apiDir}`, `${defaults.pagesDir}`, `${defaults.pagesDir}`;\n/**\n* Weight of a single path segment.\n*\n* Fixed values per kind prevent complex mixed segments\n* from outscoring multiple statics.\n*\n* static: 4 (exact match, most specific)\n* mixed: 3+ (static + param parts; more statics = slightly higher)\n* required: 2 (matches any single segment)\n* optional: 1 (may or may not match)\n* splat: 0 (matches anything, least specific)\n* */\nvar segmentWeight = (token) => {\n\tif (token.kind === \"static\") return 4;\n\tif (token.kind === \"mixed\") {\n\t\tlet statics = 0;\n\t\tlet optionals = 0;\n\t\tfor (const part of token.parts) if (part.type === \"static\") statics += 1;\n\t\telse if (part.kind === \"optional\" || part.kind === \"splat\") optionals += 1;\n\t\treturn 3 + statics * .01 - optionals * .005;\n\t}\n\tswitch (token.parts[0].kind) {\n\t\tcase \"required\": return 2;\n\t\tcase \"optional\": return 1;\n\t\tcase \"splat\": return 0;\n\t}\n};\n/**\n* Compare two route entries for registration order.\n*\n* More specific routes sort first (higher priority).\n* Segments are compared left-to-right; first difference wins.\n*\n* When one route is a prefix of the other, the trailing segment\n* determines order: a trailing splat loses (shorter sibling first),\n* anything else wins (longer route is more specific).\n*\n* At equal weight and length, lexicographic tiebreak ensures\n* deterministic ordering across JS engines.\n* */\nvar sortRoutes = (a, b) => {\n\tconst pairs = Array.from({ length: Math.max(a.pathTokens.length, b.pathTokens.length) }, (_, i) => [a.pathTokens[i], b.pathTokens[i]]);\n\tfor (const [at, bt] of pairs) {\n\t\tif (!at || !bt) {\n\t\t\tconst extra = at ?? bt;\n\t\t\tif (extra?.kind === \"param\" ? extra.parts[0].kind === \"splat\" : false) return at ? 1 : -1;\n\t\t\treturn at ? -1 : 1;\n\t\t}\n\t\tconst aw = segmentWeight(at);\n\t\tconst bw = segmentWeight(bt);\n\t\tif (aw !== bw) return bw - aw;\n\t}\n\treturn a.pathPattern.localeCompare(b.pathPattern);\n};\nvar nodePrefix = () => {\n\treturn {\n\t\tname: \"kosmojs:node-prefix\",\n\t\tenforce: \"pre\",\n\t\tresolveId(source) {\n\t\t\treturn builtinModules.includes(source) ? {\n\t\t\t\tid: `node:${source}`,\n\t\t\t\texternal: true\n\t\t\t} : void 0;\n\t\t}\n\t};\n};\nvar vitePlugins = { nodePrefix };\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/hono-generator\",\n\tversion: \"0.1.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\n\timports: { \"#templates/*\": \"./src/templates/*\" },\n\texports: { \".\": {\n\t\t\"types\": \"./pkg/index.d.ts\",\n\t\t\"default\": \"./pkg/index.js\"\n\t} },\n\tscripts: {\n\t\t\"build\": \"wsbuild src/index.ts\",\n\t\t\"test\": \"vitest --root ../.. --project generators/hono-generator\"\n\t},\n\tdependencies: { \"crc\": \"^4.3.2\" },\n\tdevDependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@hono/node-server\": \"^2.0.0\",\n\t\t\"hono\": \"^4.12.15\",\n\t\t\"path-to-regexp\": \"^8.4.2\"\n\t}\n};\n//#endregion\n//#region src/templates/lib/@api/app.ts?raw\nvar app_default$1 = \"import { Hono } from \\\"hono\\\";\\n\\nimport type { AppFactory } from \\\"@kosmojs/core/api\\\";\\n\\nimport type { DefaultBindings, DefaultVariables } from \\\"../api\\\";\\n\\nexport type AppEnv = {\\n Variables: DefaultVariables;\\n Bindings: DefaultBindings;\\n};\\n\\nexport type App = Hono<AppEnv>;\\n\\nexport type AppOptions = ConstructorParameters<typeof Hono<AppEnv>>[0];\\n\\nexport const appFactory: AppFactory<App, AppOptions> = (factory) => {\\n const createApp = (options?: AppOptions) => {\\n return new Hono({ strict: false, ...options });\\n };\\n return factory({ createApp });\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@api/bodyparser.ts?raw\nvar bodyparser_default = \"import type { Context } from \\\"hono\\\";\\n\\nimport type { RequestBodyTarget } from \\\"@kosmojs/core\\\";\\n\\nexport type BodyparserOptions = {\\n json: never;\\n form: { all?: boolean; dot?: boolean };\\n raw: { as?: \\\"text\\\" | \\\"arrayBuffer\\\" | \\\"blob\\\" | \\\"formData\\\" };\\n};\\n\\nexport const bodyparsers: {\\n [T in RequestBodyTarget]: (\\n ctx: Context,\\n opt?: BodyparserOptions[T],\\n ) => Promise<unknown>;\\n} = {\\n json(ctx) {\\n return ctx.req.json();\\n },\\n\\n form(ctx, opt) {\\n return ctx.req.parseBody(opt);\\n },\\n\\n raw(ctx, { as = \\\"text\\\" } = {}) {\\n return ctx.req[as]();\\n },\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@api/dev.ts?raw\nvar dev_default$1 = \"import type { DevSetup } from \\\"@kosmojs/core/api\\\";\\n\\nexport const devSetup = (setup: DevSetup) => setup;\\n\";\n//#endregion\n//#region src/templates/lib/@api/errors.ts?raw\nvar errors_default$1 = \"import type { Context } from \\\"hono\\\";\\n\\nimport type { AppEnv } from \\\"./app\\\";\\n\\ntype ErrorHandler = (\\n error: any,\\n ctx: Context<AppEnv>,\\n) => Promise<Response> | Response;\\n\\nexport type ErrorHandlerFactory = (handler: ErrorHandler) => ErrorHandler;\\n\\nexport const errorHandlerFactory: ErrorHandlerFactory = (handler) => {\\n return handler;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@api/router.ts?raw\nvar router_default$1 = \"import type { MiddlewareHandler } from \\\"hono\\\";\\nimport { getCookie } from \\\"hono/cookie\\\";\\nimport type { Router } from \\\"hono/router\\\";\\nimport { RegExpRouter } from \\\"hono/router/reg-exp-router\\\";\\nimport { SmartRouter } from \\\"hono/router/smart-router\\\";\\nimport { TrieRouter } from \\\"hono/router/trie-router\\\";\\nimport { match } from \\\"path-to-regexp\\\";\\n\\nimport type {\\n RequestBodyTarget,\\n RequestValidationTarget,\\n ValidationErrorEntry,\\n} from \\\"@kosmojs/core\\\";\\nimport {\\n type CreateRouteMiddleware,\\n createRoutes,\\n type HTTPMethod,\\n type RouterFactory,\\n StateKey,\\n} from \\\"@kosmojs/core/api\\\";\\nimport { ValidationError } from \\\"@kosmojs/core/errors\\\";\\n\\nimport {\\n type DefaultBindings,\\n type DefaultVariables,\\n type ParameterizedContext,\\n type ParameterizedMiddleware,\\n use,\\n} from \\\"../api\\\";\\nimport { type BodyparserOptions, bodyparsers } from \\\"./bodyparser\\\";\\nimport { routeSources } from \\\"./routes\\\";\\n\\nimport globalMiddleware from \\\"{{ createImport 'api' 'use' }}\\\";\\n\\n/**\\n * Create route-level middleware stack that handles:\\n * 1. Context extension - adds `ctx.bodyparser` (lazy, cached) and `ctx.validated` accessors\\n * 2. Params validation - normalizes and validates URL params (including splat/numeric params)\\n * 3. Request validation - validates query, headers, cookies, and body against schemas\\n * 4. Response validation - validates outgoing response against defined variants\\n *\\n * Middleware are assigned named slots (e.g. \\\"validate:params\\\", \\\"validate:json\\\")\\n * so they can be replaced by user-defined middleware in the stack.\\n *\\n * All validation errors are thrown as `ValidationError` instances,\\n * caught and formatted by the global error handler middleware upstream.\\n * */\\nexport const createRouteMiddleware: CreateRouteMiddleware<\\n ParameterizedMiddleware\\n> = ({ name, pathPattern, params, numericParams, validationSchemas }) => {\\n const pathMatcher = match(pathPattern);\\n\\n const matchPath = (path: string) => {\\n try {\\n return pathMatcher(path);\\n } catch (_e) {\\n return undefined;\\n }\\n };\\n\\n const validationMiddleware = [\\n /**\\n * Extends Koa context with:\\n *\\n * - `ctx.bodyparser[target](opts?)` - lazy, cached body parsers.\\n * Each parser (json, form, multipart, raw) runs at most once per request;\\n * subsequent calls return the cached result.\\n * This allows both user middleware/handlers and validators\\n * to call the same parser without re-consuming the request stream.\\n *\\n * - `ctx.validated` - getter that returns all validated data collected so far\\n * (params, query, headers, cookies, json etc.) as a plain object.\\n *\\n * Cache is stored on `ctx[StateKey]` (a Symbol-keyed Map) to keep it\\n * hidden from public API surface and serialization.\\n * */\\n use(\\n function useExtendContext(ctx, next) {\\n if (!ctx[StateKey]) {\\n // initialize per-request cache with empty params\\n // (later populated by useValidateParams)\\n ctx[StateKey] = new Map([[\\\"params\\\", {}]]);\\n Object.defineProperty(ctx, \\\"bodyparser\\\", {\\n value: Object.entries(bodyparsers).reduce<{\\n [T in RequestBodyTarget]?: (\\n opt?: BodyparserOptions[T],\\n ) => Promise<unknown>;\\n }>((map, entry) => {\\n const [target, parser] = entry as [RequestBodyTarget, Function];\\n map[target] = async (opt) => {\\n if (!ctx[StateKey].has(target)) {\\n ctx[StateKey].set(target, await parser(ctx, opt as never));\\n }\\n return ctx[StateKey].get(target);\\n };\\n return map;\\n }, {}),\\n enumerable: true,\\n });\\n Object.defineProperty(ctx, \\\"validated\\\", {\\n get() {\\n return Object.fromEntries(ctx[StateKey]);\\n },\\n enumerable: true,\\n });\\n }\\n return next();\\n },\\n { slot: \\\"extendContext\\\" },\\n ) as never,\\n\\n /**\\n * Normalize and validate URL params:\\n * - Splat params (e.g. `/files{/*path}`) are split into arrays by \\\"/\\\"\\n * - Numeric params are cast to Number (or array of Numbers for splat params)\\n * - Non-splat, non-numeric params pass through as strings\\n *\\n * Validated params are stored in the cache so `ctx.validated.params`\\n * reflects the normalized (and validated) values.\\n * */\\n use(\\n function useValidateParams(ctx, next) {\\n const matched = matchPath(ctx.req.path);\\n const normalizedParams = params.reduce(\\n (map: Record<string, unknown>, name) => {\\n const value = matched ? matched.params[name] : undefined;\\n if (Array.isArray(value)) {\\n map[name] = numericParams.includes(name)\\n ? value.map(Number)\\n : value;\\n } else if (value) {\\n map[name] = numericParams.includes(name) //\\n ? Number(value)\\n : value;\\n }\\n return map;\\n },\\n {},\\n );\\n validationSchemas.params?.validate(normalizedParams);\\n ctx[StateKey].set(\\\"params\\\", normalizedParams);\\n return next();\\n },\\n { slot: \\\"validate:params\\\" },\\n ) as never,\\n\\n /**\\n * Response validation - runs AFTER the handler (post-`next()`).\\n *\\n * Each response schema defines one or more variants, each with:\\n * - expected status code\\n * - optional content-type\\n * - optional body schema\\n *\\n * All variants are checked; if at least one passes, validation succeeds.\\n * If none pass, a ValidationError is thrown with collected errors from all variants.\\n *\\n * Activation rules:\\n * - In dev/test mode: runs unless `runtimeValidation` is explicitly `false`\\n * - In production: runs only if `runtimeValidation` is explicitly `true`\\n *\\n * Only attached to HTTP methods that have response schemas defined.\\n * */\\n use(\\n async function useValidateResponse(ctx, next) {\\n const variants = validationSchemas.response?.[ctx.req.method] || [];\\n\\n if (!Array.isArray(variants) || !variants.length) {\\n return next();\\n }\\n\\n // options are same for all variants\\n const { runtimeValidation, customErrors } = variants[0];\\n\\n if (KOSMO_PRODUCTION_BUILD) {\\n // skip if undefined or explicitly set to false\\n if (runtimeValidation === undefined || runtimeValidation === false) {\\n return next();\\n }\\n } else {\\n // skip only if explicitly set to false\\n if (runtimeValidation === false) {\\n return next();\\n }\\n }\\n\\n // run all downstream middleware (including the route handler)\\n await next();\\n\\n const response: {\\n status: number;\\n contentType: string | null;\\n body?: unknown;\\n } = {\\n status: ctx.res.status,\\n contentType: ctx.res.headers.get(\\\"Content-Type\\\"),\\n };\\n\\n // Validate body only for JSON variants\\n if (variants.some((e) => e.contentType?.includes(\\\"json\\\"))) {\\n const cloned = ctx.res.clone();\\n response.body = await cloned.json();\\n }\\n\\n /**\\n * Returns an array of validator functions for a single response variant.\\n * Each validator checks one aspect (status, content-type, body)\\n * and returns an error entry or undefined if the check passes.\\n * */\\n const variantValidators: (\\n v: (typeof variants)[number],\\n ) => Array<(i: number) => ValidationErrorEntry | undefined> = (\\n schema,\\n ) => {\\n return [\\n (i) => {\\n return schema.status === response.status\\n ? undefined\\n : {\\n keyword: \\\"Status\\\",\\n path: `Variant #${i}`,\\n message: `expected: ${schema.status}; actual: ${ctx.status}`,\\n };\\n },\\n (i) => {\\n if (\\n !schema.contentType ||\\n schema.contentType === response.contentType\\n ) {\\n return undefined;\\n }\\n return {\\n keyword: \\\"ContentType\\\",\\n path: `Variant #${i}`,\\n message: `expected: ${schema.contentType}; actual: ${response.contentType}`,\\n };\\n },\\n (i) => {\\n if (!schema.check || \\\"body\\\" in response === false) {\\n // no body schema or contentType is not JSON\\n return;\\n }\\n return schema.check(response.body)\\n ? undefined\\n : {\\n keyword: \\\"Body\\\",\\n path: `Variant #${i}`,\\n message: schema.errorMessage(response.body),\\n };\\n },\\n ];\\n };\\n\\n // collect errors across all variants; exit early if any variant passes\\n const errors: Array<ValidationErrorEntry> = [];\\n\\n for (const [i, variant] of variants.entries()) {\\n const variantErrors = variantValidators(variant).flatMap(\\n (validator) => {\\n const error = validator(i);\\n return error ? [error] : [];\\n },\\n );\\n if (!variantErrors.length) {\\n // variant fully matched - response is valid\\n return;\\n }\\n errors.push(...variantErrors);\\n }\\n\\n const errorMessage = `The response did not match any of the expected formats`;\\n const errorSummary = `${variants.length} variants checked, none valid`;\\n\\n // no variant passed validation\\n throw new ValidationError([\\n \\\"response\\\",\\n {\\n errors,\\n errorMessage: customErrors?.error || errorMessage,\\n errorSummary,\\n route: name,\\n data: response,\\n },\\n ]);\\n },\\n {\\n slot: \\\"validate:response\\\",\\n on: Object.keys(validationSchemas.response || {}) as Array<HTTPMethod>,\\n },\\n ) as never,\\n ];\\n\\n /**\\n * Request validation - dynamically creates one middleware per target\\n * (query, headers, cookies, json, form, multipart, raw).\\n *\\n * Each middleware:\\n * 1. Checks if a schema exists for the current HTTP method\\n * 2. Skips if `runtimeValidation` is explicitly disabled\\n * 3. Loads data via the appropriate source (ctx.query, ctx.headers, or ctx.bodyparser)\\n * 4. Validates via `schema.validate()` which throws on failure\\n *\\n * Body targets (json, form, raw) go through `ctx.bodyparser[target]()`,\\n * benefiting from the lazy parsing and caching set up by slot:extendContext middleware.\\n *\\n * All request validators are active on any HTTP method that has at least one\\n * schema defined across any target - this is intentionally broad to avoid\\n * silently skipping validation when methods overlap.\\n * */\\n const requestTargets: Record<\\n RequestValidationTarget,\\n (\\n ctx: ParameterizedContext<\\n Record<string, string>,\\n DefaultVariables,\\n DefaultBindings\\n >,\\n ) => Promise<unknown>\\n > = {\\n query: async (ctx) => ctx.req.queries(),\\n headers: async (ctx) => ctx.req.header(),\\n cookies: async (ctx) => getCookie(ctx),\\n json: async (ctx) => ctx.bodyparser.json(),\\n form: async (ctx) => ctx.bodyparser.form(),\\n raw: async (ctx) => ctx.bodyparser.raw(),\\n };\\n\\n const requestEntries = Object.entries(requestTargets) as Array<\\n [RequestValidationTarget, (typeof requestTargets)[RequestValidationTarget]]\\n >;\\n\\n for (const [target, loadData] of requestEntries) {\\n validationMiddleware.push(\\n use(\\n async (ctx, next) => {\\n const schema = {\\n ...validationSchemas[target]?.[ctx.req.method],\\n };\\n if (schema.validate && schema.runtimeValidation !== false) {\\n schema.validate(await loadData(ctx as never));\\n }\\n return next();\\n },\\n {\\n slot: `validate:${target}`,\\n // duplicates not an issue here\\n on: requestEntries.flatMap(([target]) => {\\n return Object.keys(\\n validationSchemas[target] || {},\\n ) as Array<HTTPMethod>;\\n }),\\n },\\n ) as never,\\n );\\n }\\n\\n return validationMiddleware;\\n};\\n\\nexport const routes = createRoutes<ParameterizedMiddleware, MiddlewareHandler>(\\n routeSources,\\n {\\n globalMiddleware: globalMiddleware as never,\\n createRouteMiddleware,\\n },\\n);\\n\\nexport const routerFactory: RouterFactory<Router<never>, never> = (factory) => {\\n const createRouter = () => {\\n return new SmartRouter({\\n routers: [new RegExpRouter(), new TrieRouter()],\\n }) as Router<never>;\\n };\\n return factory({ createRouter });\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@api/routes.hbs?raw\nvar routes_default = \"import { join } from \\\"node:path\\\";\\n\\nimport type { RouteSource } from \\\"@kosmojs/core/api\\\";\\n\\nimport { base, apiBase } from \\\"{{ createImport \\\"libCore\\\" }}\\\";\\n\\n{{#each routes}}\\nimport {{id}} from \\\"{{ createImport \\\"api\\\" file }}\\\";\\nimport { validationSchemas as {{id}}_schemas } from \\\"{{ createImport \\\"libApi\\\" name \\\"schemas\\\" }}\\\";\\n{{/each}}\\n\\n{{#each cascadingMiddleware}}\\nimport {{id}}, { type ExtendT as ExtendT{{id}} } from \\\"{{ createImport \\\"api\\\" file }}\\\";\\n{{/each}}\\n\\ntype Override<A, B> = Omit<A, keyof B> & B;\\n\\nexport type RouteMap = {\\n{{#each routes}}\\n \\\"{{name}}\\\": {\\n paramsDefaults: {{paramsDefaults .}},\\n paramsMappings: {{paramsMappings .}},\\n cascadingState: {{cascadingState .}},\\n },\\n{{/each}}\\n}\\n\\nexport const routeSources: Array<RouteSource<never>> = [\\n {{#each routes}}\\n {\\n name: \\\"{{name}}\\\",\\n {{#if fullpath}}\\n path: \\\"{{fullpath}}\\\",\\n pathPattern: \\\"{{fullpath}}\\\",\\n {{else}}\\n path: join(base, apiBase, \\\"{{path}}\\\"),\\n pathPattern: join(base, apiBase, \\\"{{pathPattern}}\\\"),\\n {{/if}}\\n file: \\\"{{file}}\\\",\\n cascadingMiddleware: [ {{#each cascadingMiddleware}}{{id}}, {{/each}}].flat() as Array<never>,\\n definitionItems: {{id}} as never,\\n params: [ {{#each params.schema}}\\\"{{name}}\\\", {{/each}}],\\n numericParams: [ {{#each numericParams}}\\\"{{.}}\\\", {{/each}}],\\n validationSchemas: {{id}}_schemas,\\n },\\n {{/each}}\\n];\\n\";\n//#endregion\n//#region src/templates/lib/@api/server.ts?raw\nvar server_default$1 = \"import { chmod, unlink } from \\\"node:fs/promises\\\";\\nimport { parseArgs, styleText } from \\\"node:util\\\";\\n\\nimport { createAdaptorServer } from \\\"@hono/node-server\\\";\\n\\nimport type { ServerFactory } from \\\"@kosmojs/core/api\\\";\\n\\nimport type { App } from \\\"./app\\\";\\n\\nexport const serverFactory: ServerFactory<App> = (factory) => {\\n const { values } = parseArgs({\\n options: {\\n port: {\\n type: \\\"string\\\",\\n short: \\\"p\\\",\\n },\\n sock: {\\n type: \\\"string\\\",\\n short: \\\"s\\\",\\n },\\n },\\n });\\n\\n return factory({\\n async createServer(app, opt) {\\n const { port, sock, callback } = { ...values, ...opt };\\n\\n if (![sock, port].some(Boolean)) {\\n console.error(\\n styleText(\\\"red\\\", \\\"✗ Please provide either -p/--port or -s/--sock\\\"),\\n );\\n process.exit(1);\\n }\\n\\n if (sock) {\\n // Clean up any stale socket file before binding.\\n await unlink(sock).catch((error) => {\\n if (error.code === \\\"ENOENT\\\") {\\n return;\\n }\\n console.error(error.message);\\n process.exit(1);\\n });\\n }\\n\\n console.log(\\n `\\\\n ➜ Starting Server ${styleText([\\\"dim\\\"], \\\"[ %s ]\\\")}`,\\n sock ? `sock: ${sock}` : `port: ${port}`,\\n );\\n\\n const onListen = async () => {\\n if (sock) {\\n // Make Unix socket world-writable so other processes (e.g. a reverse proxy)\\n // can connect without permission issues.\\n await chmod(sock, 0o777);\\n }\\n if (callback) {\\n await callback();\\n }\\n console.log(\\\"\\\\n ➜ Server Started ✨\\\");\\n };\\n\\n if (typeof Bun !== \\\"undefined\\\") {\\n const server = Bun.serve(\\n sock\\n ? { unix: sock, fetch: app.fetch }\\n : { port: Number(port), fetch: app.fetch },\\n );\\n await onListen();\\n return server as never;\\n }\\n\\n if (typeof Deno !== \\\"undefined\\\") {\\n const server = sock\\n ? Deno.serve({ path: sock, onListen }, app.fetch)\\n : Deno.serve({ port: Number(port), onListen }, app.fetch);\\n return server as never;\\n }\\n\\n const server = createAdaptorServer(app);\\n server.listen(sock || port, onListen);\\n\\n return server as never;\\n },\\n });\\n};\\n\\nprocess.on(\\\"unhandledRejection\\\", (reason) => {\\n console.error(\\\"💥 UNHANDLED REJECTION - This is likely caused by:\\\");\\n console.error(\\\" - Middleware not awaiting next()\\\");\\n console.error(\\\" - Middleware not returning next()\\\");\\n console.error(\\\"\\\");\\n console.error(\\\"Reason:\\\", reason);\\n console.error(\\\"\\\");\\n // In development, crash hard\\n if (process.env.NODE_ENV === \\\"development\\\") {\\n process.exit(1);\\n }\\n});\\n\";\n//#endregion\n//#region src/templates/lib/api.ts?raw\nvar api_default = \"import type { Context, Next } from \\\"hono\\\";\\n\\nimport type { ValidationDefmap, ValidationOptmap } from \\\"@kosmojs/core\\\";\\nimport {\\n use as createUse,\\n type ExtendContext,\\n type HandlerDefinition,\\n type HTTPMethod,\\n type MiddlewareDefinition,\\n type RouteDefinitionItem,\\n type UseOptions,\\n} from \\\"@kosmojs/core/api\\\";\\n\\nimport type { BodyparserOptions } from \\\"./@api/bodyparser\\\";\\nimport type { RouteMap } from \\\"./@api/routes\\\";\\n\\nexport interface DefaultVariables {}\\nexport interface DefaultBindings {}\\n\\ntype ExtractJsonBody<R> = R extends [\\n number,\\n `${string}json${string}`,\\n infer Body,\\n]\\n ? Body\\n : never;\\n\\ntype ExtractJsonStatus<R> = R extends [\\n infer S extends number,\\n `${string}json${string}`,\\n ...unknown[],\\n]\\n ? S extends 300 | 301 | 302 | 303 | 304 | 307 | 308\\n ? never\\n : S\\n : never;\\n\\ntype ResponseJsonOverride<VDefs extends ValidationDefmap> = [\\n ExtractJsonBody<VDefs[\\\"response\\\"]>,\\n] extends [never]\\n ? {}\\n : {\\n json: (\\n body: ExtractJsonBody<VDefs[\\\"response\\\"]>,\\n status?: ExtractJsonStatus<VDefs[\\\"response\\\"]>,\\n ) => Response;\\n };\\n\\nexport type ParameterizedContext<\\n ParamsT,\\n VariablesT,\\n BindingsT,\\n VDefs extends ValidationDefmap = {},\\n VOpts extends ValidationOptmap = {},\\n> = Context<{\\n Bindings: DefaultBindings & BindingsT;\\n Variables: DefaultVariables & VariablesT;\\n}> &\\n ExtendContext<ParamsT, VDefs, VOpts, BodyparserOptions> &\\n ResponseJsonOverride<VDefs>;\\n\\nexport type ParameterizedMiddleware<\\n ParamsT = Record<string, string>,\\n VariablesT = Record<string, unknown>,\\n BindingsT = Record<string, unknown>,\\n> = (\\n ctx: ParameterizedContext<ParamsT, VariablesT, BindingsT>,\\n next: Next,\\n) => Promise<unknown> | unknown;\\n\\nexport const use = <VariablesT = DefaultVariables>(\\n middleware:\\n | ParameterizedMiddleware<Record<string, string>, VariablesT>\\n | Array<ParameterizedMiddleware<Record<string, string>, VariablesT>>,\\n options?: UseOptions,\\n) => {\\n return createUse<ParameterizedMiddleware<Record<string, string>, VariablesT>>(\\n middleware,\\n options,\\n );\\n};\\n\\nexport type RouteHandler<\\n ParamsT,\\n VariablesT,\\n BindingsT,\\n VDefs extends ValidationDefmap,\\n VOpts extends ValidationOptmap = {},\\n> = (\\n ctx: ParameterizedContext<ParamsT, VariablesT, BindingsT, VDefs, VOpts>,\\n next: Next,\\n) => Promise<unknown> | unknown;\\n\\nexport type DefineRouteFactory<ParamsT, VariablesT, BindingsT> = (\\n a: {\\n // NOTE: The `use` helper intentionally does not accept validation types.\\n // Allowing these type parameters on `use` would be misleading,\\n // since middleware operates across multiple request methods with varying types.\\n use: (\\n middleware:\\n | ParameterizedMiddleware<ParamsT, VariablesT, BindingsT>\\n | Array<ParameterizedMiddleware<ParamsT, VariablesT, BindingsT>>,\\n options?: UseOptions,\\n ) => MiddlewareDefinition<\\n ParameterizedMiddleware<ParamsT, VariablesT, BindingsT>\\n >;\\n } & {\\n [M in HTTPMethod]: <\\n VDefs extends ValidationDefmap,\\n VOpts extends ValidationOptmap = {},\\n >(\\n handler:\\n | RouteHandler<ParamsT, VariablesT, BindingsT, VDefs, VOpts>\\n | Array<RouteHandler<ParamsT, VariablesT, BindingsT, VDefs, VOpts>>,\\n ) => HandlerDefinition<\\n ParameterizedMiddleware<ParamsT, VariablesT, BindingsT>\\n >;\\n },\\n) => Array<\\n RouteDefinitionItem<ParameterizedMiddleware<ParamsT, VariablesT, BindingsT>>\\n>;\\n\\ntype ParamsMap<\\n Mappings extends Array<[string, unknown, boolean]>,\\n Refinements extends Array<unknown>,\\n> = {\\n [I in Extract<keyof Mappings, `${number}`> as Mappings[I] extends [\\n infer ParamName extends string,\\n ...Array<unknown>,\\n ]\\n ? ParamName\\n : never]: Mappings[I] extends [string, infer Default, true]\\n ? I extends keyof Refinements\\n ? Refinements[I]\\n : Default\\n : Mappings[I] extends [string, infer Default, false]\\n ? I extends keyof Refinements\\n ? Refinements[I] | undefined\\n : Default | undefined\\n : never;\\n};\\n\\nexport const defineRoute: <\\n R extends keyof RouteMap,\\n ParamsD extends RouteMap[R][\\\"paramsDefaults\\\"] = RouteMap[R][\\\"paramsDefaults\\\"],\\n VariablesT extends object = object,\\n BindingsT extends object = object,\\n>(\\n factory: DefineRouteFactory<\\n ParamsMap<RouteMap[R][\\\"paramsMappings\\\"], ParamsD>,\\n VariablesT & RouteMap[R][\\\"cascadingState\\\"],\\n BindingsT\\n >,\\n) => Array<\\n RouteDefinitionItem<\\n ParameterizedMiddleware<\\n ParamsMap<RouteMap[R][\\\"paramsMappings\\\"], ParamsD>,\\n VariablesT & RouteMap[R][\\\"cascadingState\\\"],\\n BindingsT\\n >\\n >\\n> = (factory) => {\\n const createHandler = <MiddlewareT>(method: HTTPMethod) => {\\n return (middleware: MiddlewareT | Array<MiddlewareT>) => {\\n return {\\n kind: \\\"handler\\\",\\n method,\\n middleware: [middleware].flat(),\\n };\\n };\\n };\\n return factory({\\n HEAD: createHandler(\\\"HEAD\\\") as never,\\n OPTIONS: createHandler(\\\"OPTIONS\\\") as never,\\n GET: createHandler(\\\"GET\\\") as never,\\n POST: createHandler(\\\"POST\\\") as never,\\n PUT: createHandler(\\\"PUT\\\") as never,\\n PATCH: createHandler(\\\"PATCH\\\") as never,\\n DELETE: createHandler(\\\"DELETE\\\") as never,\\n // route-specific `use`, contains types for current route\\n use: use as never,\\n });\\n};\\n\";\n//#endregion\n//#region src/templates/lib/api:factory.ts?raw\nvar api_factory_default = \"export * from \\\"./@api/app\\\";\\nexport * from \\\"./@api/dev\\\";\\nexport * from \\\"./@api/errors\\\";\\nexport * from \\\"./@api/router\\\";\\nexport * from \\\"./@api/routes\\\";\\nexport * from \\\"./@api/server\\\";\\n\";\n//#endregion\n//#region src/templates/src/app.ts?raw\nvar app_default = \"import defaultErrorHandler from \\\"./errors\\\";\\nimport router from \\\"./router\\\";\\n\\nimport { appFactory, routes } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\n\\nexport default appFactory(({ createApp }) => {\\n const app = createApp({ router });\\n\\n app.onError(defaultErrorHandler);\\n\\n for (const { path, methods, middleware } of routes) {\\n app.on(methods, [path], ...middleware);\\n }\\n\\n return app;\\n});\\n\";\n//#endregion\n//#region src/templates/src/dev.ts?raw\nvar dev_default = \"import { getRequestListener } from \\\"@hono/node-server\\\";\\n\\nimport app from \\\"./app\\\";\\n\\nimport { devSetup } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\n\\nexport default devSetup({\\n requestHandler() {\\n return getRequestListener(app.fetch);\\n },\\n teardownHandler() {\\n // close db connections, server sockets etc.\\n },\\n});\\n\";\n//#endregion\n//#region src/templates/src/env.d.ts?raw\nvar env_d_default = \"export declare module \\\"{{ createImport 'libApi' }}\\\" {\\n interface DefaultVariables {}\\n interface DefaultBindings {}\\n}\\n\";\n//#endregion\n//#region src/templates/src/errors.ts?raw\nvar errors_default = \"import { accepts } from \\\"hono/accepts\\\";\\nimport { HTTPException } from \\\"hono/http-exception\\\";\\n\\nimport { ValidationError, HTTPError } from \\\"@kosmojs/core/errors\\\";\\n\\nimport { errorHandlerFactory } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\n\\nexport default errorHandlerFactory(\\n async function defaultErrorHandler(error, ctx) {\\n // Let Hono's HTTPException handle its own response\\n if (error instanceof HTTPException) {\\n return error.getResponse();\\n }\\n\\n const [status, message] = Array.isArray(error)\\n ? error\\n : error instanceof HTTPError\\n ? [error.status, error.message]\\n : error instanceof ValidationError\\n ? [400, `${error.target}: ${error.errorMessage}`]\\n : [error.statusCode || 500, error.message];\\n\\n // Respond based on what the client accepts\\n const type = accepts(ctx, {\\n header: \\\"Accept\\\",\\n supports: [\\\"application/json\\\", \\\"text/plain\\\"],\\n default: \\\"text/plain\\\",\\n });\\n\\n return type === \\\"application/json\\\"\\n ? ctx.json({ error: message }, status)\\n : ctx.text(message, status);\\n },\\n);\\n\";\n//#endregion\n//#region src/templates/src/route/index.ts?raw\nvar route_default = \"import { defineRoute } from \\\"{{ createImport 'libApi' }}\\\";\\n\\nexport default defineRoute<\\\"{{route.name}}\\\">(({ GET }) => [\\n GET(async (ctx) => {\\n // Always `return` the response!\\n // ❗ Never call `ctx.json()` / `ctx.text()` / `ctx.body()` without returning!\\n return ctx.text(\\\"Automatically generated route\\\");\\n }),\\n]);\\n\";\n//#endregion\n//#region src/templates/src/route/use.ts?raw\nvar use_default$1 = \"import { use } from \\\"{{ createImport 'libApi' }}\\\";\\n\\nexport type ExtendT = {};\\n\\nexport default [\\n use<ExtendT>(async (ctx, next) => {\\n // Always `return next()` or `await next()`;\\n // ❗ Never call `next()` by itself!\\n return next();\\n }),\\n];\\n\";\n//#endregion\n//#region src/templates/src/router.ts?raw\nvar router_default = \"import { routerFactory } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\n\\nexport default routerFactory(({ createRouter }) => {\\n const router = createRouter();\\n return router;\\n});\\n\";\n//#endregion\n//#region src/templates/src/server.ts?raw\nvar server_default = \"import app from \\\"./app\\\";\\n\\nimport { serverFactory } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\n\\nserverFactory(({ createServer }) => {\\n createServer(app);\\n});\\n\";\n//#endregion\n//#region src/templates/src/use.ts?raw\nvar use_default = \"import { use } from \\\"{{ createImport 'libApi' }}\\\";\\n\\n/**\\n * Define global middleware applied to all routes.\\n * Can be overridden on a per-route basis using the slot key.\\n * */\\nexport default [\\n use(async function useExample(ctx, next) {\\n return next();\\n }),\\n];\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((meta, sourceFolder, options) => {\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst cascadingState = (ids) => {\n\t\tif (ids.length === 0) return \"{}\";\n\t\tif (ids.length === 1) return ids[0];\n\t\treturn `Override<${ids[0]}, ${cascadingState(ids.slice(1))}>`;\n\t};\n\tconst { renderToFile: deployLibFile } = renderFactory({ helpers: {\n\t\t...createImportHelpers({ origin: \"lib\" }),\n\t\tparamsDefaults({ params }) {\n\t\t\treturn `[${params.schema.map(() => \"unknown?\").join(\", \")}]`;\n\t\t},\n\t\tparamsMappings({ params }) {\n\t\t\treturn `[${params.schema.map(({ name, kind }) => {\n\t\t\t\treturn `[\"${name}\", unknown, ${kind === \"required\" ? \"true\" : \"false\"}]`;\n\t\t\t}).join(\", \")}]`;\n\t\t},\n\t\tcascadingState({ cascadingMiddleware }) {\n\t\t\treturn cascadingState(cascadingMiddleware.map(({ id }) => `ExtendT${id}`));\n\t\t}\n\t} });\n\tconst { renderToFile: deploySrcFile } = renderFactory({ helpers: createImportHelpers({ origin: \"src\" }) });\n\tconst overwrite = (content) => content?.trim().length === 0;\n\tconst templateResolver = createTemplateResolver(options?.templates, route_default);\n\tconst generateSrcFiles = async (entries) => {\n\t\tfor (const { kind, entry } of entries) if (kind === \"apiRoute\") await deploySrcFile(createPath.api(entry.file), templateResolver(entry.name, entry), { route: entry }, { overwrite });\n\t\telse if (kind === \"apiUse\") await deploySrcFile(createPath.api(entry.file), use_default$1, {}, { overwrite });\n\t};\n\tconst generateLibFiles = async (entries) => {\n\t\tconst cascadingMiddleware = entries.flatMap(({ kind, entry }) => {\n\t\t\treturn kind === \"apiUse\" ? [entry] : [];\n\t\t});\n\t\tconst routesWithAliases = entries.flatMap(({ kind, entry }) => {\n\t\t\tif (kind !== \"apiRoute\") return [];\n\t\t\tconst pathVariations = entry.name.split(\"/\").reduce((acc, segment) => {\n\t\t\t\tconst prev = acc[acc.length - 1];\n\t\t\t\tacc.push(prev ? join(prev, segment) : segment);\n\t\t\t\treturn acc;\n\t\t\t}, []);\n\t\t\tconst baseRoute = {\n\t\t\t\t...entry,\n\t\t\t\tpath: entry.honoPattern,\n\t\t\t\tcascadingMiddleware: cascadingMiddleware.flatMap((e) => {\n\t\t\t\t\treturn pathVariations.some((path) => e.name === path) ? [e] : [];\n\t\t\t\t})\n\t\t\t};\n\t\t\treturn [baseRoute, ...Object.entries({ ...options?.alias }).flatMap(([url, routeName]) => {\n\t\t\t\tconst pathTokens = pathTokensFactory(url);\n\t\t\t\treturn routeName === entry.name ? [{\n\t\t\t\t\t...baseRoute,\n\t\t\t\t\tname: url,\n\t\t\t\t\tid: `${baseRoute.id}_${crc(url)}`,\n\t\t\t\t\tfullpath: createHonoPattern(pathTokens),\n\t\t\t\t\tpathTokens\n\t\t\t\t}] : [];\n\t\t\t})];\n\t\t}).sort(sortRoutes);\n\t\tfor (const [file, template] of [[\"@api/routes.ts\", routes_default]]) await deployLibFile(createPath.lib(file), template, {\n\t\t\troutes: routesWithAliases,\n\t\t\tcascadingMiddleware\n\t\t});\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tasync start() {\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"api.ts\", api_default],\n\t\t\t\t[\"api:factory.ts\", api_factory_default],\n\t\t\t\t[\"@api/app.ts\", app_default$1],\n\t\t\t\t[\"@api/bodyparser.ts\", bodyparser_default],\n\t\t\t\t[\"@api/dev.ts\", dev_default$1],\n\t\t\t\t[\"@api/errors.ts\", errors_default$1],\n\t\t\t\t[\"@api/router.ts\", router_default$1],\n\t\t\t\t[\"@api/server.ts\", server_default$1]\n\t\t\t]) await deployLibFile(createPath.lib(file), template, {});\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"env.d.ts\", env_d_default],\n\t\t\t\t[\"app.ts\", app_default],\n\t\t\t\t[\"dev.ts\", dev_default],\n\t\t\t\t[\"errors.ts\", errors_default],\n\t\t\t\t[\"router.ts\", router_default],\n\t\t\t\t[\"server.ts\", server_default],\n\t\t\t\t[\"use.ts\", use_default]\n\t\t\t]) await deploySrcFile(createPath.api(file), template, {}, { overwrite });\n\t\t},\n\t\tasync watch(entries, event) {\n\t\t\tif (!event || event.kind === \"create\") await generateSrcFiles(entries);\n\t\t\tawait generateLibFiles(entries);\n\t\t},\n\t\tasync build(entries) {\n\t\t\tawait generateSrcFiles(entries);\n\t\t\tawait generateLibFiles(entries);\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator((options) => {\n\tconst meta = {\n\t\tname: \"Hono\",\n\t\tslot: \"api\",\n\t\tdependencies: {\n\t\t\thono: package_default.devDependencies.hono,\n\t\t\t\"@hono/node-server\": package_default.devDependencies[\"@hono/node-server\"],\n\t\t\t\"path-to-regexp\": package_default.devDependencies[\"path-to-regexp\"]\n\t\t}\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tfactory: (sourceFolder) => factory_default(meta, sourceFolder, options),\n\t\tplugins: () => [vitePlugins.nodePrefix()]\n\t};\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { builtinModules } from \"node:module\";\nimport { dirname, join, resolve } from \"node:path\";\nimport crc from \"crc/crc32\";\nimport \"tfusion\";\nimport \"ts-morph\";\nimport picomatch from \"picomatch\";\nimport { access, constants, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport handlebars from \"handlebars\";\nimport { parse } from \"path-to-regexp\";\nimport \"mime-types\";\nimport \"@topcli/spinner\";\n//#region ../../packages/lib/pkg/index.js\nvar defaults = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets,\n\t...RequestBodyTargets\n});\nvar defineGenerator = (f) => f;\nvar defineGeneratorFactory = (f) => f;\nvar createTemplateResolver = (customTemplates, defaultTemplate) => {\n\tconst templates = Object.entries({ ...customTemplates }).map(([pattern, template]) => [picomatch(pattern), template]);\n\treturn (pattern, entry) => {\n\t\tconst match = templates.find(([isMatch]) => isMatch(pattern));\n\t\tif (!match) return defaultTemplate;\n\t\treturn typeof match[1] === \"function\" ? match[1](entry) : match[1];\n\t};\n};\nvar pathResolver = (sourceFolder) => {\n\tconst createPath = (...a) => {\n\t\treturn sourceFolder.root ? resolve(sourceFolder.root, join(...a)) : join(...a);\n\t};\n\tconst createImport = {\n\t\tsrc(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.srcPrefix, ...a) : join(defaults.appPrefix, defaults.srcDir, sourceFolder.name, ...a);\n\t\t},\n\t\tapi(a, o) {\n\t\t\treturn this.src([defaults.apiDir, ...a], o);\n\t\t},\n\t\tpages(a, o) {\n\t\t\treturn this.src([defaults.pagesDir, ...a], o);\n\t\t},\n\t\tlib(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.libPrefix, ...a) : join(defaults.appPrefix, defaults.libDir, sourceFolder.name, ...a);\n\t\t},\n\t\tlibCore(a, o) {\n\t\t\treturn this.lib([\"core\", ...a], o);\n\t\t},\n\t\tlibApi(a, o) {\n\t\t\treturn this.lib([defaults.apiDir, ...a], o);\n\t\t},\n\t\tlibEntry(a, o) {\n\t\t\treturn this.lib([defaults.entryDir, ...a], o);\n\t\t}\n\t};\n\treturn {\n\t\tcreatePath: {\n\t\t\tsrc(...a) {\n\t\t\t\treturn createPath(defaults.srcDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tapi(...a) {\n\t\t\t\treturn this.src(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tpages(...a) {\n\t\t\t\treturn this.src(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tentry(...a) {\n\t\t\t\treturn this.src(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlib(...a) {\n\t\t\t\treturn createPath(defaults.libDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tlibCore(...a) {\n\t\t\t\treturn this.lib(\"core\", ...a);\n\t\t\t},\n\t\t\tlibApi(...a) {\n\t\t\t\treturn this.lib(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tlibEntry(...a) {\n\t\t\t\treturn this.lib(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlibPages(...a) {\n\t\t\t\treturn this.lib(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tdistDir(...a) {\n\t\t\t\treturn createPath(sourceFolder.distDir, sourceFolder.name, ...a);\n\t\t\t}\n\t\t},\n\t\tcreateImport,\n\t\tcreateImportHelpers(o) {\n\t\t\tif (![\"src\", \"lib\"].includes(o?.origin)) throw new Error(`createImportHelpers: required exactly one argument of shape { origin: \"src|lib\" }`);\n\t\t\treturn { createImport(key, ...a) {\n\t\t\t\treturn createImport[key](a.slice(0, -1), o);\n\t\t\t} };\n\t\t}\n\t};\n};\nvar pathExists = async (path) => {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\nvar render = (template, context, options) => {\n\tconst { noEscape = true, renderer = handlebars } = { ...options };\n\treturn renderer.compile(template, { noEscape })(context);\n};\nvar renderToFile = async (file, template, context, options) => {\n\tconst content = render(template, context, options);\n\t/**\n\t* Two fs calls (exists + read) are worth it to avoid touching the file\n\t* and triggering watchers unnecessarily.\n\t* */\n\tif (await pathExists(file)) {\n\t\tconst { overwrite = true } = { ...options };\n\t\tif (overwrite === false) return;\n\t\tconst fileContent = await readFile(file, \"utf8\");\n\t\tif (typeof overwrite === \"function\" && !overwrite(fileContent)) return;\n\t\tif (crc(content) === crc(fileContent)) return;\n\t}\n\tawait mkdir(dirname(file), { recursive: true });\n\tawait writeFile(file, content, \"utf8\");\n};\nvar renderFactory = (options) => {\n\tconst createRenderer = (selfOoptions) => {\n\t\tconst renderer = handlebars.create();\n\t\trenderer.registerPartial({\n\t\t\t...options?.partials,\n\t\t\t...selfOoptions?.partials\n\t\t});\n\t\trenderer.registerHelper({\n\t\t\t...options?.helpers,\n\t\t\t...selfOoptions?.helpers\n\t\t});\n\t\treturn renderer;\n\t};\n\treturn {\n\t\trender(template, context, selfOoptions) {\n\t\t\treturn render(template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t},\n\t\tasync renderToFile(file, template, context, selfOoptions) {\n\t\t\treturn renderToFile(options?.outdir ? join(options.outdir, file) : file, template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t}\n\t};\n};\n/**\n* Parse a filesystem route path into structured PathToken array.\n*\n* Uses path-to-regexp v8 AST for parsing, with directory-friendly syntax:\n* - [param] => required param - :param\n* - {param} => optional param - {:param}\n* - {...param} => splat - {*param}\n*\n* Direct :param syntax is prohibited outside {} to avoid ambiguity.\n* Inside {} it is treated as path-to-regexp power syntax and used as-is.\n*\n* Examples:\n* Required: [id], [name]\n* Optional: {name}, {format}\n* Splat: {...path}\n* Mixed segments: shop/[id]-{name}\n* Power syntax: {-v:version{-:pre}}, :name{@:version{.:min}}.js\n* */\nvar pathTokensFactory = (path, { transformStaticValue = normalizeStaticValue } = {}) => {\n\t/**\n\t* Recursively extract parts from path-to-regexp AST tokens.\n\t* A param inside a group is optional; top-level params are required.\n\t* Wildcard tokens are always splat.\n\t* Slash-only text nodes (restored for parsing) are skipped.\n\t* */\n\tconst extractParts = (tokens, createConst, insideGroup = false) => {\n\t\tconst parts = [];\n\t\tfor (const token of tokens) switch (token.type) {\n\t\t\tcase \"text\":\n\t\t\t\tif (token.value !== \"/\") parts.push({\n\t\t\t\t\ttype: \"static\",\n\t\t\t\t\tvalue: transformStaticValue(token.value)\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"param\":\n\t\t\t\tparts.push({\n\t\t\t\t\ttype: \"param\",\n\t\t\t\t\tkind: insideGroup ? \"optional\" : \"required\",\n\t\t\t\t\tname: token.name,\n\t\t\t\t\tconst: createConst(token.name)\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"wildcard\":\n\t\t\t\tparts.push({\n\t\t\t\t\ttype: \"param\",\n\t\t\t\t\tkind: \"splat\",\n\t\t\t\t\tname: token.name,\n\t\t\t\t\tconst: createConst(token.name)\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"group\":\n\t\t\t\tparts.push(...extractParts(token.tokens, createConst, true));\n\t\t\t\tbreak;\n\t\t}\n\t\treturn parts;\n\t};\n\tconst patternTransforms = [\n\t\t(s) => s.replace(/\\[(\\w+)\\]/g, \":$1\"),\n\t\t(s) => s.replace(/\\{(\\w+)\\}/g, \"{:$1}\"),\n\t\t(s) => s.replace(/\\{\\.\\.\\./g, \"{*\"),\n\t\t(s) => {\n\t\t\treturn s.startsWith(\"{\") ? s.replace(/^\\{/, \"{/\") : s;\n\t\t}\n\t];\n\tconst detectBareParams = (s) => {\n\t\tlet depth = 0;\n\t\tfor (const [i, ch] of [...s].entries()) if (ch === \"{\") depth += 1;\n\t\telse if (ch === \"}\") depth -= 1;\n\t\telse if (ch === \":\" && depth === 0) return s.slice(i + 1).match(/^\\w+/)?.[0] || \":\";\n\t};\n\treturn path.replace(/^index\\/?/, \"\").split(\"/\").flatMap((orig) => {\n\t\tif (!orig.length) return [];\n\t\tconst bareParam = detectBareParams(orig);\n\t\tif (bareParam === \":\") throw new Error(`${path} contains colons outside braces, use : only within {}`);\n\t\telse if (bareParam) throw new Error(`${path} contains bare params, use [${bareParam}] instead of :${bareParam}`);\n\t\tconst pattern = patternTransforms.reduce((src, fn) => fn(src), orig);\n\t\tconst { tokens } = parse(pattern.replace(/\\{[^}]*\\}|(\\+)/g, (m, p1) => p1 ? \"\\\\+\" : m));\n\t\tconst parts = extractParts(tokens, (val) => {\n\t\t\treturn /\\W/.test(val) || /^\\d/.test(val) ? [val.replace(/^\\d+|\\W/g, \"_\"), crc(orig)].join(\"_\") : val;\n\t\t});\n\t\tconst isStatic = parts.length === 1 ? parts[0].type === \"static\" : false;\n\t\tconst isParam = parts.length === 1 ? parts[0].type === \"param\" : false;\n\t\treturn [{\n\t\t\tkind: isStatic ? \"static\" : isParam ? \"param\" : \"mixed\",\n\t\t\torig,\n\t\t\tpattern,\n\t\t\tparts\n\t\t}];\n\t});\n};\nvar createPathPattern = (tokens) => {\n\treturn tokens.map(({ pattern }, i) => {\n\t\tconst next = tokens[i + 1];\n\t\tif (!next || next.pattern.includes(\"/\")) return pattern;\n\t\treturn tokens.slice(i + 1).some((e) => {\n\t\t\treturn e.parts.some((e) => {\n\t\t\t\treturn e.type === \"static\" || e.kind === \"required\";\n\t\t\t});\n\t\t}) ? `${pattern}/` : pattern;\n\t}).join(\"\");\n};\nvar normalizeStaticValue = (value) => {\n\treturn value.replace(/\\+/g, \"\\\\\\\\+\");\n};\n`${defaults.apiDir}`, `${defaults.apiDir}`, `${defaults.pagesDir}`, `${defaults.pagesDir}`;\n/**\n* Weight of a single path segment.\n*\n* Fixed values per kind prevent complex mixed segments\n* from outscoring multiple statics.\n*\n* static: 4 (exact match, most specific)\n* mixed: 3+ (static + param parts; more statics = slightly higher)\n* required: 2 (matches any single segment)\n* optional: 1 (may or may not match)\n* splat: 0 (matches anything, least specific)\n* */\nvar segmentWeight = (token) => {\n\tif (token.kind === \"static\") return 4;\n\tif (token.kind === \"mixed\") {\n\t\tlet statics = 0;\n\t\tlet optionals = 0;\n\t\tfor (const part of token.parts) if (part.type === \"static\") statics += 1;\n\t\telse if (part.kind === \"optional\" || part.kind === \"splat\") optionals += 1;\n\t\treturn 3 + statics * .01 - optionals * .005;\n\t}\n\tswitch (token.parts[0].kind) {\n\t\tcase \"required\": return 2;\n\t\tcase \"optional\": return 1;\n\t\tcase \"splat\": return 0;\n\t}\n};\n/**\n* Compare two route entries for registration order.\n*\n* More specific routes sort first (higher priority).\n* Segments are compared left-to-right; first difference wins.\n*\n* When one route is a prefix of the other, the trailing segment\n* determines order: a trailing splat loses (shorter sibling first),\n* anything else wins (longer route is more specific).\n*\n* At equal weight and length, lexicographic tiebreak ensures\n* deterministic ordering across JS engines.\n* */\nvar sortRoutes = (a, b) => {\n\tconst pairs = Array.from({ length: Math.max(a.pathTokens.length, b.pathTokens.length) }, (_, i) => [a.pathTokens[i], b.pathTokens[i]]);\n\tfor (const [at, bt] of pairs) {\n\t\tif (!at || !bt) {\n\t\t\tconst extra = at ?? bt;\n\t\t\tif (extra?.kind === \"param\" ? extra.parts[0].kind === \"splat\" : false) return at ? 1 : -1;\n\t\t\treturn at ? -1 : 1;\n\t\t}\n\t\tconst aw = segmentWeight(at);\n\t\tconst bw = segmentWeight(bt);\n\t\tif (aw !== bw) return bw - aw;\n\t}\n\treturn a.pathPattern.localeCompare(b.pathPattern);\n};\nvar nodePrefix = () => {\n\treturn {\n\t\tname: \"kosmojs:node-prefix\",\n\t\tenforce: \"pre\",\n\t\tresolveId(source) {\n\t\t\treturn builtinModules.includes(source) ? {\n\t\t\t\tid: `node:${source}`,\n\t\t\t\texternal: true\n\t\t\t} : void 0;\n\t\t}\n\t};\n};\nvar vitePlugins = { nodePrefix };\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/koa-generator\",\n\tversion: \"0.1.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\n\timports: { \"#templates/*\": \"./src/templates/*\" },\n\texports: {\n\t\t\".\": {\n\t\t\t\"types\": \"./pkg/index.d.ts\",\n\t\t\t\"default\": \"./pkg/index.js\"\n\t\t},\n\t\t\"./lib\": {\n\t\t\t\"types\": \"./pkg/lib.d.ts\",\n\t\t\t\"default\": \"./pkg/lib.js\"\n\t\t}\n\t},\n\tscripts: {\n\t\t\"build\": \"wsbuild src/index.ts src/lib.ts\",\n\t\t\"test\": \"vitest --root ../.. --project generators/koa-generator\"\n\t},\n\tdependencies: { \"crc\": \"^4.3.2\" },\n\tdevDependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@koa/router\": \"^15.4.0\",\n\t\t\"@types/formidable\": \"^3.5.1\",\n\t\t\"@types/koa\": \"^3.0.2\",\n\t\t\"@types/koa-compose\": \"^3.2.9\",\n\t\t\"cookie\": \"^1.1.1\",\n\t\t\"formidable\": \"^3.5.4\",\n\t\t\"koa\": \"^3.2.0\",\n\t\t\"koa-compose\": \"^4.1.0\",\n\t\t\"light-my-request\": \"^6.6.0\",\n\t\t\"path-to-regexp\": \"^8.4.2\",\n\t\t\"raw-body\": \"^3.0.2\"\n\t}\n};\n//#endregion\n//#region src/templates/lib/@api/app.ts?raw\nvar app_default$1 = \"import Koa from \\\"koa\\\";\\n\\nimport type { AppFactory } from \\\"@kosmojs/core/api\\\";\\n\\nimport type { DefaultContext, DefaultState } from \\\"../api\\\";\\n\\nexport type App = Koa<DefaultState, DefaultContext>;\\n\\nexport type AppOptions = ConstructorParameters<\\n typeof Koa<DefaultState, DefaultContext>\\n>[0];\\n\\nexport const appFactory: AppFactory<App, AppOptions> = (factory) => {\\n const createApp = (options?: AppOptions) => {\\n return new Koa(options);\\n };\\n return factory({ createApp });\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@api/bodyparser.ts?raw\nvar bodyparser_default = \"import zlib from \\\"node:zlib\\\";\\n\\nimport Formidable, { type Options as FormidableOptions } from \\\"formidable\\\";\\nimport rawParser from \\\"raw-body\\\";\\n\\nimport type { RequestBodyTarget } from \\\"@kosmojs/core\\\";\\n\\nimport type {\\n DefaultContext,\\n DefaultState,\\n ParameterizedContext,\\n} from \\\"../api\\\";\\n\\ntype JsonOptions = {\\n limit?: number;\\n};\\n\\n/**\\n * Controls whether parsed field values are unwrapped from arrays.\\n *\\n * By default, all field values are returned as arrays (formidable v3 behavior),\\n * since forms can submit multiple values under the same field name.\\n *\\n * - `false` (default) - no unwrapping, all values remain as arrays\\n * - `true` - unwrap all fields; single-element arrays become scalars\\n * - `{ only: string[] }` - unwrap only the specified fields\\n * - `{ except: string[] }` - unwrap all fields except the specified ones\\n *\\n * Fields with multiple values are always kept as arrays regardless of this option.\\n * If both `only` and `except` are provided, `only` takes precedence.\\n *\\n * @example\\n * // all fields unwrapped: { username: 'john', role: 'admin' }\\n * unwrap: true\\n *\\n * @example\\n * // keep tags as array: { username: 'john', tags: ['a', 'b'] }\\n * unwrap: { except: ['tags'] }\\n *\\n * @default false\\n * */\\ntype UnwrapControl =\\n | boolean\\n | {\\n // unwrap only these keys\\n only?: Array<string>;\\n // unwrap all keys xcept these ones\\n except?: Array<string>;\\n };\\n\\ntype FormOptions = Pick<FormidableOptions, \\\"encoding\\\" | \\\"maxFields\\\"> &\\n Partial<{\\n // alias for maxFieldsSize\\n limit: number;\\n unwrap: UnwrapControl | undefined;\\n }>;\\n\\ntype MultipartOptions = Omit<FormOptions, \\\"enabledPlugins\\\"> &\\n Partial<{\\n // alias for maxFieldsSize and maxFileSize\\n limit: number;\\n unwrap: UnwrapControl | undefined;\\n }>;\\n\\ntype RawOptions = Partial<{\\n /**\\n * The byte limit of the body.\\n * If the body ends up being larger than this limit, a 413 error code is returned.\\n * */\\n limit: number;\\n\\n /**\\n * The length of the stream.\\n * If the contents of the stream do not add up to this length,\\n * an 400 error code is returned\\n * */\\n length: number;\\n\\n /**\\n * The encoding to use to decode the body into a string.\\n * By default, a Buffer instance will be returned when no encoding is specified.\\n * utf-8 would decode as plain text.\\n * use any encoding supported by iconv-lite.\\n * */\\n encoding: string;\\n\\n /**\\n * zlib options\\n * */\\n chunkSize: number; // Default: 16 * 1024\\n}>;\\n\\nexport const defaults: {\\n json: JsonOptions;\\n form: FormOptions | MultipartOptions;\\n raw: RawOptions;\\n} = {\\n json: {\\n limit: 1024 ** 2,\\n },\\n form: {\\n limit: 1024 ** 2,\\n },\\n raw: {\\n limit: 1024 ** 2,\\n },\\n};\\n\\nexport type BodyparserOptions = {\\n json: JsonOptions;\\n form: FormOptions | MultipartOptions;\\n raw: RawOptions;\\n};\\n\\nconst unwrap = (\\n obj: Record<string, unknown | Array<unknown>>,\\n opt: UnwrapControl | undefined,\\n) => {\\n return Object.fromEntries(\\n Object.entries(obj).map(([k, v]) => {\\n if (!Array.isArray(v) || v.length > 1) {\\n return [k, v];\\n }\\n if (opt === undefined || opt === false) {\\n return [k, v];\\n }\\n if (opt === true) {\\n return [k, v[0]];\\n }\\n const { only, except } = opt as Exclude<UnwrapControl, boolean>;\\n if (only?.includes(k)) {\\n return [k, v[0]];\\n }\\n return [k, !except || except.includes(k) ? v : v[0]];\\n }),\\n );\\n};\\n\\nexport const bodyparsers: {\\n [T in RequestBodyTarget]: (\\n ctx: ParameterizedContext<\\n Record<string, string>,\\n DefaultState,\\n DefaultContext\\n >,\\n opt?: BodyparserOptions[T],\\n ) => Promise<unknown>;\\n} = {\\n async json(ctx, opt) {\\n const body = await bodyparsers.raw(ctx, {\\n ...opt,\\n encoding: \\\"utf-8\\\",\\n });\\n return body ? JSON.parse(body as never) : undefined;\\n },\\n\\n async form(ctx, opt) {\\n const form = Formidable({\\n maxFieldsSize: opt?.limit || defaults.form.limit,\\n maxFileSize: opt?.limit || defaults.form.limit,\\n ...opt,\\n });\\n return new Promise((resolve, reject) => {\\n form.parse(ctx.request.req, (err, fields, files) => {\\n if (err) {\\n return reject(err);\\n }\\n resolve(\\n unwrap(\\n // files should go last to override fields in case of name conflicting\\n { ...fields, ...files },\\n opt?.unwrap,\\n ),\\n );\\n });\\n });\\n },\\n\\n async raw(ctx, opt) {\\n const { chunkSize, ...rawParserOptions } = { ...defaults.raw, ...opt };\\n\\n const encoding = ctx.request.headers[\\\"content-encoding\\\"];\\n const compressed = encoding ? encoding !== \\\"identity\\\" : false;\\n\\n const stream = compressed\\n ? ctx.request.req.pipe(zlib.createUnzip({ chunkSize }))\\n : ctx.request.req;\\n\\n return rawParser(stream, rawParserOptions);\\n },\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@api/dev.ts?raw\nvar dev_default$1 = \"import type { DevSetup } from \\\"@kosmojs/core/api\\\";\\n\\nexport const devSetup = (setup: DevSetup) => setup;\\n\";\n//#endregion\n//#region src/templates/lib/@api/errors.ts?raw\nvar errors_default$1 = \"import type { ParameterizedMiddleware } from \\\"../api\\\";\\n\\nexport type ErrorHandlerFactory = (\\n h: ParameterizedMiddleware,\\n) => ParameterizedMiddleware;\\n\\nexport const errorHandlerFactory: ErrorHandlerFactory = (handler) => {\\n return handler;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@api/router.ts?raw\nvar router_default$1 = \"import KoaRouter, { type RouterMiddleware } from \\\"@koa/router\\\";\\nimport { parseCookie } from \\\"cookie\\\";\\nimport { match } from \\\"path-to-regexp\\\";\\n\\nimport type {\\n RequestBodyTarget,\\n RequestValidationTarget,\\n ValidationErrorEntry,\\n} from \\\"@kosmojs/core\\\";\\nimport {\\n type CreateRouteMiddleware,\\n createRoutes,\\n type HTTPMethod,\\n type RouterFactory,\\n StateKey,\\n} from \\\"@kosmojs/core/api\\\";\\nimport { ValidationError } from \\\"@kosmojs/core/errors\\\";\\n\\nimport {\\n type DefaultContext,\\n type DefaultState,\\n type ParameterizedContext,\\n type ParameterizedMiddleware,\\n use,\\n} from \\\"../api\\\";\\nimport { type BodyparserOptions, bodyparsers } from \\\"./bodyparser\\\";\\nimport { routeSources } from \\\"./routes\\\";\\n\\nimport globalMiddleware from \\\"{{ createImport 'api' 'use' }}\\\";\\n\\nexport type Router = import(\\\"@koa/router\\\").Router<DefaultState, DefaultContext>;\\nexport type RouterOptions = import(\\\"@koa/router\\\").RouterOptions;\\n\\n/**\\n * Create route-level middleware stack that handles:\\n * 1. Context extension - adds `ctx.bodyparser` (lazy, cached) and `ctx.validated` accessors\\n * 2. Params validation - normalizes and validates URL params (including splat/numeric params)\\n * 3. Request validation - validates query, headers, cookies, and body against schemas\\n * 4. Response validation - validates outgoing response against defined variants\\n *\\n * Middleware are assigned named slots (e.g. \\\"validate:params\\\", \\\"validate:json\\\")\\n * so they can be replaced by user-defined middleware in the stack.\\n *\\n * All validation errors are thrown as `ValidationError` instances,\\n * caught and formatted by the global error handler middleware upstream.\\n * */\\nexport const createRouteMiddleware: CreateRouteMiddleware<\\n ParameterizedMiddleware\\n> = ({ name, pathPattern, params, numericParams, validationSchemas }) => {\\n const pathMatcher = match(pathPattern);\\n\\n const matchPath = (path: string) => {\\n try {\\n return pathMatcher(path);\\n } catch (e) {\\n return undefined;\\n }\\n };\\n const validationMiddleware = [\\n /**\\n * Extends Koa context with:\\n *\\n * - `ctx.bodyparser[target](opts?)` - lazy, cached body parsers.\\n * Each parser (json, form, raw) runs at most once per request;\\n * subsequent calls return the cached result.\\n * This allows both user middleware/handlers and validators\\n * to call the same parser without re-consuming the request stream.\\n *\\n * - `ctx.validated` - getter that returns all validated data collected so far\\n * (params, query, headers, cookies, json etc.) as a plain object.\\n *\\n * Cache is stored on `ctx[StateKey]` (a Symbol-keyed Map) to keep it\\n * hidden from public API surface and serialization.\\n * */\\n use(\\n function useExtendContext(ctx, next) {\\n if (!ctx[StateKey]) {\\n // initialize per-request cache with empty params\\n // (later populated by useValidateParams)\\n ctx[StateKey] = new Map([[\\\"params\\\", {}]]);\\n Object.defineProperty(ctx, \\\"bodyparser\\\", {\\n value: Object.entries(bodyparsers).reduce<{\\n [T in RequestBodyTarget]?: (\\n opt?: BodyparserOptions[T],\\n ) => Promise<unknown>;\\n }>((map, entry) => {\\n const [target, parser] = entry as [RequestBodyTarget, Function];\\n map[target] = async (opt) => {\\n if (!ctx[StateKey].has(target)) {\\n ctx[StateKey].set(target, await parser(ctx, opt as never));\\n }\\n return ctx[StateKey].get(target);\\n };\\n return map;\\n }, {}),\\n enumerable: true,\\n });\\n Object.defineProperty(ctx, \\\"validated\\\", {\\n get() {\\n return Object.fromEntries(ctx[StateKey]);\\n },\\n enumerable: true,\\n });\\n }\\n return next();\\n },\\n { slot: \\\"extendContext\\\" },\\n ) as never,\\n\\n /**\\n * Normalize and validate URL params:\\n * - Splat params (e.g. `/files{/*path}`) are split into arrays by \\\"/\\\"\\n * - Numeric params are cast to Number (or array of Numbers for splat params)\\n * - Non-splat, non-numeric params pass through as strings\\n *\\n * Validated params are stored in the cache so `ctx.validated.params`\\n * reflects the normalized (and validated) values.\\n * */\\n use(\\n function useValidateParams(ctx, next) {\\n const matched = matchPath(ctx.path);\\n const normalizedParams = params.reduce(\\n (map: Record<string, unknown>, name) => {\\n const value = matched ? matched.params[name] : undefined;\\n if (Array.isArray(value)) {\\n map[name] = numericParams.includes(name)\\n ? value.map(Number)\\n : value;\\n } else if (value) {\\n map[name] = numericParams.includes(name) //\\n ? Number(value)\\n : value;\\n }\\n return map;\\n },\\n {},\\n );\\n validationSchemas.params?.validate(normalizedParams);\\n ctx[StateKey].set(\\\"params\\\", normalizedParams);\\n return next();\\n },\\n { slot: \\\"validate:params\\\" },\\n ) as never,\\n\\n /**\\n * Response validation - runs AFTER the handler (post-`next()`).\\n *\\n * Each response schema defines one or more variants, each with:\\n * - expected status code\\n * - optional content-type\\n * - optional body schema\\n *\\n * All variants are checked; if at least one passes, validation succeeds.\\n * If none pass, a ValidationError is thrown with collected errors from all variants.\\n *\\n * Activation rules:\\n * - In dev/test mode: runs unless `runtimeValidation` is explicitly `false`\\n * - In production: runs only if `runtimeValidation` is explicitly `true`\\n *\\n * Only attached to HTTP methods that have response schemas defined.\\n * */\\n use(\\n async function useValidateResponse(ctx, next) {\\n const variants = validationSchemas.response?.[ctx.method] || [];\\n\\n if (!Array.isArray(variants) || !variants.length) {\\n return next();\\n }\\n\\n // options are same for all variants\\n const { runtimeValidation, customErrors } = variants[0];\\n\\n if (KOSMO_PRODUCTION_BUILD) {\\n // skip if undefined or explicitly set to false\\n if (runtimeValidation === undefined || runtimeValidation === false) {\\n return next();\\n }\\n } else {\\n // skip only if explicitly set to false\\n if (runtimeValidation === false) {\\n return next();\\n }\\n }\\n\\n // run all downstream middleware (including the route handler)\\n // so ctx.status / ctx.type / ctx.body are set before we validate the response\\n await next();\\n\\n const response: {\\n status: number;\\n contentType: string | null;\\n body?: unknown;\\n } = {\\n status: ctx.status,\\n contentType: ctx.type,\\n };\\n\\n // Validate body only for JSON variants\\n if (variants.some((e) => e.contentType?.includes(\\\"json\\\"))) {\\n response.body = ctx.body;\\n }\\n\\n /**\\n * Returns an array of validator functions for a single response variant.\\n * Each validator checks one aspect (status, content-type, body)\\n * and returns an error entry or undefined if the check passes.\\n * */\\n const variantValidators: (\\n v: (typeof variants)[number],\\n ) => Array<(i: number) => ValidationErrorEntry | undefined> = (\\n schema,\\n ) => {\\n return [\\n (i) => {\\n return schema.status === response.status\\n ? undefined\\n : {\\n keyword: \\\"Status\\\",\\n path: `Variant #${i}`,\\n message: `expected: ${schema.status}; actual: ${response.status}`,\\n };\\n },\\n (i) => {\\n if (\\n !schema.contentType ||\\n schema.contentType === response.contentType\\n ) {\\n return undefined;\\n }\\n\\n return {\\n keyword: \\\"ContentType\\\",\\n path: `Variant #${i}`,\\n message: `expected: ${schema.contentType}; actual: ${response.contentType}`,\\n };\\n },\\n (i) => {\\n if (!schema.check || \\\"body\\\" in response === false) {\\n // no body schema or contentType is not JSON\\n return;\\n }\\n return schema.check(response.body)\\n ? undefined\\n : {\\n keyword: \\\"Body\\\",\\n path: `Variant #${i}`,\\n message: schema.errorMessage(response.body),\\n };\\n },\\n ];\\n };\\n\\n // collect errors across all variants; exit early if any variant passes\\n const errors: Array<ValidationErrorEntry> = [];\\n\\n for (const [i, variant] of variants.entries()) {\\n const variantErrors = variantValidators(variant).flatMap(\\n (validator) => {\\n const error = validator(i);\\n return error ? [error] : [];\\n },\\n );\\n if (!variantErrors.length) {\\n // variant fully matched - response is valid\\n return;\\n }\\n errors.push(...variantErrors);\\n }\\n\\n const errorMessage = `The response did not match any of the expected formats`;\\n const errorSummary = `${variants.length} variants checked, none valid`;\\n\\n // no variant passed validation\\n throw new ValidationError([\\n \\\"response\\\",\\n {\\n errors,\\n errorMessage: customErrors?.error || errorMessage,\\n errorSummary,\\n route: name,\\n data: response,\\n },\\n ]);\\n },\\n {\\n slot: \\\"validate:response\\\",\\n on: Object.keys(validationSchemas.response || {}) as Array<HTTPMethod>,\\n },\\n ) as never,\\n ];\\n\\n /**\\n * Request validation - dynamically creates one middleware per target\\n * (query, headers, cookies, json, form, raw).\\n *\\n * Each middleware:\\n * 1. Checks if a schema exists for the current HTTP method\\n * 2. Skips if `runtimeValidation` is explicitly disabled\\n * 3. Loads data via the appropriate source (ctx.query, ctx.headers, or ctx.bodyparser)\\n * 4. Validates via `schema.validate()` which throws on failure\\n *\\n * Body targets (json, form, raw) go through `ctx.bodyparser[target]()`,\\n * benefiting from the lazy parsing and caching set up by slot:extendContext middleware.\\n *\\n * All request validators are active on any HTTP method that has at least one\\n * schema defined across any target - this is intentionally broad to avoid\\n * silently skipping validation when methods overlap.\\n * */\\n const requestTargets: Record<\\n RequestValidationTarget,\\n (\\n ctx: ParameterizedContext<\\n Record<string, string>,\\n DefaultState,\\n DefaultContext\\n >,\\n ) => Promise<unknown>\\n > = {\\n query: async (ctx) => ctx.query,\\n headers: async (ctx) => ctx.headers,\\n cookies: async (ctx) => parseCookie(ctx.headers.cookie ?? \\\"\\\"),\\n json: async (ctx) => ctx.bodyparser.json(),\\n form: async (ctx) => ctx.bodyparser.form(),\\n raw: async (ctx) => ctx.bodyparser.raw(),\\n };\\n\\n const requestEntries = Object.entries(requestTargets) as Array<\\n [RequestValidationTarget, (typeof requestTargets)[RequestValidationTarget]]\\n >;\\n\\n for (const [target, loadData] of requestEntries) {\\n validationMiddleware.push(\\n use(\\n async (ctx, next) => {\\n const schema = {\\n ...validationSchemas[target]?.[ctx.method],\\n };\\n if (schema.validate && schema.runtimeValidation !== false) {\\n schema.validate(await loadData(ctx as never));\\n }\\n return next();\\n },\\n {\\n slot: `validate:${target}`,\\n // duplicates not an issue here\\n on: requestEntries.flatMap(([target]) => {\\n return Object.keys(\\n validationSchemas[target] || {},\\n ) as Array<HTTPMethod>;\\n }),\\n },\\n ) as never,\\n );\\n }\\n\\n return validationMiddleware;\\n};\\n\\nexport const routes = createRoutes<ParameterizedMiddleware, RouterMiddleware>(\\n routeSources,\\n {\\n globalMiddleware: globalMiddleware as never,\\n createRouteMiddleware,\\n },\\n);\\n\\nexport const routerFactory: RouterFactory<Router, RouterOptions> = (\\n factory,\\n) => {\\n const createRouter = (options?: RouterOptions): Router => {\\n return new KoaRouter(options);\\n };\\n return factory({ createRouter });\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@api/routes.hbs?raw\nvar routes_default = \"import { join } from \\\"node:path\\\";\\n\\nimport type { RouteSource } from \\\"@kosmojs/core/api\\\";\\n\\nimport { base, apiBase } from \\\"{{ createImport \\\"libCore\\\" }}\\\";\\n\\n{{#each routes}}\\nimport {{id}} from \\\"{{ createImport \\\"api\\\" file }}\\\";\\nimport { validationSchemas as {{id}}_schemas } from \\\"{{ createImport \\\"libApi\\\" name \\\"schemas\\\" }}\\\";\\n{{/each}}\\n\\n{{#each cascadingMiddleware}}\\nimport {{id}}, { type ExtendT as ExtendT{{id}} } from \\\"{{ createImport \\\"api\\\" file }}\\\";\\n{{/each}}\\n\\ntype Override<A, B> = Omit<A, keyof B> & B;\\n\\nexport type RouteMap = {\\n{{#each routes}}\\n \\\"{{name}}\\\": {\\n paramsDefaults: {{paramsDefaults .}},\\n paramsMappings: {{paramsMappings .}},\\n cascadingState: {{cascadingState .}},\\n },\\n{{/each}}\\n}\\n\\nexport const routeSources: Array<RouteSource<never>> = [\\n {{#each routes}}\\n {\\n name: \\\"{{name}}\\\",\\n {{#if fullpath}}\\n path: \\\"{{fullpath}}\\\",\\n pathPattern: \\\"{{fullpath}}\\\",\\n {{else}}\\n path: join(base, apiBase, \\\"{{path}}\\\"),\\n pathPattern: join(base, apiBase, \\\"{{pathPattern}}\\\"),\\n {{/if}}\\n file: \\\"{{file}}\\\",\\n cascadingMiddleware: [ {{#each cascadingMiddleware}}{{id}}, {{/each}}].flat() as Array<never>,\\n definitionItems: {{id}} as never,\\n params: [ {{#each params.schema}}\\\"{{name}}\\\", {{/each}}],\\n numericParams: [ {{#each numericParams}}\\\"{{.}}\\\", {{/each}}],\\n validationSchemas: {{id}}_schemas,\\n },\\n {{/each}}\\n] as const;\\n\";\n//#endregion\n//#region src/templates/lib/@api/server.ts?raw\nvar server_default$1 = \"import { chmod, unlink } from \\\"node:fs/promises\\\";\\nimport { parseArgs } from \\\"node:util\\\";\\n\\nimport type { ServerFactory } from \\\"@kosmojs/core/api\\\";\\n\\nimport type { App } from \\\"./app\\\";\\n\\nexport const serverFactory: ServerFactory<App> = (factory) => {\\n const { values } = parseArgs({\\n options: {\\n port: {\\n type: \\\"string\\\",\\n short: \\\"p\\\",\\n },\\n sock: {\\n type: \\\"string\\\",\\n short: \\\"s\\\",\\n },\\n },\\n });\\n\\n return factory({\\n async createServer(app, opt) {\\n const { port, sock, callback } = { ...values, ...opt };\\n\\n if (![port, sock].some((e) => e)) {\\n console.error(\\n \\\"Please provide either -p/--port number or -s/--sock path\\\",\\n );\\n process.exit(1);\\n }\\n\\n console.log(\\\"\\\\n ➜ Starting Server\\\", { port, sock });\\n\\n if (sock) {\\n await unlink(sock).catch((error) => {\\n if (error.code === \\\"ENOENT\\\") {\\n return;\\n }\\n console.error(error.message);\\n process.exit(1);\\n });\\n }\\n\\n const server = app.listen(port || sock, async () => {\\n if (sock) {\\n await chmod(sock, 0o777);\\n }\\n await callback?.();\\n console.log(\\\"\\\\n ➜ Server Started ✨\\\\n\\\");\\n });\\n\\n return server as never;\\n },\\n });\\n};\\n\\nprocess.on(\\\"unhandledRejection\\\", (reason) => {\\n console.error(\\\"💥 UNHANDLED REJECTION - This is likely caused by:\\\");\\n console.error(\\\" - Middleware not awaiting next()\\\");\\n console.error(\\\" - Middleware not returning next()\\\");\\n console.error(\\\"\\\");\\n console.error(\\\"Reason:\\\", reason);\\n console.error(\\\"\\\");\\n // In development, crash hard\\n if (process.env.NODE_ENV === \\\"development\\\") {\\n process.exit(1);\\n }\\n});\\n\";\n//#endregion\n//#region src/templates/lib/api.ts?raw\nvar api_default = \"import type { RouterContext } from \\\"@koa/router\\\";\\nimport type { Next } from \\\"koa\\\";\\n\\nimport type { ValidationDefmap, ValidationOptmap } from \\\"@kosmojs/core\\\";\\nimport {\\n use as createUse,\\n type ExtendContext,\\n type HandlerDefinition,\\n type HTTPMethod,\\n type MiddlewareDefinition,\\n type RouteDefinitionItem,\\n type UseOptions,\\n} from \\\"@kosmojs/core/api\\\";\\n\\nimport type { BodyparserOptions } from \\\"./@api/bodyparser\\\";\\nimport type { RouteMap } from \\\"./@api/routes\\\";\\n\\nexport interface DefaultState {}\\nexport interface DefaultContext {}\\n\\ntype ExtractBodies<R> = R extends [number, string, infer Body] ? Body : never;\\n\\ntype ValidatedResponseBodies<VDefs extends ValidationDefmap> = [\\n ExtractBodies<VDefs[\\\"response\\\"]>,\\n] extends [never]\\n ? unknown // No bodies extracted at all - fallback to unknown\\n : ExtractBodies<VDefs[\\\"response\\\"]>;\\n\\nexport type ParameterizedContext<\\n ParamsT,\\n StateT,\\n ContextT,\\n VDefs extends ValidationDefmap = {},\\n VOpts extends ValidationOptmap = {},\\n> = RouterContext<\\n DefaultState & StateT,\\n DefaultContext &\\n ContextT &\\n ExtendContext<ParamsT, VDefs, VOpts, BodyparserOptions>,\\n ValidatedResponseBodies<VDefs>\\n>;\\n\\nexport type ParameterizedMiddleware<\\n ParamsT = Record<string, string>,\\n StateT = Record<string, unknown>,\\n ContextT = Record<string, unknown>,\\n> = (\\n ctx: ParameterizedContext<ParamsT, StateT, ContextT>,\\n next: Next,\\n) => Promise<void> | void;\\n\\nexport type RouteHandler<\\n ParamsT,\\n StateT,\\n ContextT,\\n VDefs extends ValidationDefmap,\\n VOpts extends ValidationOptmap = {},\\n> = (\\n ctx: ParameterizedContext<ParamsT, StateT, ContextT, VDefs, VOpts>,\\n next: Next,\\n) => Promise<void> | void;\\n\\nexport type DefineRouteFactory<ParamsT, StateT, ContextT> = (\\n a: {\\n // INFO: The `use` helper intentionally does not accept validation types.\\n // Allowing these type parameters on `use` would be misleading,\\n // since middleware operates across multiple request methods with varying types.\\n use: (\\n middleware:\\n | ParameterizedMiddleware<ParamsT, StateT, ContextT>\\n | Array<ParameterizedMiddleware<ParamsT, StateT, ContextT>>,\\n options?: UseOptions,\\n ) => MiddlewareDefinition<\\n ParameterizedMiddleware<ParamsT, StateT, ContextT>\\n >;\\n } & {\\n [M in HTTPMethod]: <\\n VDefs extends ValidationDefmap,\\n VOpts extends ValidationOptmap = {},\\n >(\\n handler:\\n | RouteHandler<ParamsT, StateT, ContextT, VDefs, VOpts>\\n | Array<RouteHandler<ParamsT, StateT, ContextT, VDefs, VOpts>>,\\n ) => HandlerDefinition<ParameterizedMiddleware<ParamsT, StateT, ContextT>>;\\n },\\n) => Array<\\n RouteDefinitionItem<ParameterizedMiddleware<ParamsT, StateT, ContextT>>\\n>;\\n\\ntype ParamsMap<\\n Mappings extends Array<[string, unknown, boolean]>,\\n Refinements extends Array<unknown>,\\n> = {\\n [I in Extract<keyof Mappings, `${number}`> as Mappings[I] extends [\\n infer ParamName extends string,\\n ...Array<unknown>,\\n ]\\n ? ParamName\\n : never]: Mappings[I] extends [string, infer Default, true]\\n ? I extends keyof Refinements\\n ? Refinements[I]\\n : Default\\n : Mappings[I] extends [string, infer Default, false]\\n ? I extends keyof Refinements\\n ? Refinements[I] | undefined\\n : Default | undefined\\n : never;\\n};\\n\\nexport const use = <StateT = DefaultState>(\\n middleware:\\n | ParameterizedMiddleware<Record<string, string>, StateT>\\n | Array<ParameterizedMiddleware<Record<string, string>, StateT>>,\\n options?: UseOptions,\\n) => {\\n return createUse<ParameterizedMiddleware<Record<string, string>, StateT>>(\\n middleware,\\n options,\\n );\\n};\\n\\nexport const defineRoute: <\\n R extends keyof RouteMap,\\n ParamsD extends RouteMap[R][\\\"paramsDefaults\\\"] = RouteMap[R][\\\"paramsDefaults\\\"],\\n StateT extends object = object,\\n ContextT extends object = object,\\n>(\\n factory: DefineRouteFactory<\\n ParamsMap<RouteMap[R][\\\"paramsMappings\\\"], ParamsD>,\\n StateT & RouteMap[R][\\\"cascadingState\\\"],\\n ContextT\\n >,\\n) => Array<\\n RouteDefinitionItem<\\n ParameterizedMiddleware<\\n ParamsMap<RouteMap[R][\\\"paramsMappings\\\"], ParamsD>,\\n StateT & RouteMap[R][\\\"cascadingState\\\"],\\n ContextT\\n >\\n >\\n> = (factory) => {\\n const createHandler = <MiddlewareT>(method: HTTPMethod) => {\\n return (middleware: MiddlewareT | Array<MiddlewareT>) => {\\n return {\\n kind: \\\"handler\\\",\\n method,\\n middleware: [middleware].flat(),\\n };\\n };\\n };\\n return factory({\\n HEAD: createHandler(\\\"HEAD\\\") as never,\\n OPTIONS: createHandler(\\\"OPTIONS\\\") as never,\\n GET: createHandler(\\\"GET\\\") as never,\\n POST: createHandler(\\\"POST\\\") as never,\\n PUT: createHandler(\\\"PUT\\\") as never,\\n PATCH: createHandler(\\\"PATCH\\\") as never,\\n DELETE: createHandler(\\\"DELETE\\\") as never,\\n // route-specific `use`, contains types for current route\\n use: use as never,\\n });\\n};\\n\";\n//#endregion\n//#region src/templates/lib/api:factory.ts?raw\nvar api_factory_default = \"export * from \\\"./@api/app\\\";\\nexport * from \\\"./@api/dev\\\";\\nexport * from \\\"./@api/errors\\\";\\nexport * from \\\"./@api/router\\\";\\nexport * from \\\"./@api/routes\\\";\\nexport * from \\\"./@api/server\\\";\\n\";\n//#endregion\n//#region src/templates/src/app.ts?raw\nvar app_default = \"import router from \\\"./router\\\";\\n\\nimport { appFactory } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\n\\nexport default appFactory(({ createApp }) => {\\n const app = createApp();\\n\\n // NOTE: Routes should be added last, after any middleware\\n app.use(router.routes());\\n\\n return app;\\n});\\n\";\n//#endregion\n//#region src/templates/src/dev.ts?raw\nvar dev_default = \"import app from \\\"./app\\\";\\n\\nimport { devSetup } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\n\\nexport default devSetup({\\n requestHandler() {\\n return app.callback();\\n },\\n teardownHandler() {\\n // close db connections, server sockets etc.\\n },\\n});\\n\";\n//#endregion\n//#region src/templates/src/env.d.ts?raw\nvar env_d_default = \"export declare module \\\"{{ createImport 'libApi' }}\\\" {\\n interface DefaultState {}\\n interface DefaultContext {}\\n}\\n\";\n//#endregion\n//#region src/templates/src/errors.ts?raw\nvar errors_default = \"import { HTTPError, ValidationError } from \\\"@kosmojs/core/errors\\\";\\n\\nimport { errorHandlerFactory } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\n\\nexport default errorHandlerFactory(\\n async function defaultErrorHandler(ctx, next) {\\n try {\\n await next();\\n } catch (error: any) {\\n const [status, message] = Array.isArray(error)\\n ? error\\n : error instanceof HTTPError\\n ? [error.status, error.message]\\n : error instanceof ValidationError\\n ? [400, `${error.target}: ${error.errorMessage}`]\\n : [error.statusCode || 500, error.message];\\n\\n ctx.status = status;\\n\\n if (ctx.accepts(\\\"json\\\")) {\\n ctx.body = { error: message };\\n } else {\\n ctx.body = message;\\n }\\n }\\n },\\n);\\n\";\n//#endregion\n//#region src/templates/src/route/index.ts?raw\nvar route_default = \"import { defineRoute } from \\\"{{ createImport 'libApi' }}\\\";\\n\\nexport default defineRoute<\\\"{{route.name}}\\\">(({ GET }) => [\\n GET(async (ctx) => {\\n ctx.body = \\\"Automatically generated route\\\";\\n }),\\n]);\\n\";\n//#endregion\n//#region src/templates/src/route/use.ts?raw\nvar use_default$1 = \"import { use } from \\\"{{ createImport 'libApi' }}\\\";\\n\\nexport type ExtendT = {};\\n\\nexport default [\\n use<ExtendT>(async (ctx, next) => {\\n // Always `return next()` or `await next()`;\\n // ❗ Never call `next()` by itself!\\n return next();\\n }),\\n];\\n\";\n//#endregion\n//#region src/templates/src/router.ts?raw\nvar router_default = \"import { routerFactory, routes } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\n\\nexport default routerFactory(({ createRouter }) => {\\n const router = createRouter();\\n\\n for (const { name, path, methods, middleware } of routes) {\\n router.register(path, methods, middleware, { name });\\n }\\n\\n return router;\\n});\\n\";\n//#endregion\n//#region src/templates/src/server.ts?raw\nvar server_default = \"import app from \\\"./app\\\";\\n\\nimport { serverFactory } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\n\\nserverFactory(({ createServer }) => {\\n createServer(app);\\n});\\n\";\n//#endregion\n//#region src/templates/src/use.ts?raw\nvar use_default = \"import defaultErrorHandler from \\\"./errors\\\";\\n\\nimport { use } from \\\"{{ createImport 'libApi' }}\\\";\\n\\nexport default [\\n /**\\n * Define global middleware applied to all routes.\\n * Can be overridden on a per-route basis using the slot key.\\n * */\\n use(defaultErrorHandler, { slot: \\\"errorHandler\\\" }),\\n];\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((meta, sourceFolder, options) => {\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst cascadingState = (ids) => {\n\t\tif (ids.length === 0) return \"{}\";\n\t\tif (ids.length === 1) return ids[0];\n\t\treturn `Override<${ids[0]}, ${cascadingState(ids.slice(1))}>`;\n\t};\n\tconst { renderToFile: deployLibFile } = renderFactory({ helpers: {\n\t\t...createImportHelpers({ origin: \"lib\" }),\n\t\tparamsDefaults({ params }) {\n\t\t\treturn `[${params.schema.map(() => \"unknown?\").join(\", \")}]`;\n\t\t},\n\t\tparamsMappings({ params }) {\n\t\t\treturn `[${params.schema.map(({ name, kind }) => {\n\t\t\t\treturn `[\"${name}\", unknown, ${kind === \"required\" ? \"true\" : \"false\"}]`;\n\t\t\t}).join(\", \")}]`;\n\t\t},\n\t\tcascadingState({ cascadingMiddleware }) {\n\t\t\treturn cascadingState(cascadingMiddleware.map(({ id }) => `ExtendT${id}`));\n\t\t}\n\t} });\n\tconst { renderToFile: deploySrcFile } = renderFactory({ helpers: createImportHelpers({ origin: \"src\" }) });\n\tconst overwrite = (content) => content?.trim().length === 0;\n\tconst templateResolver = createTemplateResolver(options?.templates, route_default);\n\tconst generateSrcFiles = async (entries) => {\n\t\tfor (const { kind, entry } of entries) if (kind === \"apiRoute\") await deploySrcFile(createPath.api(entry.file), templateResolver(entry.name, entry), { route: entry }, { overwrite });\n\t\telse if (kind === \"apiUse\") await deploySrcFile(createPath.api(entry.file), use_default$1, {}, { overwrite });\n\t};\n\tconst generateLibFiles = async (entries) => {\n\t\tconst cascadingMiddleware = entries.flatMap(({ kind, entry }) => {\n\t\t\treturn kind === \"apiUse\" ? [entry] : [];\n\t\t});\n\t\tconst routesAndAliases = entries.flatMap(({ kind, entry }) => {\n\t\t\tif (kind !== \"apiRoute\") return [];\n\t\t\tconst pathVariations = entry.name.split(\"/\").reduce((acc, segment) => {\n\t\t\t\tconst prev = acc[acc.length - 1];\n\t\t\t\tacc.push(prev ? join(prev, segment) : segment);\n\t\t\t\treturn acc;\n\t\t\t}, []);\n\t\t\tconst baseRoute = {\n\t\t\t\t...entry,\n\t\t\t\tpath: entry.pathPattern,\n\t\t\t\tcascadingMiddleware: cascadingMiddleware.flatMap((e) => {\n\t\t\t\t\treturn pathVariations.some((path) => e.name === path) ? [e] : [];\n\t\t\t\t})\n\t\t\t};\n\t\t\treturn [baseRoute, ...Object.entries({ ...options?.alias }).flatMap(([url, routeName]) => {\n\t\t\t\tconst pathTokens = pathTokensFactory(url);\n\t\t\t\treturn routeName === entry.name ? [{\n\t\t\t\t\t...baseRoute,\n\t\t\t\t\tname: url,\n\t\t\t\t\tid: `${baseRoute.id}_${crc(url)}`,\n\t\t\t\t\tfullpath: createPathPattern(pathTokens),\n\t\t\t\t\tpathTokens\n\t\t\t\t}] : [];\n\t\t\t})];\n\t\t}).sort(sortRoutes);\n\t\tfor (const [file, template] of [[\"@api/routes.ts\", routes_default]]) await deployLibFile(createPath.lib(file), template, {\n\t\t\troutes: routesAndAliases,\n\t\t\tcascadingMiddleware\n\t\t});\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tasync start() {\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"api.ts\", api_default],\n\t\t\t\t[\"api:factory.ts\", api_factory_default],\n\t\t\t\t[\"@api/app.ts\", app_default$1],\n\t\t\t\t[\"@api/dev.ts\", dev_default$1],\n\t\t\t\t[\"@api/errors.ts\", errors_default$1],\n\t\t\t\t[\"@api/bodyparser.ts\", bodyparser_default],\n\t\t\t\t[\"@api/router.ts\", router_default$1],\n\t\t\t\t[\"@api/server.ts\", server_default$1]\n\t\t\t]) await deployLibFile(createPath.lib(file), template, {});\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"env.d.ts\", env_d_default],\n\t\t\t\t[\"app.ts\", app_default],\n\t\t\t\t[\"dev.ts\", dev_default],\n\t\t\t\t[\"errors.ts\", errors_default],\n\t\t\t\t[\"router.ts\", router_default],\n\t\t\t\t[\"server.ts\", server_default],\n\t\t\t\t[\"use.ts\", use_default]\n\t\t\t]) await deploySrcFile(createPath.api(file), template, {}, { overwrite });\n\t\t},\n\t\tasync watch(entries, event) {\n\t\t\tif (!event || event.kind === \"create\") await generateSrcFiles(entries);\n\t\t\tawait generateLibFiles(entries);\n\t\t},\n\t\tasync build(entries) {\n\t\t\tawait generateSrcFiles(entries);\n\t\t\tawait generateLibFiles(entries);\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator((options) => {\n\tconst meta = {\n\t\tname: \"Koa\",\n\t\tslot: \"api\",\n\t\tdependencies: {\n\t\t\tkoa: package_default.devDependencies.koa,\n\t\t\t\"@koa/router\": package_default.devDependencies[\"@koa/router\"],\n\t\t\t\"path-to-regexp\": package_default.devDependencies[\"path-to-regexp\"],\n\t\t\tcookie: package_default.devDependencies.cookie,\n\t\t\tformidable: package_default.devDependencies.formidable,\n\t\t\t\"raw-body\": package_default.devDependencies[\"raw-body\"]\n\t\t},\n\t\tdevDependencies: {\n\t\t\t\"@types/koa\": package_default.devDependencies[\"@types/koa\"],\n\t\t\t\"@types/formidable\": package_default.devDependencies[\"@types/formidable\"]\n\t\t},\n\t\ttypes: [\"@types/koa\"]\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tfactory: (sourceFolder) => factory_default(meta, sourceFolder, options),\n\t\tplugins: () => [vitePlugins.nodePrefix()]\n\t};\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { dirname, join, resolve } from \"node:path\";\nimport crc from \"crc/crc32\";\nimport \"tfusion\";\nimport \"ts-morph\";\nimport picomatch from \"picomatch\";\nimport { access, constants, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport handlebars from \"handlebars\";\nimport \"path-to-regexp\";\nimport \"mime-types\";\nimport \"@topcli/spinner\";\nimport createMdxPlugin from \"@mdx-js/rollup\";\nimport { createFilter } from \"vite\";\n//#region ../../packages/lib/pkg/index.js\nvar defaults$1 = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets$1 = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets$1 = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets$1,\n\t...RequestBodyTargets$1\n});\nvar defineGenerator = (f) => f;\nvar defineGeneratorFactory = (f) => f;\nvar createTemplateResolver = (customTemplates, defaultTemplate) => {\n\tconst templates = Object.entries({ ...customTemplates }).map(([pattern, template]) => [picomatch(pattern), template]);\n\treturn (pattern, entry) => {\n\t\tconst match = templates.find(([isMatch]) => isMatch(pattern));\n\t\tif (!match) return defaultTemplate;\n\t\treturn typeof match[1] === \"function\" ? match[1](entry) : match[1];\n\t};\n};\nvar pathResolver = (sourceFolder) => {\n\tconst createPath = (...a) => {\n\t\treturn sourceFolder.root ? resolve(sourceFolder.root, join(...a)) : join(...a);\n\t};\n\tconst createImport = {\n\t\tsrc(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults$1.srcPrefix, ...a) : join(defaults$1.appPrefix, defaults$1.srcDir, sourceFolder.name, ...a);\n\t\t},\n\t\tapi(a, o) {\n\t\t\treturn this.src([defaults$1.apiDir, ...a], o);\n\t\t},\n\t\tpages(a, o) {\n\t\t\treturn this.src([defaults$1.pagesDir, ...a], o);\n\t\t},\n\t\tlib(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults$1.libPrefix, ...a) : join(defaults$1.appPrefix, defaults$1.libDir, sourceFolder.name, ...a);\n\t\t},\n\t\tlibCore(a, o) {\n\t\t\treturn this.lib([\"core\", ...a], o);\n\t\t},\n\t\tlibApi(a, o) {\n\t\t\treturn this.lib([defaults$1.apiDir, ...a], o);\n\t\t},\n\t\tlibEntry(a, o) {\n\t\t\treturn this.lib([defaults$1.entryDir, ...a], o);\n\t\t}\n\t};\n\treturn {\n\t\tcreatePath: {\n\t\t\tsrc(...a) {\n\t\t\t\treturn createPath(defaults$1.srcDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tapi(...a) {\n\t\t\t\treturn this.src(defaults$1.apiDir, ...a);\n\t\t\t},\n\t\t\tpages(...a) {\n\t\t\t\treturn this.src(defaults$1.pagesDir, ...a);\n\t\t\t},\n\t\t\tentry(...a) {\n\t\t\t\treturn this.src(defaults$1.entryDir, ...a);\n\t\t\t},\n\t\t\tlib(...a) {\n\t\t\t\treturn createPath(defaults$1.libDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tlibCore(...a) {\n\t\t\t\treturn this.lib(\"core\", ...a);\n\t\t\t},\n\t\t\tlibApi(...a) {\n\t\t\t\treturn this.lib(defaults$1.apiDir, ...a);\n\t\t\t},\n\t\t\tlibEntry(...a) {\n\t\t\t\treturn this.lib(defaults$1.entryDir, ...a);\n\t\t\t},\n\t\t\tlibPages(...a) {\n\t\t\t\treturn this.lib(defaults$1.pagesDir, ...a);\n\t\t\t},\n\t\t\tdistDir(...a) {\n\t\t\t\treturn createPath(sourceFolder.distDir, sourceFolder.name, ...a);\n\t\t\t}\n\t\t},\n\t\tcreateImport,\n\t\tcreateImportHelpers(o) {\n\t\t\tif (![\"src\", \"lib\"].includes(o?.origin)) throw new Error(`createImportHelpers: required exactly one argument of shape { origin: \"src|lib\" }`);\n\t\t\treturn { createImport(key, ...a) {\n\t\t\t\treturn createImport[key](a.slice(0, -1), o);\n\t\t\t} };\n\t\t}\n\t};\n};\nvar pathExists = async (path) => {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\nvar render = (template, context, options) => {\n\tconst { noEscape = true, renderer = handlebars } = { ...options };\n\treturn renderer.compile(template, { noEscape })(context);\n};\nvar renderToFile = async (file, template, context, options) => {\n\tconst content = render(template, context, options);\n\t/**\n\t* Two fs calls (exists + read) are worth it to avoid touching the file\n\t* and triggering watchers unnecessarily.\n\t* */\n\tif (await pathExists(file)) {\n\t\tconst { overwrite = true } = { ...options };\n\t\tif (overwrite === false) return;\n\t\tconst fileContent = await readFile(file, \"utf8\");\n\t\tif (typeof overwrite === \"function\" && !overwrite(fileContent)) return;\n\t\tif (crc(content) === crc(fileContent)) return;\n\t}\n\tawait mkdir(dirname(file), { recursive: true });\n\tawait writeFile(file, content, \"utf8\");\n};\nvar renderFactory = (options) => {\n\tconst createRenderer = (selfOoptions) => {\n\t\tconst renderer = handlebars.create();\n\t\trenderer.registerPartial({\n\t\t\t...options?.partials,\n\t\t\t...selfOoptions?.partials\n\t\t});\n\t\trenderer.registerHelper({\n\t\t\t...options?.helpers,\n\t\t\t...selfOoptions?.helpers\n\t\t});\n\t\treturn renderer;\n\t};\n\treturn {\n\t\trender(template, context, selfOoptions) {\n\t\t\treturn render(template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t},\n\t\tasync renderToFile(file, template, context, selfOoptions) {\n\t\t\treturn renderToFile(options?.outdir ? join(options.outdir, file) : file, template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t}\n\t};\n};\n`${defaults$1.apiDir}`, `${defaults$1.apiDir}`, `${defaults$1.pagesDir}`, `${defaults$1.pagesDir}`;\n/**\n* Weight of a single path segment.\n*\n* Fixed values per kind prevent complex mixed segments\n* from outscoring multiple statics.\n*\n* static: 4 (exact match, most specific)\n* mixed: 3+ (static + param parts; more statics = slightly higher)\n* required: 2 (matches any single segment)\n* optional: 1 (may or may not match)\n* splat: 0 (matches anything, least specific)\n* */\nvar segmentWeight = (token) => {\n\tif (token.kind === \"static\") return 4;\n\tif (token.kind === \"mixed\") {\n\t\tlet statics = 0;\n\t\tlet optionals = 0;\n\t\tfor (const part of token.parts) if (part.type === \"static\") statics += 1;\n\t\telse if (part.kind === \"optional\" || part.kind === \"splat\") optionals += 1;\n\t\treturn 3 + statics * .01 - optionals * .005;\n\t}\n\tswitch (token.parts[0].kind) {\n\t\tcase \"required\": return 2;\n\t\tcase \"optional\": return 1;\n\t\tcase \"splat\": return 0;\n\t}\n};\n/**\n* Compare two route entries for registration order.\n*\n* More specific routes sort first (higher priority).\n* Segments are compared left-to-right; first difference wins.\n*\n* When one route is a prefix of the other, the trailing segment\n* determines order: a trailing splat loses (shorter sibling first),\n* anything else wins (longer route is more specific).\n*\n* At equal weight and length, lexicographic tiebreak ensures\n* deterministic ordering across JS engines.\n* */\nvar sortRoutes = (a, b) => {\n\tconst pairs = Array.from({ length: Math.max(a.pathTokens.length, b.pathTokens.length) }, (_, i) => [a.pathTokens[i], b.pathTokens[i]]);\n\tfor (const [at, bt] of pairs) {\n\t\tif (!at || !bt) {\n\t\t\tconst extra = at ?? bt;\n\t\t\tif (extra?.kind === \"param\" ? extra.parts[0].kind === \"splat\" : false) return at ? 1 : -1;\n\t\t\treturn at ? -1 : 1;\n\t\t}\n\t\tconst aw = segmentWeight(at);\n\t\tconst bw = segmentWeight(bt);\n\t\tif (aw !== bw) return bw - aw;\n\t}\n\treturn a.pathPattern.localeCompare(b.pathPattern);\n};\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/mdx-generator\",\n\tversion: \"0.1.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\n\timports: { \"#templates/*\": \"./src/templates/*\" },\n\texports: { \".\": {\n\t\t\"types\": \"./pkg/index.d.ts\",\n\t\t\"default\": \"./pkg/index.js\"\n\t} },\n\tscripts: { \"build\": \"wsbuild src/index.ts\" },\n\tdependencies: {\n\t\t\"@mdx-js/rollup\": \"^3.1.1\",\n\t\t\"vite\": \"^8.0.10\"\n\t},\n\tdevDependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@mdx-js/mdx\": \"^3.1.1\",\n\t\t\"@mdx-js/preact\": \"^3.1.1\",\n\t\t\"path-to-regexp\": \"^8.4.2\",\n\t\t\"preact\": \"^10.29.1\",\n\t\t\"preact-render-to-string\": \"^6.6.7\",\n\t\t\"remark-frontmatter\": \"^5.0.0\",\n\t\t\"remark-mdx-frontmatter\": \"^5.2.0\"\n\t}\n};\n//#endregion\n//#region ../../packages/core/pkg/index.js\nvar defaults = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets,\n\t...RequestBodyTargets\n});\n//#endregion\n//#region ../../packages/core/pkg/generators/index.js\nvar routeRenderHelpers = () => {\n\treturn {\n\t\tpageLinkBase({ name, pathPattern, params }) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tname,\n\t\t\t\tpathPattern,\n\t\t\t\tparams\n\t\t\t});\n\t\t},\n\t\tserializeParamsTupleElements: (route) => {\n\t\t\treturn route.params.schema.map((p, i) => {\n\t\t\t\tif (p.kind === \"splat\") {\n\t\t\t\t\tconst suffix = route.params.schema[i + 1] ? \"\" : \"?\";\n\t\t\t\t\treturn `${p.const + suffix}: Array<string | number>`;\n\t\t\t\t}\n\t\t\t\treturn p.kind === \"optional\" ? `${p.const}?: string | number` : `${p.const}: string | number`;\n\t\t\t}).join(\", \");\n\t\t},\n\t\tserializeParamsLiteral(route) {\n\t\t\treturn `{ ${route.params.schema.map((e) => {\n\t\t\t\treturn [[e.name, e.kind === \"required\" ? \"\" : \"?\"].join(\"\"), e.kind === \"splat\" ? \"Array<string>\" : \"string\"].join(\": \");\n\t\t\t}).join(\"; \")} }`;\n\t\t}\n\t};\n};\n//#endregion\n//#region src/base.ts\nvar randomCongratMessage = () => {\n\tconst messages = [\n\t\t\"🎉 Well done! You just created a new MDX page.\",\n\t\t\"🚀 Success! A fresh MDX page is ready to roll.\",\n\t\t\"🌟 Nice work! Another MDX page added to your site.\",\n\t\t\"🧩 All set! A new MDX page has been scaffolded.\",\n\t\t\"🔧 Scaffold complete! Your new MDX page is in place.\",\n\t\t\"✅ Built! Your MDX page is scaffolded and ready.\",\n\t\t\"✨ Fantastic! Your new MDX page is good to go.\",\n\t\t\"🎯 Nailed it! A brand new MDX page just landed.\",\n\t\t\"💫 Awesome! Another MDX page joins the party.\",\n\t\t\"⚡ Lightning fast! A new MDX page created successfully.\"\n\t];\n\treturn messages[Math.floor(Math.random() * messages.length)];\n};\n//#endregion\n//#region src/templates/lib/entry/client.hbs?raw\nvar client_default$1 = \"import { clientRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { createRoute } from \\\"../mdx\\\";\\n\\n{{#each pageRoutes}}\\nconst {{id}} = () => import(\\\"{{ createImport \\\"pages\\\" file }}\\\");\\n{{/each}}\\n\\n// layouts loaded synchronously\\n{{#each layouts}}\\nimport * as {{id}} from \\\"{{ createImport \\\"pages\\\" file }}\\\";\\n{{/each}}\\n\\nexport const createRoutes = () => {\\n return [\\n {{#each pageRoutes}}\\n createRoute(\\\"{{name}}\\\", \\\"{{pathPattern}}\\\", {{id}}, [\\n {{#each layouts}}{{id}}.default, {{/each}}\\n ]),\\n {{/each}}\\n ];\\n};\\n\\nexport default clientRenderFactory(import.meta.env.SSR);\\n\";\n//#endregion\n//#region src/templates/lib/entry/server.hbs?raw\nvar server_default$1 = \"import { serverRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { createRoute } from \\\"../mdx\\\";\\n\\n{{#each pageRoutes}}\\nimport * as {{id}} from \\\"{{ createImport \\\"pages\\\" file }}\\\";\\n{{/each}}\\n{{#each layouts}}\\nimport * as {{id}} from \\\"{{ createImport \\\"pages\\\" file }}\\\";\\n{{/each}}\\n\\nexport const createRoutes = () => {\\n return [\\n {{#each pageRoutes}}\\n createRoute(\\\"{{name}}\\\", \\\"{{pathPattern}}\\\", async () => {{id}}, [\\n {{#each layouts}}{{id}}.default, {{/each}}\\n ]),\\n {{/each}}\\n ];\\n};\\n\\nexport default serverRenderFactory();\\n\";\n//#endregion\n//#region src/templates/lib/env.d.ts?raw\nvar env_d_default = \"declare module \\\"*.mdx\\\" {\\n import type { ComponentType } from \\\"preact\\\";\\n export const frontmatter: Record<string, unknown>;\\n const component: ComponentType;\\n export default component;\\n}\\n\\ndeclare module \\\"*.md\\\" {\\n import type { ComponentType } from \\\"preact\\\";\\n export const frontmatter: Record<string, unknown>;\\n const component: ComponentType;\\n export default component;\\n}\\n\";\n//#endregion\n//#region src/templates/lib/mdx.ts?raw\nvar mdx_default$1 = \"import { MDXProvider } from \\\"@mdx-js/preact\\\";\\nimport { match, pathToRegexp } from \\\"path-to-regexp\\\";\\nimport { type ComponentType, createContext, h, type VNode } from \\\"preact\\\";\\n\\nimport { base } from \\\"{{ createImport 'libCore' }}\\\";\\nimport * as NotFound from \\\"{{ createImport 'pages' '404.mdx' }}\\\";\\n\\nexport type RawRoute = {\\n name: string;\\n pathSegments: number | undefined;\\n regexp: RegExp;\\n extractParams: (path: string) => Route[\\\"params\\\"];\\n source: RouteComponent | (() => Promise<RouteComponent>);\\n layouts: Array<ComponentType>;\\n};\\n\\ntype RouteComponent = {\\n default: ComponentType;\\n frontmatter: Route[\\\"frontmatter\\\"];\\n};\\n\\ntype Route = {\\n name: string;\\n params: Record<string, string | Array<string>>;\\n frontmatter: Record<string, unknown>;\\n};\\n\\nexport const RouterContext = createContext<Route>({\\n name: \\\"\\\",\\n params: {},\\n frontmatter: {},\\n});\\n\\nexport const RouterProvider = RouterContext.Provider;\\n\\nexport type RouterInstance = {\\n component: VNode<{ value: Route }>;\\n frontmatter: Route[\\\"frontmatter\\\"];\\n};\\n\\nexport const createRouter = (\\n routes: Array<RawRoute>,\\n app: ComponentType,\\n opt: { components?: Record<string, ComponentType<any>> },\\n) => {\\n const catchallRoute = createRoute(\\\"NotFound\\\", \\\"\\\", NotFound, []);\\n return {\\n async resolve(url: URL = new URL(window.location.href)) {\\n const urlSegments = url.pathname.split(\\\"/\\\").filter(Boolean).length;\\n\\n // 1: use lightweight `RegExp.test()` on linear scan - no capture allocation\\n const matchedRoutes = routes.filter(({ regexp }) => {\\n return regexp.test(url.pathname);\\n });\\n\\n const matchedRoute =\\n matchedRoutes.length > 1\\n ? matchedRoutes.find(({ pathSegments }) => {\\n return pathSegments === undefined || pathSegments === urlSegments;\\n })\\n : matchedRoutes[0];\\n\\n // 2: capture params only on matched route\\n const params = matchedRoute\\n ? matchedRoute.extractParams(url.pathname)\\n : {};\\n\\n const route = matchedRoute || catchallRoute;\\n\\n const { name, layouts = [] } = route;\\n\\n const page =\\n typeof route.source === \\\"function\\\"\\n ? await route.source()\\n : route.source;\\n\\n const { frontmatter = {} } = page;\\n\\n const content = [app, ...layouts].reduce(\\n (children, layout) => h(layout, { frontmatter, children } as never),\\n h(page.default, {}),\\n );\\n\\n return {\\n component: h(\\n RouterProvider,\\n {\\n value: {\\n name,\\n params,\\n frontmatter,\\n },\\n },\\n h(MDXProvider, opt, content),\\n ),\\n frontmatter,\\n };\\n },\\n };\\n};\\n\\nexport const createRoute = (\\n name: string,\\n pathPattern: string,\\n source: RawRoute[\\\"source\\\"],\\n layouts: RawRoute[\\\"layouts\\\"],\\n): RawRoute => {\\n const path = `${base}/${pathPattern}`.replace(/\\\\/+/g, \\\"/\\\");\\n\\n const { regexp } = pathToRegexp(path, { sensitive: true });\\n const matcher = match<Route[\\\"params\\\"]>(path);\\n\\n return {\\n name,\\n regexp,\\n pathSegments: name.includes(\\\"...\\\")\\n ? undefined\\n : name.replace(/^index\\\\/?/, \\\"\\\").split(\\\"/\\\").length,\\n extractParams: (path) => {\\n const match = matcher(path);\\n return match ? match.params : {};\\n },\\n source,\\n layouts,\\n };\\n};\\n\\nexport const renderHead = (frontmatter: Route[\\\"frontmatter\\\"] | undefined) => {\\n const tags: Array<string> = [];\\n\\n if (typeof frontmatter?.title === \\\"string\\\") {\\n tags.push(`<title>${frontmatter.title}</title>`);\\n }\\n\\n if (typeof frontmatter?.description === \\\"string\\\") {\\n tags.push(`<meta name=\\\"description\\\" content=\\\"${frontmatter.description}\\\">`);\\n }\\n\\n if (Array.isArray(frontmatter?.head)) {\\n for (const [tag, attrs] of frontmatter.head) {\\n const attrStr = Object.entries(attrs)\\n .map(([k, v]) => `${k}=\\\"${v}\\\"`)\\n .join(\\\" \\\");\\n tags.push(`<${tag} ${attrStr}>`);\\n }\\n }\\n\\n return tags.join(\\\"\\\\n\\\");\\n};\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/404.hbs?raw\nvar _404_default$1 = \"/* @jsxImportSource preact */\\n\\nimport styles from \\\"./styles.module.css\\\";\\n\\nexport default function PageSample(props: {\\n headline?: string;\\n}) {\\n return (\\n <div class={styles.container}>\\n <div class={styles.card}>\\n\\n <h2 class={styles.title}>\\n {props.headline || \\\"404: Not Found\\\"}\\n </h2>\\n <br />\\n\\n <div class={styles.stepsBox}>\\n <h2 class={styles.stepsTitle}>\\n Something went wrong...\\n </h2>\\n 🚧 No page found here\\n </div>\\n\\n <div class={styles.footer}>\\n <p class={styles.footerText}>\\n Built for reliability and developer experience\\n </p>\\n <br />\\n <a\\n href=\\\"https://kosmojs.dev/\\\"\\n class={styles.docsLink}\\n target=\\\"_blank\\\"\\n rel=\\\"noopener noreferrer\\\"\\n >\\n KosmoJS Documentation ➜\\n </a>\\n </div>\\n </div>\\n </div>\\n );\\n}\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/page.hbs?raw\nvar page_default$1 = \"/* @jsxImportSource preact */\\n\\nimport styles from \\\"./styles.module.css\\\";\\n\\nexport default function PageSample(props: {\\n message: string;\\n routeName: string;\\n pathMap: { page: string; pages: string; api: string }\\n}) {\\n return (\\n <div data-page-route={props.routeName} class={styles.container}>\\n <div class={styles.card}>\\n\\n <h2 class={styles.subtitle}>\\n {props.message}\\n </h2>\\n <br />\\n\\n <div class={styles.stepsBox}>\\n <ul class={styles.stepsList}>\\n <li>\\n Edit this page at <code>{props.pathMap.page}</code>\\n </li>\\n <li>\\n Create new pages by adding folders in\\n <code>{props.pathMap.pages}/</code>\\n </li>\\n <li>\\n Add API endpoints in\\n <code>{props.pathMap.api}/</code>\\n </li>\\n </ul>\\n </div>\\n\\n <div class={styles.footer}>\\n <p class={styles.footerText}>\\n Built for reliability and developer experience\\n </p>\\n <br />\\n <a\\n href=\\\"https://kosmojs.dev/\\\"\\n class={styles.docsLink}\\n target=\\\"_blank\\\"\\n rel=\\\"noopener noreferrer\\\"\\n >\\n KosmoJS Documentation ➜\\n </a>\\n </div>\\n </div>\\n </div>\\n );\\n}\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/styles.css?raw\nvar styles_default = \"* {\\n margin: 0;\\n padding: 0;\\n box-sizing: border-box;\\n}\\n\\n.container {\\n min-height: 100vh;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\\n font-family:\\n -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\",\\n Arial, sans-serif;\\n padding: 2rem;\\n}\\n\\n.card {\\n background: white;\\n border-radius: 1rem;\\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\\n max-width: 48rem;\\n padding: 3rem;\\n}\\n\\n.header {\\n text-align: center;\\n margin-bottom: 2rem;\\n}\\n\\n.icon {\\n font-size: 2rem;\\n margin-bottom: 1rem;\\n}\\n\\n.title {\\n font-size: 2.5rem;\\n font-weight: 700;\\n color: #4a5568;\\n margin-bottom: 0.5rem;\\n}\\n\\n.subtitle {\\n font-size: 1.125rem;\\n color: #718096;\\n}\\n\\n.featuresBox {\\n background: #f7fafc;\\n border-radius: 0.5rem;\\n padding: 1.5rem;\\n margin-bottom: 2rem;\\n}\\n\\n.featuresTitle {\\n font-size: 1.125rem;\\n font-weight: 600;\\n color: #4a5568;\\n margin-bottom: 1rem;\\n display: flex;\\n align-items: center;\\n gap: 0.5rem;\\n}\\n\\n.featuresSubtitle {\\n color: #667eea;\\n font-weight: 600;\\n margin-bottom: 0.5rem;\\n}\\n\\n.featuresList {\\n list-style: none;\\n display: flex;\\n flex-direction: column;\\n gap: 0.75rem;\\n}\\n\\n.featureItem {\\n display: flex;\\n align-items: center;\\n gap: 0.5rem;\\n color: #4a5568;\\n}\\n\\n.featureBullet {\\n color: #48bb78;\\n}\\n\\n.stepsBox {\\n border-left: 4px solid #667eea;\\n padding-left: 1rem;\\n margin-bottom: 2rem;\\n}\\n\\n.stepsTitle {\\n font-size: 1.125rem;\\n font-weight: 600;\\n color: #4a5568;\\n margin-bottom: 0.5rem;\\n}\\n\\n.stepsList {\\n color: #4a5568;\\n padding-left: 1.25rem;\\n line-height: 1.75;\\n}\\n\\n.stepsList code {\\n background: #edf2f7;\\n padding: 0.125rem 0.375rem;\\n border-radius: 0.25rem;\\n font-family: Monaco, Consolas, monospace;\\n font-size: 0.875rem;\\n}\\n\\n.footer {\\n text-align: center;\\n padding-top: 1.5rem;\\n border-top: 1px solid #e2e8f0;\\n}\\n\\n.footerText {\\n color: #718096;\\n font-size: 0.875rem;\\n}\\n\\n.docsLink {\\n color: #667eea;\\n text-decoration: none;\\n font-weight: 600;\\n display: inline-flex;\\n align-items: center;\\n gap: 0.25rem;\\n}\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/welcome.hbs?raw\nvar welcome_default$1 = \"/* @jsxImportSource preact */\\n\\nimport styles from \\\"./styles.module.css\\\";\\n\\nexport default function WelcomePage() {\\n return (\\n <div class={styles.container}>\\n <div class={styles.card}>\\n <div class={styles.header}>\\n <div class={styles.icon}>✨</div>\\n <h1 class={styles.title}>Welcome to KosmoJS</h1>\\n <p class={styles.subtitle}>\\n Content-first development with MDX and Vite\\n </p>\\n </div>\\n\\n <div class={styles.featuresBox}>\\n <h2 class={styles.featuresTitle}>\\n Powered by MDX and ready to publish\\n </h2>\\n <div class={styles.featuresSubtitle}>What's included:</div>\\n <ul class={styles.featuresList}>\\n <li class={styles.featureItem}>\\n <span class={styles.featureBullet}>🔹</span>\\n Directory-based routing\\n </li>\\n <li class={styles.featureItem}>\\n <span class={styles.featureBullet}>🔹</span>\\n MDX content with Preact components\\n </li>\\n <li class={styles.featureItem}>\\n <span class={styles.featureBullet}>🔹</span>\\n Nested layouts and frontmatter\\n </li>\\n </ul>\\n </div>\\n\\n <div class={styles.stepsBox}>\\n <h2 class={styles.stepsTitle}>Next Steps 🢂</h2>\\n <ul class={styles.stepsList}>\\n <li>\\n Edit this page at <code>pages/index/index.mdx</code>\\n </li>\\n <li>Create new pages by adding folders in <code>pages/</code></li>\\n <li>Add API endpoints in <code>api/</code></li>\\n </ul>\\n </div>\\n\\n <div class={styles.footer}>\\n <p class={styles.footerText}>\\n Built for reliability and developer experience\\n </p>\\n <br />\\n <a\\n href=\\\"https://kosmojs.dev/\\\"\\n class={styles.docsLink}\\n target=\\\"_blank\\\"\\n rel=\\\"noopener noreferrer\\\"\\n >\\n Read the documentation ➜\\n </a>\\n </div>\\n </div>\\n </div>\\n );\\n}\\n\";\n//#endregion\n//#region src/templates/lib/router.hbs?raw\nvar router_default$1 = \"import { createRouterFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport type { RawRoute, RouterInstance } from \\\"./mdx\\\";\\n\\nexport type ParamsMap = {\\n {{#each pageRoutes}}\\n \\\"{{name}}\\\": {{serializeParamsLiteral .}};\\n {{/each}}\\n};\\n\\nexport default createRouterFactory<RawRoute, RouterInstance>();\\n\";\n//#endregion\n//#region src/templates/lib/ssg.ts?raw\nvar ssg_default = \"import { join } from \\\"node:path\\\";\\n\\nimport { compile } from \\\"path-to-regexp\\\";\\n\\nimport type { PageRoute } from \\\"@kosmojs/core\\\";\\n\\nimport routes from \\\"{{ createImport 'lib' 'ssg:routes' }}\\\";\\nimport { base } from \\\"{{ createImport 'libCore' }}\\\";\\n\\nconst paramsMapper = (params: PageRoute[\\\"params\\\"], value: Array<unknown>) => {\\n return params.schema.reduce<Record<string, unknown>>(\\n (map, { name, kind }, i) => {\\n if (kind === \\\"splat\\\") {\\n if (Array.isArray(value[i]) && value[i].length) {\\n map[name] = value[i].map(String);\\n }\\n } else if (value[i] !== undefined) {\\n map[name] = String(value[i]);\\n }\\n return map;\\n },\\n {},\\n );\\n};\\n\\nexport default Object.entries(routes)\\n .flatMap(([name, { pathPattern, params, frontmatter }]) => {\\n if (!params.schema.length || Array.isArray(frontmatter?.staticParams)) {\\n if (params.schema.length) {\\n const toPath = compile(pathPattern);\\n return Array.from(frontmatter?.staticParams || []).flatMap((entry) => {\\n try {\\n return [toPath(paramsMapper(params, entry) as never)];\\n } catch (error: any) {\\n console.error(`❗SSG: Failed building path for ${name}`);\\n console.error(error);\\n return [];\\n }\\n });\\n }\\n // static route\\n return [pathPattern.replace(/^index\\\\/?/, \\\"\\\")];\\n }\\n return [];\\n })\\n .map((path) => join(base, path));\\n\";\n//#endregion\n//#region src/templates/lib/ssg:routes.hbs?raw\nvar ssg_routes_default = \"import type { PageRoute } from \\\"@kosmojs/core\\\";\\n\\n{{#each pageRoutes}}\\nimport * as {{id}} from \\\"{{ createImport \\\"pages\\\" file }}\\\";\\n{{/each}}\\n\\nconst routeMap: Record<\\n string,\\n {\\n frontmatter?: { staticParams?: Array<Array<string | Array<string>>> };\\n pathPattern: string;\\n params: PageRoute[\\\"params\\\"];\\n }\\n> = {\\n{{#each pageRoutes}}\\n \\\"{{name}}\\\": {\\n frontmatter: {{id}}.frontmatter,\\n pathPattern: \\\"{{pathPattern}}\\\",\\n params: {{serializeParams .}},\\n },\\n{{/each}}\\n}\\n\\nexport default routeMap;\\n\";\n//#endregion\n//#region src/templates/lib/use.ts?raw\nvar use_default = \"import { useContext } from \\\"preact/hooks\\\";\\n\\nimport { RouterContext } from \\\"./mdx\\\";\\n\\nimport type { ParamsMap } from \\\"{{ createImport 'lib' 'router' }}\\\";\\n\\nexport function useRoute() {\\n return useContext(RouterContext);\\n}\\n\\nexport function useParams<T extends keyof ParamsMap>(): ParamsMap[T] {\\n return useContext(RouterContext).params as ParamsMap[T];\\n}\\n\";\n//#endregion\n//#region src/templates/src/App.mdx?raw\nvar App_default = \"{props.children}\\n\";\n//#endregion\n//#region src/templates/src/components/Link.tsx?raw\nvar Link_default = \"import { h, type JSX } from \\\"preact\\\";\\n\\nimport { pageRouteMap, type LinkProps } from \\\"{{ createImport 'libCore' }}\\\";\\n\\nexport default function Link(\\n props: Omit<h.JSX.IntrinsicElements[\\\"a\\\"], \\\"href\\\"> & {\\n to: LinkProps;\\n query?: Record<string | number, unknown>;\\n },\\n): JSX.Element {\\n const { to, query, children, ...restProps } = props;\\n\\n const [key, ...params] = to;\\n const href = pageRouteMap[key]?.base(params as never, query);\\n\\n return h(\\\"a\\\", { ...restProps, href }, children);\\n}\\n\";\n//#endregion\n//#region src/templates/src/components/mdx.ts?raw\nvar mdx_default = \"/**\\n * MDX component overrides.\\n *\\n * Every standard markdown element (headings, links, code blocks, etc.)\\n * can be replaced with a custom Preact component here.\\n *\\n * These overrides apply globally to all MDX pages via the MDXProvider.\\n * Individual pages can still import and use additional components directly.\\n *\\n * @see https://mdxjs.com/docs/using-mdx/#components\\n * */\\nimport Link from \\\"./Link.tsx\\\";\\n\\nexport const components = {\\n Link,\\n // example overrides:\\n // h1: (props) => <h1 style=\\\\{{ color: \\\"tomato\\\" }} {...props} />,\\n // pre: (props) => <pre class=\\\"code-block\\\" {...props} />,\\n};\\n\\ndeclare global {\\n type MDXProvidedComponents = typeof components;\\n}\\n\";\n//#endregion\n//#region src/templates/src/entry/client.tsx?raw\nvar client_default = \"import { hydrate } from \\\"preact\\\";\\n\\nimport renderFactory, { createRoutes } from \\\"{{ createImport 'libEntry' 'client' }}\\\";\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes();\\nconst { clientRouter } = routerFactory(routes);\\n\\nconst root = document.getElementById(\\\"app\\\");\\n\\nif (root) {\\n renderFactory(() => {\\n return {\\n async mount() {\\n const page = await clientRouter();\\n hydrate(page.component, root);\\n },\\n async hydrate() {\\n const page = await clientRouter();\\n hydrate(page.component, root);\\n }\\n };\\n });\\n} else {\\n console.error(\\\"❌ Root element not found!\\\");\\n}\\n\";\n//#endregion\n//#region src/templates/src/entry/server.tsx?raw\nvar server_default = \"import { renderToString } from \\\"preact-render-to-string\\\";\\n\\nimport renderFactory, { createRoutes } from \\\"{{ createImport 'libEntry' 'server' }}\\\";\\nimport { renderHead } from \\\"{{ createImport 'lib' 'mdx' }}\\\"\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes();\\nconst { serverRouter } = routerFactory(routes);\\n\\nexport default renderFactory(() => {\\n return {\\n async renderToString(url, { assets }) {\\n const page = await serverRouter(url);\\n\\n const head = assets.reduce(\\n (head, { tag }) => `${head}\\\\n${tag}`,\\n renderHead(page?.frontmatter)\\n );\\n\\n const html = page ? renderToString(page.component) : \\\"\\\";\\n\\n return { html, head };\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/templates/src/index.html?raw\nvar src_default$1 = \"<!doctype html>\\n<html lang=\\\"en\\\">\\n<head>\\n <meta charset=\\\"UTF-8\\\" />\\n <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" />\\n <!--app-head-->\\n</head>\\n<body>\\n <div id=\\\"app\\\"><!--app-html--></div>\\n <script type=\\\"module\\\" src=\\\"/{{ entryDir }}/client.tsx\\\"><\\/script>\\n</body>\\n</html>\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/404.mdx?raw\nvar _404_default = \"import PageSample from \\\"{{ createImport 'lib' 'pageSamples/404.tsx' }}\\\";\\n\\nexport default function Page() {\\n return <PageSample />;\\n}\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/layout.hbs?raw\nvar layout_default = \"{props.children}\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/page.hbs?raw\nvar page_default = \"---\\ntitle: \\\"{{title}}\\\"\\n---\\n\\nimport PageSample from \\\"{{ createImport \\\"lib\\\" \\\"pageSamples/page.tsx\\\" }}\\\";\\n\\nexport const pathMap = {\\n page: \\\"{{ createImport \\\"pages\\\" route.file }}\\\",\\n pages: \\\"{{ createImport \\\"pages\\\" }}\\\",\\n api: \\\"{{ createImport \\\"api\\\" }}\\\",\\n};\\n\\n<PageSample\\n message=\\\"{{message}}\\\"\\n routeName=\\\"{{route.name}}\\\"\\n pathMap={pathMap}\\n/>\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/welcome.hbs?raw\nvar welcome_default = \"---\\ntitle: Welcome to KosmoJS\\ndescription: Content-first development with MDX and Vite\\n---\\n\\nimport WelcomePage from \\\"{{ createImport \\\"lib\\\" \\\"pageSamples/welcome.tsx\\\" }}\\\"\\n\\n<WelcomePage />\\n\";\n//#endregion\n//#region src/templates/src/router.ts?raw\nvar router_default = \"import { createRouter } from \\\"{{ createImport 'lib' 'mdx' }}\\\";\\nimport routerFactory from \\\"{{ createImport 'lib' 'router' }}\\\";\\n\\nimport App from \\\"./App.mdx\\\";\\nimport { components } from \\\"./components/mdx\\\"\\n\\nexport default routerFactory((routes) => {\\n const router = createRouter(routes, App, { components });\\n return {\\n async clientRouter() {\\n return router.resolve();\\n },\\n async serverRouter(url) {\\n return router.resolve(url);\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((meta, sourceFolder, options) => {\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { renderToFile: deployLibFile } = renderFactory({ helpers: {\n\t\t...createImportHelpers({ origin: \"lib\" }),\n\t\t...routeRenderHelpers(),\n\t\tserializeParams(route) {\n\t\t\treturn JSON.stringify(route.params);\n\t\t}\n\t} });\n\tconst { renderToFile: deploySrcFile } = renderFactory({ helpers: createImportHelpers({ origin: \"src\" }) });\n\tconst overwrite = (content) => !content?.trim().length;\n\tconst templateResolver = createTemplateResolver(options?.templates, page_default);\n\tconst generateSrcFiles = async (entries) => {\n\t\tfor (const { kind, entry } of entries) if (kind === \"pageRoute\") await deploySrcFile(createPath.pages(entry.file), entry.name === \"index\" ? welcome_default : templateResolver(entry.name, entry), {\n\t\t\troute: entry,\n\t\t\ttitle: entry.name.replace(/\\{([^}]+)\\}/g, \"$1\"),\n\t\t\tmessage: randomCongratMessage()\n\t\t}, { overwrite });\n\t\telse if (kind === \"pageLayout\") await deploySrcFile(createPath.pages(entry.file), layout_default, { route: entry }, { overwrite });\n\t};\n\tconst generateLibFiles = async (entries) => {\n\t\tconst layouts = entries.flatMap(({ kind, entry }) => {\n\t\t\treturn kind === \"pageLayout\" ? [entry] : [];\n\t\t});\n\t\tconst pageRoutes = entries.flatMap(({ kind, entry }) => {\n\t\t\tif (kind === \"pageRoute\") {\n\t\t\t\tconst { name, file } = entry;\n\t\t\t\treturn [{\n\t\t\t\t\t...entry,\n\t\t\t\t\tlayouts: layouts.flatMap((e) => {\n\t\t\t\t\t\treturn e.name === name || file.startsWith(`${e.name}/`) ? [e] : [];\n\t\t\t\t\t}).sort(sortRoutes)\n\t\t\t\t}];\n\t\t\t}\n\t\t\treturn [];\n\t\t}).sort(sortRoutes);\n\t\tfor (const [file, template] of [[\"client.ts\", client_default$1], [\"server.ts\", server_default$1]]) await deployLibFile(createPath.libEntry(file), template, {\n\t\t\tpageRoutes,\n\t\t\tlayouts\n\t\t});\n\t\tfor (const [file, template] of [[\"router.ts\", router_default$1], [\"ssg:routes.ts\", ssg_routes_default]]) await deployLibFile(createPath.lib(file), template, { pageRoutes });\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tasync start() {\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"env.d.ts\", env_d_default],\n\t\t\t\t[\"mdx.ts\", mdx_default$1],\n\t\t\t\t[\"use.ts\", use_default],\n\t\t\t\t[\"ssg.ts\", ssg_default],\n\t\t\t\t[\"pageSamples/styles.module.css\", styles_default],\n\t\t\t\t[\"pageSamples/welcome.tsx\", welcome_default$1],\n\t\t\t\t[\"pageSamples/page.tsx\", page_default$1],\n\t\t\t\t[\"pageSamples/404.tsx\", _404_default$1]\n\t\t\t]) await deployLibFile(createPath.lib(file), template, {});\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"pages/404.mdx\", _404_default],\n\t\t\t\t[\"components/Link.tsx\", Link_default],\n\t\t\t\t[\"components/mdx.tsx\", mdx_default],\n\t\t\t\t[\"App.mdx\", App_default],\n\t\t\t\t[\"router.tsx\", router_default]\n\t\t\t]) await deploySrcFile(createPath.src(file), template, { entryDir: defaults.entryDir }, { overwrite });\n\t\t\tawait deploySrcFile(createPath.src(\"index.html\"), src_default$1, { entryDir: defaults.entryDir }, { overwrite: (c) => {\n\t\t\t\treturn c?.trim().length ? !c.replace(/<!--[\\s\\S]*?-->/g, \"\").trim().length : true;\n\t\t\t} });\n\t\t\tfor (const [file, template] of [[\"client.tsx\", client_default], [\"server.tsx\", server_default]]) await deploySrcFile(createPath.entry(file), template, {}, { overwrite });\n\t\t},\n\t\tasync watch(entries, event) {\n\t\t\tif (!event || event.kind === \"create\") await generateSrcFiles(entries);\n\t\t\tawait generateLibFiles(entries);\n\t\t},\n\t\tasync build(entries) {\n\t\t\tawait generateSrcFiles(entries);\n\t\t\tawait generateLibFiles(entries);\n\t\t}\n\t};\n});\n//#endregion\n//#region src/plugins.ts\nvar plugins_default = (sourceFolder, command, options) => {\n\tconst { remarkPlugins = [], rehypePlugins = [] } = { ...options };\n\tconst hmrPlugin = () => {\n\t\tconst hmrFilters = [`${defaults.srcDir}/${sourceFolder.name}/${defaults.entryDir}/client.tsx`].map((e) => createFilter(e));\n\t\tconst hmrFilter = (id) => hmrFilters.some((filter) => filter(id));\n\t\tconst hmrSnippet = `\nif (import.meta.hot) {\n import.meta.hot.accept(() => {});\n}\n`;\n\t\treturn {\n\t\t\tname: \"kosmo:mdx[hmr]\",\n\t\t\tenforce: \"post\",\n\t\t\ttransform(code, id) {\n\t\t\t\tif (!hmrFilter(id) || code.includes(\"import.meta.hot.accept\")) return;\n\t\t\t\treturn { code: [code, hmrSnippet].join(\"\\n\") };\n\t\t\t}\n\t\t};\n\t};\n\tconst plugins = [createMdxPlugin({\n\t\tjsxImportSource: \"preact\",\n\t\tproviderImportSource: \"@mdx-js/preact\",\n\t\tremarkPlugins,\n\t\trehypePlugins\n\t}), {\n\t\tname: \"kosmo:mdx[config]\",\n\t\tenforce: \"pre\",\n\t\tconfig() {\n\t\t\treturn {\n\t\t\t\tbuild: { ssrEmitAssets: true },\n\t\t\t\toxc: { jsx: { importSource: \"preact\" } }\n\t\t\t};\n\t\t}\n\t}];\n\tif (command === \"serve\") plugins.push(hmrPlugin());\n\treturn plugins;\n};\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator((options) => {\n\tconst meta = {\n\t\tname: \"MDX\",\n\t\tdependencies: { \"path-to-regexp\": package_default.devDependencies[\"path-to-regexp\"] },\n\t\tdevDependencies: {\n\t\t\tpreact: package_default.devDependencies.preact,\n\t\t\t\"preact-render-to-string\": package_default.devDependencies[\"preact-render-to-string\"],\n\t\t\t\"@mdx-js/preact\": package_default.devDependencies[\"@mdx-js/preact\"],\n\t\t\t\"remark-frontmatter\": package_default.devDependencies[\"remark-frontmatter\"],\n\t\t\t\"remark-mdx-frontmatter\": package_default.devDependencies[\"remark-mdx-frontmatter\"]\n\t\t},\n\t\tjsxImportSource: \"preact\"\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tfactory: (sourceFolder) => factory_default(meta, sourceFolder, options),\n\t\tplugins: (sourceFolder, command) => plugins_default(sourceFolder, command, options)\n\t};\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { dirname, join, resolve } from \"node:path\";\nimport crc from \"crc/crc32\";\nimport \"tfusion\";\nimport \"ts-morph\";\nimport { access, constants, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport handlebars from \"handlebars\";\nimport { parse } from \"path-to-regexp\";\nimport \"mime-types\";\nimport \"@topcli/spinner\";\nimport YAML from \"yaml\";\nimport Type from \"typebox\";\n//#region ../../packages/lib/pkg/index.js\nvar defaults = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets$1 = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets$1 = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets$1,\n\t...RequestBodyTargets$1\n});\nvar defineGenerator = (f) => f;\nvar defineGeneratorFactory = (f) => f;\nvar pathResolver = (sourceFolder) => {\n\tconst createPath = (...a) => {\n\t\treturn sourceFolder.root ? resolve(sourceFolder.root, join(...a)) : join(...a);\n\t};\n\tconst createImport = {\n\t\tsrc(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.srcPrefix, ...a) : join(defaults.appPrefix, defaults.srcDir, sourceFolder.name, ...a);\n\t\t},\n\t\tapi(a, o) {\n\t\t\treturn this.src([defaults.apiDir, ...a], o);\n\t\t},\n\t\tpages(a, o) {\n\t\t\treturn this.src([defaults.pagesDir, ...a], o);\n\t\t},\n\t\tlib(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.libPrefix, ...a) : join(defaults.appPrefix, defaults.libDir, sourceFolder.name, ...a);\n\t\t},\n\t\tlibCore(a, o) {\n\t\t\treturn this.lib([\"core\", ...a], o);\n\t\t},\n\t\tlibApi(a, o) {\n\t\t\treturn this.lib([defaults.apiDir, ...a], o);\n\t\t},\n\t\tlibEntry(a, o) {\n\t\t\treturn this.lib([defaults.entryDir, ...a], o);\n\t\t}\n\t};\n\treturn {\n\t\tcreatePath: {\n\t\t\tsrc(...a) {\n\t\t\t\treturn createPath(defaults.srcDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tapi(...a) {\n\t\t\t\treturn this.src(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tpages(...a) {\n\t\t\t\treturn this.src(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tentry(...a) {\n\t\t\t\treturn this.src(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlib(...a) {\n\t\t\t\treturn createPath(defaults.libDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tlibCore(...a) {\n\t\t\t\treturn this.lib(\"core\", ...a);\n\t\t\t},\n\t\t\tlibApi(...a) {\n\t\t\t\treturn this.lib(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tlibEntry(...a) {\n\t\t\t\treturn this.lib(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlibPages(...a) {\n\t\t\t\treturn this.lib(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tdistDir(...a) {\n\t\t\t\treturn createPath(sourceFolder.distDir, sourceFolder.name, ...a);\n\t\t\t}\n\t\t},\n\t\tcreateImport,\n\t\tcreateImportHelpers(o) {\n\t\t\tif (![\"src\", \"lib\"].includes(o?.origin)) throw new Error(`createImportHelpers: required exactly one argument of shape { origin: \"src|lib\" }`);\n\t\t\treturn { createImport(key, ...a) {\n\t\t\t\treturn createImport[key](a.slice(0, -1), o);\n\t\t\t} };\n\t\t}\n\t};\n};\nvar pathExists = async (path) => {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\nvar render = (template, context, options) => {\n\tconst { noEscape = true, renderer = handlebars } = { ...options };\n\treturn renderer.compile(template, { noEscape })(context);\n};\nvar renderToFile = async (file, template, context, options) => {\n\tconst content = render(template, context, options);\n\t/**\n\t* Two fs calls (exists + read) are worth it to avoid touching the file\n\t* and triggering watchers unnecessarily.\n\t* */\n\tif (await pathExists(file)) {\n\t\tconst { overwrite = true } = { ...options };\n\t\tif (overwrite === false) return;\n\t\tconst fileContent = await readFile(file, \"utf8\");\n\t\tif (typeof overwrite === \"function\" && !overwrite(fileContent)) return;\n\t\tif (crc(content) === crc(fileContent)) return;\n\t}\n\tawait mkdir(dirname(file), { recursive: true });\n\tawait writeFile(file, content, \"utf8\");\n};\n`${defaults.apiDir}`, `${defaults.apiDir}`, `${defaults.pagesDir}`, `${defaults.pagesDir}`;\n/**\n* Weight of a single path segment.\n*\n* Fixed values per kind prevent complex mixed segments\n* from outscoring multiple statics.\n*\n* static: 4 (exact match, most specific)\n* mixed: 3+ (static + param parts; more statics = slightly higher)\n* required: 2 (matches any single segment)\n* optional: 1 (may or may not match)\n* splat: 0 (matches anything, least specific)\n* */\nvar segmentWeight = (token) => {\n\tif (token.kind === \"static\") return 4;\n\tif (token.kind === \"mixed\") {\n\t\tlet statics = 0;\n\t\tlet optionals = 0;\n\t\tfor (const part of token.parts) if (part.type === \"static\") statics += 1;\n\t\telse if (part.kind === \"optional\" || part.kind === \"splat\") optionals += 1;\n\t\treturn 3 + statics * .01 - optionals * .005;\n\t}\n\tswitch (token.parts[0].kind) {\n\t\tcase \"required\": return 2;\n\t\tcase \"optional\": return 1;\n\t\tcase \"splat\": return 0;\n\t}\n};\n/**\n* Compare two route entries for registration order.\n*\n* More specific routes sort first (higher priority).\n* Segments are compared left-to-right; first difference wins.\n*\n* When one route is a prefix of the other, the trailing segment\n* determines order: a trailing splat loses (shorter sibling first),\n* anything else wins (longer route is more specific).\n*\n* At equal weight and length, lexicographic tiebreak ensures\n* deterministic ordering across JS engines.\n* */\nvar sortRoutes = (a, b) => {\n\tconst pairs = Array.from({ length: Math.max(a.pathTokens.length, b.pathTokens.length) }, (_, i) => [a.pathTokens[i], b.pathTokens[i]]);\n\tfor (const [at, bt] of pairs) {\n\t\tif (!at || !bt) {\n\t\t\tconst extra = at ?? bt;\n\t\t\tif (extra?.kind === \"param\" ? extra.parts[0].kind === \"splat\" : false) return at ? 1 : -1;\n\t\t\treturn at ? -1 : 1;\n\t\t}\n\t\tconst aw = segmentWeight(at);\n\t\tconst bw = segmentWeight(bt);\n\t\tif (aw !== bw) return bw - aw;\n\t}\n\treturn a.pathPattern.localeCompare(b.pathPattern);\n};\nvar typeboxLiteralText = (text, sourceFolder) => {\n\tconst { refineTypeName = defaults.refineTypeName } = sourceFolder.config;\n\treturn [\n\t\t[/(?<!\\\\)`/g, \"\\\\`\"],\n\t\t[/(?<!\\\\)\\$\\{/g, \"\\\\${\"],\n\t\t[new RegExp(`\\\\b${refineTypeName}\\\\s*<`, \"g\"), \"Options<\"]\n\t].reduce((text, [a, b]) => text.replace(a, b), text);\n};\n//#endregion\n//#region ../../packages/core/pkg/index.js\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets,\n\t...RequestBodyTargets\n});\n//#endregion\n//#region src/openapi.ts\nvar requestBodyMap = {\n\tjson: \"application/json\",\n\tform: [\"application/x-www-form-urlencoded\", \"multipart/form-data\"],\n\traw: void 0\n};\nvar openapi_default = (sourceFolder) => {\n\tconst jsonSchemaBuilder = (text) => {\n\t\tif ([\n\t\t\t\"Buffer\",\n\t\t\t\"ArrayBuffer\",\n\t\t\t\"Blob\"\n\t\t].includes(text)) return {\n\t\t\ttype: \"string\",\n\t\t\tformat: \"binary\"\n\t\t};\n\t\treturn Type.Script(typeboxLiteralText(text, sourceFolder));\n\t};\n\tconst generateComponentId = (route, typeId, propName) => {\n\t\tconst suffix = propName ? `${typeId}_${propName.replace(/[^\\w.-]/g, \"_\")}${crc(propName)}` : typeId;\n\t\treturn `${route.id}_${suffix}`;\n\t};\n\tconst generateComponentPath = (section, route, typeId, propName) => {\n\t\treturn [\n\t\t\t\"#\",\n\t\t\t\"components\",\n\t\t\tsection,\n\t\t\tgenerateComponentId(route, typeId, propName)\n\t\t].join(\"/\");\n\t};\n\tconst calculatePathSpecificity = (path) => {\n\t\treturn path.split(\"/\").reduce((a, e) => a + (e.includes(\"{\") ? 0 : 1), 0);\n\t};\n\t/**\n\t* Generate all valid OpenAPI path variations from a path-to-regexp pattern.\n\t*\n\t* Groups (optional segments) create branching points - each group can be\n\t* included or excluded, producing different path variations.\n\t*\n\t* Nested groups enforce dependency chains:\n\t* files{/x-{*path{.:ext}}}\n\t* → ext only appears when path is present\n\t* → path only appears when outer group is present\n\t*\n\t* Orphaned variations (group text included but none of its params survived)\n\t* are pruned at the source during recursion.\n\t*\n\t* Examples:\n\t*\n\t* \"files{/x-{*path}{.:ext}}\"\n\t* → files\n\t* → files/x-.{ext} (ext without path - valid, ext is independent)\n\t* → files/x-{path}*\n\t* → files/x-{path}*.{ext}\n\t*\n\t* \"files{/x-{*path{.:ext}}}\"\n\t* → files\n\t* → files/x-{path}* (ext nested inside path group)\n\t* → files/x-{path}*.{ext}\n\t*\n\t* \"app/:name{-v:version{-:pre}}\"\n\t* → app/{name}\n\t* → app/{name}-v{version}\n\t* → app/{name}-v{version}-{pre}\n\t* */\n\tconst generatePathVariations = (route) => {\n\t\tif (route.name === \"index\") return [\"/\"];\n\t\tconst { tokens } = parse(route.pathPattern);\n\t\t/**\n\t\t* Recursively collect all param/wildcard names from a token tree.\n\t\t* Used to check whether a group's params survived in a variation.\n\t\t* */\n\t\tconst extractParamNames = (tokens) => {\n\t\t\treturn tokens.flatMap((t) => {\n\t\t\t\tswitch (t.type) {\n\t\t\t\t\tcase \"param\": return [t.name];\n\t\t\t\t\tcase \"wildcard\": return [t.name];\n\t\t\t\t\tcase \"group\": return extractParamNames(t.tokens);\n\t\t\t\t\tdefault: return [];\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\t/**\n\t\t* Recursively process tokens, building path variations.\n\t\t*\n\t\t* - text/param/wildcard tokens accumulate into current state\n\t\t* - group tokens fork into two branches:\n\t\t* 1. Exclude - skip the group entirely, process remaining tokens\n\t\t* 2. Include - process group children + remaining tokens\n\t\t* Included variations are filtered to ensure at least one of the\n\t\t* group's params is present (prevents orphaned static text).\n\t\t*\n\t\t* State is immutable - each branch gets its own copy.\n\t\t* Base case: no tokens left → emit current state as a variation.\n\t\t* */\n\t\tconst traverse = (tokens, state) => {\n\t\t\tif (!tokens.length) return [state];\n\t\t\tconst [token, ...rest] = tokens;\n\t\t\tswitch (token.type) {\n\t\t\t\tcase \"text\": return traverse(rest, {\n\t\t\t\t\tpath: `${state.path}${token.value}`,\n\t\t\t\t\tparams: state.params\n\t\t\t\t});\n\t\t\t\tcase \"param\": return traverse(rest, {\n\t\t\t\t\tpath: `${state.path}{${token.name}}`,\n\t\t\t\t\tparams: [...state.params, token.name]\n\t\t\t\t});\n\t\t\t\tcase \"wildcard\": return traverse(rest, {\n\t\t\t\t\tpath: `${state.path}{${token.name}*}`,\n\t\t\t\t\tparams: [...state.params, token.name]\n\t\t\t\t});\n\t\t\t\tcase \"group\": {\n\t\t\t\t\tconst excluded = traverse(rest, state);\n\t\t\t\t\tconst included = traverse([...token.tokens, ...rest], state);\n\t\t\t\t\tconst groupParams = extractParamNames(token.tokens);\n\t\t\t\t\tconst valid = included.filter((v) => {\n\t\t\t\t\t\treturn groupParams.some((p) => v.params.includes(p));\n\t\t\t\t\t});\n\t\t\t\t\treturn [...excluded, ...valid];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst raw = traverse(tokens, {\n\t\t\tpath: \"\",\n\t\t\tparams: []\n\t\t});\n\t\t/**\n\t\t* Build a map to match original route params by index.\n\t\t*\n\t\t* Needed to strip phantom paths generated by routes where multiple\n\t\t* optional params follow each other, e.g.: search/{:type}/{:page}\n\t\t*\n\t\t* For this route, the following paths are generated:\n\t\t* - search ✓ valid\n\t\t* - search/{:type} ✓ valid\n\t\t* - search/{:type}/{:page} ✓ valid\n\t\t* - search/{:page} ✗ phantom path\n\t\t*\n\t\t* To prune phantom paths, each variation param compared against\n\t\t* the original route's param order - every param must match its\n\t\t* original positional index.\n\t\t*\n\t\t* Example: search/{:page} is pruned because the `page` param is at\n\t\t* index 0, but paramByIndex[0] is `type`.\n\t\t* */\n\t\tconst paramByIndex = route.params.schema.reduce((map, { name }, i) => {\n\t\t\tmap[i] = name;\n\t\t\treturn map;\n\t\t}, {});\n\t\treturn raw.reduce((paths, variant) => {\n\t\t\tconst path = join(\"/\", variant.path);\n\t\t\tif (paths.includes(path)) return paths;\n\t\t\tif (variant.params.every((p, i) => p === paramByIndex[i])) paths.push(path);\n\t\t\treturn paths;\n\t\t}, []).sort(\n\t\t\t/**\n\t\t\t* Sorting paths by sections length in reverse order,\n\t\t\t* so more specific goes first.\n\t\t\t*\n\t\t\t* Specificity is determined by the number of static sections.\n\t\t\t* So, /priority/profile is more specific than /priority/{id}/{page}\n\t\t\t* even though the second route has more sections.\n\t\t\t*\n\t\t\t* WARN: without this sorting, more specific paths\n\t\t\t* may override schemas for less specific ones.\n\t\t\t*\n\t\t\t* Example: Without proper sorting:\n\t\t\t* /search (least specific)\n\t\t\t* /search/{type} (medium specific)\n\t\t\t* /search/{type}/{page} (most specific)\n\t\t\t*\n\t\t\t* Would cause the more specific /search/{type}/{page} path to OVERRIDE\n\t\t\t* schemas for less specific /search/{type} and /search.\n\t\t\t*\n\t\t\t* Correct order (most specific first):\n\t\t\t* /search/{type}/{page}\n\t\t\t* /search/{type}\n\t\t\t* /search\n\t\t\t*\n\t\t\t* */\n\t\t\t(a, b) => calculatePathSpecificity(b) - calculatePathSpecificity(a)\n\t\t);\n\t};\n\tconst generatePathParameters = (route, openapiPath) => {\n\t\tconst parameters = route.params.resolvedType?.properties?.flatMap(({ name }) => {\n\t\t\treturn new RegExp(`\\\\{${name}\\\\*?\\\\}`).test(openapiPath) ? [{ $ref: generateComponentPath(\"parameters\", route, route.params.id, name) }] : [];\n\t\t});\n\t\treturn parameters?.length ? parameters : void 0;\n\t};\n\tconst generateResponses = (route, method) => {\n\t\tconst responseType = route.validationDefinitions.find((e) => {\n\t\t\treturn e.method === method ? e.target === \"response\" : false;\n\t\t});\n\t\tif (!Array.isArray(responseType?.variants)) return { \"200\": {\n\t\t\tdescription: \"Success - TODO: Add response schema\",\n\t\t\tcontent: { \"text/plain\": { schema: { type: \"string\" } } }\n\t\t} };\n\t\treturn responseType.variants.reduce((map, { id, status, contentType, body }) => {\n\t\t\tconst redirect = redirectSchema(status, contentType);\n\t\t\tif (redirect) map[status] = redirect;\n\t\t\telse map[status] = {\n\t\t\t\tdescription: \"Success\",\n\t\t\t\tcontent: { [contentType || \"application/json\"]: { schema: body ? { $ref: generateComponentPath(\"schemas\", route, id) } : { type: \"object\" } } }\n\t\t\t};\n\t\t\treturn map;\n\t\t}, {});\n\t};\n\tconst generateComponentSchemas = (route) => {\n\t\tconst { parameters, schemas } = {\n\t\t\tparameters: {},\n\t\t\tschemas: {}\n\t\t};\n\t\tfor (const def of route.validationDefinitions) if (def.target === \"response\") {\n\t\t\tfor (const { id, resolvedType } of def.variants) if (resolvedType) schemas[generateComponentId(route, id)] = jsonSchemaBuilder(resolvedType.text);\n\t\t} else if (def.target === \"query\") {\n\t\t\tconst { id, resolvedType } = def.schema;\n\t\t\tfor (const prop of resolvedType?.properties || []) {\n\t\t\t\tconst key = generateComponentId(route, id, prop.name);\n\t\t\t\tschemas[key] = jsonSchemaBuilder(prop.text);\n\t\t\t}\n\t\t} else {\n\t\t\tconst { id, resolvedType } = def.schema;\n\t\t\tif (resolvedType) schemas[generateComponentId(route, id)] = jsonSchemaBuilder(resolvedType.text);\n\t\t}\n\t\tif (route.params.resolvedType) for (const { name, text } of route.params.resolvedType.properties || []) parameters[generateComponentId(route, route.params.id, name)] = {\n\t\t\tname,\n\t\t\tin: \"path\",\n\t\t\trequired: true,\n\t\t\tschema: jsonSchemaBuilder(text)\n\t\t};\n\t\treturn {\n\t\t\tparameters,\n\t\t\tschemas\n\t\t};\n\t};\n\tconst generateRoutePaths = (route) => {\n\t\tconst paths = {};\n\t\tconst validationTypes = route.validationDefinitions.flatMap((def) => {\n\t\t\treturn def.target === \"response\" ? [] : def.schema.resolvedType ? [def] : [];\n\t\t});\n\t\tfor (const path of generatePathVariations(route)) for (const method of route.methods) {\n\t\t\tconst operation = { responses: generateResponses(route, method) };\n\t\t\tconst parameters = generatePathParameters(route, path);\n\t\t\tif (parameters) operation.parameters = parameters;\n\t\t\tconst queryType = validationTypes.find((e) => {\n\t\t\t\treturn e.method === method ? e.target === \"query\" : false;\n\t\t\t});\n\t\t\tif (queryType?.schema) for (const prop of queryType.schema.resolvedType?.properties || []) {\n\t\t\t\tif (!operation.parameters) operation.parameters = [];\n\t\t\t\toperation.parameters.push({\n\t\t\t\t\tname: prop.name,\n\t\t\t\t\tin: \"query\",\n\t\t\t\t\trequired: !prop.optional,\n\t\t\t\t\tschema: { $ref: generateComponentPath(\"schemas\", route, queryType.schema.id, prop.name) }\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst bodyTypes = validationTypes.filter((e) => {\n\t\t\t\treturn e.method === method ? Object.keys(RequestBodyTargets).includes(e.target) : false;\n\t\t\t});\n\t\t\tif (bodyTypes.length) operation.requestBody = {\n\t\t\t\trequired: true,\n\t\t\t\tcontent: bodyTypes.reduce((map, def) => {\n\t\t\t\t\tconst { contentType = requestBodyMap[def.target] } = def;\n\t\t\t\t\tif (contentType) {\n\t\t\t\t\t\tconst schema = { $ref: generateComponentPath(\"schemas\", route, def.schema.id) };\n\t\t\t\t\t\tfor (const variant of [contentType].flat()) map[variant] = { schema };\n\t\t\t\t\t}\n\t\t\t\t\treturn map;\n\t\t\t\t}, {})\n\t\t\t};\n\t\t\tif (!paths[path]) paths[path] = {};\n\t\t\tpaths[path][method.toLowerCase()] = operation;\n\t\t}\n\t\treturn paths;\n\t};\n\tconst generateOpenAPISchema = (routes) => {\n\t\tconst { components, paths } = routes.sort(\n\t\t\t/**\n\t\t\t* Sort routes by path depth (descending) so more specific routes\n\t\t\t* are processed first.\n\t\t\t* */\n\t\t\tsortRoutes\n\t\t).flatMap((route) => {\n\t\t\treturn routes.some((e) => {\n\t\t\t\treturn e.name === route.name ? false : e.name.startsWith(route.name);\n\t\t\t}) ? [] : [route];\n\t\t}).reduce((acc, route) => {\n\t\t\tconst paths = generateRoutePaths(route);\n\t\t\tconst { parameters, schemas } = generateComponentSchemas(route);\n\t\t\treturn {\n\t\t\t\tpaths: {\n\t\t\t\t\t...acc.paths,\n\t\t\t\t\t...paths\n\t\t\t\t},\n\t\t\t\tcomponents: {\n\t\t\t\t\tparameters: {\n\t\t\t\t\t\t...acc.components.parameters,\n\t\t\t\t\t\t...parameters\n\t\t\t\t\t},\n\t\t\t\t\tschemas: {\n\t\t\t\t\t\t...acc.components.schemas,\n\t\t\t\t\t\t...schemas\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}, {\n\t\t\tpaths: {},\n\t\t\tcomponents: {\n\t\t\t\tparameters: {},\n\t\t\t\tschemas: {}\n\t\t\t}\n\t\t});\n\t\treturn {\n\t\t\tpaths,\n\t\t\tcomponents\n\t\t};\n\t};\n\treturn {\n\t\tgenerateComponentId,\n\t\tgenerateComponentPath,\n\t\tgeneratePathVariations,\n\t\tgenerateOpenAPISchema\n\t};\n};\nvar redirectSchema = (statusCode, url) => {\n\tconst schema = {\n\t\ttype: \"string\",\n\t\tformat: \"uri\",\n\t\t...url ? { enum: [url] } : {}\n\t};\n\treturn {\n\t\t301: {\n\t\t\tdescription: \"Moved Permanently\",\n\t\t\theaders: { Location: {\n\t\t\t\tdescription: \"New permanent location\",\n\t\t\t\tschema\n\t\t\t} }\n\t\t},\n\t\t302: {\n\t\t\tdescription: \"Found\",\n\t\t\theaders: { Location: {\n\t\t\t\tdescription: \"Temporary location\",\n\t\t\t\tschema\n\t\t\t} }\n\t\t},\n\t\t303: {\n\t\t\tdescription: \"See Other\",\n\t\t\theaders: { Location: {\n\t\t\t\tdescription: \"Location to GET after POST/PUT/DELETE\",\n\t\t\t\tschema\n\t\t\t} }\n\t\t},\n\t\t307: {\n\t\t\tdescription: \"Temporary Redirect\",\n\t\t\theaders: { Location: {\n\t\t\t\tdescription: \"Temporary location (preserves request method)\",\n\t\t\t\tschema\n\t\t\t} }\n\t\t},\n\t\t308: {\n\t\t\tdescription: \"Permanent Redirect\",\n\t\t\theaders: { Location: {\n\t\t\t\tdescription: \"New permanent location (preserves request method)\",\n\t\t\t\tschema\n\t\t\t} }\n\t\t}\n\t}[statusCode];\n};\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((meta, sourceFolder, options) => {\n\tconst { outfile, ...baseSpec } = { ...options };\n\tconst { createPath } = pathResolver(sourceFolder);\n\tconst { generateOpenAPISchema } = openapi_default(sourceFolder);\n\tconst generateSchemas = async (entries) => {\n\t\tconst { paths, components } = generateOpenAPISchema(entries.flatMap(({ kind, entry }) => kind === \"apiRoute\" ? [entry] : []));\n\t\tconst spec = {\n\t\t\t...JSON.parse(JSON.stringify(baseSpec)),\n\t\t\tpaths,\n\t\t\tcomponents\n\t\t};\n\t\tconst output = /ya?ml/.test(outfile) ? YAML.stringify(spec) : JSON.stringify(spec, null, 2);\n\t\tawait renderToFile(createPath.src(outfile), output, {});\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tasync watch(entries) {\n\t\t\tawait generateSchemas(entries);\n\t\t},\n\t\tasync build(entries) {\n\t\t\tawait generateSchemas(entries);\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator((options) => {\n\tconst meta = {\n\t\tname: \"OpenAPI\",\n\t\tresolveTypes: true\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tfactory: (sourceFolder) => factory_default(meta, sourceFolder, options)\n\t};\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { basename, dirname, join, resolve } from \"node:path\";\nimport { styleText } from \"node:util\";\nimport crc from \"crc/crc32\";\nimport \"tfusion\";\nimport \"ts-morph\";\nimport picomatch from \"picomatch\";\nimport { access, constants, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport handlebars from \"handlebars\";\nimport \"path-to-regexp\";\nimport \"mime-types\";\nimport \"@topcli/spinner\";\n//#region ../../packages/lib/pkg/index.js\nvar defaults$1 = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets$1 = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets$1 = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets$1,\n\t...RequestBodyTargets$1\n});\nvar defineGenerator = (f) => f;\nvar defineGeneratorFactory = (f) => f;\nvar createTemplateResolver = (customTemplates, defaultTemplate) => {\n\tconst templates = Object.entries({ ...customTemplates }).map(([pattern, template]) => [picomatch(pattern), template]);\n\treturn (pattern, entry) => {\n\t\tconst match = templates.find(([isMatch]) => isMatch(pattern));\n\t\tif (!match) return defaultTemplate;\n\t\treturn typeof match[1] === \"function\" ? match[1](entry) : match[1];\n\t};\n};\nvar pathResolver = (sourceFolder) => {\n\tconst createPath = (...a) => {\n\t\treturn sourceFolder.root ? resolve(sourceFolder.root, join(...a)) : join(...a);\n\t};\n\tconst createImport = {\n\t\tsrc(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults$1.srcPrefix, ...a) : join(defaults$1.appPrefix, defaults$1.srcDir, sourceFolder.name, ...a);\n\t\t},\n\t\tapi(a, o) {\n\t\t\treturn this.src([defaults$1.apiDir, ...a], o);\n\t\t},\n\t\tpages(a, o) {\n\t\t\treturn this.src([defaults$1.pagesDir, ...a], o);\n\t\t},\n\t\tlib(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults$1.libPrefix, ...a) : join(defaults$1.appPrefix, defaults$1.libDir, sourceFolder.name, ...a);\n\t\t},\n\t\tlibCore(a, o) {\n\t\t\treturn this.lib([\"core\", ...a], o);\n\t\t},\n\t\tlibApi(a, o) {\n\t\t\treturn this.lib([defaults$1.apiDir, ...a], o);\n\t\t},\n\t\tlibEntry(a, o) {\n\t\t\treturn this.lib([defaults$1.entryDir, ...a], o);\n\t\t}\n\t};\n\treturn {\n\t\tcreatePath: {\n\t\t\tsrc(...a) {\n\t\t\t\treturn createPath(defaults$1.srcDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tapi(...a) {\n\t\t\t\treturn this.src(defaults$1.apiDir, ...a);\n\t\t\t},\n\t\t\tpages(...a) {\n\t\t\t\treturn this.src(defaults$1.pagesDir, ...a);\n\t\t\t},\n\t\t\tentry(...a) {\n\t\t\t\treturn this.src(defaults$1.entryDir, ...a);\n\t\t\t},\n\t\t\tlib(...a) {\n\t\t\t\treturn createPath(defaults$1.libDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tlibCore(...a) {\n\t\t\t\treturn this.lib(\"core\", ...a);\n\t\t\t},\n\t\t\tlibApi(...a) {\n\t\t\t\treturn this.lib(defaults$1.apiDir, ...a);\n\t\t\t},\n\t\t\tlibEntry(...a) {\n\t\t\t\treturn this.lib(defaults$1.entryDir, ...a);\n\t\t\t},\n\t\t\tlibPages(...a) {\n\t\t\t\treturn this.lib(defaults$1.pagesDir, ...a);\n\t\t\t},\n\t\t\tdistDir(...a) {\n\t\t\t\treturn createPath(sourceFolder.distDir, sourceFolder.name, ...a);\n\t\t\t}\n\t\t},\n\t\tcreateImport,\n\t\tcreateImportHelpers(o) {\n\t\t\tif (![\"src\", \"lib\"].includes(o?.origin)) throw new Error(`createImportHelpers: required exactly one argument of shape { origin: \"src|lib\" }`);\n\t\t\treturn { createImport(key, ...a) {\n\t\t\t\treturn createImport[key](a.slice(0, -1), o);\n\t\t\t} };\n\t\t}\n\t};\n};\nvar pathExists = async (path) => {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\nvar render = (template, context, options) => {\n\tconst { noEscape = true, renderer = handlebars } = { ...options };\n\treturn renderer.compile(template, { noEscape })(context);\n};\nvar renderToFile = async (file, template, context, options) => {\n\tconst content = render(template, context, options);\n\t/**\n\t* Two fs calls (exists + read) are worth it to avoid touching the file\n\t* and triggering watchers unnecessarily.\n\t* */\n\tif (await pathExists(file)) {\n\t\tconst { overwrite = true } = { ...options };\n\t\tif (overwrite === false) return;\n\t\tconst fileContent = await readFile(file, \"utf8\");\n\t\tif (typeof overwrite === \"function\" && !overwrite(fileContent)) return;\n\t\tif (crc(content) === crc(fileContent)) return;\n\t}\n\tawait mkdir(dirname(file), { recursive: true });\n\tawait writeFile(file, content, \"utf8\");\n};\nvar renderFactory = (options) => {\n\tconst createRenderer = (selfOoptions) => {\n\t\tconst renderer = handlebars.create();\n\t\trenderer.registerPartial({\n\t\t\t...options?.partials,\n\t\t\t...selfOoptions?.partials\n\t\t});\n\t\trenderer.registerHelper({\n\t\t\t...options?.helpers,\n\t\t\t...selfOoptions?.helpers\n\t\t});\n\t\treturn renderer;\n\t};\n\treturn {\n\t\trender(template, context, selfOoptions) {\n\t\t\treturn render(template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t},\n\t\tasync renderToFile(file, template, context, selfOoptions) {\n\t\t\treturn renderToFile(options?.outdir ? join(options.outdir, file) : file, template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t}\n\t};\n};\nvar normalizeStaticValue = (value) => {\n\treturn value.replace(/\\+/g, \"\\\\\\\\+\");\n};\nvar API_INDEX_PATTERN = `index.ts`;\nvar API_USE_PATTERN = `use.ts`;\nvar PAGE_INDEX_BASENAME = \"index\";\nvar PAGE_INDEX_PATTERN = `${PAGE_INDEX_BASENAME}.{tsx,vue,mdx,md}`;\nvar PAGE_LAYOUT_BASENAME = \"layout\";\nvar PAGE_LAYOUT_PATTERN = `${PAGE_LAYOUT_BASENAME}.{tsx,vue,mdx}`;\n`${defaults$1.apiDir}${API_INDEX_PATTERN}`, `${defaults$1.apiDir}${API_USE_PATTERN}`, `${defaults$1.pagesDir}${PAGE_INDEX_PATTERN}`, `${defaults$1.pagesDir}${PAGE_LAYOUT_PATTERN}`;\n/**\n* Weight of a single path segment.\n*\n* Fixed values per kind prevent complex mixed segments\n* from outscoring multiple statics.\n*\n* static: 4 (exact match, most specific)\n* mixed: 3+ (static + param parts; more statics = slightly higher)\n* required: 2 (matches any single segment)\n* optional: 1 (may or may not match)\n* splat: 0 (matches anything, least specific)\n* */\nvar segmentWeight = (token) => {\n\tif (token.kind === \"static\") return 4;\n\tif (token.kind === \"mixed\") {\n\t\tlet statics = 0;\n\t\tlet optionals = 0;\n\t\tfor (const part of token.parts) if (part.type === \"static\") statics += 1;\n\t\telse if (part.kind === \"optional\" || part.kind === \"splat\") optionals += 1;\n\t\treturn 3 + statics * .01 - optionals * .005;\n\t}\n\tswitch (token.parts[0].kind) {\n\t\tcase \"required\": return 2;\n\t\tcase \"optional\": return 1;\n\t\tcase \"splat\": return 0;\n\t}\n};\n/**\n* Compare two route entries for registration order.\n*\n* More specific routes sort first (higher priority).\n* Segments are compared left-to-right; first difference wins.\n*\n* When one route is a prefix of the other, the trailing segment\n* determines order: a trailing splat loses (shorter sibling first),\n* anything else wins (longer route is more specific).\n*\n* At equal weight and length, lexicographic tiebreak ensures\n* deterministic ordering across JS engines.\n* */\nvar sortRoutes = (a, b) => {\n\tconst pairs = Array.from({ length: Math.max(a.pathTokens.length, b.pathTokens.length) }, (_, i) => [a.pathTokens[i], b.pathTokens[i]]);\n\tfor (const [at, bt] of pairs) {\n\t\tif (!at || !bt) {\n\t\t\tconst extra = at ?? bt;\n\t\t\tif (extra?.kind === \"param\" ? extra.parts[0].kind === \"splat\" : false) return at ? 1 : -1;\n\t\t\treturn at ? -1 : 1;\n\t\t}\n\t\tconst aw = segmentWeight(at);\n\t\tconst bw = segmentWeight(bt);\n\t\tif (aw !== bw) return bw - aw;\n\t}\n\treturn a.pathPattern.localeCompare(b.pathPattern);\n};\nvar nestedRoutesFactory = (routeEntries) => {\n\tconst entryStack = structuredClone(routeEntries).sort(sortRoutes);\n\t/**\n\t* Group entries by name (at the same level, both layout and index share same name).\n\t*\n\t* Handle 3 cases:\n\t* - both index and layout exists\n\t* - only index exists\n\t* - only layout exists\n\t*\n\t* */\n\tconst transformEntries = (entries, parent) => {\n\t\treturn [...new Set(entries.map((e) => e.name))].flatMap((name) => {\n\t\t\tconst nameEntries = entryStack.flatMap(({ fileFullpath, ...entry }) => {\n\t\t\t\treturn entry.name === name ? [entry] : [];\n\t\t\t});\n\t\t\tconst index = nameEntries.find((e) => basename(e.file).startsWith(PAGE_INDEX_BASENAME));\n\t\t\tconst layout = nameEntries.find((e) => basename(e.file).startsWith(PAGE_LAYOUT_BASENAME));\n\t\t\tif (index || layout) return [{\n\t\t\t\tindex: index ? {\n\t\t\t\t\t...index,\n\t\t\t\t\tpathTokens: index.pathTokens.slice(parent?.pathTokens.length || 0)\n\t\t\t\t} : void 0,\n\t\t\t\tlayout: layout ? {\n\t\t\t\t\t...layout,\n\t\t\t\t\tpathTokens: layout.pathTokens.slice(parent?.pathTokens.length || 0)\n\t\t\t\t} : void 0,\n\t\t\t\tparent: parent?.name,\n\t\t\t\tchildren: transformEntries(findDescendantEntries(index || layout), index || layout)\n\t\t\t}];\n\t\t\treturn [];\n\t\t});\n\t};\n\t/**\n\t* Recursively finds direct descendant routes.\n\t*\n\t* \"Direct\" means the next existing route in the path hierarchy,\n\t* skipping intermediate path segments that don't have index/layout files.\n\t*\n\t* Example: blog/post/[slug]/index.tsx is a direct child of blog/index.tsx\n\t* even though \"post\" segment exists (it has no index.tsx).\n\t* */\n\tconst findDescendantEntries = ({ name, pathTokens }) => {\n\t\tconst potentialChildren = entryStack.filter((entry) => {\n\t\t\tif (entry.pathTokens.length <= pathTokens.length) return false;\n\t\t\tif (!entry.name.startsWith(`${name}/`)) return false;\n\t\t\treturn true;\n\t\t});\n\t\treturn potentialChildren.filter((child) => {\n\t\t\treturn !potentialChildren.some((intermediate) => {\n\t\t\t\tif (intermediate === child) return false;\n\t\t\t\tif (intermediate.pathTokens.length <= pathTokens.length) return false;\n\t\t\t\tif (intermediate.pathTokens.length >= child.pathTokens.length) return false;\n\t\t\t\treturn child.name.startsWith(`${intermediate.name}/`);\n\t\t\t});\n\t\t});\n\t};\n\treturn transformEntries(entryStack.filter((entry) => {\n\t\treturn !entryStack.some((potential) => {\n\t\t\tif (potential === entry) return false;\n\t\t\tif (potential.pathTokens.length >= entry.pathTokens.length) return false;\n\t\t\treturn entry.name.startsWith(`${potential.name}/`);\n\t\t});\n\t}));\n};\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/react-generator\",\n\tversion: \"0.1.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\n\timports: { \"#templates/*\": \"./src/templates/*\" },\n\texports: { \".\": {\n\t\t\"types\": \"./pkg/index.d.ts\",\n\t\t\"default\": \"./pkg/index.js\"\n\t} },\n\tscripts: {\n\t\t\"build\": \"wsbuild src/index.ts\",\n\t\t\"test\": \"vitest --root ../.. --project generators/react-generator\"\n\t},\n\tdevDependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@types/react\": \"^19.2.14\",\n\t\t\"@types/react-dom\": \"^19.2.3\",\n\t\t\"@vitejs/plugin-react\": \"^6.0.1\",\n\t\t\"path-to-regexp\": \"^8.4.2\",\n\t\t\"react\": \"^19.2.5\",\n\t\t\"react-dom\": \"^19.2.5\",\n\t\t\"react-router\": \"^7.14.2\"\n\t}\n};\n//#endregion\n//#region ../../packages/core/pkg/index.js\nvar defaults = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets,\n\t...RequestBodyTargets\n});\n//#endregion\n//#region ../../packages/core/pkg/generators/index.js\nvar routeRenderHelpers = () => {\n\treturn {\n\t\tpageLinkBase({ name, pathPattern, params }) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tname,\n\t\t\t\tpathPattern,\n\t\t\t\tparams\n\t\t\t});\n\t\t},\n\t\tserializeParamsTupleElements: (route) => {\n\t\t\treturn route.params.schema.map((p, i) => {\n\t\t\t\tif (p.kind === \"splat\") {\n\t\t\t\t\tconst suffix = route.params.schema[i + 1] ? \"\" : \"?\";\n\t\t\t\t\treturn `${p.const + suffix}: Array<string | number>`;\n\t\t\t\t}\n\t\t\t\treturn p.kind === \"optional\" ? `${p.const}?: string | number` : `${p.const}: string | number`;\n\t\t\t}).join(\", \");\n\t\t},\n\t\tserializeParamsLiteral(route) {\n\t\t\treturn `{ ${route.params.schema.map((e) => {\n\t\t\t\treturn [[e.name, e.kind === \"required\" ? \"\" : \"?\"].join(\"\"), e.kind === \"splat\" ? \"Array<string>\" : \"string\"].join(\": \");\n\t\t\t}).join(\"; \")} }`;\n\t\t}\n\t};\n};\n//#endregion\n//#region src/base.ts\nvar pathFactory = (pathTokens) => {\n\tconst routeName = pathTokens.map((e) => e.orig).join(\"/\");\n\tconst staticValue = ({ value }) => {\n\t\treturn normalizeStaticValue(value);\n\t};\n\tconst paramValue = (p) => {\n\t\tif (p.kind === \"splat\") return \"*\";\n\t\tif (p.kind === \"optional\") return `:${p.name}?`;\n\t\treturn `:${p.name}`;\n\t};\n\treturn pathTokens.flatMap((token) => {\n\t\tif (token.kind === \"static\") return [staticValue(token.parts[0])];\n\t\tif (token.kind === \"param\") return [paramValue(token.parts[0])];\n\t\tif (!/\\.\\w+$/.test(token.orig)) {\n\t\t\tconsole.warn(`❗${styleText([\"red\", \"bold\"], \"WARN\")}: React Router v7 only supports dot-suffix mixed segments (e.g. :param.html).`);\n\t\t\tconsole.warn(` ${styleText([\"magenta\"], token.orig)} in ${styleText([\"blue\"], routeName)} route won't match as expected.`);\n\t\t\tconsole.warn();\n\t\t}\n\t\treturn [token.parts.map((part) => {\n\t\t\treturn part.type === \"static\" ? staticValue(part) : paramValue(part);\n\t\t}).join(\"\")];\n\t}).join(\"/\");\n};\nvar traverseFactory = () => {\n\tconst hasSplatParam = (token) => {\n\t\tif (token?.kind === \"param\") return token.parts[0]?.kind === \"splat\";\n\t\treturn false;\n\t};\n\tconst traverseEntries = (entries) => {\n\t\treturn entries.flatMap(({ index, layout, children }) => {\n\t\t\tconst { name, pathTokens } = {\n\t\t\t\t...index,\n\t\t\t\t...layout\n\t\t\t};\n\t\t\tif (!pathTokens) return [];\n\t\t\tconst layoutName = `${name}:layout`;\n\t\t\tconst path = pathFactory(pathTokens);\n\t\t\tif (hasSplatParam(pathTokens.at(-1))) {\n\t\t\t\tif (index && layout) return [{\n\t\t\t\t\tname: layoutName,\n\t\t\t\t\tpath,\n\t\t\t\t\tcomponent: layout.id,\n\t\t\t\t\tchildren: [{\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tpath: \"*\",\n\t\t\t\t\t\tcomponent: index.id\n\t\t\t\t\t}]\n\t\t\t\t}];\n\t\t\t\tif (index) return [{\n\t\t\t\t\tpath,\n\t\t\t\t\tchildren: [{\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tpath: \"*\",\n\t\t\t\t\t\tcomponent: index.id\n\t\t\t\t\t}, ...traverseEntries(children)]\n\t\t\t\t}];\n\t\t\t\tif (layout) return [{\n\t\t\t\t\tname: layoutName,\n\t\t\t\t\tpath,\n\t\t\t\t\tcomponent: layout.id,\n\t\t\t\t\tchildren: traverseEntries(children)\n\t\t\t\t}];\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tif (index && layout) return [{\n\t\t\t\tname: layoutName,\n\t\t\t\tpath,\n\t\t\t\tcomponent: layout.id,\n\t\t\t\tchildren: [{\n\t\t\t\t\tname,\n\t\t\t\t\tindex: true,\n\t\t\t\t\tcomponent: index.id\n\t\t\t\t}, ...traverseEntries(children)]\n\t\t\t}];\n\t\t\tif (index) return [{\n\t\t\t\tpath,\n\t\t\t\tchildren: [{\n\t\t\t\t\tname,\n\t\t\t\t\tindex: true,\n\t\t\t\t\tcomponent: index.id\n\t\t\t\t}, ...traverseEntries(children)]\n\t\t\t}];\n\t\t\tif (layout) return [{\n\t\t\t\tname: layoutName,\n\t\t\t\tpath,\n\t\t\t\tcomponent: layout.id,\n\t\t\t\tchildren: traverseEntries(children)\n\t\t\t}];\n\t\t\treturn [];\n\t\t});\n\t};\n\treturn traverseEntries;\n};\nvar randomCongratMessage = () => {\n\tconst messages = [\n\t\t\"🎉 Well done! You just created a new React route.\",\n\t\t\"🚀 Success! A fresh React route is ready to roll.\",\n\t\t\"🌟 Nice work! Another React route added to your app.\",\n\t\t\"⚡ Quick and easy! Your new React route is good to go.\",\n\t\t\"🥳 Congrats! Your app just leveled up with a new React route.\",\n\t\t\"🧩 All set! A new React route has been scaffolded.\",\n\t\t\"🔧 Scaffold complete! Your new React route is in place.\",\n\t\t\"✨ Fantastic! Your new React route is ready.\",\n\t\t\"🎯 Nailed it! A brand new React route just landed.\",\n\t\t\"💫 Awesome! Another React route joins the lineup.\"\n\t];\n\treturn messages[Math.floor(Math.random() * messages.length)];\n};\n//#endregion\n//#region src/templates/lib/entry/client.hbs?raw\nvar client_default$1 = \"import { lazy } from \\\"react\\\";\\nimport { clientRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { loaderFactory } from \\\"../react\\\";\\n\\n{{#each pageEntries}}\\nconst {{id}}_component = lazy(() => import(\\\"{{ createImport \\\"pages\\\" file }}\\\"));\\nconst {{id}}_loader = () => import(\\\"{{ createImport \\\"pages\\\" file }}\\\");\\n{{/each}}\\n\\nconst NotFound = lazy(() => import(\\\"{{ createImport \\\"pages\\\" \\\"404.tsx\\\" }}\\\"));\\n\\nexport const createRoutes = (opt?: { withPreload?: boolean }) => {\\n const maybeLoader = loaderFactory(opt);\\n return [\\n {{#each nestedRoutes}}{{> routePartial}},\\n {{/each}}\\n // catch-all 404 - always last\\n {\\n path: \\\"*\\\",\\n Component: NotFound,\\n },\\n ];\\n}\\n\\nexport default clientRenderFactory(import.meta.env.SSR);\\n\";\n//#endregion\n//#region src/templates/lib/entry/routePartial.hbs?raw\nvar routePartial_default = \"{\\n {{#if name}}\\n id: \\\"{{name}}\\\",\\n {{/if}}\\n {{#if path}}\\n path: \\\"{{path}}\\\",\\n {{/if}}\\n {{#if index}}\\n index: true,\\n {{/if}}\\n {{#if component}}\\n Component: {{component}}_component,\\n ...maybeLoader({{component}}_loader as never),\\n {{/if}}\\n {{#if children.length}}\\n children: [ {{#each children}}{{> routePartial}}, {{/each}}],\\n {{/if}}\\n}\\n\";\n//#endregion\n//#region src/templates/lib/entry/server.hbs?raw\nvar server_default$1 = \"import { serverRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { loaderFactory } from \\\"../react\\\";\\n\\n{{#each pageEntries}}\\nimport * as {{id}} from \\\"{{ createImport \\\"pages\\\" file }}\\\";\\nconst {{id}}_component = {{id}}.default;\\nconst {{id}}_loader = async () => {{id}};\\n{{/each}}\\n\\nimport NotFound from \\\"{{ createImport \\\"pages\\\" \\\"404.tsx\\\" }}\\\";\\n\\nexport const createRoutes = (opt?: { withPreload?: boolean }) => {\\n const maybeLoader = loaderFactory(opt);\\n return [\\n {{#each nestedRoutes}}{{> routePartial}},\\n {{/each}}\\n // catch-all 404 - always last\\n {\\n path: \\\"*\\\",\\n Component: NotFound,\\n },\\n ];\\n}\\n\\nexport default serverRenderFactory();\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/404.hbs?raw\nvar _404_default$1 = \"/* @jsxImportSource react */\\n\\nimport styles from \\\"./styles.module.css\\\";\\n\\nexport default function PageSample(props: {\\n headline?: string;\\n}) {\\n return (\\n <div className={styles.container}>\\n <div className={styles.card}>\\n\\n <h2 className={styles.title}>\\n {props.headline || \\\"404: Not Found\\\"}\\n </h2>\\n <br />\\n\\n <div className={styles.stepsBox}>\\n <h2 className={styles.stepsTitle}>\\n Something went wrong...\\n </h2>\\n 🚧 No page found here\\n </div>\\n\\n <div className={styles.footer}>\\n <p className={styles.footerText}>\\n Built for reliability and developer experience\\n </p>\\n <br />\\n <a\\n href=\\\"https://kosmojs.dev/\\\"\\n className={styles.docsLink}\\n target=\\\"_blank\\\"\\n rel=\\\"noopener noreferrer\\\"\\n >\\n KosmoJS Documentation ➜\\n </a>\\n </div>\\n </div>\\n </div>\\n );\\n}\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/page.hbs?raw\nvar page_default$1 = \"/* @jsxImportSource react */\\n\\nimport styles from \\\"./styles.module.css\\\";\\n\\nexport default function PageSample(props: {\\n message: string;\\n routeName: string;\\n pathMap: { page: string; pages: string; api: string }\\n}) {\\n return (\\n <div data-page-route={props.routeName} className={styles.container}>\\n <div className={styles.card}>\\n\\n <h2 className={styles.subtitle}>\\n {props.message}\\n </h2>\\n <br />\\n\\n <div className={styles.stepsBox}>\\n <ul className={styles.stepsList}>\\n <li>\\n Edit this page at <code>{props.pathMap.page}</code>\\n </li>\\n <li>\\n Create new pages by adding folders in\\n <code>{props.pathMap.pages}/</code>\\n </li>\\n <li>\\n Add API endpoints in\\n <code>{props.pathMap.api}/</code>\\n </li>\\n </ul>\\n </div>\\n\\n <div className={styles.footer}>\\n <p className={styles.footerText}>\\n Built for reliability and developer experience\\n </p>\\n <br />\\n <a\\n href=\\\"https://kosmojs.dev/\\\"\\n className={styles.docsLink}\\n target=\\\"_blank\\\"\\n rel=\\\"noopener noreferrer\\\"\\n >\\n KosmoJS Documentation ➜\\n </a>\\n </div>\\n </div>\\n </div>\\n );\\n}\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/styles.css?raw\nvar styles_default = \"* {\\n margin: 0;\\n padding: 0;\\n box-sizing: border-box;\\n}\\n\\n.container {\\n min-height: 100vh;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\\n font-family:\\n -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\",\\n Arial, sans-serif;\\n padding: 2rem;\\n}\\n\\n.card {\\n background: white;\\n border-radius: 1rem;\\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\\n max-width: 48rem;\\n padding: 3rem;\\n}\\n\\n.header {\\n text-align: center;\\n margin-bottom: 2rem;\\n}\\n\\n.icon {\\n font-size: 2rem;\\n margin-bottom: 1rem;\\n}\\n\\n.title {\\n font-size: 2.5rem;\\n font-weight: 700;\\n color: #4a5568;\\n margin-bottom: 0.5rem;\\n}\\n\\n.subtitle {\\n font-size: 1.125rem;\\n color: #718096;\\n}\\n\\n.featuresBox {\\n background: #f7fafc;\\n border-radius: 0.5rem;\\n padding: 1.5rem;\\n margin-bottom: 2rem;\\n}\\n\\n.featuresTitle {\\n font-size: 1.125rem;\\n font-weight: 600;\\n color: #4a5568;\\n margin-bottom: 1rem;\\n display: flex;\\n align-items: center;\\n gap: 0.5rem;\\n}\\n\\n.featuresSubtitle {\\n color: #667eea;\\n font-weight: 600;\\n margin-bottom: 0.5rem;\\n}\\n\\n.featuresList {\\n list-style: none;\\n display: flex;\\n flex-direction: column;\\n gap: 0.75rem;\\n}\\n\\n.featureItem {\\n display: flex;\\n align-items: center;\\n gap: 0.5rem;\\n color: #4a5568;\\n}\\n\\n.featureBullet {\\n color: #48bb78;\\n}\\n\\n.stepsBox {\\n border-left: 4px solid #667eea;\\n padding-left: 1rem;\\n margin-bottom: 2rem;\\n}\\n\\n.stepsTitle {\\n font-size: 1.125rem;\\n font-weight: 600;\\n color: #4a5568;\\n margin-bottom: 0.5rem;\\n}\\n\\n.stepsList {\\n color: #4a5568;\\n padding-left: 1.25rem;\\n line-height: 1.75;\\n}\\n\\n.stepsList code {\\n background: #edf2f7;\\n padding: 0.125rem 0.375rem;\\n border-radius: 0.25rem;\\n font-family: Monaco, Consolas, monospace;\\n font-size: 0.875rem;\\n}\\n\\n.footer {\\n text-align: center;\\n padding-top: 1.5rem;\\n border-top: 1px solid #e2e8f0;\\n}\\n\\n.footerText {\\n color: #718096;\\n font-size: 0.875rem;\\n}\\n\\n.docsLink {\\n color: #667eea;\\n text-decoration: none;\\n font-weight: 600;\\n display: inline-flex;\\n align-items: center;\\n gap: 0.25rem;\\n}\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/welcome.hbs?raw\nvar welcome_default$1 = \"/* @jsxImportSource react */\\n\\nimport styles from \\\"./styles.module.css\\\";\\n\\nexport default function WelcomePage() {\\n return (\\n <div className={styles.container}>\\n <div className={styles.card}>\\n <div className={styles.header}>\\n <div className={styles.icon}>✨</div>\\n <h1 className={styles.title}>Welcome to KosmoJS</h1>\\n <p className={styles.subtitle}>\\n Type-safe full-stack development with Vite\\n </p>\\n </div>\\n\\n <div className={styles.featuresBox}>\\n <h2 className={styles.featuresTitle}>\\n Powered by React and ready to perform\\n </h2>\\n <div className={styles.featuresSubtitle}>What's included:</div>\\n <ul className={styles.featuresList}>\\n <li className={styles.featureItem}>\\n <span className={styles.featureBullet}>🔹</span>\\n Directory-based routing\\n </li>\\n <li className={styles.featureItem}>\\n <span className={styles.featureBullet}>🔹</span>\\n End-to-End Type Safety\\n </li>\\n <li className={styles.featureItem}>\\n <span className={styles.featureBullet}>🔹</span>\\n Generated Fetch Clients\\n </li>\\n </ul>\\n </div>\\n\\n <div className={styles.stepsBox}>\\n <h2 className={styles.stepsTitle}>Next Steps 🢂</h2>\\n <ul className={styles.stepsList}>\\n <li>\\n Edit this page at <code>pages/index/index.tsx</code>\\n </li>\\n <li>Create new routes by adding folders in <code>pages/</code></li>\\n <li>Add API endpoints in <code>api/</code></li>\\n </ul>\\n </div>\\n\\n <div className={styles.footer}>\\n <p className={styles.footerText}>\\n Built for reliability and developer experience\\n </p>\\n <br />\\n <a\\n href=\\\"https://kosmojs.dev/\\\"\\n className={styles.docsLink}\\n target=\\\"_blank\\\"\\n rel=\\\"noopener noreferrer\\\"\\n >\\n Read the documentation ➜\\n </a>\\n </div>\\n </div>\\n </div>\\n );\\n}\\n\";\n//#endregion\n//#region src/templates/lib/react.ts?raw\nvar react_default = \"export type ComponentLoader = () => Promise<{\\n loader?: (arg: unknown) => Promise<unknown>;\\n}>;\\n\\nexport const loaderFactory = (opt?: { withPreload?: boolean }) => {\\n return (componentLoader: ComponentLoader) => {\\n const loader = async (arg: unknown) => {\\n try {\\n const component = await componentLoader();\\n return typeof component.loader === \\\"function\\\"\\n ? component.loader(arg)\\n : undefined;\\n } catch (error) {\\n console.error(error);\\n return;\\n }\\n };\\n return opt?.withPreload ? { loader } : {};\\n };\\n};\\n\";\n//#endregion\n//#region src/templates/lib/router.hbs?raw\nvar router_default$1 = \"import type { JSX } from \\\"react\\\";\\nimport type { RouteObject } from \\\"react-router\\\";\\nimport { createRouterFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nexport default createRouterFactory<RouteObject, JSX.Element>();\\n\";\n//#endregion\n//#region src/templates/src/App.tsx?raw\nvar App_default = \"import { Outlet } from \\\"react-router\\\";\\n\\nexport default function App() {\\n return <Outlet />;\\n}\\n\";\n//#endregion\n//#region src/templates/src/components/Link.tsx?raw\nvar Link_default = \"import {\\n type LinkProps as RouterLinkProps,\\n Link as RouterLink,\\n} from \\\"react-router\\\";\\nimport type { ReactNode } from \\\"react\\\";\\n\\nimport { pageRouteMap, type LinkProps } from \\\"{{ createImport 'libCore' }}\\\";\\n\\nexport default function Link(\\n props: Omit<RouterLinkProps, \\\"to\\\"> & {\\n to: LinkProps;\\n query?: Record<string | number, unknown>;\\n children: ReactNode;\\n },\\n) {\\n const { to, query, children, ...restProps } = props;\\n\\n const href = () => {\\n const [key, ...params] = to;\\n return pageRouteMap[key]?.base(params as never, query);\\n };\\n\\n return (\\n <RouterLink {...restProps} to={href()}>\\n {children}\\n </RouterLink>\\n );\\n}\\n\";\n//#endregion\n//#region src/templates/src/entry/client.tsx?raw\nvar client_default = \"import { createRoot, hydrateRoot } from \\\"react-dom/client\\\";\\n\\nimport renderFactory, { createRoutes } from \\\"{{ createImport 'libEntry' 'client' }}\\\";\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes({ withPreload: true });\\nconst { clientRouter } = routerFactory(routes);\\n\\nconst root = document.getElementById(\\\"app\\\");\\n\\nif (root) {\\n renderFactory(() => {\\n return {\\n async mount() {\\n const page = await clientRouter();\\n createRoot(root).render(page);\\n },\\n async hydrate() {\\n const page = await clientRouter();\\n hydrateRoot(root, page);\\n },\\n };\\n });\\n} else {\\n console.error(\\\"❌ Root element not found!\\\");\\n}\\n\";\n//#endregion\n//#region src/templates/src/entry/server.tsx?raw\nvar server_default = \"import { renderToString } from \\\"react-dom/server\\\";\\n\\nimport renderFactory, { createRoutes } from \\\"{{ createImport 'libEntry' 'server' }}\\\";\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes({ withPreload: false });\\nconst { serverRouter } = routerFactory(routes);\\n\\nexport default renderFactory(() => {\\n return {\\n async renderToString(url, { assets }) {\\n const page = await serverRouter(url);\\n const head = assets.map(({ tag }) => tag).join(\\\"\\\\n\\\");\\n const html = renderToString(page);\\n return { head, html };\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/templates/src/index.html?raw\nvar src_default$1 = \"<!doctype html>\\n<html lang=\\\"en\\\">\\n<head>\\n <meta charset=\\\"UTF-8\\\" />\\n <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" />\\n <!--app-head-->\\n</head>\\n<body>\\n <div id=\\\"app\\\"><!--app-html--></div>\\n <script type=\\\"module\\\" src=\\\"/{{ entryDir }}/client.tsx\\\"><\\/script>\\n</body>\\n</html>\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/404.tsx?raw\nvar _404_default = \"import PageSample from \\\"{{ createImport 'lib' 'pageSamples/404.tsx' }}\\\";\\n\\nexport default function Page() {\\n return <PageSample />;\\n}\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/layout.hbs?raw\nvar layout_default = \"import { Outlet } from \\\"react-router\\\";\\n\\nexport default function Layout() {\\n return <Outlet />;\\n}\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/page.hbs?raw\nvar page_default = \"import PageSample from \\\"{{ createImport \\\"lib\\\" \\\"pageSamples/page.tsx\\\" }}\\\";\\n\\nexport default function Page() {\\n return PageSample({\\n message: \\\"{{message}}\\\",\\n routeName: \\\"{{route.name}}\\\",\\n pathMap: {\\n page: \\\"{{ createImport \\\"pages\\\" route.file }}\\\",\\n pages: \\\"{{ createImport \\\"pages\\\" }}\\\",\\n api: \\\"{{ createImport \\\"api\\\" }}\\\",\\n },\\n });\\n}\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/welcome.hbs?raw\nvar welcome_default = \"export { default } from \\\"{{ createImport \\\"lib\\\" \\\"pageSamples/welcome.tsx\\\" }}\\\";\\n\";\n//#endregion\n//#region src/templates/src/router.tsx?raw\nvar router_default = \"import {\\n createBrowserRouter,\\n createStaticHandler,\\n createStaticRouter,\\n RouterProvider,\\n StaticRouterProvider,\\n} from \\\"react-router\\\";\\n\\nimport { base } from \\\"{{ createImport 'libCore' }}\\\";\\nimport routerFactory from \\\"{{ createImport 'lib' 'router' }}\\\";\\nimport App from \\\"./App\\\";\\n\\nexport default routerFactory((routes) => {\\n const routeStack = [\\n {\\n path: \\\"/\\\",\\n Component: App,\\n children: routes,\\n },\\n ];\\n\\n const handler = createStaticHandler(routeStack, { basename: base });\\n\\n return {\\n async clientRouter() {\\n const router = createBrowserRouter(routeStack, { basename: base });\\n return <RouterProvider router={router} />;\\n },\\n async serverRouter(url) {\\n const context = await handler.query(new Request(url.href));\\n\\n if (context instanceof Response) {\\n // handled by SSR server\\n throw context;\\n }\\n\\n const router = createStaticRouter(routeStack, context);\\n\\n return <StaticRouterProvider router={router} context={context} />;\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((meta, sourceFolder, options) => {\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { renderToFile: deployLibFile } = renderFactory({\n\t\thelpers: {\n\t\t\t...createImportHelpers({ origin: \"lib\" }),\n\t\t\t...routeRenderHelpers()\n\t\t},\n\t\tpartials: { routePartial: routePartial_default }\n\t});\n\tconst { renderToFile: deploySrcFile } = renderFactory({ helpers: createImportHelpers({ origin: \"src\" }) });\n\tconst entriesTraverser = traverseFactory();\n\tconst overwrite = (content) => !content?.trim().length;\n\tconst templateResolver = createTemplateResolver(options?.templates, page_default);\n\tconst generateSrcFiles = async (entries) => {\n\t\tfor (const { kind, entry } of entries) if (kind === \"pageRoute\") await deploySrcFile(createPath.pages(entry.file), entry.name === \"index\" ? welcome_default : templateResolver(entry.name, entry), {\n\t\t\troute: entry,\n\t\t\tmessage: randomCongratMessage()\n\t\t}, { overwrite });\n\t\telse if (kind === \"pageLayout\") await deploySrcFile(createPath.pages(entry.file), layout_default, { route: entry }, { overwrite });\n\t};\n\tconst generateLibFiles = async (entries) => {\n\t\tconst indexRoutes = entries.flatMap(({ kind, entry }) => {\n\t\t\treturn kind === \"pageRoute\" ? [entry] : [];\n\t\t}).sort(sortRoutes);\n\t\tconst pageEntries = entries.flatMap(({ kind, entry }) => {\n\t\t\treturn kind === \"pageRoute\" || kind === \"pageLayout\" ? [entry] : [];\n\t\t});\n\t\tconst nestedRoutes = entriesTraverser(nestedRoutesFactory(pageEntries));\n\t\tfor (const [file, template] of [[\"client.ts\", client_default$1], [\"server.ts\", server_default$1]]) await deployLibFile(createPath.libEntry(file), template, {\n\t\t\tpageEntries,\n\t\t\tnestedRoutes\n\t\t});\n\t\tawait deployLibFile(createPath.lib(\"router.ts\"), router_default$1, {\n\t\t\tentries,\n\t\t\tindexRoutes\n\t\t});\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tasync start() {\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"env.d.ts\", \"\"],\n\t\t\t\t[\"react.ts\", react_default],\n\t\t\t\t[\"pageSamples/styles.module.css\", styles_default],\n\t\t\t\t[\"pageSamples/welcome.tsx\", welcome_default$1],\n\t\t\t\t[\"pageSamples/page.tsx\", page_default$1],\n\t\t\t\t[\"pageSamples/404.tsx\", _404_default$1]\n\t\t\t]) await deployLibFile(createPath.lib(file), template, {});\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"pages/404.tsx\", _404_default],\n\t\t\t\t[\"components/Link.tsx\", Link_default],\n\t\t\t\t[\"App.tsx\", App_default],\n\t\t\t\t[\"router.tsx\", router_default]\n\t\t\t]) await deploySrcFile(createPath.src(file), template, { entryDir: defaults.entryDir }, { overwrite });\n\t\t\tawait deploySrcFile(createPath.src(\"index.html\"), src_default$1, { entryDir: defaults.entryDir }, { overwrite: (c) => {\n\t\t\t\treturn c?.trim().length ? !c.replace(/<!--[\\s\\S]*?-->/g, \"\").trim().length : true;\n\t\t\t} });\n\t\t\tfor (const [file, template] of [[\"client.tsx\", client_default], [\"server.tsx\", server_default]]) await deploySrcFile(createPath.entry(file), template, {}, { overwrite });\n\t\t},\n\t\tasync watch(entries, event) {\n\t\t\tif (!event || event.kind === \"create\") await generateSrcFiles(entries);\n\t\t\tawait generateLibFiles(entries);\n\t\t},\n\t\tasync build(entries) {\n\t\t\tawait generateSrcFiles(entries);\n\t\t\tawait generateLibFiles(entries);\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator((options) => {\n\tconst meta = {\n\t\tname: \"React\",\n\t\tdependencies: {\n\t\t\treact: package_default.devDependencies.react,\n\t\t\t\"react-router\": package_default.devDependencies[\"react-router\"],\n\t\t\t\"path-to-regexp\": package_default.devDependencies[\"path-to-regexp\"]\n\t\t},\n\t\tdevDependencies: {\n\t\t\t\"@vitejs/plugin-react\": package_default.devDependencies[\"@vitejs/plugin-react\"],\n\t\t\t\"@types/react\": package_default.devDependencies[\"@types/react\"],\n\t\t\t\"@types/react-dom\": package_default.devDependencies[\"@types/react-dom\"],\n\t\t\t\"react-dom\": package_default.devDependencies[\"react-dom\"]\n\t\t},\n\t\tjsxImportSource: \"react\"\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tfactory: (sourceFolder) => factory_default(meta, sourceFolder, options)\n\t};\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { basename, dirname, join, resolve } from \"node:path\";\nimport { styleText } from \"node:util\";\nimport crc from \"crc/crc32\";\nimport \"tfusion\";\nimport \"ts-morph\";\nimport picomatch from \"picomatch\";\nimport { access, constants, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport handlebars from \"handlebars\";\nimport \"path-to-regexp\";\nimport \"mime-types\";\nimport \"@topcli/spinner\";\n//#region ../../packages/lib/pkg/index.js\nvar defaults$1 = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets$1 = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets$1 = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets$1,\n\t...RequestBodyTargets$1\n});\nvar defineGenerator = (f) => f;\nvar defineGeneratorFactory = (f) => f;\nvar createTemplateResolver = (customTemplates, defaultTemplate) => {\n\tconst templates = Object.entries({ ...customTemplates }).map(([pattern, template]) => [picomatch(pattern), template]);\n\treturn (pattern, entry) => {\n\t\tconst match = templates.find(([isMatch]) => isMatch(pattern));\n\t\tif (!match) return defaultTemplate;\n\t\treturn typeof match[1] === \"function\" ? match[1](entry) : match[1];\n\t};\n};\nvar pathResolver = (sourceFolder) => {\n\tconst createPath = (...a) => {\n\t\treturn sourceFolder.root ? resolve(sourceFolder.root, join(...a)) : join(...a);\n\t};\n\tconst createImport = {\n\t\tsrc(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults$1.srcPrefix, ...a) : join(defaults$1.appPrefix, defaults$1.srcDir, sourceFolder.name, ...a);\n\t\t},\n\t\tapi(a, o) {\n\t\t\treturn this.src([defaults$1.apiDir, ...a], o);\n\t\t},\n\t\tpages(a, o) {\n\t\t\treturn this.src([defaults$1.pagesDir, ...a], o);\n\t\t},\n\t\tlib(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults$1.libPrefix, ...a) : join(defaults$1.appPrefix, defaults$1.libDir, sourceFolder.name, ...a);\n\t\t},\n\t\tlibCore(a, o) {\n\t\t\treturn this.lib([\"core\", ...a], o);\n\t\t},\n\t\tlibApi(a, o) {\n\t\t\treturn this.lib([defaults$1.apiDir, ...a], o);\n\t\t},\n\t\tlibEntry(a, o) {\n\t\t\treturn this.lib([defaults$1.entryDir, ...a], o);\n\t\t}\n\t};\n\treturn {\n\t\tcreatePath: {\n\t\t\tsrc(...a) {\n\t\t\t\treturn createPath(defaults$1.srcDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tapi(...a) {\n\t\t\t\treturn this.src(defaults$1.apiDir, ...a);\n\t\t\t},\n\t\t\tpages(...a) {\n\t\t\t\treturn this.src(defaults$1.pagesDir, ...a);\n\t\t\t},\n\t\t\tentry(...a) {\n\t\t\t\treturn this.src(defaults$1.entryDir, ...a);\n\t\t\t},\n\t\t\tlib(...a) {\n\t\t\t\treturn createPath(defaults$1.libDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tlibCore(...a) {\n\t\t\t\treturn this.lib(\"core\", ...a);\n\t\t\t},\n\t\t\tlibApi(...a) {\n\t\t\t\treturn this.lib(defaults$1.apiDir, ...a);\n\t\t\t},\n\t\t\tlibEntry(...a) {\n\t\t\t\treturn this.lib(defaults$1.entryDir, ...a);\n\t\t\t},\n\t\t\tlibPages(...a) {\n\t\t\t\treturn this.lib(defaults$1.pagesDir, ...a);\n\t\t\t},\n\t\t\tdistDir(...a) {\n\t\t\t\treturn createPath(sourceFolder.distDir, sourceFolder.name, ...a);\n\t\t\t}\n\t\t},\n\t\tcreateImport,\n\t\tcreateImportHelpers(o) {\n\t\t\tif (![\"src\", \"lib\"].includes(o?.origin)) throw new Error(`createImportHelpers: required exactly one argument of shape { origin: \"src|lib\" }`);\n\t\t\treturn { createImport(key, ...a) {\n\t\t\t\treturn createImport[key](a.slice(0, -1), o);\n\t\t\t} };\n\t\t}\n\t};\n};\nvar pathExists = async (path) => {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\nvar render = (template, context, options) => {\n\tconst { noEscape = true, renderer = handlebars } = { ...options };\n\treturn renderer.compile(template, { noEscape })(context);\n};\nvar renderToFile = async (file, template, context, options) => {\n\tconst content = render(template, context, options);\n\t/**\n\t* Two fs calls (exists + read) are worth it to avoid touching the file\n\t* and triggering watchers unnecessarily.\n\t* */\n\tif (await pathExists(file)) {\n\t\tconst { overwrite = true } = { ...options };\n\t\tif (overwrite === false) return;\n\t\tconst fileContent = await readFile(file, \"utf8\");\n\t\tif (typeof overwrite === \"function\" && !overwrite(fileContent)) return;\n\t\tif (crc(content) === crc(fileContent)) return;\n\t}\n\tawait mkdir(dirname(file), { recursive: true });\n\tawait writeFile(file, content, \"utf8\");\n};\nvar renderFactory = (options) => {\n\tconst createRenderer = (selfOoptions) => {\n\t\tconst renderer = handlebars.create();\n\t\trenderer.registerPartial({\n\t\t\t...options?.partials,\n\t\t\t...selfOoptions?.partials\n\t\t});\n\t\trenderer.registerHelper({\n\t\t\t...options?.helpers,\n\t\t\t...selfOoptions?.helpers\n\t\t});\n\t\treturn renderer;\n\t};\n\treturn {\n\t\trender(template, context, selfOoptions) {\n\t\t\treturn render(template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t},\n\t\tasync renderToFile(file, template, context, selfOoptions) {\n\t\t\treturn renderToFile(options?.outdir ? join(options.outdir, file) : file, template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t}\n\t};\n};\nvar normalizeStaticValue = (value) => {\n\treturn value.replace(/\\+/g, \"\\\\\\\\+\");\n};\nvar API_INDEX_PATTERN = `index.ts`;\nvar API_USE_PATTERN = `use.ts`;\nvar PAGE_INDEX_BASENAME = \"index\";\nvar PAGE_INDEX_PATTERN = `${PAGE_INDEX_BASENAME}.{tsx,vue,mdx,md}`;\nvar PAGE_LAYOUT_BASENAME = \"layout\";\nvar PAGE_LAYOUT_PATTERN = `${PAGE_LAYOUT_BASENAME}.{tsx,vue,mdx}`;\n`${defaults$1.apiDir}${API_INDEX_PATTERN}`, `${defaults$1.apiDir}${API_USE_PATTERN}`, `${defaults$1.pagesDir}${PAGE_INDEX_PATTERN}`, `${defaults$1.pagesDir}${PAGE_LAYOUT_PATTERN}`;\n/**\n* Weight of a single path segment.\n*\n* Fixed values per kind prevent complex mixed segments\n* from outscoring multiple statics.\n*\n* static: 4 (exact match, most specific)\n* mixed: 3+ (static + param parts; more statics = slightly higher)\n* required: 2 (matches any single segment)\n* optional: 1 (may or may not match)\n* splat: 0 (matches anything, least specific)\n* */\nvar segmentWeight = (token) => {\n\tif (token.kind === \"static\") return 4;\n\tif (token.kind === \"mixed\") {\n\t\tlet statics = 0;\n\t\tlet optionals = 0;\n\t\tfor (const part of token.parts) if (part.type === \"static\") statics += 1;\n\t\telse if (part.kind === \"optional\" || part.kind === \"splat\") optionals += 1;\n\t\treturn 3 + statics * .01 - optionals * .005;\n\t}\n\tswitch (token.parts[0].kind) {\n\t\tcase \"required\": return 2;\n\t\tcase \"optional\": return 1;\n\t\tcase \"splat\": return 0;\n\t}\n};\n/**\n* Compare two route entries for registration order.\n*\n* More specific routes sort first (higher priority).\n* Segments are compared left-to-right; first difference wins.\n*\n* When one route is a prefix of the other, the trailing segment\n* determines order: a trailing splat loses (shorter sibling first),\n* anything else wins (longer route is more specific).\n*\n* At equal weight and length, lexicographic tiebreak ensures\n* deterministic ordering across JS engines.\n* */\nvar sortRoutes = (a, b) => {\n\tconst pairs = Array.from({ length: Math.max(a.pathTokens.length, b.pathTokens.length) }, (_, i) => [a.pathTokens[i], b.pathTokens[i]]);\n\tfor (const [at, bt] of pairs) {\n\t\tif (!at || !bt) {\n\t\t\tconst extra = at ?? bt;\n\t\t\tif (extra?.kind === \"param\" ? extra.parts[0].kind === \"splat\" : false) return at ? 1 : -1;\n\t\t\treturn at ? -1 : 1;\n\t\t}\n\t\tconst aw = segmentWeight(at);\n\t\tconst bw = segmentWeight(bt);\n\t\tif (aw !== bw) return bw - aw;\n\t}\n\treturn a.pathPattern.localeCompare(b.pathPattern);\n};\nvar nestedRoutesFactory = (routeEntries) => {\n\tconst entryStack = structuredClone(routeEntries).sort(sortRoutes);\n\t/**\n\t* Group entries by name (at the same level, both layout and index share same name).\n\t*\n\t* Handle 3 cases:\n\t* - both index and layout exists\n\t* - only index exists\n\t* - only layout exists\n\t*\n\t* */\n\tconst transformEntries = (entries, parent) => {\n\t\treturn [...new Set(entries.map((e) => e.name))].flatMap((name) => {\n\t\t\tconst nameEntries = entryStack.flatMap(({ fileFullpath, ...entry }) => {\n\t\t\t\treturn entry.name === name ? [entry] : [];\n\t\t\t});\n\t\t\tconst index = nameEntries.find((e) => basename(e.file).startsWith(PAGE_INDEX_BASENAME));\n\t\t\tconst layout = nameEntries.find((e) => basename(e.file).startsWith(PAGE_LAYOUT_BASENAME));\n\t\t\tif (index || layout) return [{\n\t\t\t\tindex: index ? {\n\t\t\t\t\t...index,\n\t\t\t\t\tpathTokens: index.pathTokens.slice(parent?.pathTokens.length || 0)\n\t\t\t\t} : void 0,\n\t\t\t\tlayout: layout ? {\n\t\t\t\t\t...layout,\n\t\t\t\t\tpathTokens: layout.pathTokens.slice(parent?.pathTokens.length || 0)\n\t\t\t\t} : void 0,\n\t\t\t\tparent: parent?.name,\n\t\t\t\tchildren: transformEntries(findDescendantEntries(index || layout), index || layout)\n\t\t\t}];\n\t\t\treturn [];\n\t\t});\n\t};\n\t/**\n\t* Recursively finds direct descendant routes.\n\t*\n\t* \"Direct\" means the next existing route in the path hierarchy,\n\t* skipping intermediate path segments that don't have index/layout files.\n\t*\n\t* Example: blog/post/[slug]/index.tsx is a direct child of blog/index.tsx\n\t* even though \"post\" segment exists (it has no index.tsx).\n\t* */\n\tconst findDescendantEntries = ({ name, pathTokens }) => {\n\t\tconst potentialChildren = entryStack.filter((entry) => {\n\t\t\tif (entry.pathTokens.length <= pathTokens.length) return false;\n\t\t\tif (!entry.name.startsWith(`${name}/`)) return false;\n\t\t\treturn true;\n\t\t});\n\t\treturn potentialChildren.filter((child) => {\n\t\t\treturn !potentialChildren.some((intermediate) => {\n\t\t\t\tif (intermediate === child) return false;\n\t\t\t\tif (intermediate.pathTokens.length <= pathTokens.length) return false;\n\t\t\t\tif (intermediate.pathTokens.length >= child.pathTokens.length) return false;\n\t\t\t\treturn child.name.startsWith(`${intermediate.name}/`);\n\t\t\t});\n\t\t});\n\t};\n\treturn transformEntries(entryStack.filter((entry) => {\n\t\treturn !entryStack.some((potential) => {\n\t\t\tif (potential === entry) return false;\n\t\t\tif (potential.pathTokens.length >= entry.pathTokens.length) return false;\n\t\t\treturn entry.name.startsWith(`${potential.name}/`);\n\t\t});\n\t}));\n};\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/solid-generator\",\n\tversion: \"0.1.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\n\timports: { \"#templates/*\": \"./src/templates/*\" },\n\texports: { \".\": {\n\t\t\"types\": \"./pkg/index.d.ts\",\n\t\t\"default\": \"./pkg/index.js\"\n\t} },\n\tscripts: {\n\t\t\"build\": \"wsbuild src/index.ts\",\n\t\t\"test\": \"vitest --root ../.. --project generators/solid-generator\"\n\t},\n\tdevDependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@solidjs/router\": \"^0.16.1\",\n\t\t\"path-to-regexp\": \"^8.4.2\",\n\t\t\"solid-js\": \"^1.9.12\",\n\t\t\"vite-plugin-solid\": \"^2.11.12\"\n\t}\n};\n//#endregion\n//#region ../../packages/core/pkg/index.js\nvar defaults = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets,\n\t...RequestBodyTargets\n});\n//#endregion\n//#region ../../packages/core/pkg/generators/index.js\nvar routeRenderHelpers = () => {\n\treturn {\n\t\tpageLinkBase({ name, pathPattern, params }) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tname,\n\t\t\t\tpathPattern,\n\t\t\t\tparams\n\t\t\t});\n\t\t},\n\t\tserializeParamsTupleElements: (route) => {\n\t\t\treturn route.params.schema.map((p, i) => {\n\t\t\t\tif (p.kind === \"splat\") {\n\t\t\t\t\tconst suffix = route.params.schema[i + 1] ? \"\" : \"?\";\n\t\t\t\t\treturn `${p.const + suffix}: Array<string | number>`;\n\t\t\t\t}\n\t\t\t\treturn p.kind === \"optional\" ? `${p.const}?: string | number` : `${p.const}: string | number`;\n\t\t\t}).join(\", \");\n\t\t},\n\t\tserializeParamsLiteral(route) {\n\t\t\treturn `{ ${route.params.schema.map((e) => {\n\t\t\t\treturn [[e.name, e.kind === \"required\" ? \"\" : \"?\"].join(\"\"), e.kind === \"splat\" ? \"Array<string>\" : \"string\"].join(\": \");\n\t\t\t}).join(\"; \")} }`;\n\t\t}\n\t};\n};\n//#endregion\n//#region src/base.ts\nvar traverseFactory = () => {\n\tconst hasSplatParam = (token) => {\n\t\tif (token?.kind === \"param\") return token.parts[0]?.kind === \"splat\";\n\t\treturn false;\n\t};\n\tconst hasOptionalParam = (token) => {\n\t\tif (token?.kind === \"param\") return token.parts[0]?.kind === \"optional\" || hasSplatParam(token);\n\t\treturn false;\n\t};\n\tconst traverseEntries = (entries) => {\n\t\treturn entries.flatMap(({ index, layout, children }) => {\n\t\t\tconst { pathTokens } = {\n\t\t\t\t...index,\n\t\t\t\t...layout\n\t\t\t};\n\t\t\tconst path = pathFactory(pathTokens.map((token, i) => {\n\t\t\t\tif (token.kind !== \"param\") return token;\n\t\t\t\tif (hasOptionalParam(pathTokens[i + 1]) || children.some((e) => e.index?.pathTokens.some(hasOptionalParam))) return {\n\t\t\t\t\t...token,\n\t\t\t\t\tparts: [{\n\t\t\t\t\t\t...token.parts[0],\n\t\t\t\t\t\tkind: \"required\"\n\t\t\t\t\t}]\n\t\t\t\t};\n\t\t\t\treturn token;\n\t\t\t}));\n\t\t\tconst lastToken = pathTokens.at(-1);\n\t\t\tif (hasSplatParam(lastToken)) {\n\t\t\t\tconst indexPath = pathFactory([lastToken]);\n\t\t\t\tif (index && layout) return [{\n\t\t\t\t\tpath,\n\t\t\t\t\tcomponent: layout.id,\n\t\t\t\t\tchildren: [{\n\t\t\t\t\t\tpath: indexPath,\n\t\t\t\t\t\tcomponent: index.id\n\t\t\t\t\t}]\n\t\t\t\t}];\n\t\t\t\tif (index) return [{\n\t\t\t\t\tpath,\n\t\t\t\t\tchildren: [{\n\t\t\t\t\t\tpath: indexPath,\n\t\t\t\t\t\tcomponent: index.id\n\t\t\t\t\t}, ...traverseEntries(children)]\n\t\t\t\t}];\n\t\t\t\tif (layout) return [{\n\t\t\t\t\tpath,\n\t\t\t\t\tcomponent: layout.id,\n\t\t\t\t\tchildren: traverseEntries(children)\n\t\t\t\t}];\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tif (index && layout) return [{\n\t\t\t\tpath,\n\t\t\t\tcomponent: layout.id,\n\t\t\t\tchildren: [{\n\t\t\t\t\tpath: \"/\",\n\t\t\t\t\tcomponent: index.id\n\t\t\t\t}, ...traverseEntries(children)]\n\t\t\t}];\n\t\t\tif (index) return [{\n\t\t\t\tpath,\n\t\t\t\tchildren: [{\n\t\t\t\t\tpath: \"/\",\n\t\t\t\t\tcomponent: index.id\n\t\t\t\t}, ...traverseEntries(children)]\n\t\t\t}];\n\t\t\tif (layout) return [{\n\t\t\t\tpath,\n\t\t\t\tcomponent: layout.id,\n\t\t\t\tchildren: traverseEntries(children)\n\t\t\t}];\n\t\t\treturn [];\n\t\t});\n\t};\n\treturn traverseEntries;\n};\nvar pathFactory = (pathTokens) => {\n\tconst routeName = pathTokens.map((e) => e.orig).join(\"/\");\n\tconst staticValue = ({ value }) => {\n\t\treturn normalizeStaticValue(value);\n\t};\n\tconst paramValue = (p) => {\n\t\tif (p.kind === \"splat\") return `*${p.name}`;\n\t\tif (p.kind === \"optional\") return `:${p.name}?`;\n\t\treturn `:${p.name}`;\n\t};\n\treturn pathTokens.flatMap((token) => {\n\t\tif (token.kind === \"static\") return [staticValue(token.parts[0])];\n\t\tif (token.kind === \"param\") return [paramValue(token.parts[0])];\n\t\tif (token.parts.length) {\n\t\t\tconsole.warn(`❗${styleText([\"red\", \"bold\"], \"WARN\")}: At the moment Solid Router does not support mixed path segments.`);\n\t\t\tconsole.warn(` ${styleText([\"magenta\"], token.orig)} segment in ${styleText([\"blue\"], routeName)} route won't match as expected.`);\n\t\t\tconsole.warn();\n\t\t}\n\t\treturn [token.parts.map((part) => {\n\t\t\treturn part.type === \"static\" ? staticValue(part) : paramValue(part);\n\t\t}).join(\"\")];\n\t}).join(\"/\");\n};\nvar randomCongratMessage = () => {\n\tconst messages = [\n\t\t\"🎉 Well done! You just created a new Solid route.\",\n\t\t\"🚀 Success! A fresh Solid route is ready to roll.\",\n\t\t\"🌟 Nice work! Another Solid route added to your app.\",\n\t\t\"🧩 All set! A new Solid route has been scaffolded.\",\n\t\t\"🔧 Scaffold complete! Your new Solid route is in place.\",\n\t\t\"✅ Built! Your Solid route is scaffolded and ready.\",\n\t\t\"✨ Fantastic! Your new Solid route is good to go.\",\n\t\t\"🎯 Nailed it! A brand new Solid route just landed.\",\n\t\t\"💫 Awesome! Another Solid route joins the party.\",\n\t\t\"⚡ Lightning fast! A new Solid route created successfully.\"\n\t];\n\treturn messages[Math.floor(Math.random() * messages.length)];\n};\n//#endregion\n//#region src/templates/lib/entry/client.hbs?raw\nvar client_default$1 = \"import { lazy } from \\\"solid-js\\\";\\nimport { clientRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { loaderFactory } from \\\"../solid\\\";\\n\\n{{#each pageEntries}}\\nconst {{id}}_component = lazy(() => import(\\\"{{ createImport \\\"pages\\\" file }}\\\"));\\nconst {{id}}_loader = () => import(\\\"{{ createImport \\\"pages\\\" file }}\\\");\\n{{/each}}\\n\\nconst NotFound = lazy(() => import(\\\"{{ createImport \\\"pages\\\" \\\"404.tsx\\\" }}\\\"));\\n\\nexport const createRoutes = (opt?: { withPreload?: boolean }) => {\\n const maybeLoader = loaderFactory(opt);\\n return [\\n {{#each nestedRoutes}}{{> routePartial}},\\n {{/each}}\\n // catch-all 404 - always last\\n {\\n path: \\\"*\\\",\\n component: NotFound,\\n },\\n ];\\n}\\n\\nexport default clientRenderFactory(import.meta.env.SSR);\\n\";\n//#endregion\n//#region src/templates/lib/entry/routePartial.hbs?raw\nvar routePartial_default = \"{\\n path: \\\"{{path}}\\\",\\n {{#if component}}\\n component: {{component}}_component,\\n ...maybeLoader({{component}}_loader as never),\\n {{/if}}\\n {{#if children.length}}\\n children: [ {{#each children}}{{> routePartial}}, {{/each}}],\\n {{/if}}\\n}\\n\";\n//#endregion\n//#region src/templates/lib/entry/server.hbs?raw\nvar server_default$1 = \"import { serverRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { loaderFactory } from \\\"../solid\\\";\\n\\n{{#each pageEntries}}\\nimport * as {{id}} from \\\"{{ createImport \\\"pages\\\" file }}\\\";\\nconst {{id}}_component = {{id}}.default;\\nconst {{id}}_loader = async () => {{id}};\\n{{/each}}\\n\\nimport NotFound from \\\"{{ createImport \\\"pages\\\" \\\"404.tsx\\\" }}\\\";\\n\\nexport const createRoutes = (opt?: { withPreload?: boolean }) => {\\n const maybeLoader = loaderFactory(opt);\\n return [\\n {{#each nestedRoutes}}{{> routePartial}},\\n {{/each}}\\n // catch-all 404 - always last\\n {\\n path: \\\"*\\\",\\n component: NotFound,\\n },\\n ];\\n}\\n\\nexport default serverRenderFactory();\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/404.hbs?raw\nvar _404_default$1 = \"/* @jsxImportSource solid-js */\\n\\nimport styles from \\\"./styles.module.css\\\";\\n\\nexport default function PageSample(props: {\\n headline?: string;\\n}) {\\n return (\\n <div class={styles.container}>\\n <div class={styles.card}>\\n\\n <h2 class={styles.title}>\\n {props.headline || \\\"404: Not Found\\\"}\\n </h2>\\n <br />\\n\\n <div class={styles.stepsBox}>\\n <h2 class={styles.stepsTitle}>\\n Something went wrong...\\n </h2>\\n 🚧 No page found here\\n </div>\\n\\n <div class={styles.footer}>\\n <p class={styles.footerText}>\\n Built for reliability and developer experience\\n </p>\\n <br />\\n <a\\n href=\\\"https://kosmojs.dev/\\\"\\n class={styles.docsLink}\\n target=\\\"_blank\\\"\\n rel=\\\"noopener noreferrer\\\"\\n >\\n KosmoJS Documentation ➜\\n </a>\\n </div>\\n </div>\\n </div>\\n );\\n}\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/page.hbs?raw\nvar page_default$1 = \"/* @jsxImportSource solid-js */\\n\\nimport styles from \\\"./styles.module.css\\\";\\n\\nexport default function PageSample(props: {\\n message: string;\\n routeName: string;\\n pathMap: { page: string; pages: string; api: string }\\n}) {\\n return (\\n <div data-page-route={props.routeName} class={styles.container}>\\n <div class={styles.card}>\\n\\n <h2 class={styles.subtitle}>\\n {props.message}\\n </h2>\\n <br />\\n\\n <div class={styles.stepsBox}>\\n <ul class={styles.stepsList}>\\n <li>\\n Edit this page at <code>{props.pathMap.page}</code>\\n </li>\\n <li>\\n Create new pages by adding folders in\\n <code>{props.pathMap.pages}/</code>\\n </li>\\n <li>\\n Add API endpoints in\\n <code>{props.pathMap.api}/</code>\\n </li>\\n </ul>\\n </div>\\n\\n <div class={styles.footer}>\\n <p class={styles.footerText}>\\n Built for reliability and developer experience\\n </p>\\n <br />\\n <a\\n href=\\\"https://kosmojs.dev/\\\"\\n class={styles.docsLink}\\n target=\\\"_blank\\\"\\n rel=\\\"noopener noreferrer\\\"\\n >\\n KosmoJS Documentation ➜\\n </a>\\n </div>\\n </div>\\n </div>\\n );\\n}\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/styles.css?raw\nvar styles_default = \"* {\\n margin: 0;\\n padding: 0;\\n box-sizing: border-box;\\n}\\n\\n.container {\\n min-height: 100vh;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\\n font-family:\\n -apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, \\\"Helvetica Neue\\\",\\n Arial, sans-serif;\\n padding: 2rem;\\n}\\n\\n.card {\\n background: white;\\n border-radius: 1rem;\\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\\n max-width: 48rem;\\n padding: 3rem;\\n}\\n\\n.header {\\n text-align: center;\\n margin-bottom: 2rem;\\n}\\n\\n.icon {\\n font-size: 2rem;\\n margin-bottom: 1rem;\\n}\\n\\n.title {\\n font-size: 2.5rem;\\n font-weight: 700;\\n color: #4a5568;\\n margin-bottom: 0.5rem;\\n}\\n\\n.subtitle {\\n font-size: 1.125rem;\\n color: #718096;\\n}\\n\\n.featuresBox {\\n background: #f7fafc;\\n border-radius: 0.5rem;\\n padding: 1.5rem;\\n margin-bottom: 2rem;\\n}\\n\\n.featuresTitle {\\n font-size: 1.125rem;\\n font-weight: 600;\\n color: #4a5568;\\n margin-bottom: 1rem;\\n display: flex;\\n align-items: center;\\n gap: 0.5rem;\\n}\\n\\n.featuresSubtitle {\\n color: #667eea;\\n font-weight: 600;\\n margin-bottom: 0.5rem;\\n}\\n\\n.featuresList {\\n list-style: none;\\n display: flex;\\n flex-direction: column;\\n gap: 0.75rem;\\n}\\n\\n.featureItem {\\n display: flex;\\n align-items: center;\\n gap: 0.5rem;\\n color: #4a5568;\\n}\\n\\n.featureBullet {\\n color: #48bb78;\\n}\\n\\n.stepsBox {\\n border-left: 4px solid #667eea;\\n padding-left: 1rem;\\n margin-bottom: 2rem;\\n}\\n\\n.stepsTitle {\\n font-size: 1.125rem;\\n font-weight: 600;\\n color: #4a5568;\\n margin-bottom: 0.5rem;\\n}\\n\\n.stepsList {\\n color: #4a5568;\\n padding-left: 1.25rem;\\n line-height: 1.75;\\n}\\n\\n.stepsList code {\\n background: #edf2f7;\\n padding: 0.125rem 0.375rem;\\n border-radius: 0.25rem;\\n font-family: Monaco, Consolas, monospace;\\n font-size: 0.875rem;\\n}\\n\\n.footer {\\n text-align: center;\\n padding-top: 1.5rem;\\n border-top: 1px solid #e2e8f0;\\n}\\n\\n.footerText {\\n color: #718096;\\n font-size: 0.875rem;\\n}\\n\\n.docsLink {\\n color: #667eea;\\n text-decoration: none;\\n font-weight: 600;\\n display: inline-flex;\\n align-items: center;\\n gap: 0.25rem;\\n}\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/welcome.hbs?raw\nvar welcome_default$1 = \"/* @jsxImportSource solid-js */\\n\\nimport styles from \\\"./styles.module.css\\\";\\n\\nexport default function WelcomePage() {\\n return (\\n <div class={styles.container}>\\n <div class={styles.card}>\\n <div class={styles.header}>\\n <div class={styles.icon}>✨</div>\\n <h1 class={styles.title}>Welcome to KosmoJS</h1>\\n <p class={styles.subtitle}>\\n Type-safe full-stack development with Vite\\n </p>\\n </div>\\n\\n <div class={styles.featuresBox}>\\n <h2 class={styles.featuresTitle}>\\n Powered by SolidJS and ready to perform\\n </h2>\\n <div class={styles.featuresSubtitle}>What's included:</div>\\n <ul class={styles.featuresList}>\\n <li class={styles.featureItem}>\\n <span class={styles.featureBullet}>🔹</span>\\n Directory-based routing\\n </li>\\n <li class={styles.featureItem}>\\n <span class={styles.featureBullet}>🔹</span>\\n End-to-End Type Safety\\n </li>\\n <li class={styles.featureItem}>\\n <span class={styles.featureBullet}>🔹</span>\\n Generated Fetch Clients\\n </li>\\n </ul>\\n </div>\\n\\n <div class={styles.stepsBox}>\\n <h2 class={styles.stepsTitle}>Next Steps 🢂</h2>\\n <ul class={styles.stepsList}>\\n <li>\\n Edit this page at <code>pages/index/index.tsx</code>\\n </li>\\n <li>Create new routes by adding folders in <code>pages/</code></li>\\n <li>Add API endpoints in <code>api/</code></li>\\n </ul>\\n </div>\\n\\n <div class={styles.footer}>\\n <p class={styles.footerText}>\\n Built for reliability and developer experience\\n </p>\\n <br />\\n <a\\n href=\\\"https://kosmojs.dev/\\\"\\n class={styles.docsLink}\\n target=\\\"_blank\\\"\\n rel=\\\"noopener noreferrer\\\"\\n >\\n Read the documentation ➜\\n </a>\\n </div>\\n </div>\\n </div>\\n );\\n}\\n\";\n//#endregion\n//#region src/templates/lib/router.hbs?raw\nvar router_default$1 = \"import type { JSX } from \\\"solid-js\\\";\\nimport type { RouteDefinition } from \\\"@solidjs/router\\\";\\nimport { createRouterFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nexport default createRouterFactory<RouteDefinition, JSX.Element>();\\n\";\n//#endregion\n//#region src/templates/lib/solid.ts?raw\nvar solid_default = \"export type ComponentLoader = () => Promise<{\\n preload?: () => Promise<unknown>;\\n}>;\\n\\nexport const loaderFactory = (opt?: { withPreload?: boolean }) => {\\n return (componentLoader: ComponentLoader) => {\\n const preload = async () => {\\n try {\\n const component = await componentLoader();\\n return typeof component.preload === \\\"function\\\"\\n ? component.preload\\n : undefined;\\n } catch (error) {\\n console.error(error);\\n return;\\n }\\n };\\n return opt?.withPreload ? { preload } : {};\\n };\\n};\\n\";\n//#endregion\n//#region src/templates/lib/unwrap.ts?raw\nvar unwrap_default = \"export type MaybeWrapped<T> = import(\\\"solid-js/store\\\").Store<T> | T;\\n\\nexport { unwrap } from \\\"solid-js/store\\\";\\n\";\n//#endregion\n//#region src/templates/src/App.tsx?raw\nvar App_default = \"import type { ParentComponent } from \\\"solid-js\\\";\\n\\nconst App: ParentComponent = (props) => {\\n return props.children;\\n};\\n\\nexport default App;\\n\";\n//#endregion\n//#region src/templates/src/components/Link.tsx?raw\nvar Link_default = \"import { A, type AnchorProps } from \\\"@solidjs/router\\\";\\nimport { type JSXElement, splitProps } from \\\"solid-js\\\";\\n\\nimport { pageRouteMap, type LinkProps } from \\\"{{ createImport 'libCore' }}\\\";\\n\\nexport default function Link(\\n props: Omit<AnchorProps, \\\"href\\\"> & {\\n to: LinkProps;\\n query?: Record<string | number, unknown>;\\n children: JSXElement;\\n },\\n) {\\n const [knownProps, restProps] = splitProps(props, [\\n \\\"to\\\",\\n \\\"query\\\",\\n \\\"children\\\",\\n ]);\\n\\n const href = () => {\\n const [key, ...params] = knownProps.to;\\n return pageRouteMap[key]?.base(params as never, knownProps.query);\\n };\\n\\n return <A {...{ ...restProps, href: href() }}>{knownProps.children}</A>;\\n}\\n\";\n//#endregion\n//#region src/templates/src/entry/client.tsx?raw\nvar client_default = \"import { hydrate, render } from \\\"solid-js/web\\\";\\n\\nimport renderFactory, { createRoutes } from \\\"{{ createImport 'libEntry' 'client' }}\\\";\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes({ withPreload: true });\\nconst { clientRouter } = routerFactory(routes);\\n\\nconst root = document.getElementById(\\\"app\\\");\\n\\nif (root) {\\n renderFactory(() => {\\n return {\\n async mount() {\\n const page = await clientRouter();\\n render(() => page, root);\\n },\\n async hydrate() {\\n const page = await clientRouter();\\n hydrate(() => page, root)\\n },\\n }\\n });\\n} else {\\n console.error(\\\"❌ Root element not found!\\\");\\n}\\n\";\n//#endregion\n//#region src/templates/src/entry/server.tsx?raw\nvar server_default = \"import { renderToString, generateHydrationScript } from \\\"solid-js/web\\\";\\n\\nimport renderFactory, { createRoutes } from \\\"{{ createImport 'libEntry' 'server' }}\\\";\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes({ withPreload: false });\\nconst { serverRouter } = routerFactory(routes);\\n\\nexport default renderFactory(() => {\\n const hydrationScript = generateHydrationScript();\\n return {\\n async renderToString(url, { assets }) {\\n const page = await serverRouter(url);\\n const head = assets.reduce(\\n (head, { tag }) => `${head}\\\\n${tag}`,\\n hydrationScript,\\n );\\n const html = renderToString(() => page);\\n return { head, html };\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/templates/src/index.html?raw\nvar src_default$1 = \"<!doctype html>\\n<html lang=\\\"en\\\">\\n<head>\\n <meta charset=\\\"UTF-8\\\" />\\n <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" />\\n <!--app-head-->\\n</head>\\n<body>\\n <div id=\\\"app\\\"><!--app-html--></div>\\n <script type=\\\"module\\\" src=\\\"/{{ entryDir }}/client.tsx\\\"><\\/script>\\n</body>\\n</html>\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/404.tsx?raw\nvar _404_default = \"import PageSample from \\\"{{ createImport 'lib' 'pageSamples/404.tsx' }}\\\";\\n\\nexport default function Page() {\\n return <PageSample />;\\n}\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/layout.hbs?raw\nvar layout_default = \"import type { ParentComponent } from \\\"solid-js\\\";\\n\\nconst Layout: ParentComponent = (props) => {\\n return props.children;\\n};\\n\\nexport default Layout;\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/page.hbs?raw\nvar page_default = \"import PageSample from \\\"{{ createImport \\\"lib\\\" \\\"pageSamples/page.tsx\\\" }}\\\";\\n\\nexport default function Page() {\\n return PageSample({\\n message: \\\"{{message}}\\\",\\n routeName: \\\"{{route.name}}\\\",\\n pathMap: {\\n page: \\\"{{ createImport \\\"pages\\\" route.file }}\\\",\\n pages: \\\"{{ createImport \\\"pages\\\" }}\\\",\\n api: \\\"{{ createImport \\\"api\\\" }}\\\",\\n },\\n })\\n}\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/welcome.hbs?raw\nvar welcome_default = \"export { default } from \\\"{{ createImport \\\"lib\\\" \\\"pageSamples/welcome.tsx\\\" }}\\\";\\n\";\n//#endregion\n//#region src/templates/src/router.tsx?raw\nvar router_default = \"import { Router } from \\\"@solidjs/router\\\";\\n\\nimport { base } from \\\"{{ createImport 'libCore' }}\\\";\\nimport routerFactory from \\\"{{ createImport 'lib' 'router' }}\\\";\\nimport App from \\\"./App\\\";\\n\\nexport default routerFactory((routes) => {\\n return {\\n async clientRouter() {\\n return <Router root={App} base={base}>{routes}</Router>;\\n },\\n async serverRouter(url) {\\n return <Router root={App} base={base} url={url.pathname}>\\n {routes}\\n </Router>;\\n },\\n }\\n});\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((meta, sourceFolder, options) => {\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { renderToFile: deployLibFile } = renderFactory({\n\t\thelpers: {\n\t\t\t...createImportHelpers({ origin: \"lib\" }),\n\t\t\t...routeRenderHelpers()\n\t\t},\n\t\tpartials: { routePartial: routePartial_default }\n\t});\n\tconst { renderToFile: deploySrcFile } = renderFactory({ helpers: createImportHelpers({ origin: \"src\" }) });\n\tconst entriesTraverser = traverseFactory();\n\tconst overwrite = (content) => !content?.trim().length;\n\tconst templateResolver = createTemplateResolver(options?.templates, page_default);\n\tconst generateSrcFiles = async (entries) => {\n\t\tfor (const { kind, entry } of entries) if (kind === \"pageRoute\") await deploySrcFile(createPath.pages(entry.file), entry.name === \"index\" ? welcome_default : templateResolver(entry.name, entry), {\n\t\t\troute: entry,\n\t\t\tmessage: randomCongratMessage()\n\t\t}, { overwrite });\n\t\telse if (kind === \"pageLayout\") await deploySrcFile(createPath.pages(entry.file), layout_default, { route: entry }, { overwrite });\n\t};\n\tconst generateLibFiles = async (entries) => {\n\t\tconst indexRoutes = entries.flatMap(({ kind, entry }) => {\n\t\t\treturn kind === \"pageRoute\" ? [entry] : [];\n\t\t}).sort(sortRoutes);\n\t\tconst pageEntries = entries.flatMap(({ kind, entry }) => {\n\t\t\treturn kind === \"pageRoute\" || kind === \"pageLayout\" ? [entry] : [];\n\t\t});\n\t\tconst nestedRoutes = entriesTraverser(nestedRoutesFactory(pageEntries));\n\t\tfor (const [file, template] of [[\"client.ts\", client_default$1], [\"server.ts\", server_default$1]]) await deployLibFile(createPath.libEntry(file), template, {\n\t\t\tpageEntries,\n\t\t\tnestedRoutes\n\t\t});\n\t\tawait deployLibFile(createPath.lib(\"router.ts\"), router_default$1, {\n\t\t\tentries,\n\t\t\tindexRoutes\n\t\t});\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tasync start() {\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"env.d.ts\", \"\"],\n\t\t\t\t[\"solid.ts\", solid_default],\n\t\t\t\t[\"unwrap.ts\", unwrap_default],\n\t\t\t\t[\"pageSamples/styles.module.css\", styles_default],\n\t\t\t\t[\"pageSamples/welcome.tsx\", welcome_default$1],\n\t\t\t\t[\"pageSamples/page.tsx\", page_default$1],\n\t\t\t\t[\"pageSamples/404.tsx\", _404_default$1]\n\t\t\t]) await deployLibFile(createPath.lib(file), template, {});\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"pages/404.tsx\", _404_default],\n\t\t\t\t[\"components/Link.tsx\", Link_default],\n\t\t\t\t[\"App.tsx\", App_default],\n\t\t\t\t[\"router.tsx\", router_default]\n\t\t\t]) await deploySrcFile(createPath.src(file), template, { entryDir: defaults.entryDir }, { overwrite });\n\t\t\tawait deploySrcFile(createPath.src(\"index.html\"), src_default$1, { entryDir: defaults.entryDir }, { overwrite: (c) => {\n\t\t\t\treturn c?.trim().length ? !c.replace(/<!--[\\s\\S]*?-->/g, \"\").trim().length : true;\n\t\t\t} });\n\t\t\tfor (const [file, template] of [[\"client.tsx\", client_default], [\"server.tsx\", server_default]]) await deploySrcFile(createPath.entry(file), template, {}, { overwrite });\n\t\t},\n\t\tasync watch(entries, event) {\n\t\t\tif (!event || event.kind === \"create\") await generateSrcFiles(entries);\n\t\t\tawait generateLibFiles(entries);\n\t\t},\n\t\tasync build(entries) {\n\t\t\tawait generateSrcFiles(entries);\n\t\t\tawait generateLibFiles(entries);\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator((options) => {\n\tconst meta = {\n\t\tname: \"SolidJS\",\n\t\tdependencies: {\n\t\t\t\"solid-js\": package_default.devDependencies[\"solid-js\"],\n\t\t\t\"@solidjs/router\": package_default.devDependencies[\"@solidjs/router\"],\n\t\t\t\"path-to-regexp\": package_default.devDependencies[\"path-to-regexp\"]\n\t\t},\n\t\tdevDependencies: { \"vite-plugin-solid\": package_default.devDependencies[\"vite-plugin-solid\"] },\n\t\tjsxImportSource: \"solid-js\"\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tfactory: (sourceFolder) => factory_default(meta, sourceFolder, options)\n\t};\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { join, resolve } from \"node:path\";\nimport { styleText } from \"node:util\";\nimport \"tfusion\";\nimport \"ts-morph\";\nimport { access, constants, cp, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport \"handlebars\";\nimport \"path-to-regexp\";\nimport \"mime-types\";\nimport { Spinner } from \"@topcli/spinner\";\nimport { build } from \"vite\";\n//#region ../../packages/lib/pkg/index.js\nvar defaults = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets,\n\t...RequestBodyTargets\n});\nvar defineGenerator = (f) => f;\nvar defineGeneratorFactory = (f) => f;\nvar pathResolver = (sourceFolder) => {\n\tconst createPath = (...a) => {\n\t\treturn sourceFolder.root ? resolve(sourceFolder.root, join(...a)) : join(...a);\n\t};\n\tconst createImport = {\n\t\tsrc(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.srcPrefix, ...a) : join(defaults.appPrefix, defaults.srcDir, sourceFolder.name, ...a);\n\t\t},\n\t\tapi(a, o) {\n\t\t\treturn this.src([defaults.apiDir, ...a], o);\n\t\t},\n\t\tpages(a, o) {\n\t\t\treturn this.src([defaults.pagesDir, ...a], o);\n\t\t},\n\t\tlib(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.libPrefix, ...a) : join(defaults.appPrefix, defaults.libDir, sourceFolder.name, ...a);\n\t\t},\n\t\tlibCore(a, o) {\n\t\t\treturn this.lib([\"core\", ...a], o);\n\t\t},\n\t\tlibApi(a, o) {\n\t\t\treturn this.lib([defaults.apiDir, ...a], o);\n\t\t},\n\t\tlibEntry(a, o) {\n\t\t\treturn this.lib([defaults.entryDir, ...a], o);\n\t\t}\n\t};\n\treturn {\n\t\tcreatePath: {\n\t\t\tsrc(...a) {\n\t\t\t\treturn createPath(defaults.srcDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tapi(...a) {\n\t\t\t\treturn this.src(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tpages(...a) {\n\t\t\t\treturn this.src(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tentry(...a) {\n\t\t\t\treturn this.src(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlib(...a) {\n\t\t\t\treturn createPath(defaults.libDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tlibCore(...a) {\n\t\t\t\treturn this.lib(\"core\", ...a);\n\t\t\t},\n\t\t\tlibApi(...a) {\n\t\t\t\treturn this.lib(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tlibEntry(...a) {\n\t\t\t\treturn this.lib(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlibPages(...a) {\n\t\t\t\treturn this.lib(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tdistDir(...a) {\n\t\t\t\treturn createPath(sourceFolder.distDir, sourceFolder.name, ...a);\n\t\t\t}\n\t\t},\n\t\tcreateImport,\n\t\tcreateImportHelpers(o) {\n\t\t\tif (![\"src\", \"lib\"].includes(o?.origin)) throw new Error(`createImportHelpers: required exactly one argument of shape { origin: \"src|lib\" }`);\n\t\t\treturn { createImport(key, ...a) {\n\t\t\t\treturn createImport[key](a.slice(0, -1), o);\n\t\t\t} };\n\t\t}\n\t};\n};\n`${defaults.apiDir}`, `${defaults.apiDir}`, `${defaults.pagesDir}`, `${defaults.pagesDir}`;\nvar spinnerFactory = (startText) => {\n\tconst spinner = new Spinner().start(startText);\n\tlet _text = startText;\n\treturn {\n\t\ttext(text) {\n\t\t\t_text = text;\n\t\t\tspinner.text = text;\n\t\t},\n\t\tappend(text) {\n\t\t\tspinner.text = `${_text} › ${text}`;\n\t\t},\n\t\tsucceed(text) {\n\t\t\tif (text) this.append(text);\n\t\t\telse this.text(_text);\n\t\t\tspinner.succeed();\n\t\t},\n\t\tfailed(text) {\n\t\t\tif (text) this.text([_text, text].join(\"\\n\"));\n\t\t\tspinner.failed();\n\t\t}\n\t};\n};\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((meta, sourceFolder) => {\n\tconst { generators = [], refineTypeName, ...config } = { ...sourceFolder.config };\n\tconst { createPath } = pathResolver(sourceFolder);\n\treturn {\n\t\tmeta,\n\t\tasync postBuild() {\n\t\t\tconst dir = createPath.distDir(\"ssg\");\n\t\t\tconst ssrServerPath = resolve(dir, \"../ssr/server.js\");\n\t\t\tif (!await access(ssrServerPath, constants.F_OK).then(() => true, () => false)) {\n\t\t\t\tconsole.error();\n\t\t\t\tconsole.error(styleText(\"red\", `❗Please enable ssrGenerator in ${sourceFolder.name}/kosmo.config.ts`));\n\t\t\t\tconsole.error(\" SSG generator can not run without SSR server\");\n\t\t\t\tconsole.error();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst spinner = spinnerFactory(`${sourceFolder.name}: SSG`);\n\t\t\tspinner.append(\"preparing...\");\n\t\t\tconst { createDisposableServer } = await import(ssrServerPath);\n\t\t\tawait cp(resolve(dir, \"../client/assets\"), join(dir, \"assets\"), { recursive: true });\n\t\t\tconst plugins = [...config?.plugins || []];\n\t\t\tfor (const base of generators) plugins.push(...base.plugins?.(sourceFolder, \"build\") || []);\n\t\t\tspinner.append(\"bundling routes...\");\n\t\t\tawait build({\n\t\t\t\tconfigFile: false,\n\t\t\t\troot: createPath.lib(),\n\t\t\t\tappType: \"custom\",\n\t\t\t\tplugins,\n\t\t\t\tdefine: { ...config.define },\n\t\t\t\tresolve: {\n\t\t\t\t\t...config.resolve,\n\t\t\t\t\ttsconfigPaths: true,\n\t\t\t\t\tconditions: [\"node\"]\n\t\t\t\t},\n\t\t\t\tbuild: {\n\t\t\t\t\tssr: createPath.lib(\"ssg.ts\"),\n\t\t\t\t\ttarget: \"esnext\",\n\t\t\t\t\tsourcemap: false,\n\t\t\t\t\temptyOutDir: true,\n\t\t\t\t\trolldownOptions: { output: {\n\t\t\t\t\t\tdir,\n\t\t\t\t\t\tentryFileNames: \"routes.js\",\n\t\t\t\t\t\tformat: \"esm\"\n\t\t\t\t\t} }\n\t\t\t\t}\n\t\t\t});\n\t\t\ttry {\n\t\t\t\tconst routes = await import(join(dir, \"routes.js\")).then((e) => e.default);\n\t\t\t\tcreateDisposableServer(async (port) => {\n\t\t\t\t\tfor (const [i, route] of routes.entries()) {\n\t\t\t\t\t\tspinner.append(`[ ${i + 1} of ${routes.length} ] ${route}`);\n\t\t\t\t\t\tconst html = await fetchRoute(port, route);\n\t\t\t\t\t\tif (html === void 0) continue;\n\t\t\t\t\t\tawait mkdir(join(dir, route), { recursive: true });\n\t\t\t\t\t\tawait writeFile(join(dir, join(route, \"index.html\")), html, \"utf8\");\n\t\t\t\t\t}\n\t\t\t\t\tspinner.succeed(\"done ✨\");\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\tawait rm(`${dir}/routes.js`);\n\t\t\t}\n\t\t}\n\t};\n});\nvar fetchRoute = async (port, path) => {\n\ttry {\n\t\tconst url = `http://localhost:${port}${path}`;\n\t\treturn await (await fetch(url)).text();\n\t} catch (error) {\n\t\tconsole.error(styleText(\"red\", `✗ SSG: Failed generating ${path} route: ${error.message}`));\n\t\treturn;\n\t}\n};\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator(() => {\n\tconst meta = {\n\t\tname: \"SSG\",\n\t\tslot: \"ssg\"\n\t};\n\treturn {\n\t\tmeta,\n\t\tfactory: (sourceFolder) => factory_default(meta, sourceFolder)\n\t};\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { builtinModules } from \"node:module\";\nimport { dirname, join, resolve } from \"node:path\";\nimport crc from \"crc/crc32\";\nimport \"tfusion\";\nimport \"ts-morph\";\nimport { access, constants, cp, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport handlebars from \"handlebars\";\nimport \"path-to-regexp\";\nimport \"mime-types\";\nimport \"@topcli/spinner\";\nimport { build } from \"vite\";\n//#region ../../packages/lib/pkg/index.js\nvar defaults = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets,\n\t...RequestBodyTargets\n});\nvar defineGenerator = (f) => f;\nvar defineGeneratorFactory = (f) => f;\nvar pathResolver = (sourceFolder) => {\n\tconst createPath = (...a) => {\n\t\treturn sourceFolder.root ? resolve(sourceFolder.root, join(...a)) : join(...a);\n\t};\n\tconst createImport = {\n\t\tsrc(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.srcPrefix, ...a) : join(defaults.appPrefix, defaults.srcDir, sourceFolder.name, ...a);\n\t\t},\n\t\tapi(a, o) {\n\t\t\treturn this.src([defaults.apiDir, ...a], o);\n\t\t},\n\t\tpages(a, o) {\n\t\t\treturn this.src([defaults.pagesDir, ...a], o);\n\t\t},\n\t\tlib(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.libPrefix, ...a) : join(defaults.appPrefix, defaults.libDir, sourceFolder.name, ...a);\n\t\t},\n\t\tlibCore(a, o) {\n\t\t\treturn this.lib([\"core\", ...a], o);\n\t\t},\n\t\tlibApi(a, o) {\n\t\t\treturn this.lib([defaults.apiDir, ...a], o);\n\t\t},\n\t\tlibEntry(a, o) {\n\t\t\treturn this.lib([defaults.entryDir, ...a], o);\n\t\t}\n\t};\n\treturn {\n\t\tcreatePath: {\n\t\t\tsrc(...a) {\n\t\t\t\treturn createPath(defaults.srcDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tapi(...a) {\n\t\t\t\treturn this.src(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tpages(...a) {\n\t\t\t\treturn this.src(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tentry(...a) {\n\t\t\t\treturn this.src(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlib(...a) {\n\t\t\t\treturn createPath(defaults.libDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tlibCore(...a) {\n\t\t\t\treturn this.lib(\"core\", ...a);\n\t\t\t},\n\t\t\tlibApi(...a) {\n\t\t\t\treturn this.lib(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tlibEntry(...a) {\n\t\t\t\treturn this.lib(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlibPages(...a) {\n\t\t\t\treturn this.lib(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tdistDir(...a) {\n\t\t\t\treturn createPath(sourceFolder.distDir, sourceFolder.name, ...a);\n\t\t\t}\n\t\t},\n\t\tcreateImport,\n\t\tcreateImportHelpers(o) {\n\t\t\tif (![\"src\", \"lib\"].includes(o?.origin)) throw new Error(`createImportHelpers: required exactly one argument of shape { origin: \"src|lib\" }`);\n\t\t\treturn { createImport(key, ...a) {\n\t\t\t\treturn createImport[key](a.slice(0, -1), o);\n\t\t\t} };\n\t\t}\n\t};\n};\nvar pathExists = async (path) => {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\nvar render = (template, context, options) => {\n\tconst { noEscape = true, renderer = handlebars } = { ...options };\n\treturn renderer.compile(template, { noEscape })(context);\n};\nvar renderToFile = async (file, template, context, options) => {\n\tconst content = render(template, context, options);\n\t/**\n\t* Two fs calls (exists + read) are worth it to avoid touching the file\n\t* and triggering watchers unnecessarily.\n\t* */\n\tif (await pathExists(file)) {\n\t\tconst { overwrite = true } = { ...options };\n\t\tif (overwrite === false) return;\n\t\tconst fileContent = await readFile(file, \"utf8\");\n\t\tif (typeof overwrite === \"function\" && !overwrite(fileContent)) return;\n\t\tif (crc(content) === crc(fileContent)) return;\n\t}\n\tawait mkdir(dirname(file), { recursive: true });\n\tawait writeFile(file, content, \"utf8\");\n};\nvar renderFactory = (options) => {\n\tconst createRenderer = (selfOoptions) => {\n\t\tconst renderer = handlebars.create();\n\t\trenderer.registerPartial({\n\t\t\t...options?.partials,\n\t\t\t...selfOoptions?.partials\n\t\t});\n\t\trenderer.registerHelper({\n\t\t\t...options?.helpers,\n\t\t\t...selfOoptions?.helpers\n\t\t});\n\t\treturn renderer;\n\t};\n\treturn {\n\t\trender(template, context, selfOoptions) {\n\t\t\treturn render(template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t},\n\t\tasync renderToFile(file, template, context, selfOoptions) {\n\t\t\treturn renderToFile(options?.outdir ? join(options.outdir, file) : file, template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t}\n\t};\n};\n`${defaults.apiDir}`, `${defaults.apiDir}`, `${defaults.pagesDir}`, `${defaults.pagesDir}`;\n/**\n* Weight of a single path segment.\n*\n* Fixed values per kind prevent complex mixed segments\n* from outscoring multiple statics.\n*\n* static: 4 (exact match, most specific)\n* mixed: 3+ (static + param parts; more statics = slightly higher)\n* required: 2 (matches any single segment)\n* optional: 1 (may or may not match)\n* splat: 0 (matches anything, least specific)\n* */\nvar segmentWeight = (token) => {\n\tif (token.kind === \"static\") return 4;\n\tif (token.kind === \"mixed\") {\n\t\tlet statics = 0;\n\t\tlet optionals = 0;\n\t\tfor (const part of token.parts) if (part.type === \"static\") statics += 1;\n\t\telse if (part.kind === \"optional\" || part.kind === \"splat\") optionals += 1;\n\t\treturn 3 + statics * .01 - optionals * .005;\n\t}\n\tswitch (token.parts[0].kind) {\n\t\tcase \"required\": return 2;\n\t\tcase \"optional\": return 1;\n\t\tcase \"splat\": return 0;\n\t}\n};\n/**\n* Compare two route entries for registration order.\n*\n* More specific routes sort first (higher priority).\n* Segments are compared left-to-right; first difference wins.\n*\n* When one route is a prefix of the other, the trailing segment\n* determines order: a trailing splat loses (shorter sibling first),\n* anything else wins (longer route is more specific).\n*\n* At equal weight and length, lexicographic tiebreak ensures\n* deterministic ordering across JS engines.\n* */\nvar sortRoutes = (a, b) => {\n\tconst pairs = Array.from({ length: Math.max(a.pathTokens.length, b.pathTokens.length) }, (_, i) => [a.pathTokens[i], b.pathTokens[i]]);\n\tfor (const [at, bt] of pairs) {\n\t\tif (!at || !bt) {\n\t\t\tconst extra = at ?? bt;\n\t\t\tif (extra?.kind === \"param\" ? extra.parts[0].kind === \"splat\" : false) return at ? 1 : -1;\n\t\t\treturn at ? -1 : 1;\n\t\t}\n\t\tconst aw = segmentWeight(at);\n\t\tconst bw = segmentWeight(bt);\n\t\tif (aw !== bw) return bw - aw;\n\t}\n\treturn a.pathPattern.localeCompare(b.pathPattern);\n};\nvar nodePrefix = () => {\n\treturn {\n\t\tname: \"kosmojs:node-prefix\",\n\t\tenforce: \"pre\",\n\t\tresolveId(source) {\n\t\t\treturn builtinModules.includes(source) ? {\n\t\t\t\tid: `node:${source}`,\n\t\t\t\texternal: true\n\t\t\t} : void 0;\n\t\t}\n\t};\n};\nvar vitePlugins = { nodePrefix };\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/ssr-generator\",\n\tversion: \"0.1.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\n\timports: { \"#templates/*\": \"./src/templates/*\" },\n\texports: { \".\": {\n\t\t\"types\": \"./pkg/index.d.ts\",\n\t\t\"default\": \"./pkg/index.js\"\n\t} },\n\tscripts: { \"build\": \"wsbuild src/index.ts\" },\n\tdevDependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@hono/node-server\": \"^2.0.0\",\n\t\t\"hono\": \"^4.12.15\",\n\t\t\"tinyglobby\": \"^0.2.16\"\n\t}\n};\n//#endregion\n//#region src/templates/lib/ssr.ts?raw\nvar ssr_default = \"import { chmod, readFile, unlink } from \\\"node:fs/promises\\\";\\nimport { extname, join, resolve } from \\\"node:path\\\";\\nimport { fileURLToPath } from \\\"node:url\\\";\\nimport { parseArgs, styleText } from \\\"node:util\\\";\\n\\nimport { createAdaptorServer } from \\\"@hono/node-server\\\";\\nimport { Hono } from \\\"hono\\\";\\nimport { HTTPException } from \\\"hono/http-exception\\\";\\nimport { stream } from \\\"hono/streaming\\\";\\nimport { glob } from \\\"tinyglobby\\\";\\n\\nimport type { SSROptions, SSRSetup } from \\\"@kosmojs/core\\\";\\n\\nimport { pathPatterns } from \\\"{{ createImport 'lib' 'ssr:routes' }}\\\";\\nimport { base } from \\\"{{ createImport 'libCore' }}\\\";\\n\\nconst SERVE_STATIC_ASSETS = JSON.parse(\\\"{{serveStaticAssets}}\\\");\\n\\nconst REDIRECT_CODES = [\\n // Moved Permanently\\n 301,\\n // Found (temporary)\\n 302,\\n // See Other (redirect after POST)\\n 303,\\n // Temporary Redirect (preserves method)\\n 307,\\n // Permanent Redirect (preserves method)\\n 308,\\n];\\n\\ntype AssetInfo = {\\n file: string;\\n // Raw file contents kept in memory for fast, zero-I/O responses.\\n // Can be undefined if `serveStaticAssets` option is false.\\n buffer: Uint8Array | undefined;\\n // HTTP Content-Type header for this asset (derived from extension).\\n contentType: string;\\n // Cached size to set Content-Length without re-measuring the buffer.\\n size: number | undefined;\\n};\\n\\nexport const createApp = async () => {\\n const root = import.meta.dirname;\\n\\n // Read the client index.html that includes <!--app-head--> and <!--app-html-->\\n // placeholders used for SSR injection.\\n const template = await readFile(`${root}/index.html`, \\\"utf8\\\");\\n\\n // Import the SSR entry produced by Vite's ssr build.\\n const { renderToString, renderToStream }: SSRSetup = await import(\\n `${root}/app.js`\\n ).then((e) => e.default);\\n\\n // Load the Vite manifest\\n const manifest = await import(`${root}/.vite/manifest.json`, {\\n with: { type: \\\"json\\\" },\\n }).then((e) => e.default);\\n\\n // Read all assets into an in-memory cache, optionally with content.\\n const assetCache = await loadAssets(root);\\n\\n const app = new Hono({ strict: false });\\n\\n const ssrOptions = (): SSROptions => {\\n return {\\n template,\\n manifest,\\n assets: [...assetCache.entries()].flatMap(\\n ([path, { file, buffer, size }]) => {\\n if (!file.startsWith(\\\"server-\\\")) {\\n // skip if not an ssr asset\\n return [];\\n }\\n\\n if (template.includes(file.replace(/^server\\\\b/, \\\"\\\"))) {\\n // skip if template contains a file with same hash;\\n // Vite use same hash for client and server assets:\\n // client asset: index-D-m1j8Sq.css\\n // server asset: server-D-m1j8Sq.css\\n return [];\\n }\\n\\n const kind = path.endsWith(\\\".js\\\")\\n ? \\\"js\\\"\\n : path.endsWith(\\\".css\\\")\\n ? \\\"css\\\"\\n : undefined;\\n\\n if (!kind) {\\n return [];\\n }\\n\\n const tag =\\n kind === \\\"js\\\"\\n ? `<script type=\\\"module\\\" crossorigin src=\\\"${path}\\\"><\\/script>`\\n : `<link rel=\\\"stylesheet\\\" crossorigin href=\\\"${path}\\\" />`;\\n\\n return {\\n tag,\\n kind,\\n path,\\n content: buffer ? new TextDecoder().decode(buffer) : undefined,\\n size,\\n };\\n },\\n ),\\n };\\n };\\n\\n const renderPage = async (url: URL) => {\\n const [htmlStart, htmlEnd] = template.split(\\\"<!--app-html-->\\\");\\n\\n const { head, html } = await renderToString(url, ssrOptions());\\n\\n return [\\n htmlStart.replace(\\\"<!--app-head-->\\\", head ?? \\\"\\\"),\\n html ?? \\\"\\\",\\n htmlEnd,\\n ].join(\\\"\\\\n\\\");\\n };\\n\\n for (const pathPattern of pathPatterns) {\\n app.get(join(base, pathPattern), async (ctx) => {\\n try {\\n const url = new URL(ctx.req.url);\\n\\n if (typeof renderToStream === \\\"function\\\") {\\n // Mode 1: streaming SSR.\\n //\\n // - renderToStream is responsible for writing HTML chunks into `response`.\\n // - Provided renderer can decide when to:\\n // - start the shell,\\n // - hydrate with client-side routes/assets.\\n //\\n // This gives frameworks full control for advanced streaming strategies\\n // (e.g., suspense boundaries, progressive hydration, selective re-render).\\n return stream(ctx, async (stream) => {\\n await renderToStream(url, ssrOptions(), stream as never);\\n });\\n }\\n\\n if (typeof renderToString === \\\"function\\\") {\\n // Mode 2: string-based SSR.\\n //\\n // - renderToString() returns { head, html } for the current route.\\n // - Splice that into the Vite-generated index.html template by replacing:\\n // - <!--app-head--> with collected head tags (CSS + optional user head)\\n // - <!--app-html--> with the app HTML markup\\n //\\n // This mode is simple and works well when you don't need streaming.\\n const page = await renderPage(url);\\n return ctx.html(page);\\n }\\n\\n // SSR factory returned neither mode\\n ctx.status(501);\\n return ctx.html(\\\"<h1>501: Not Implemented</h1>\\\");\\n } catch (error: any) {\\n // Handle thrown Response instances as redirects.\\n // Re-throw other errors for upstream handling.\\n if (error instanceof Response) {\\n const Location = error.headers.get(\\\"Location\\\");\\n\\n if (!Location || !REDIRECT_CODES.includes(error.status)) {\\n ctx.status(500);\\n return ctx.html(\\\"<h1>500: Malformed redirect</h1>\\\");\\n }\\n\\n return ctx.redirect(Location, error.status as never);\\n }\\n throw new HTTPException(500, { message: error.message, cause: error });\\n }\\n });\\n }\\n\\n app.get(\\\"/*\\\", async (ctx) => {\\n // If incoming request path matches something cached at startup, serve it directly.\\n // This covers JS, CSS, images, fonts, etc., including their .map siblings.\\n const asset = assetCache.get(ctx.req.path);\\n\\n if (asset) {\\n return asset.buffer\\n ? new Response(asset.buffer as never, {\\n headers: {\\n \\\"Content-Type\\\": asset.contentType,\\n \\\"Content-Length\\\": String(asset.size),\\n },\\n })\\n : ctx.notFound();\\n }\\n\\n if (typeof renderToString === \\\"function\\\") {\\n const url = new URL(ctx.req.url);\\n const page = await renderPage(url);\\n ctx.status(404);\\n return ctx.html(page);\\n }\\n\\n return ctx.notFound();\\n });\\n\\n return app;\\n};\\n\\n/**\\n * Build an in-memory asset graph,\\n * optionally loading asset content into memory,\\n * depending on deployment mode.\\n *\\n * The asset graph always includes every built asset URL so the SSR server\\n * can correctly recognize static asset requests\\n * and return 404 when `serveStaticAssets` explicitly set to false.\\n *\\n * Behavior depends on `serveStaticAssets` option:\\n *\\n * when true (default)\\n * → All assets produced by the build (JS, CSS, images, fonts, etc.)\\n * are read into memory as Buffers at server startup.\\n * → The SSR server is fully responsible for serving static assets.\\n *\\n * when false\\n * → Asset URLs are still registered in the cache,\\n * but with *no* Buffer content.\\n * → Browser requests to those asset URLs will return `404` when hitting SSR server.\\n *\\n * Set `serveStaticAssets` to false when a reverse proxy or CDN is expected to serve static assets.\\n * */\\nconst loadAssets = async (root: string) => {\\n const mimeTypeMap: Record<string, string> = {\\n \\\".js\\\": \\\"application/javascript\\\",\\n \\\".mjs\\\": \\\"application/javascript\\\",\\n \\\".css\\\": \\\"text/css\\\",\\n \\\".json\\\": \\\"application/json\\\",\\n \\\".png\\\": \\\"image/png\\\",\\n \\\".apng\\\": \\\"image/png\\\",\\n \\\".jpg\\\": \\\"image/jpeg\\\",\\n \\\".jpeg\\\": \\\"image/jpeg\\\",\\n \\\".gif\\\": \\\"image/gif\\\",\\n \\\".svg\\\": \\\"image/svg+xml\\\",\\n \\\".ico\\\": \\\"image/x-icon\\\",\\n \\\".woff\\\": \\\"font/woff\\\",\\n \\\".woff2\\\": \\\"font/woff2\\\",\\n \\\".ttf\\\": \\\"font/ttf\\\",\\n \\\".webp\\\": \\\"image/webp\\\",\\n };\\n\\n // Resolve HTTP Content-Type from the asset's file extension.\\n const contentTypeResolver = (filePath: string) => {\\n const ext = extname(filePath).toLowerCase();\\n return mimeTypeMap[ext] || \\\"application/octet-stream\\\";\\n };\\n\\n // Map from URL path (as used in requests) to asset metadata.\\n const assetCache = new Map<string, AssetInfo>();\\n\\n const folder = \\\"assets\\\";\\n\\n const files = await glob(\\\"**\\\", {\\n cwd: join(root, folder),\\n onlyFiles: true,\\n absolute: false,\\n });\\n\\n for (const file of files) {\\n const buffer = SERVE_STATIC_ASSETS\\n ? new Uint8Array(await readFile(join(root, folder, file)))\\n : undefined;\\n\\n assetCache.set(join(base, folder, file), {\\n file,\\n buffer,\\n contentType: contentTypeResolver(file),\\n size: buffer?.length,\\n });\\n }\\n\\n return assetCache;\\n};\\n\\nexport const createServer = async ({\\n sock,\\n port,\\n}: {\\n sock?: string | undefined;\\n port?: string | number | undefined;\\n}) => {\\n if (![sock, port].some(Boolean)) {\\n throw new Error(\\\"Please provide either -p/--port or -s/--sock\\\");\\n }\\n\\n if (sock) {\\n // Clean up any stale socket file before binding.\\n await unlink(sock).catch((error) => {\\n if (error.code === \\\"ENOENT\\\") {\\n return;\\n }\\n console.error(error.message);\\n process.exit(1);\\n });\\n }\\n\\n console.log(\\\"\\\\n ➜ Loading Assets\\\");\\n\\n const app = await createApp();\\n\\n console.log(\\n `\\\\n ➜ Starting SSR Server ${styleText([\\\"dim\\\"], \\\"[ %s ]\\\")}`,\\n sock ? `sock: ${sock}` : `port: ${port}`,\\n );\\n\\n const onListen = async () => {\\n if (sock) {\\n // Make Unix socket world-writable so other processes (e.g. a reverse proxy)\\n // can connect without permission issues.\\n await chmod(sock, 0o777);\\n }\\n console.log(\\\"\\\\n ➜ Server Started ✨\\\");\\n };\\n\\n if (typeof Bun !== \\\"undefined\\\") {\\n const server = Bun.serve(\\n sock\\n ? { unix: sock, fetch: app.fetch }\\n : { port: Number(port), fetch: app.fetch },\\n );\\n await onListen();\\n return async () => {\\n await server.stop();\\n };\\n }\\n\\n if (typeof Deno !== \\\"undefined\\\") {\\n const server = sock\\n ? Deno.serve({ path: sock, onListen }, app.fetch)\\n : Deno.serve({ port: Number(port), onListen }, app.fetch);\\n return async () => {\\n await server.shutdown();\\n };\\n }\\n\\n const server = createAdaptorServer(app);\\n server.listen(sock || port, onListen);\\n\\n return async () => {\\n server.close();\\n };\\n};\\n\\nexport const createDisposableServer = async (\\n callback: (port: number) => Promise<void>,\\n) => {\\n const app = await createApp();\\n const server = createAdaptorServer(app).listen(0); // OS picks a free port\\n const address = server.address();\\n\\n if (!address || typeof address === \\\"string\\\") {\\n throw new Error(\\\"SSR: Failed starting disposable server on a free port\\\");\\n }\\n\\n try {\\n await callback(address.port);\\n } finally {\\n server.close();\\n }\\n};\\n\\nconst isMain = fileURLToPath(import.meta.url) === resolve(process.argv[1]);\\n\\nif (isMain) {\\n /**\\n * Parse CLI arguments so this file can be used both as a module\\n * and a standalone executable\\n * */\\n const {\\n values: { port, sock },\\n } = parseArgs({\\n options: {\\n port: {\\n type: \\\"string\\\",\\n short: \\\"p\\\",\\n },\\n sock: {\\n type: \\\"string\\\",\\n short: \\\"s\\\",\\n },\\n },\\n });\\n\\n try {\\n await createServer({ sock, port });\\n } catch (error: any) {\\n console.error(\\n styleText(\\\"red\\\", `✗ Failed starting SSR server: ${error.message}`),\\n );\\n process.exit(1);\\n }\\n}\\n\";\n//#endregion\n//#region src/templates/lib/ssr:routes.hbs?raw\nvar ssr_routes_default = \"export const pathPatterns = [\\n{{#each pageRoutes}}\\n \\\"{{honoPattern}}\\\",\\n{{/each}}\\n];\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((meta, sourceFolder, options) => {\n\tconst { generators = [], refineTypeName, ...config } = { ...sourceFolder.config };\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { renderToFile: deployLibFile } = renderFactory({ helpers: { ...createImportHelpers({ origin: \"lib\" }) } });\n\tconst noExternal = Array.isArray(options?.noExternal) ? options.noExternal : [...generators, { meta }].flatMap(({ meta }) => {\n\t\treturn Object.keys({\n\t\t\t...meta.dependencies,\n\t\t\t...meta.devDependencies\n\t\t});\n\t});\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tasync build(entries) {\n\t\t\tawait deployLibFile(createPath.lib(\"ssr:routes.ts\"), ssr_routes_default, { pageRoutes: entries.flatMap((e) => e.kind === \"pageRoute\" ? [e.entry] : []).sort(sortRoutes) });\n\t\t\tawait deployLibFile(createPath.lib(\"ssr.ts\"), ssr_default, { serveStaticAssets: JSON.stringify(typeof options?.serveStaticAssets === \"boolean\" ? options.serveStaticAssets : true) });\n\t\t},\n\t\tasync postBuild() {\n\t\t\tconst dir = createPath.distDir(\"ssr\");\n\t\t\tconst plugins = [vitePlugins.nodePrefix(), ...config?.plugins || []];\n\t\t\tfor (const base of generators) plugins.push(...base.plugins?.(sourceFolder, \"build\") || []);\n\t\t\tawait build({\n\t\t\t\t...config,\n\t\t\t\tconfigFile: false,\n\t\t\t\troot: createPath.src(),\n\t\t\t\tplugins,\n\t\t\t\tssr: { noExternal },\n\t\t\t\tresolve: {\n\t\t\t\t\t...config.resolve,\n\t\t\t\t\ttsconfigPaths: true\n\t\t\t\t},\n\t\t\t\tbuild: {\n\t\t\t\t\tssr: createPath.entry(\"server\"),\n\t\t\t\t\tssrEmitAssets: true,\n\t\t\t\t\tsourcemap: true,\n\t\t\t\t\temptyOutDir: true,\n\t\t\t\t\trolldownOptions: { output: {\n\t\t\t\t\t\tdir,\n\t\t\t\t\t\tentryFileNames: \"app.js\",\n\t\t\t\t\t\tformat: \"esm\"\n\t\t\t\t\t} }\n\t\t\t\t}\n\t\t\t});\n\t\t\tawait build({\n\t\t\t\tconfigFile: false,\n\t\t\t\troot: createPath.lib(),\n\t\t\t\tappType: \"custom\",\n\t\t\t\tplugins: [vitePlugins.nodePrefix()],\n\t\t\t\tdefine: { ...config.define },\n\t\t\t\tssr: { noExternal },\n\t\t\t\tresolve: {\n\t\t\t\t\t...config.resolve,\n\t\t\t\t\ttsconfigPaths: true,\n\t\t\t\t\tconditions: [\"node\"]\n\t\t\t\t},\n\t\t\t\tbuild: {\n\t\t\t\t\tssr: createPath.lib(\"ssr.ts\"),\n\t\t\t\t\ttarget: \"esnext\",\n\t\t\t\t\tsourcemap: true,\n\t\t\t\t\temptyOutDir: true,\n\t\t\t\t\trolldownOptions: { output: {\n\t\t\t\t\t\tdir: join(dir, \"server\"),\n\t\t\t\t\t\tentryFileNames: \"server.js\",\n\t\t\t\t\t\tformat: \"esm\"\n\t\t\t\t\t} }\n\t\t\t\t}\n\t\t\t});\n\t\t\tawait cp(resolve(dir, \"../client\"), dir, { recursive: true });\n\t\t\tfor (const file of [\"server.js\", \"server.js.map\"]) await cp(`${dir}/server/${file}`, `${dir}/${file}`);\n\t\t\tawait rm(`${dir}/server`, {\n\t\t\t\trecursive: true,\n\t\t\t\tforce: true\n\t\t\t});\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator((options) => {\n\tconst meta = {\n\t\tname: \"SSR\",\n\t\tslot: \"ssr\",\n\t\tdependencies: {\n\t\t\ttinyglobby: package_default.devDependencies[\"tinyglobby\"],\n\t\t\thono: package_default.devDependencies[\"hono\"],\n\t\t\t\"@hono/node-server\": package_default.devDependencies[\"@hono/node-server\"]\n\t\t}\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tfactory: (sourceFolder) => factory_default(meta, sourceFolder, options)\n\t};\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { dirname, join, resolve } from \"node:path\";\nimport crc from \"crc/crc32\";\nimport \"tfusion\";\nimport \"ts-morph\";\nimport { access, constants, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport handlebars from \"handlebars\";\nimport \"path-to-regexp\";\nimport \"mime-types\";\nimport \"@topcli/spinner\";\n//#region ../../packages/lib/pkg/index.js\nvar defaults = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets$1 = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets$1 = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets$1,\n\t...RequestBodyTargets$1\n});\nvar defineGenerator = (f) => f;\nvar defineGeneratorFactory = (f) => f;\nvar pathResolver = (sourceFolder) => {\n\tconst createPath = (...a) => {\n\t\treturn sourceFolder.root ? resolve(sourceFolder.root, join(...a)) : join(...a);\n\t};\n\tconst createImport = {\n\t\tsrc(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.srcPrefix, ...a) : join(defaults.appPrefix, defaults.srcDir, sourceFolder.name, ...a);\n\t\t},\n\t\tapi(a, o) {\n\t\t\treturn this.src([defaults.apiDir, ...a], o);\n\t\t},\n\t\tpages(a, o) {\n\t\t\treturn this.src([defaults.pagesDir, ...a], o);\n\t\t},\n\t\tlib(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults.libPrefix, ...a) : join(defaults.appPrefix, defaults.libDir, sourceFolder.name, ...a);\n\t\t},\n\t\tlibCore(a, o) {\n\t\t\treturn this.lib([\"core\", ...a], o);\n\t\t},\n\t\tlibApi(a, o) {\n\t\t\treturn this.lib([defaults.apiDir, ...a], o);\n\t\t},\n\t\tlibEntry(a, o) {\n\t\t\treturn this.lib([defaults.entryDir, ...a], o);\n\t\t}\n\t};\n\treturn {\n\t\tcreatePath: {\n\t\t\tsrc(...a) {\n\t\t\t\treturn createPath(defaults.srcDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tapi(...a) {\n\t\t\t\treturn this.src(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tpages(...a) {\n\t\t\t\treturn this.src(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tentry(...a) {\n\t\t\t\treturn this.src(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlib(...a) {\n\t\t\t\treturn createPath(defaults.libDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tlibCore(...a) {\n\t\t\t\treturn this.lib(\"core\", ...a);\n\t\t\t},\n\t\t\tlibApi(...a) {\n\t\t\t\treturn this.lib(defaults.apiDir, ...a);\n\t\t\t},\n\t\t\tlibEntry(...a) {\n\t\t\t\treturn this.lib(defaults.entryDir, ...a);\n\t\t\t},\n\t\t\tlibPages(...a) {\n\t\t\t\treturn this.lib(defaults.pagesDir, ...a);\n\t\t\t},\n\t\t\tdistDir(...a) {\n\t\t\t\treturn createPath(sourceFolder.distDir, sourceFolder.name, ...a);\n\t\t\t}\n\t\t},\n\t\tcreateImport,\n\t\tcreateImportHelpers(o) {\n\t\t\tif (![\"src\", \"lib\"].includes(o?.origin)) throw new Error(`createImportHelpers: required exactly one argument of shape { origin: \"src|lib\" }`);\n\t\t\treturn { createImport(key, ...a) {\n\t\t\t\treturn createImport[key](a.slice(0, -1), o);\n\t\t\t} };\n\t\t}\n\t};\n};\nvar pathExists = async (path) => {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\nvar render = (template, context, options) => {\n\tconst { noEscape = true, renderer = handlebars } = { ...options };\n\treturn renderer.compile(template, { noEscape })(context);\n};\nvar renderToFile = async (file, template, context, options) => {\n\tconst content = render(template, context, options);\n\t/**\n\t* Two fs calls (exists + read) are worth it to avoid touching the file\n\t* and triggering watchers unnecessarily.\n\t* */\n\tif (await pathExists(file)) {\n\t\tconst { overwrite = true } = { ...options };\n\t\tif (overwrite === false) return;\n\t\tconst fileContent = await readFile(file, \"utf8\");\n\t\tif (typeof overwrite === \"function\" && !overwrite(fileContent)) return;\n\t\tif (crc(content) === crc(fileContent)) return;\n\t}\n\tawait mkdir(dirname(file), { recursive: true });\n\tawait writeFile(file, content, \"utf8\");\n};\nvar renderFactory = (options) => {\n\tconst createRenderer = (selfOoptions) => {\n\t\tconst renderer = handlebars.create();\n\t\trenderer.registerPartial({\n\t\t\t...options?.partials,\n\t\t\t...selfOoptions?.partials\n\t\t});\n\t\trenderer.registerHelper({\n\t\t\t...options?.helpers,\n\t\t\t...selfOoptions?.helpers\n\t\t});\n\t\treturn renderer;\n\t};\n\treturn {\n\t\trender(template, context, selfOoptions) {\n\t\t\treturn render(template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t},\n\t\tasync renderToFile(file, template, context, selfOoptions) {\n\t\t\treturn renderToFile(options?.outdir ? join(options.outdir, file) : file, template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t}\n\t};\n};\n`${defaults.apiDir}`, `${defaults.apiDir}`, `${defaults.pagesDir}`, `${defaults.pagesDir}`;\nvar typeboxLiteralText = (text, sourceFolder) => {\n\tconst { refineTypeName = defaults.refineTypeName } = sourceFolder.config;\n\treturn [\n\t\t[/(?<!\\\\)`/g, \"\\\\`\"],\n\t\t[/(?<!\\\\)\\$\\{/g, \"\\\\${\"],\n\t\t[new RegExp(`\\\\b${refineTypeName}\\\\s*<`, \"g\"), \"Options<\"]\n\t].reduce((text, [a, b]) => text.replace(a, b), text);\n};\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/typebox-generator\",\n\tversion: \"0.1.0\",\n\tcacheVersion: \"1\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\n\timports: { \"#templates/*\": \"./src/templates/*\" },\n\texports: { \".\": {\n\t\t\"types\": \"./pkg/index.d.ts\",\n\t\t\"default\": \"./pkg/index.js\"\n\t} },\n\tscripts: {\n\t\t\"build\": \"wsbuild src/index.ts\",\n\t\t\"pretest\": \"pnpm run build\",\n\t\t\"test\": \"vitest --root ../.. --project generators/typebox-generator\"\n\t},\n\tdevDependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@kosmojs/core-generator\": \"workspace:^\",\n\t\t\"@kosmojs/koa-generator\": \"workspace:^\",\n\t\t\"typebox\": \"^1.1.34\"\n\t}\n};\n//#endregion\n//#region ../../packages/core/pkg/index.js\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\nvar RequestValidationTargets = {\n\t...RequestMetadataTargets,\n\t...RequestBodyTargets\n};\n//#endregion\n//#region src/templates/lib/@typebox/custom-types.ts?raw\nvar custom_types_default = \"import Type from \\\"typebox\\\";\\n\\nexport class TDate extends Type.Base<Date> {\\n public override Check(value: unknown): value is Date {\\n return value instanceof Date;\\n }\\n public override Errors(value: unknown): object[] {\\n return this.Check(value) ? [] : [{ message: \\\"must be Date\\\" }];\\n }\\n public override Clone(): TDate {\\n return new TDate();\\n }\\n}\\n\\nexport class TFile extends Type.Base<File> {\\n public override Check(value: unknown): value is File {\\n return value instanceof File;\\n }\\n public override Errors(value: unknown): object[] {\\n return this.Check(value) ? [] : [{ message: \\\"must be File\\\" }];\\n }\\n public override Clone(): TFile {\\n return new TFile();\\n }\\n}\\n\\nexport class TBlob extends Type.Base<Blob> {\\n public override Check(value: unknown): value is Blob {\\n return value instanceof Blob;\\n }\\n public override Errors(value: unknown): object[] {\\n return this.Check(value) ? [] : [{ message: \\\"must be Blob\\\" }];\\n }\\n public override Clone(): TBlob {\\n return new TBlob();\\n }\\n}\\n\\nexport class TBuffer extends Type.Base<Buffer> {\\n public override Check(value: unknown): value is Buffer {\\n return value instanceof Buffer;\\n }\\n public override Errors(value: unknown): object[] {\\n return this.Check(value) ? [] : [{ message: \\\"must be Buffer\\\" }];\\n }\\n public override Clone(): TBuffer {\\n return new TBuffer();\\n }\\n}\\n\\nexport class TArrayBuffer extends Type.Base<ArrayBuffer> {\\n public override Check(value: unknown): value is ArrayBuffer {\\n return value instanceof ArrayBuffer;\\n }\\n public override Errors(value: unknown): object[] {\\n return this.Check(value) ? [] : [{ message: \\\"must be ArrayBuffer\\\" }];\\n }\\n public override Clone(): TArrayBuffer {\\n return new TArrayBuffer();\\n }\\n}\\n\\nexport default {\\n Date: new TDate(),\\n File: new TFile(),\\n Blob: new TBlob(),\\n Buffer: new TBuffer(),\\n ArrayBuffer: new TArrayBuffer(),\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@typebox/error-handler.ts?raw\nvar error_handler_default = \"import type { TValidationError } from \\\"typebox/error\\\";\\n\\nimport type { ValidationErrorEntry } from \\\"@kosmojs/core\\\";\\n\\n/**\\n * Message codes for i18n/l10n support\\n */\\nexport const MESSAGE_CODES = {\\n // Generic messages\\n\\n /** Singular form of \\\"property\\\" word for i18n */\\n PROPERTY: \\\"PROPERTY\\\",\\n /** Plural form of \\\"properties\\\" word for i18n */\\n PROPERTIES: \\\"PROPERTIES\\\",\\n\\n /** Text for \\\"allowed values\\\" phrase for i18n */\\n ALLOWED_VALUES: \\\"ALLOWED_VALUES\\\",\\n /** Message template for displaying count of duplicate items found */\\n FOUND_N_DUPLICATES: \\\"FOUND_N_DUPLICATES\\\",\\n\\n /** Message displayed when validation succeeds */\\n VALIDATION_PASSED: \\\"VALIDATION_PASSED\\\",\\n /** Prefix text for validation error messages (e.g., \\\"Validation failed:\\\") */\\n VALIDATION_FAILED_PREFIX: \\\"VALIDATION_FAILED_PREFIX\\\",\\n\\n /** Template for error summary showing error count and affected fields */\\n ERROR_SUMMARY: \\\"ERROR_SUMMARY\\\",\\n /** Plural suffix for words (e.g., \\\"s\\\" in English) */\\n PLURAL_SUFFIX: \\\"PLURAL_SUFFIX\\\",\\n\\n /** Ordinal position label for first element in tuple/array */\\n FIRST: \\\"FIRST\\\",\\n /** Ordinal position label for second element in tuple/array */\\n SECOND: \\\"SECOND\\\",\\n /** Ordinal position label for third element in tuple/array */\\n THIRD: \\\"THIRD\\\",\\n /** Ordinal position label for fourth element in tuple/array */\\n FOURTH: \\\"FOURTH\\\",\\n /** Ordinal position label for fifth element in tuple/array */\\n FIFTH: \\\"FIFTH\\\",\\n\\n // Error messages\\n\\n // Type validation\\n /** Invalid data type - expected a specific type */\\n TYPE_INVALID: \\\"TYPE_INVALID\\\",\\n\\n // String validation\\n /** String is too short - minimum length constraint violated */\\n STRING_MIN_LENGTH: \\\"STRING_MIN_LENGTH\\\",\\n /** String is too long - maximum length constraint violated */\\n STRING_MAX_LENGTH: \\\"STRING_MAX_LENGTH\\\",\\n /** String doesn't match required pattern/regex */\\n STRING_PATTERN: \\\"STRING_PATTERN\\\",\\n /** String doesn't match required format (generic) */\\n STRING_FORMAT: \\\"STRING_FORMAT\\\",\\n /** Invalid email address format */\\n STRING_FORMAT_EMAIL: \\\"STRING_FORMAT_EMAIL\\\",\\n /** Invalid date format */\\n STRING_FORMAT_DATE: \\\"STRING_FORMAT_DATE\\\",\\n /** Invalid date-time format */\\n STRING_FORMAT_DATETIME: \\\"STRING_FORMAT_DATETIME\\\",\\n /** Invalid time format */\\n STRING_FORMAT_TIME: \\\"STRING_FORMAT_TIME\\\",\\n /** Invalid URI format */\\n STRING_FORMAT_URI: \\\"STRING_FORMAT_URI\\\",\\n /** Invalid URL format */\\n STRING_FORMAT_URL: \\\"STRING_FORMAT_URL\\\",\\n /** Invalid UUID format */\\n STRING_FORMAT_UUID: \\\"STRING_FORMAT_UUID\\\",\\n /** Invalid IPv4 address format */\\n STRING_FORMAT_IPV4: \\\"STRING_FORMAT_IPV4\\\",\\n /** Invalid IPv6 address format */\\n STRING_FORMAT_IPV6: \\\"STRING_FORMAT_IPV6\\\",\\n /** Invalid hostname format */\\n STRING_FORMAT_HOSTNAME: \\\"STRING_FORMAT_HOSTNAME\\\",\\n /** Invalid JSON pointer format */\\n STRING_FORMAT_JSON_POINTER: \\\"STRING_FORMAT_JSON_POINTER\\\",\\n /** Invalid regular expression format */\\n STRING_FORMAT_REGEX: \\\"STRING_FORMAT_REGEX\\\",\\n\\n // Number validation\\n /** Number is below minimum value */\\n NUMBER_MINIMUM: \\\"NUMBER_MINIMUM\\\",\\n /** Number exceeds maximum value */\\n NUMBER_MAXIMUM: \\\"NUMBER_MAXIMUM\\\",\\n /** Number is below exclusive minimum value */\\n NUMBER_EXCLUSIVE_MINIMUM: \\\"NUMBER_EXCLUSIVE_MINIMUM\\\",\\n /** Number exceeds exclusive maximum value */\\n NUMBER_EXCLUSIVE_MAXIMUM: \\\"NUMBER_EXCLUSIVE_MAXIMUM\\\",\\n /** Number is not a multiple of required value */\\n NUMBER_MULTIPLE_OF: \\\"NUMBER_MULTIPLE_OF\\\",\\n\\n // Array validation\\n /** Array has too few items - minimum items constraint violated */\\n ARRAY_MIN_ITEMS: \\\"ARRAY_MIN_ITEMS\\\",\\n /** Array has too many items - maximum items constraint violated */\\n ARRAY_MAX_ITEMS: \\\"ARRAY_MAX_ITEMS\\\",\\n /** Array contains duplicate items when uniqueness is required */\\n ARRAY_UNIQUE_ITEMS: \\\"ARRAY_UNIQUE_ITEMS\\\",\\n /** Array doesn't contain required valid items */\\n ARRAY_CONTAINS: \\\"ARRAY_CONTAINS\\\",\\n /** Array contains too few items matching criteria */\\n ARRAY_MIN_CONTAINS: \\\"ARRAY_MIN_CONTAINS\\\",\\n /** Array contains too many items matching criteria */\\n ARRAY_MAX_CONTAINS: \\\"ARRAY_MAX_CONTAINS\\\",\\n /** Invalid tuple structure */\\n ARRAY_PREFIX_ITEMS: \\\"ARRAY_PREFIX_ITEMS\\\",\\n /** Invalid additional items beyond tuple definition */\\n ARRAY_ITEMS: \\\"ARRAY_ITEMS\\\",\\n /** Invalid unevaluated items in array */\\n ARRAY_UNEVALUATED_ITEMS: \\\"ARRAY_UNEVALUATED_ITEMS\\\",\\n\\n // Tuple-specific validation\\n /** Tuple has too few elements */\\n TUPLE_MIN_ITEMS: \\\"TUPLE_MIN_ITEMS\\\",\\n /** Tuple has too many elements */\\n TUPLE_MAX_ITEMS: \\\"TUPLE_MAX_ITEMS\\\",\\n\\n // Object validation\\n /** Missing required property/properties */\\n OBJECT_REQUIRED: \\\"OBJECT_REQUIRED\\\",\\n /** Object contains additional properties not allowed by schema */\\n OBJECT_ADDITIONAL_PROPERTIES: \\\"OBJECT_ADDITIONAL_PROPERTIES\\\",\\n /** Object has too few properties */\\n OBJECT_MIN_PROPERTIES: \\\"OBJECT_MIN_PROPERTIES\\\",\\n /** Object has too many properties */\\n OBJECT_MAX_PROPERTIES: \\\"OBJECT_MAX_PROPERTIES\\\",\\n /** Invalid property name */\\n OBJECT_PROPERTY_NAMES: \\\"OBJECT_PROPERTY_NAMES\\\",\\n /** Missing dependent required properties */\\n OBJECT_DEPENDENCIES: \\\"OBJECT_DEPENDENCIES\\\",\\n /** Object contains unevaluated properties */\\n OBJECT_UNEVALUATED_PROPERTIES: \\\"OBJECT_UNEVALUATED_PROPERTIES\\\",\\n\\n // Enum and const validation\\n /** Value is not one of the allowed enum values */\\n ENUM_MISMATCH: \\\"ENUM_MISMATCH\\\",\\n /** Value doesn't match the required constant value */\\n CONST_MISMATCH: \\\"CONST_MISMATCH\\\",\\n\\n // Conditional schema validation\\n /** Doesn't match conditional if schema */\\n CONDITIONAL_IF: \\\"CONDITIONAL_IF\\\",\\n /** Doesn't satisfy then schema condition */\\n CONDITIONAL_THEN: \\\"CONDITIONAL_THEN\\\",\\n /** Doesn't satisfy else schema condition */\\n CONDITIONAL_ELSE: \\\"CONDITIONAL_ELSE\\\",\\n\\n // Composition validation\\n /** Must match exactly one schema (oneOf) */\\n COMPOSITION_ONE_OF: \\\"COMPOSITION_ONE_OF\\\",\\n /** Must match at least one schema (anyOf) */\\n COMPOSITION_ANY_OF: \\\"COMPOSITION_ANY_OF\\\",\\n /** Must match all schemas (allOf) */\\n COMPOSITION_ALL_OF: \\\"COMPOSITION_ALL_OF\\\",\\n /** Must not match the schema (not) */\\n COMPOSITION_NOT: \\\"COMPOSITION_NOT\\\",\\n\\n // Content validation\\n /** Invalid discriminator value */\\n CONTENT_DISCRIMINATOR: \\\"CONTENT_DISCRIMINATOR\\\",\\n /** Invalid content encoding */\\n CONTENT_ENCODING: \\\"CONTENT_ENCODING\\\",\\n /** Invalid content media type */\\n CONTENT_MEDIA_TYPE: \\\"CONTENT_MEDIA_TYPE\\\",\\n\\n // Custom keywords (ajv-keywords)\\n /** Value outside allowed range */\\n CUSTOM_RANGE: \\\"CUSTOM_RANGE\\\",\\n /** Value outside exclusive range */\\n CUSTOM_EXCLUSIVE_RANGE: \\\"CUSTOM_EXCLUSIVE_RANGE\\\",\\n /** Doesn't match regular expression */\\n CUSTOM_REGEXP: \\\"CUSTOM_REGEXP\\\",\\n /** Failed to apply dynamic default */\\n CUSTOM_DYNAMIC_DEFAULTS: \\\"CUSTOM_DYNAMIC_DEFAULTS\\\",\\n /** Doesn't match any selected case */\\n CUSTOM_SELECT: \\\"CUSTOM_SELECT\\\",\\n /** Transformation failed */\\n CUSTOM_TRANSFORM: \\\"CUSTOM_TRANSFORM\\\",\\n /** Items don't have unique property values */\\n CUSTOM_UNIQUE_ITEM_PROPERTIES: \\\"CUSTOM_UNIQUE_ITEM_PROPERTIES\\\",\\n\\n // Fallback\\n /** Unknown validation error */\\n UNKNOWN: \\\"UNKNOWN\\\",\\n} as const;\\n\\nexport type ValidationMessages = typeof MESSAGE_CODES;\\n\\n/**\\n * Error message templates using node:util format syntax\\n * Placeholders: %s (string), %d (number), %j (JSON)\\n *\\n * Usage: format(ERROR_MESSAGES[ErrorCode.STRING_MIN_LENGTH], 5)\\n * Result: \\\"must be at least 5 characters long\\\"\\n */\\nconst MESSAGE_MAP: Record<keyof ValidationMessages, string> = {\\n // Generic messages\\n\\n [MESSAGE_CODES.PROPERTY]: \\\"property\\\",\\n [MESSAGE_CODES.PROPERTIES]: \\\"properties\\\",\\n\\n [MESSAGE_CODES.ALLOWED_VALUES]: \\\"the allowed values\\\",\\n [MESSAGE_CODES.FOUND_N_DUPLICATES]: \\\" (found %d duplicate%s)\\\",\\n\\n [MESSAGE_CODES.VALIDATION_PASSED]: \\\"Validation Passed\\\",\\n [MESSAGE_CODES.VALIDATION_FAILED_PREFIX]: \\\"\\\",\\n\\n [MESSAGE_CODES.ERROR_SUMMARY]:\\n \\\"%d validation error%s found across %d field%s\\\",\\n [MESSAGE_CODES.PLURAL_SUFFIX]: \\\"s\\\",\\n\\n [MESSAGE_CODES.FIRST]: \\\"first\\\",\\n [MESSAGE_CODES.SECOND]: \\\"second\\\",\\n [MESSAGE_CODES.THIRD]: \\\"third\\\",\\n [MESSAGE_CODES.FOURTH]: \\\"fourth\\\",\\n [MESSAGE_CODES.FIFTH]: \\\"fifth\\\",\\n\\n // Error messages\\n\\n // Type validation\\n [MESSAGE_CODES.TYPE_INVALID]: \\\"must be %s\\\",\\n\\n // String validation\\n [MESSAGE_CODES.STRING_MIN_LENGTH]: \\\"must be at least %d character%s long\\\",\\n [MESSAGE_CODES.STRING_MAX_LENGTH]: \\\"must not exceed %d character%s\\\",\\n [MESSAGE_CODES.STRING_PATTERN]: \\\"must match the required pattern\\\",\\n [MESSAGE_CODES.STRING_FORMAT]: `must match format \\\"%s\\\"`,\\n [MESSAGE_CODES.STRING_FORMAT_EMAIL]: \\\"must be a valid email address\\\",\\n [MESSAGE_CODES.STRING_FORMAT_DATE]: \\\"must be a valid date\\\",\\n [MESSAGE_CODES.STRING_FORMAT_DATETIME]: \\\"must be a valid date-time\\\",\\n [MESSAGE_CODES.STRING_FORMAT_TIME]: \\\"must be a valid time\\\",\\n [MESSAGE_CODES.STRING_FORMAT_URI]: \\\"must be a valid URI\\\",\\n [MESSAGE_CODES.STRING_FORMAT_URL]: \\\"must be a valid URL\\\",\\n [MESSAGE_CODES.STRING_FORMAT_UUID]: \\\"must be a valid UUID\\\",\\n [MESSAGE_CODES.STRING_FORMAT_IPV4]: \\\"must be a valid IPv4 address\\\",\\n [MESSAGE_CODES.STRING_FORMAT_IPV6]: \\\"must be a valid IPv6 address\\\",\\n [MESSAGE_CODES.STRING_FORMAT_HOSTNAME]: \\\"must be a valid hostname\\\",\\n [MESSAGE_CODES.STRING_FORMAT_JSON_POINTER]: \\\"must be a valid JSON pointer\\\",\\n [MESSAGE_CODES.STRING_FORMAT_REGEX]: \\\"must be a valid regular expression\\\",\\n\\n // Number validation\\n [MESSAGE_CODES.NUMBER_MINIMUM]: \\\"must be %s %s\\\",\\n [MESSAGE_CODES.NUMBER_MAXIMUM]: \\\"must be %s %s\\\",\\n [MESSAGE_CODES.NUMBER_EXCLUSIVE_MINIMUM]: \\\"must be %s %s\\\",\\n [MESSAGE_CODES.NUMBER_EXCLUSIVE_MAXIMUM]: \\\"must be %s %s\\\",\\n [MESSAGE_CODES.NUMBER_MULTIPLE_OF]: \\\"must be a multiple of %s\\\",\\n\\n // Array validation\\n [MESSAGE_CODES.ARRAY_MIN_ITEMS]: \\\"must have at least %d item%s\\\",\\n [MESSAGE_CODES.ARRAY_MAX_ITEMS]: \\\"must not have more than %d item%s\\\",\\n [MESSAGE_CODES.ARRAY_UNIQUE_ITEMS]: \\\"must not have duplicate items%s\\\",\\n [MESSAGE_CODES.ARRAY_CONTAINS]: \\\"must contain at least %d valid item%s\\\",\\n [MESSAGE_CODES.ARRAY_MIN_CONTAINS]:\\n \\\"must contain at least %d item%s matching the criteria\\\",\\n [MESSAGE_CODES.ARRAY_MAX_CONTAINS]:\\n \\\"must contain no more than %d item%s matching the criteria\\\",\\n [MESSAGE_CODES.ARRAY_PREFIX_ITEMS]: \\\"tuple structure is invalid\\\",\\n [MESSAGE_CODES.ARRAY_ITEMS]: \\\"array items are invalid\\\",\\n [MESSAGE_CODES.ARRAY_UNEVALUATED_ITEMS]: \\\"should not have unevaluated items\\\",\\n\\n // Tuple-specific\\n [MESSAGE_CODES.TUPLE_MIN_ITEMS]: \\\"tuple must have at least %d element%s\\\",\\n [MESSAGE_CODES.TUPLE_MAX_ITEMS]: \\\"tuple must not have more than %d element%s\\\",\\n\\n // Object validation\\n [MESSAGE_CODES.OBJECT_REQUIRED]: \\\"missing required %s: %s\\\",\\n [MESSAGE_CODES.OBJECT_ADDITIONAL_PROPERTIES]: `should not have additional property \\\"%s\\\"`,\\n [MESSAGE_CODES.OBJECT_MIN_PROPERTIES]: \\\"must have at least %d %s\\\",\\n [MESSAGE_CODES.OBJECT_MAX_PROPERTIES]: \\\"must not have more than %d %s\\\",\\n [MESSAGE_CODES.OBJECT_PROPERTY_NAMES]: `property name \\\"%s\\\" is invalid`,\\n [MESSAGE_CODES.OBJECT_DEPENDENCIES]: \\\"requires %s when present\\\",\\n [MESSAGE_CODES.OBJECT_UNEVALUATED_PROPERTIES]: `should not have unevaluated property \\\"%s\\\"`,\\n\\n // Enum and const\\n [MESSAGE_CODES.ENUM_MISMATCH]: \\\"must be one of: %s\\\",\\n [MESSAGE_CODES.CONST_MISMATCH]: \\\"must be equal to %s\\\",\\n\\n // Conditional\\n [MESSAGE_CODES.CONDITIONAL_IF]: \\\"does not match the conditional schema\\\",\\n [MESSAGE_CODES.CONDITIONAL_THEN]: `does not satisfy the \\\"then\\\" schema condition`,\\n [MESSAGE_CODES.CONDITIONAL_ELSE]: `does not satisfy the \\\"else\\\" schema condition`,\\n\\n // Composition\\n [MESSAGE_CODES.COMPOSITION_ONE_OF]:\\n \\\"must match exactly one schema (currently matches %d)\\\",\\n [MESSAGE_CODES.COMPOSITION_ANY_OF]: \\\"must match at least one schema\\\",\\n [MESSAGE_CODES.COMPOSITION_ALL_OF]: \\\"must match all schemas\\\",\\n [MESSAGE_CODES.COMPOSITION_NOT]: \\\"must not match the schema\\\",\\n\\n // Content\\n [MESSAGE_CODES.CONTENT_DISCRIMINATOR]: `discriminator property \\\"%s\\\" has invalid value`,\\n [MESSAGE_CODES.CONTENT_ENCODING]: `content encoding \\\"%s\\\" is invalid`,\\n [MESSAGE_CODES.CONTENT_MEDIA_TYPE]: `content media type \\\"%s\\\" is invalid`,\\n\\n // Custom keywords\\n [MESSAGE_CODES.CUSTOM_RANGE]: \\\"must be within the range %s to %s\\\",\\n [MESSAGE_CODES.CUSTOM_EXCLUSIVE_RANGE]:\\n \\\"must be strictly within the range %s to %s\\\",\\n [MESSAGE_CODES.CUSTOM_REGEXP]: \\\"must match the regular expression pattern\\\",\\n [MESSAGE_CODES.CUSTOM_DYNAMIC_DEFAULTS]:\\n \\\"failed to apply dynamic default value\\\",\\n [MESSAGE_CODES.CUSTOM_SELECT]: \\\"does not match any of the selected cases\\\",\\n [MESSAGE_CODES.CUSTOM_TRANSFORM]: \\\"transformation failed\\\",\\n [MESSAGE_CODES.CUSTOM_UNIQUE_ITEM_PROPERTIES]:\\n \\\"must have unique values for %s: %s\\\",\\n\\n // Fallback\\n [MESSAGE_CODES.UNKNOWN]: `validation failed for keyword \\\"%s\\\"`,\\n};\\n\\n/**\\n * Comprehensive error handler for TypeBox validation errors.\\n * Supports most JSON Schema validation keywords and produces human-friendly messages\\n * with i18n/l10n support through message code mapping.\\n */\\nexport const errorHandlerFactory = (\\n customMessages?: Partial<Record<keyof ValidationMessages, string>>,\\n) => {\\n const messageMap = { ...MESSAGE_MAP, ...customMessages };\\n\\n /**\\n * Formats the instancePath into a human-readable field name\\n */\\n function formatFieldPath(instancePath: string, schemaPath?: string): string {\\n if (!instancePath?.trim?.()) {\\n return \\\"root\\\";\\n }\\n\\n // Check if this is a tuple validation (prefixItems in schemaPath)\\n const isTupleItem = schemaPath?.includes(\\\"/prefixItems/\\\");\\n\\n // Remove leading slash and convert to readable format\\n const formatted = instancePath\\n .replace(/^\\\\//, \\\"\\\")\\n .replace(/\\\\//g, \\\" ➜ \\\")\\n .replace(/(\\\\d+)/g, (match) => {\\n const index = Number(match);\\n // For tuples, use more readable position labels\\n if (isTupleItem) {\\n const positions = [\\n messageMap[MESSAGE_CODES.FIRST],\\n messageMap[MESSAGE_CODES.SECOND],\\n messageMap[MESSAGE_CODES.THIRD],\\n messageMap[MESSAGE_CODES.FOURTH],\\n messageMap[MESSAGE_CODES.FIFTH],\\n ];\\n return positions[index] //\\n ? `(${positions[index]})`\\n : `[${match}]`;\\n }\\n return `[${match}]`;\\n })\\n .replace(/➜ \\\\[/g, \\\"[\\\")\\n .replace(/➜ \\\\(/g, \\\" \\\");\\n\\n return formatted;\\n }\\n\\n /**\\n * Pluralizes a word based on count\\n */\\n function pluralize(\\n count: number,\\n plural: string = messageMap[MESSAGE_CODES.PLURAL_SUFFIX],\\n ): string {\\n return count === 1 ? \\\"\\\" : plural;\\n }\\n\\n /**\\n * Maps validation error to error code and formats message\\n */\\n function getErrorCodeAndMessage(error: TValidationError): {\\n code: keyof ValidationMessages;\\n message: string;\\n } {\\n const { keyword, params, schemaPath } = error;\\n const isTupleValidation = schemaPath?.includes(\\\"/prefixItems/\\\");\\n\\n const defaultMessage = format(messageMap[MESSAGE_CODES.UNKNOWN], keyword);\\n\\n const defaultError = {\\n code: MESSAGE_CODES.UNKNOWN,\\n message:\\n \\\"message\\\" in error\\n ? typeof error.message === \\\"string\\\"\\n ? error.message || defaultMessage\\n : JSON.stringify(error.message)\\n : defaultMessage,\\n };\\n\\n switch (keyword) {\\n case \\\"~guard\\\": {\\n const p = params as { errors: Array<{ message: string }> };\\n const messages = Array.isArray(p?.errors)\\n ? p.errors.flatMap((e) => {\\n return e.message ? [e.message] : [];\\n })\\n : [];\\n return {\\n code: MESSAGE_CODES.TYPE_INVALID,\\n message: messages.length\\n ? messages.join(\\\"; \\\")\\n : p.errors\\n ? JSON.stringify(p.errors)\\n : defaultMessage,\\n };\\n }\\n\\n // Type validation\\n case \\\"type\\\": {\\n const p = params as { type: string };\\n return {\\n code: MESSAGE_CODES.TYPE_INVALID,\\n message: format(messageMap[MESSAGE_CODES.TYPE_INVALID], p.type),\\n };\\n }\\n\\n // String validation\\n case \\\"minLength\\\": {\\n const p = params as { limit: number };\\n return {\\n code: MESSAGE_CODES.STRING_MIN_LENGTH,\\n message: format(\\n messageMap[MESSAGE_CODES.STRING_MIN_LENGTH],\\n p.limit,\\n pluralize(p.limit),\\n ),\\n };\\n }\\n\\n case \\\"maxLength\\\": {\\n const p = params as { limit: number };\\n return {\\n code: MESSAGE_CODES.STRING_MAX_LENGTH,\\n message: format(\\n messageMap[MESSAGE_CODES.STRING_MAX_LENGTH],\\n p.limit,\\n pluralize(p.limit),\\n ),\\n };\\n }\\n\\n case \\\"pattern\\\":\\n return {\\n code: MESSAGE_CODES.STRING_PATTERN,\\n message: messageMap[MESSAGE_CODES.STRING_PATTERN],\\n };\\n\\n case \\\"format\\\": {\\n const p = params as { format: string };\\n const formatMap: Record<string, keyof ValidationMessages> = {\\n email: MESSAGE_CODES.STRING_FORMAT_EMAIL,\\n date: MESSAGE_CODES.STRING_FORMAT_DATE,\\n \\\"date-time\\\": MESSAGE_CODES.STRING_FORMAT_DATETIME,\\n time: MESSAGE_CODES.STRING_FORMAT_TIME,\\n uri: MESSAGE_CODES.STRING_FORMAT_URI,\\n url: MESSAGE_CODES.STRING_FORMAT_URL,\\n uuid: MESSAGE_CODES.STRING_FORMAT_UUID,\\n ipv4: MESSAGE_CODES.STRING_FORMAT_IPV4,\\n ipv6: MESSAGE_CODES.STRING_FORMAT_IPV6,\\n hostname: MESSAGE_CODES.STRING_FORMAT_HOSTNAME,\\n \\\"json-pointer\\\": MESSAGE_CODES.STRING_FORMAT_JSON_POINTER,\\n regex: MESSAGE_CODES.STRING_FORMAT_REGEX,\\n };\\n const code = formatMap[p.format] || MESSAGE_CODES.STRING_FORMAT;\\n const message = formatMap[p.format]\\n ? messageMap[code]\\n : format(messageMap[MESSAGE_CODES.STRING_FORMAT], p.format);\\n return { code, message };\\n }\\n\\n // Number validation\\n case \\\"minimum\\\": {\\n const p = params as { comparison: string; limit: number };\\n return {\\n code: MESSAGE_CODES.NUMBER_MINIMUM,\\n message: format(\\n messageMap[MESSAGE_CODES.NUMBER_MINIMUM],\\n p.comparison,\\n p.limit,\\n ),\\n };\\n }\\n\\n case \\\"maximum\\\": {\\n const p = params as { comparison: string; limit: number };\\n return {\\n code: MESSAGE_CODES.NUMBER_MAXIMUM,\\n message: format(\\n messageMap[MESSAGE_CODES.NUMBER_MAXIMUM],\\n p.comparison,\\n p.limit,\\n ),\\n };\\n }\\n\\n case \\\"exclusiveMinimum\\\": {\\n const p = params as { comparison: string; limit: number };\\n return {\\n code: MESSAGE_CODES.NUMBER_EXCLUSIVE_MINIMUM,\\n message: format(\\n messageMap[MESSAGE_CODES.NUMBER_EXCLUSIVE_MINIMUM],\\n p.comparison,\\n p.limit,\\n ),\\n };\\n }\\n\\n case \\\"exclusiveMaximum\\\": {\\n const p = params as { comparison: string; limit: number };\\n return {\\n code: MESSAGE_CODES.NUMBER_EXCLUSIVE_MAXIMUM,\\n message: format(\\n messageMap[MESSAGE_CODES.NUMBER_EXCLUSIVE_MAXIMUM],\\n p.comparison,\\n p.limit,\\n ),\\n };\\n }\\n\\n case \\\"multipleOf\\\": {\\n const p = params as { multipleOf: number };\\n return {\\n code: MESSAGE_CODES.NUMBER_MULTIPLE_OF,\\n message: format(\\n messageMap[MESSAGE_CODES.NUMBER_MULTIPLE_OF],\\n p.multipleOf,\\n ),\\n };\\n }\\n\\n // Array validation\\n case \\\"minItems\\\": {\\n const p = params as { limit: number };\\n if (isTupleValidation) {\\n return {\\n code: MESSAGE_CODES.TUPLE_MIN_ITEMS,\\n message: format(\\n messageMap[MESSAGE_CODES.TUPLE_MIN_ITEMS],\\n p.limit,\\n pluralize(p.limit),\\n ),\\n };\\n }\\n return {\\n code: MESSAGE_CODES.ARRAY_MIN_ITEMS,\\n message: format(\\n messageMap[MESSAGE_CODES.ARRAY_MIN_ITEMS],\\n p.limit,\\n pluralize(p.limit),\\n ),\\n };\\n }\\n\\n case \\\"maxItems\\\": {\\n const p = params as { limit: number };\\n if (isTupleValidation) {\\n return {\\n code: MESSAGE_CODES.TUPLE_MAX_ITEMS,\\n message: format(\\n messageMap[MESSAGE_CODES.TUPLE_MAX_ITEMS],\\n p.limit,\\n pluralize(p.limit),\\n ),\\n };\\n }\\n return {\\n code: MESSAGE_CODES.ARRAY_MAX_ITEMS,\\n message: format(\\n messageMap[MESSAGE_CODES.ARRAY_MAX_ITEMS],\\n p.limit,\\n pluralize(p.limit),\\n ),\\n };\\n }\\n\\n case \\\"uniqueItems\\\": {\\n const p = params as { duplicateItems?: number[] };\\n const duplicateCount = p.duplicateItems?.length || 0;\\n const suffix = duplicateCount\\n ? format(\\n messageMap[MESSAGE_CODES.FOUND_N_DUPLICATES],\\n duplicateCount,\\n pluralize(duplicateCount),\\n )\\n : \\\"\\\";\\n return {\\n code: MESSAGE_CODES.ARRAY_UNIQUE_ITEMS,\\n message: format(messageMap[MESSAGE_CODES.ARRAY_UNIQUE_ITEMS], suffix),\\n };\\n }\\n\\n case \\\"contains\\\": {\\n const p = params as { minContains?: number };\\n const minContains = p.minContains || 1;\\n return {\\n code: MESSAGE_CODES.ARRAY_CONTAINS,\\n message: format(\\n messageMap[MESSAGE_CODES.ARRAY_CONTAINS],\\n minContains,\\n pluralize(minContains),\\n ),\\n };\\n }\\n\\n case \\\"unevaluatedItems\\\":\\n return {\\n code: MESSAGE_CODES.ARRAY_UNEVALUATED_ITEMS,\\n message: messageMap[MESSAGE_CODES.ARRAY_UNEVALUATED_ITEMS],\\n };\\n\\n // Object validation\\n case \\\"required\\\": {\\n const p = params as {\\n requiredProperties?: string[];\\n missingProperty?: string;\\n };\\n const missingProps = p.requiredProperties || p.missingProperty;\\n if (Array.isArray(missingProps)) {\\n const props = missingProps.map((prop) => `\\\"${prop}\\\"`).join(\\\", \\\");\\n const propWord =\\n missingProps.length === 1 //\\n ? messageMap[MESSAGE_CODES.PROPERTY]\\n : messageMap[MESSAGE_CODES.PROPERTIES];\\n return {\\n code: MESSAGE_CODES.OBJECT_REQUIRED,\\n message: format(\\n messageMap[MESSAGE_CODES.OBJECT_REQUIRED],\\n propWord,\\n props,\\n ),\\n };\\n }\\n return {\\n code: MESSAGE_CODES.OBJECT_REQUIRED,\\n message: format(\\n messageMap[MESSAGE_CODES.OBJECT_REQUIRED],\\n messageMap[MESSAGE_CODES.PROPERTY],\\n `\\\"${missingProps}\\\"`,\\n ),\\n };\\n }\\n\\n case \\\"additionalProperties\\\": {\\n const p = params as { additionalProperties: string[] };\\n return {\\n code: MESSAGE_CODES.OBJECT_ADDITIONAL_PROPERTIES,\\n message: format(\\n messageMap[MESSAGE_CODES.OBJECT_ADDITIONAL_PROPERTIES],\\n p.additionalProperties.join(\\\", \\\"),\\n ),\\n };\\n }\\n\\n case \\\"minProperties\\\": {\\n const p = params as { limit: number };\\n return {\\n code: MESSAGE_CODES.OBJECT_MIN_PROPERTIES,\\n message: format(\\n messageMap[MESSAGE_CODES.OBJECT_MIN_PROPERTIES],\\n p.limit,\\n messageMap[\\n p.limit === 1 //\\n ? MESSAGE_CODES.PROPERTY\\n : MESSAGE_CODES.PROPERTIES\\n ],\\n ),\\n };\\n }\\n\\n case \\\"maxProperties\\\": {\\n const p = params as { limit: number };\\n return {\\n code: MESSAGE_CODES.OBJECT_MAX_PROPERTIES,\\n message: format(\\n messageMap[MESSAGE_CODES.OBJECT_MAX_PROPERTIES],\\n p.limit,\\n messageMap[\\n p.limit === 1 //\\n ? MESSAGE_CODES.PROPERTY\\n : MESSAGE_CODES.PROPERTIES\\n ],\\n ),\\n };\\n }\\n\\n case \\\"propertyNames\\\": {\\n const p = params as { propertyNames: string[] };\\n return {\\n code: MESSAGE_CODES.OBJECT_PROPERTY_NAMES,\\n message: format(\\n messageMap[MESSAGE_CODES.OBJECT_PROPERTY_NAMES],\\n p.propertyNames.join(\\\", \\\"),\\n ),\\n };\\n }\\n\\n case \\\"dependencies\\\":\\n case \\\"dependentRequired\\\": {\\n const p = params as {\\n deps?: string | string[];\\n dependentRequired?: string | string[];\\n };\\n const deps = p.deps || p.dependentRequired;\\n const depsStr = Array.isArray(deps)\\n ? deps.map((d) => `\\\"${d}\\\"`).join(\\\", \\\")\\n : deps;\\n return {\\n code: MESSAGE_CODES.OBJECT_DEPENDENCIES,\\n message: format(\\n messageMap[MESSAGE_CODES.OBJECT_DEPENDENCIES],\\n depsStr,\\n ),\\n };\\n }\\n\\n case \\\"unevaluatedProperties\\\": {\\n const p = params as { unevaluatedProperties: string[] };\\n return {\\n code: MESSAGE_CODES.OBJECT_UNEVALUATED_PROPERTIES,\\n message: format(\\n messageMap[MESSAGE_CODES.OBJECT_UNEVALUATED_PROPERTIES],\\n p.unevaluatedProperties.join(\\\", \\\"),\\n ),\\n };\\n }\\n\\n // Enum and const\\n case \\\"enum\\\": {\\n const p = params as { allowedValues: unknown[] };\\n if (Array.isArray(p.allowedValues) && p.allowedValues.length <= 5) {\\n const values = p.allowedValues\\n .map((v) => JSON.stringify(v))\\n .join(\\\", \\\");\\n return {\\n code: MESSAGE_CODES.ENUM_MISMATCH,\\n message: format(messageMap[MESSAGE_CODES.ENUM_MISMATCH], values),\\n };\\n }\\n return {\\n code: MESSAGE_CODES.ENUM_MISMATCH,\\n message: format(\\n messageMap[MESSAGE_CODES.ENUM_MISMATCH],\\n messageMap[MESSAGE_CODES.ALLOWED_VALUES],\\n ),\\n };\\n }\\n\\n case \\\"const\\\": {\\n const p = params as { allowedValue: unknown };\\n return {\\n code: MESSAGE_CODES.CONST_MISMATCH,\\n message: format(\\n messageMap[MESSAGE_CODES.CONST_MISMATCH],\\n JSON.stringify(p.allowedValue),\\n ),\\n };\\n }\\n\\n // Conditional schemas\\n case \\\"if\\\":\\n return {\\n code: MESSAGE_CODES.CONDITIONAL_IF,\\n message: messageMap[MESSAGE_CODES.CONDITIONAL_IF],\\n };\\n\\n // Composition\\n case \\\"oneOf\\\": {\\n const p = params as { passingSchemas?: number[] };\\n return {\\n code: MESSAGE_CODES.COMPOSITION_ONE_OF,\\n message: format(\\n messageMap[MESSAGE_CODES.COMPOSITION_ONE_OF],\\n p.passingSchemas?.length || 0,\\n ),\\n };\\n }\\n\\n case \\\"anyOf\\\":\\n return {\\n code: MESSAGE_CODES.COMPOSITION_ANY_OF,\\n message: messageMap[MESSAGE_CODES.COMPOSITION_ANY_OF],\\n };\\n\\n case \\\"not\\\":\\n return {\\n code: MESSAGE_CODES.COMPOSITION_NOT,\\n message: messageMap[MESSAGE_CODES.COMPOSITION_NOT],\\n };\\n\\n case \\\"boolean\\\":\\n // Schema explicitly set to false - usually for additionalItems in tuples\\n if (\\n schemaPath?.includes(\\\"/items\\\") ||\\n schemaPath?.includes(\\\"/additionalItems\\\")\\n ) {\\n return {\\n code: MESSAGE_CODES.ARRAY_ITEMS,\\n message: messageMap[MESSAGE_CODES.ARRAY_ITEMS],\\n };\\n }\\n return defaultError;\\n\\n /**\\n * TODO: Periodically check the TypeBox repository for implementation updates.\\n * Some validation cases (minContains, prefixItems, etc.) are not yet\\n * implemented by TypeBox, so they are commented out below.\\n */\\n\\n /**\\n case \\\"minContains\\\": {\\n const p = params as { limit: number };\\n return {\\n code: MESSAGE_CODES.ARRAY_MIN_CONTAINS,\\n message: format(\\n messageMap[MESSAGE_CODES.ARRAY_MIN_CONTAINS],\\n p.limit,\\n pluralize(p.limit),\\n ),\\n };\\n }\\n\\n case \\\"maxContains\\\": {\\n const p = params as { limit: number };\\n return {\\n code: MESSAGE_CODES.ARRAY_MAX_CONTAINS,\\n message: format(\\n messageMap[MESSAGE_CODES.ARRAY_MAX_CONTAINS],\\n p.limit,\\n pluralize(p.limit),\\n ),\\n };\\n }\\n\\n case \\\"prefixItems\\\":\\n return {\\n code: MESSAGE_CODES.ARRAY_PREFIX_ITEMS,\\n message: messageMap[MESSAGE_CODES.ARRAY_PREFIX_ITEMS],\\n };\\n\\n case \\\"items\\\":\\n return {\\n code: MESSAGE_CODES.ARRAY_ITEMS,\\n message: messageMap[MESSAGE_CODES.ARRAY_ITEMS],\\n };\\n\\n case \\\"then\\\":\\n return {\\n code: MESSAGE_CODES.CONDITIONAL_THEN,\\n message: messageMap[MESSAGE_CODES.CONDITIONAL_THEN],\\n };\\n\\n case \\\"else\\\":\\n return {\\n code: MESSAGE_CODES.CONDITIONAL_ELSE,\\n message: messageMap[MESSAGE_CODES.CONDITIONAL_ELSE],\\n };\\n\\n case \\\"allOf\\\":\\n return {\\n code: MESSAGE_CODES.COMPOSITION_ALL_OF,\\n message: messageMap[MESSAGE_CODES.COMPOSITION_ALL_OF],\\n };\\n\\n // Content validation\\n case \\\"discriminator\\\": {\\n const p = params as { propertyName: string };\\n return {\\n code: MESSAGE_CODES.CONTENT_DISCRIMINATOR,\\n message: format(\\n messageMap[MESSAGE_CODES.CONTENT_DISCRIMINATOR],\\n p.propertyName,\\n ),\\n };\\n }\\n\\n case \\\"contentEncoding\\\": {\\n const p = params as { encoding: string };\\n return {\\n code: MESSAGE_CODES.CONTENT_ENCODING,\\n message: format(\\n messageMap[MESSAGE_CODES.CONTENT_ENCODING],\\n p.encoding,\\n ),\\n };\\n }\\n\\n case \\\"contentMediaType\\\": {\\n const p = params as { mediaType: string };\\n return {\\n code: MESSAGE_CODES.CONTENT_MEDIA_TYPE,\\n message: format(\\n messageMap[MESSAGE_CODES.CONTENT_MEDIA_TYPE],\\n p.mediaType,\\n ),\\n };\\n }\\n\\n // Custom keywords\\n case \\\"range\\\": {\\n const p = params as { min?: number; max?: number };\\n return {\\n code: MESSAGE_CODES.CUSTOM_RANGE,\\n message: format(messageMap[MESSAGE_CODES.CUSTOM_RANGE], p.min, p.max),\\n };\\n }\\n\\n case \\\"exclusiveRange\\\": {\\n const p = params as { min?: number; max?: number };\\n return {\\n code: MESSAGE_CODES.CUSTOM_EXCLUSIVE_RANGE,\\n message: format(\\n messageMap[MESSAGE_CODES.CUSTOM_EXCLUSIVE_RANGE],\\n p.min,\\n p.max,\\n ),\\n };\\n }\\n\\n case \\\"regexp\\\":\\n return {\\n code: MESSAGE_CODES.CUSTOM_REGEXP,\\n message: messageMap[MESSAGE_CODES.CUSTOM_REGEXP],\\n };\\n\\n case \\\"dynamicDefaults\\\":\\n return {\\n code: MESSAGE_CODES.CUSTOM_DYNAMIC_DEFAULTS,\\n message: messageMap[MESSAGE_CODES.CUSTOM_DYNAMIC_DEFAULTS],\\n };\\n\\n case \\\"select\\\":\\n case \\\"selectCases\\\":\\n case \\\"selectDefault\\\":\\n return {\\n code: MESSAGE_CODES.CUSTOM_SELECT,\\n message: messageMap[MESSAGE_CODES.CUSTOM_SELECT],\\n };\\n\\n case \\\"transform\\\":\\n return {\\n code: MESSAGE_CODES.CUSTOM_TRANSFORM,\\n message: messageMap[MESSAGE_CODES.CUSTOM_TRANSFORM],\\n };\\n\\n case \\\"uniqueItemProperties\\\": {\\n const p = params as { properties?: string[] };\\n const props = p.properties || [];\\n return {\\n code: MESSAGE_CODES.CUSTOM_UNIQUE_ITEM_PROPERTIES,\\n message: format(\\n messageMap[MESSAGE_CODES.CUSTOM_UNIQUE_ITEM_PROPERTIES],\\n messageMap[\\n props.length === 1 //\\n ? MESSAGE_CODES.PROPERTY\\n : MESSAGE_CODES.PROPERTIES\\n ],\\n props.join(\\\", \\\"),\\n ),\\n };\\n }\\n */\\n\\n // Default fallback\\n default: {\\n return defaultError;\\n }\\n }\\n }\\n\\n /**\\n * Groups errors by field to avoid duplicate messages\\n */\\n function groupErrorsByField(\\n errors: TValidationError[],\\n ): Map<string, TValidationError[]> {\\n const grouped = new Map<string, TValidationError[]>();\\n\\n for (const error of errors) {\\n const field = error.instancePath;\\n if (!grouped.has(field)) {\\n grouped.set(field, []);\\n }\\n grouped.get(field)?.push(error);\\n }\\n\\n return grouped;\\n }\\n\\n /**\\n * Prioritizes errors to show the most important one per field\\n */\\n function prioritizeErrors(errors: TValidationError[]): TValidationError {\\n // Priority order: required > type > format > const/enum > other constraints\\n const priority: Record<string, number> = {\\n required: 1,\\n type: 2,\\n format: 3,\\n const: 4,\\n enum: 4,\\n pattern: 5,\\n minimum: 6,\\n maximum: 6,\\n exclusiveMinimum: 6,\\n exclusiveMaximum: 6,\\n minLength: 6,\\n maxLength: 6,\\n minItems: 6,\\n maxItems: 6,\\n minProperties: 6,\\n maxProperties: 6,\\n };\\n\\n return errors.sort((a, b) => {\\n const aPriority = priority[a.keyword] || 99;\\n const bPriority = priority[b.keyword] || 99;\\n return aPriority - bPriority;\\n })[0];\\n }\\n\\n // ============================================================================\\n // Public API\\n // ============================================================================\\n\\n /**\\n * Main function to format validation errors\\n */\\n function formatValidationErrors(\\n errors: TValidationError[],\\n options: {\\n groupByField?: boolean;\\n singleError?: boolean;\\n } = {},\\n ): Array<ValidationErrorEntry> {\\n if (!errors?.length) {\\n return [];\\n }\\n\\n const { groupByField = true, singleError = false } = options;\\n\\n if (singleError) {\\n // Return only the first error\\n const error = errors[0];\\n const { code, message } = getErrorCodeAndMessage(error);\\n return [\\n {\\n keyword: error.keyword,\\n path: formatFieldPath(error.instancePath, error.schemaPath),\\n message,\\n code,\\n params: error.params,\\n },\\n ];\\n }\\n\\n if (groupByField) {\\n // Group errors by field and return one error per field\\n const grouped = groupErrorsByField(errors);\\n const formatted: ValidationErrorEntry[] = [];\\n\\n for (const [_, fieldErrors] of grouped) {\\n const prioritized = prioritizeErrors(fieldErrors);\\n const { code, message } = getErrorCodeAndMessage(prioritized);\\n formatted.push({\\n keyword: prioritized.keyword,\\n path: formatFieldPath(\\n prioritized.instancePath,\\n prioritized.schemaPath,\\n ),\\n message,\\n code,\\n params: prioritized.params,\\n });\\n }\\n\\n return formatted;\\n }\\n\\n // Return all errors\\n return errors.map((error) => {\\n const { code, message } = getErrorCodeAndMessage(error);\\n return {\\n keyword: error.keyword,\\n path: formatFieldPath(error.instancePath, error.schemaPath),\\n message,\\n code,\\n params: error.params,\\n };\\n });\\n }\\n\\n /**\\n * Formats errors into a single human-readable message\\n */\\n function formatValidationErrorMessage(\\n errors: TValidationError[],\\n options: {\\n prefix?: string;\\n separator?: string;\\n includeField?: boolean;\\n } = {},\\n ): string {\\n const {\\n prefix = messageMap[MESSAGE_CODES.VALIDATION_FAILED_PREFIX],\\n separator = \\\"; \\\",\\n includeField = true,\\n } = options;\\n\\n const formatted = formatValidationErrors(errors, { groupByField: true });\\n\\n const messageList = formatted.map((error) => {\\n if (includeField && error.path !== \\\"root\\\") {\\n return `${error.path}: ${error.message}`;\\n }\\n return error.message;\\n });\\n\\n return `${prefix}${prefix ? \\\" \\\" : \\\"\\\"}${messageList.join(separator)}`;\\n }\\n\\n /**\\n * Gets a simple error summary for quick feedback\\n */\\n function getErrorSummary(errors: TValidationError[]): string {\\n if (!errors?.length) {\\n return messageMap[MESSAGE_CODES.VALIDATION_PASSED];\\n }\\n\\n const uniqueFields = new Set(errors.map((e) => e.instancePath));\\n const fieldCount = uniqueFields.size;\\n\\n if (fieldCount === 1) {\\n const error = errors[0];\\n const { message } = getErrorCodeAndMessage(error);\\n const field = formatFieldPath(error.instancePath, error.schemaPath);\\n return field === \\\"root\\\" ? message : `${field}: ${message}`;\\n }\\n\\n return format(\\n messageMap[MESSAGE_CODES.ERROR_SUMMARY],\\n errors.length,\\n pluralize(errors.length),\\n fieldCount,\\n pluralize(fieldCount),\\n );\\n }\\n\\n return {\\n formatValidationErrors,\\n formatValidationErrorMessage,\\n getErrorSummary,\\n };\\n};\\n\\n/**\\n * Standalone format function for browser builds.\\n * Avoids importing node:util to keep bundle size small and browser-compatible.\\n * Supports: %s (string), %d (number), %i (integer), %f (float), %% (literal %)\\n * */\\nconst format = (fmt: string, ...args: unknown[]): string => {\\n const argsIterator = args[Symbol.iterator]();\\n\\n // Handle format specifiers\\n const str = String(fmt).replace(/%[sdif%]/g, (match) => {\\n if (match === \\\"%%\\\") {\\n return \\\"%\\\";\\n }\\n\\n const next = argsIterator.next();\\n\\n if (next.done) {\\n return match;\\n }\\n\\n const arg = next.value;\\n\\n switch (match) {\\n case \\\"%s\\\": // String\\n return String(arg);\\n case \\\"%d\\\": // Number\\n return String(Number(arg));\\n case \\\"%i\\\": // Integer\\n return String(parseInt(String(arg), 10));\\n case \\\"%f\\\": // Float\\n return String(parseFloat(String(arg)));\\n default:\\n return match;\\n }\\n });\\n\\n // Append remaining arguments\\n const remaining = [...argsIterator];\\n\\n if (remaining.length > 0) {\\n return [str, remaining.map((arg) => String(arg)).join(\\\" \\\")].join(\\\" \\\");\\n }\\n\\n return str;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@typebox/index.ts?raw\nvar _typebox_default = \"import Type from \\\"typebox\\\";\\nimport { Compile } from \\\"typebox/compile\\\";\\nimport Value from \\\"typebox/value\\\";\\n\\nimport type { ValidationSchema, ValidationTarget } from \\\"@kosmojs/core\\\";\\nimport { ValidationError } from \\\"@kosmojs/core/errors\\\";\\n\\nimport { errorHandlerFactory } from \\\"./error-handler\\\";\\nimport { customTypes, validationMessages } from \\\"./setup\\\";\\n\\nconst {\\n formatValidationErrors,\\n formatValidationErrorMessage,\\n getErrorSummary,\\n} = errorHandlerFactory(validationMessages);\\n\\nexport const validationSchemaFactory = (\\n schemaText: string,\\n { target, route }: { target: ValidationTarget | \\\"params\\\"; route: string },\\n): ValidationSchema => {\\n const schema = Type.Script(customTypes, schemaText);\\n const compiledSchema = Compile(schema);\\n const getSchemaErrors = (data: unknown) => Value.Errors(schema, data);\\n return {\\n check(data) {\\n return compiledSchema.Check(data);\\n },\\n errors(data) {\\n return formatValidationErrors(getSchemaErrors(data));\\n },\\n errorMessage(data) {\\n return formatValidationErrorMessage(getSchemaErrors(data));\\n },\\n errorSummary(data) {\\n return getErrorSummary(getSchemaErrors(data));\\n },\\n validate(data) {\\n if (!this.check(data)) {\\n throw new ValidationError([\\n target,\\n {\\n errors: this.errors(data),\\n errorMessage: this.errorMessage(data),\\n errorSummary: this.errorSummary(data),\\n route,\\n data,\\n },\\n ]);\\n }\\n },\\n };\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@typebox/setup.hbs?raw\nvar setup_default = \"import { Settings } from \\\"typebox/system\\\";\\n\\nSettings.Set({{settings}});\\n\\nexport { default as customTypes } from \\\"{{customTypesImport}}\\\";\\n\\nexport const validationMessages = {{validationMessages}};\\n\";\n//#endregion\n//#region src/templates/lib/schemas.hbs?raw\nvar schemas_default = \"import type { ValidationSchemas } from \\\"@kosmojs/core\\\";\\n\\nimport { validationSchemaFactory } from \\\"{{ createImport \\\"lib\\\" \\\"@typebox\\\" }}\\\";\\n\\nconst schemas = {\\n{{#each resolvedTypes}} {{name}}: `{{text}}`,\\n{{/each}}\\n}\\n\\nexport const validationSchemas: ValidationSchemas = {\\n params: validationSchemaFactory(\\n schemas.{{route.params.id}},\\n { route: \\\"{{route.name}}\\\", target: \\\"params\\\" },\\n ),\\n\\n {{#each requestSchemas}}\\n {{target}}: {\\n {{#each methods}}\\n {{method}}: {\\n ...validationSchemaFactory(\\n schemas.{{schema.id}},\\n { route: \\\"{{route}}\\\", target: \\\"{{target}}\\\" },\\n ),\\n {{#if runtimeValidation}}\\n runtimeValidation: {{runtimeValidation}},\\n {{/if}}\\n {{#if customErrors}}\\n customErrors: {{customErrors}},\\n {{/if}}\\n },\\n {{/each}}\\n },\\n {{/each}}\\n\\n response: {\\n {{#each responseSchemas}}\\n {{method}}: [\\n {{#each variants}}\\n {\\n {{#if resolvedType}}\\n ...validationSchemaFactory(\\n schemas.{{id}},\\n { route: \\\"{{route}}\\\", target: \\\"{{target}}\\\" },\\n ),\\n {{/if}}\\n status: {{status}},\\n {{#if contentType}}\\n contentType: \\\"{{contentType}}\\\",\\n {{/if}}\\n {{#if runtimeValidation}}\\n runtimeValidation: {{runtimeValidation}},\\n {{/if}}\\n {{#if customErrors}}\\n customErrors: {{customErrors}},\\n {{/if}}\\n },\\n {{/each}}\\n ],\\n {{/each}}\\n },\\n};\\n\";\n//#endregion\n//#region src/factory.ts\nvar defaultSettings = { exactOptionalPropertyTypes: true };\nvar factory_default = defineGeneratorFactory((meta, sourceFolder, options) => {\n\tconst { createPath, createImport, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { renderToFile: deployLibFile } = renderFactory({ helpers: { ...createImportHelpers({ origin: \"lib\" }) } });\n\tconst { validationMessages = {}, customTypesImport = createImport.lib([\"@typebox/custom-types\"], { origin: \"lib\" }), settings } = { ...options };\n\tconst generateLibFiles = async (entries) => {\n\t\tfor (const { kind, entry } of entries) {\n\t\t\tif (kind !== \"apiRoute\") continue;\n\t\t\tconst resolvedTypes = [entry.params.resolvedType, ...entry.validationDefinitions.flatMap((def) => {\n\t\t\t\treturn def.target === \"response\" ? def.variants.map(({ resolvedType }) => resolvedType) : [def.schema.resolvedType];\n\t\t\t})].flatMap((resolvedType) => {\n\t\t\t\treturn resolvedType ? [{\n\t\t\t\t\t...resolvedType,\n\t\t\t\t\ttext: typeboxLiteralText(resolvedType.text, sourceFolder)\n\t\t\t\t}] : [];\n\t\t\t});\n\t\t\tconst requestSchemas = [...new Set(entry.validationDefinitions.flatMap(({ target }) => {\n\t\t\t\treturn Object.keys(RequestValidationTargets).includes(target) ? [target] : [];\n\t\t\t}))].map((target) => {\n\t\t\t\treturn {\n\t\t\t\t\ttarget,\n\t\t\t\t\tmethods: entry.methods.flatMap((method) => {\n\t\t\t\t\t\tconst def = entry.validationDefinitions.find((e) => {\n\t\t\t\t\t\t\treturn e.method === method ? e.target === target : false;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn def ? [{\n\t\t\t\t\t\t\troute: entry.name,\n\t\t\t\t\t\t\tmethod,\n\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\tschema: def.schema,\n\t\t\t\t\t\t\t...def.runtimeValidation === void 0 ? {} : { runtimeValidation: JSON.stringify(def.runtimeValidation) },\n\t\t\t\t\t\t\t...def.customErrors === void 0 ? {} : { customErrors: JSON.stringify(def.customErrors) }\n\t\t\t\t\t\t}] : [];\n\t\t\t\t\t})\n\t\t\t\t};\n\t\t\t});\n\t\t\tconst responseSchemas = entry.methods.flatMap((method) => {\n\t\t\t\tconst def = entry.validationDefinitions.find((e) => {\n\t\t\t\t\treturn e.method === method ? e.target === \"response\" : false;\n\t\t\t\t});\n\t\t\t\treturn def ? [{\n\t\t\t\t\tmethod,\n\t\t\t\t\tvariants: def.variants.map((variant) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\troute: entry.name,\n\t\t\t\t\t\t\ttarget: \"response\",\n\t\t\t\t\t\t\t...variant,\n\t\t\t\t\t\t\t...def.runtimeValidation === void 0 ? {} : { runtimeValidation: JSON.stringify(def.runtimeValidation) },\n\t\t\t\t\t\t\t...def.customErrors === void 0 ? {} : { customErrors: JSON.stringify(def.customErrors) }\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t\t}] : [];\n\t\t\t});\n\t\t\tawait deployLibFile(createPath.libApi(entry.name, \"schemas.ts\"), schemas_default, {\n\t\t\t\troute: entry,\n\t\t\t\tresolvedTypes,\n\t\t\t\trequestSchemas,\n\t\t\t\tresponseSchemas\n\t\t\t});\n\t\t}\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tasync start() {\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"custom-types.ts\", custom_types_default],\n\t\t\t\t[\"error-handler.ts\", error_handler_default],\n\t\t\t\t[\"index.ts\", _typebox_default],\n\t\t\t\t[\"setup.ts\", setup_default]\n\t\t\t]) await deployLibFile(createPath.lib(\"@typebox\", file), template, {\n\t\t\t\tvalidationMessages: JSON.stringify(validationMessages),\n\t\t\t\tcustomTypesImport,\n\t\t\t\tsettings: JSON.stringify({\n\t\t\t\t\t...defaultSettings,\n\t\t\t\t\t...settings\n\t\t\t\t})\n\t\t\t});\n\t\t},\n\t\tasync watch(entries, event) {\n\t\t\tawait generateLibFiles(event ? entries.filter(({ kind, entry }) => {\n\t\t\t\treturn event.kind === \"update\" ? kind === \"apiRoute\" ? entry.fileFullpath === event.file : false : false;\n\t\t\t}) : entries);\n\t\t},\n\t\tasync build(entries) {\n\t\t\tawait generateLibFiles(entries);\n\t\t}\n\t};\n});\n//#endregion\n//#region src/templates/lib/@typebox/error-handler.ts\n/**\n* Message codes for i18n/l10n support\n*/\nvar MESSAGE_CODES = {\n\t/** Singular form of \"property\" word for i18n */\n\tPROPERTY: \"PROPERTY\",\n\t/** Plural form of \"properties\" word for i18n */\n\tPROPERTIES: \"PROPERTIES\",\n\t/** Text for \"allowed values\" phrase for i18n */\n\tALLOWED_VALUES: \"ALLOWED_VALUES\",\n\t/** Message template for displaying count of duplicate items found */\n\tFOUND_N_DUPLICATES: \"FOUND_N_DUPLICATES\",\n\t/** Message displayed when validation succeeds */\n\tVALIDATION_PASSED: \"VALIDATION_PASSED\",\n\t/** Prefix text for validation error messages (e.g., \"Validation failed:\") */\n\tVALIDATION_FAILED_PREFIX: \"VALIDATION_FAILED_PREFIX\",\n\t/** Template for error summary showing error count and affected fields */\n\tERROR_SUMMARY: \"ERROR_SUMMARY\",\n\t/** Plural suffix for words (e.g., \"s\" in English) */\n\tPLURAL_SUFFIX: \"PLURAL_SUFFIX\",\n\t/** Ordinal position label for first element in tuple/array */\n\tFIRST: \"FIRST\",\n\t/** Ordinal position label for second element in tuple/array */\n\tSECOND: \"SECOND\",\n\t/** Ordinal position label for third element in tuple/array */\n\tTHIRD: \"THIRD\",\n\t/** Ordinal position label for fourth element in tuple/array */\n\tFOURTH: \"FOURTH\",\n\t/** Ordinal position label for fifth element in tuple/array */\n\tFIFTH: \"FIFTH\",\n\t/** Invalid data type - expected a specific type */\n\tTYPE_INVALID: \"TYPE_INVALID\",\n\t/** String is too short - minimum length constraint violated */\n\tSTRING_MIN_LENGTH: \"STRING_MIN_LENGTH\",\n\t/** String is too long - maximum length constraint violated */\n\tSTRING_MAX_LENGTH: \"STRING_MAX_LENGTH\",\n\t/** String doesn't match required pattern/regex */\n\tSTRING_PATTERN: \"STRING_PATTERN\",\n\t/** String doesn't match required format (generic) */\n\tSTRING_FORMAT: \"STRING_FORMAT\",\n\t/** Invalid email address format */\n\tSTRING_FORMAT_EMAIL: \"STRING_FORMAT_EMAIL\",\n\t/** Invalid date format */\n\tSTRING_FORMAT_DATE: \"STRING_FORMAT_DATE\",\n\t/** Invalid date-time format */\n\tSTRING_FORMAT_DATETIME: \"STRING_FORMAT_DATETIME\",\n\t/** Invalid time format */\n\tSTRING_FORMAT_TIME: \"STRING_FORMAT_TIME\",\n\t/** Invalid URI format */\n\tSTRING_FORMAT_URI: \"STRING_FORMAT_URI\",\n\t/** Invalid URL format */\n\tSTRING_FORMAT_URL: \"STRING_FORMAT_URL\",\n\t/** Invalid UUID format */\n\tSTRING_FORMAT_UUID: \"STRING_FORMAT_UUID\",\n\t/** Invalid IPv4 address format */\n\tSTRING_FORMAT_IPV4: \"STRING_FORMAT_IPV4\",\n\t/** Invalid IPv6 address format */\n\tSTRING_FORMAT_IPV6: \"STRING_FORMAT_IPV6\",\n\t/** Invalid hostname format */\n\tSTRING_FORMAT_HOSTNAME: \"STRING_FORMAT_HOSTNAME\",\n\t/** Invalid JSON pointer format */\n\tSTRING_FORMAT_JSON_POINTER: \"STRING_FORMAT_JSON_POINTER\",\n\t/** Invalid regular expression format */\n\tSTRING_FORMAT_REGEX: \"STRING_FORMAT_REGEX\",\n\t/** Number is below minimum value */\n\tNUMBER_MINIMUM: \"NUMBER_MINIMUM\",\n\t/** Number exceeds maximum value */\n\tNUMBER_MAXIMUM: \"NUMBER_MAXIMUM\",\n\t/** Number is below exclusive minimum value */\n\tNUMBER_EXCLUSIVE_MINIMUM: \"NUMBER_EXCLUSIVE_MINIMUM\",\n\t/** Number exceeds exclusive maximum value */\n\tNUMBER_EXCLUSIVE_MAXIMUM: \"NUMBER_EXCLUSIVE_MAXIMUM\",\n\t/** Number is not a multiple of required value */\n\tNUMBER_MULTIPLE_OF: \"NUMBER_MULTIPLE_OF\",\n\t/** Array has too few items - minimum items constraint violated */\n\tARRAY_MIN_ITEMS: \"ARRAY_MIN_ITEMS\",\n\t/** Array has too many items - maximum items constraint violated */\n\tARRAY_MAX_ITEMS: \"ARRAY_MAX_ITEMS\",\n\t/** Array contains duplicate items when uniqueness is required */\n\tARRAY_UNIQUE_ITEMS: \"ARRAY_UNIQUE_ITEMS\",\n\t/** Array doesn't contain required valid items */\n\tARRAY_CONTAINS: \"ARRAY_CONTAINS\",\n\t/** Array contains too few items matching criteria */\n\tARRAY_MIN_CONTAINS: \"ARRAY_MIN_CONTAINS\",\n\t/** Array contains too many items matching criteria */\n\tARRAY_MAX_CONTAINS: \"ARRAY_MAX_CONTAINS\",\n\t/** Invalid tuple structure */\n\tARRAY_PREFIX_ITEMS: \"ARRAY_PREFIX_ITEMS\",\n\t/** Invalid additional items beyond tuple definition */\n\tARRAY_ITEMS: \"ARRAY_ITEMS\",\n\t/** Invalid unevaluated items in array */\n\tARRAY_UNEVALUATED_ITEMS: \"ARRAY_UNEVALUATED_ITEMS\",\n\t/** Tuple has too few elements */\n\tTUPLE_MIN_ITEMS: \"TUPLE_MIN_ITEMS\",\n\t/** Tuple has too many elements */\n\tTUPLE_MAX_ITEMS: \"TUPLE_MAX_ITEMS\",\n\t/** Missing required property/properties */\n\tOBJECT_REQUIRED: \"OBJECT_REQUIRED\",\n\t/** Object contains additional properties not allowed by schema */\n\tOBJECT_ADDITIONAL_PROPERTIES: \"OBJECT_ADDITIONAL_PROPERTIES\",\n\t/** Object has too few properties */\n\tOBJECT_MIN_PROPERTIES: \"OBJECT_MIN_PROPERTIES\",\n\t/** Object has too many properties */\n\tOBJECT_MAX_PROPERTIES: \"OBJECT_MAX_PROPERTIES\",\n\t/** Invalid property name */\n\tOBJECT_PROPERTY_NAMES: \"OBJECT_PROPERTY_NAMES\",\n\t/** Missing dependent required properties */\n\tOBJECT_DEPENDENCIES: \"OBJECT_DEPENDENCIES\",\n\t/** Object contains unevaluated properties */\n\tOBJECT_UNEVALUATED_PROPERTIES: \"OBJECT_UNEVALUATED_PROPERTIES\",\n\t/** Value is not one of the allowed enum values */\n\tENUM_MISMATCH: \"ENUM_MISMATCH\",\n\t/** Value doesn't match the required constant value */\n\tCONST_MISMATCH: \"CONST_MISMATCH\",\n\t/** Doesn't match conditional if schema */\n\tCONDITIONAL_IF: \"CONDITIONAL_IF\",\n\t/** Doesn't satisfy then schema condition */\n\tCONDITIONAL_THEN: \"CONDITIONAL_THEN\",\n\t/** Doesn't satisfy else schema condition */\n\tCONDITIONAL_ELSE: \"CONDITIONAL_ELSE\",\n\t/** Must match exactly one schema (oneOf) */\n\tCOMPOSITION_ONE_OF: \"COMPOSITION_ONE_OF\",\n\t/** Must match at least one schema (anyOf) */\n\tCOMPOSITION_ANY_OF: \"COMPOSITION_ANY_OF\",\n\t/** Must match all schemas (allOf) */\n\tCOMPOSITION_ALL_OF: \"COMPOSITION_ALL_OF\",\n\t/** Must not match the schema (not) */\n\tCOMPOSITION_NOT: \"COMPOSITION_NOT\",\n\t/** Invalid discriminator value */\n\tCONTENT_DISCRIMINATOR: \"CONTENT_DISCRIMINATOR\",\n\t/** Invalid content encoding */\n\tCONTENT_ENCODING: \"CONTENT_ENCODING\",\n\t/** Invalid content media type */\n\tCONTENT_MEDIA_TYPE: \"CONTENT_MEDIA_TYPE\",\n\t/** Value outside allowed range */\n\tCUSTOM_RANGE: \"CUSTOM_RANGE\",\n\t/** Value outside exclusive range */\n\tCUSTOM_EXCLUSIVE_RANGE: \"CUSTOM_EXCLUSIVE_RANGE\",\n\t/** Doesn't match regular expression */\n\tCUSTOM_REGEXP: \"CUSTOM_REGEXP\",\n\t/** Failed to apply dynamic default */\n\tCUSTOM_DYNAMIC_DEFAULTS: \"CUSTOM_DYNAMIC_DEFAULTS\",\n\t/** Doesn't match any selected case */\n\tCUSTOM_SELECT: \"CUSTOM_SELECT\",\n\t/** Transformation failed */\n\tCUSTOM_TRANSFORM: \"CUSTOM_TRANSFORM\",\n\t/** Items don't have unique property values */\n\tCUSTOM_UNIQUE_ITEM_PROPERTIES: \"CUSTOM_UNIQUE_ITEM_PROPERTIES\",\n\t/** Unknown validation error */\n\tUNKNOWN: \"UNKNOWN\"\n};\n/**\n* Error message templates using node:util format syntax\n* Placeholders: %s (string), %d (number), %j (JSON)\n*\n* Usage: format(ERROR_MESSAGES[ErrorCode.STRING_MIN_LENGTH], 5)\n* Result: \"must be at least 5 characters long\"\n*/\nvar MESSAGE_MAP = {\n\t[MESSAGE_CODES.PROPERTY]: \"property\",\n\t[MESSAGE_CODES.PROPERTIES]: \"properties\",\n\t[MESSAGE_CODES.ALLOWED_VALUES]: \"the allowed values\",\n\t[MESSAGE_CODES.FOUND_N_DUPLICATES]: \" (found %d duplicate%s)\",\n\t[MESSAGE_CODES.VALIDATION_PASSED]: \"Validation Passed\",\n\t[MESSAGE_CODES.VALIDATION_FAILED_PREFIX]: \"\",\n\t[MESSAGE_CODES.ERROR_SUMMARY]: \"%d validation error%s found across %d field%s\",\n\t[MESSAGE_CODES.PLURAL_SUFFIX]: \"s\",\n\t[MESSAGE_CODES.FIRST]: \"first\",\n\t[MESSAGE_CODES.SECOND]: \"second\",\n\t[MESSAGE_CODES.THIRD]: \"third\",\n\t[MESSAGE_CODES.FOURTH]: \"fourth\",\n\t[MESSAGE_CODES.FIFTH]: \"fifth\",\n\t[MESSAGE_CODES.TYPE_INVALID]: \"must be %s\",\n\t[MESSAGE_CODES.STRING_MIN_LENGTH]: \"must be at least %d character%s long\",\n\t[MESSAGE_CODES.STRING_MAX_LENGTH]: \"must not exceed %d character%s\",\n\t[MESSAGE_CODES.STRING_PATTERN]: \"must match the required pattern\",\n\t[MESSAGE_CODES.STRING_FORMAT]: `must match format \"%s\"`,\n\t[MESSAGE_CODES.STRING_FORMAT_EMAIL]: \"must be a valid email address\",\n\t[MESSAGE_CODES.STRING_FORMAT_DATE]: \"must be a valid date\",\n\t[MESSAGE_CODES.STRING_FORMAT_DATETIME]: \"must be a valid date-time\",\n\t[MESSAGE_CODES.STRING_FORMAT_TIME]: \"must be a valid time\",\n\t[MESSAGE_CODES.STRING_FORMAT_URI]: \"must be a valid URI\",\n\t[MESSAGE_CODES.STRING_FORMAT_URL]: \"must be a valid URL\",\n\t[MESSAGE_CODES.STRING_FORMAT_UUID]: \"must be a valid UUID\",\n\t[MESSAGE_CODES.STRING_FORMAT_IPV4]: \"must be a valid IPv4 address\",\n\t[MESSAGE_CODES.STRING_FORMAT_IPV6]: \"must be a valid IPv6 address\",\n\t[MESSAGE_CODES.STRING_FORMAT_HOSTNAME]: \"must be a valid hostname\",\n\t[MESSAGE_CODES.STRING_FORMAT_JSON_POINTER]: \"must be a valid JSON pointer\",\n\t[MESSAGE_CODES.STRING_FORMAT_REGEX]: \"must be a valid regular expression\",\n\t[MESSAGE_CODES.NUMBER_MINIMUM]: \"must be %s %s\",\n\t[MESSAGE_CODES.NUMBER_MAXIMUM]: \"must be %s %s\",\n\t[MESSAGE_CODES.NUMBER_EXCLUSIVE_MINIMUM]: \"must be %s %s\",\n\t[MESSAGE_CODES.NUMBER_EXCLUSIVE_MAXIMUM]: \"must be %s %s\",\n\t[MESSAGE_CODES.NUMBER_MULTIPLE_OF]: \"must be a multiple of %s\",\n\t[MESSAGE_CODES.ARRAY_MIN_ITEMS]: \"must have at least %d item%s\",\n\t[MESSAGE_CODES.ARRAY_MAX_ITEMS]: \"must not have more than %d item%s\",\n\t[MESSAGE_CODES.ARRAY_UNIQUE_ITEMS]: \"must not have duplicate items%s\",\n\t[MESSAGE_CODES.ARRAY_CONTAINS]: \"must contain at least %d valid item%s\",\n\t[MESSAGE_CODES.ARRAY_MIN_CONTAINS]: \"must contain at least %d item%s matching the criteria\",\n\t[MESSAGE_CODES.ARRAY_MAX_CONTAINS]: \"must contain no more than %d item%s matching the criteria\",\n\t[MESSAGE_CODES.ARRAY_PREFIX_ITEMS]: \"tuple structure is invalid\",\n\t[MESSAGE_CODES.ARRAY_ITEMS]: \"array items are invalid\",\n\t[MESSAGE_CODES.ARRAY_UNEVALUATED_ITEMS]: \"should not have unevaluated items\",\n\t[MESSAGE_CODES.TUPLE_MIN_ITEMS]: \"tuple must have at least %d element%s\",\n\t[MESSAGE_CODES.TUPLE_MAX_ITEMS]: \"tuple must not have more than %d element%s\",\n\t[MESSAGE_CODES.OBJECT_REQUIRED]: \"missing required %s: %s\",\n\t[MESSAGE_CODES.OBJECT_ADDITIONAL_PROPERTIES]: `should not have additional property \"%s\"`,\n\t[MESSAGE_CODES.OBJECT_MIN_PROPERTIES]: \"must have at least %d %s\",\n\t[MESSAGE_CODES.OBJECT_MAX_PROPERTIES]: \"must not have more than %d %s\",\n\t[MESSAGE_CODES.OBJECT_PROPERTY_NAMES]: `property name \"%s\" is invalid`,\n\t[MESSAGE_CODES.OBJECT_DEPENDENCIES]: \"requires %s when present\",\n\t[MESSAGE_CODES.OBJECT_UNEVALUATED_PROPERTIES]: `should not have unevaluated property \"%s\"`,\n\t[MESSAGE_CODES.ENUM_MISMATCH]: \"must be one of: %s\",\n\t[MESSAGE_CODES.CONST_MISMATCH]: \"must be equal to %s\",\n\t[MESSAGE_CODES.CONDITIONAL_IF]: \"does not match the conditional schema\",\n\t[MESSAGE_CODES.CONDITIONAL_THEN]: `does not satisfy the \"then\" schema condition`,\n\t[MESSAGE_CODES.CONDITIONAL_ELSE]: `does not satisfy the \"else\" schema condition`,\n\t[MESSAGE_CODES.COMPOSITION_ONE_OF]: \"must match exactly one schema (currently matches %d)\",\n\t[MESSAGE_CODES.COMPOSITION_ANY_OF]: \"must match at least one schema\",\n\t[MESSAGE_CODES.COMPOSITION_ALL_OF]: \"must match all schemas\",\n\t[MESSAGE_CODES.COMPOSITION_NOT]: \"must not match the schema\",\n\t[MESSAGE_CODES.CONTENT_DISCRIMINATOR]: `discriminator property \"%s\" has invalid value`,\n\t[MESSAGE_CODES.CONTENT_ENCODING]: `content encoding \"%s\" is invalid`,\n\t[MESSAGE_CODES.CONTENT_MEDIA_TYPE]: `content media type \"%s\" is invalid`,\n\t[MESSAGE_CODES.CUSTOM_RANGE]: \"must be within the range %s to %s\",\n\t[MESSAGE_CODES.CUSTOM_EXCLUSIVE_RANGE]: \"must be strictly within the range %s to %s\",\n\t[MESSAGE_CODES.CUSTOM_REGEXP]: \"must match the regular expression pattern\",\n\t[MESSAGE_CODES.CUSTOM_DYNAMIC_DEFAULTS]: \"failed to apply dynamic default value\",\n\t[MESSAGE_CODES.CUSTOM_SELECT]: \"does not match any of the selected cases\",\n\t[MESSAGE_CODES.CUSTOM_TRANSFORM]: \"transformation failed\",\n\t[MESSAGE_CODES.CUSTOM_UNIQUE_ITEM_PROPERTIES]: \"must have unique values for %s: %s\",\n\t[MESSAGE_CODES.UNKNOWN]: `validation failed for keyword \"%s\"`\n};\n/**\n* Comprehensive error handler for TypeBox validation errors.\n* Supports most JSON Schema validation keywords and produces human-friendly messages\n* with i18n/l10n support through message code mapping.\n*/\nvar errorHandlerFactory = (customMessages) => {\n\tconst messageMap = {\n\t\t...MESSAGE_MAP,\n\t\t...customMessages\n\t};\n\t/**\n\t* Formats the instancePath into a human-readable field name\n\t*/\n\tfunction formatFieldPath(instancePath, schemaPath) {\n\t\tif (!instancePath?.trim?.()) return \"root\";\n\t\tconst isTupleItem = schemaPath?.includes(\"/prefixItems/\");\n\t\treturn instancePath.replace(/^\\//, \"\").replace(/\\//g, \" ➜ \").replace(/(\\d+)/g, (match) => {\n\t\t\tconst index = Number(match);\n\t\t\tif (isTupleItem) {\n\t\t\t\tconst positions = [\n\t\t\t\t\tmessageMap[MESSAGE_CODES.FIRST],\n\t\t\t\t\tmessageMap[MESSAGE_CODES.SECOND],\n\t\t\t\t\tmessageMap[MESSAGE_CODES.THIRD],\n\t\t\t\t\tmessageMap[MESSAGE_CODES.FOURTH],\n\t\t\t\t\tmessageMap[MESSAGE_CODES.FIFTH]\n\t\t\t\t];\n\t\t\t\treturn positions[index] ? `(${positions[index]})` : `[${match}]`;\n\t\t\t}\n\t\t\treturn `[${match}]`;\n\t\t}).replace(/➜ \\[/g, \"[\").replace(/➜ \\(/g, \" \");\n\t}\n\t/**\n\t* Pluralizes a word based on count\n\t*/\n\tfunction pluralize(count, plural = messageMap[MESSAGE_CODES.PLURAL_SUFFIX]) {\n\t\treturn count === 1 ? \"\" : plural;\n\t}\n\t/**\n\t* Maps validation error to error code and formats message\n\t*/\n\tfunction getErrorCodeAndMessage(error) {\n\t\tconst { keyword, params, schemaPath } = error;\n\t\tconst isTupleValidation = schemaPath?.includes(\"/prefixItems/\");\n\t\tconst defaultMessage = format(messageMap[MESSAGE_CODES.UNKNOWN], keyword);\n\t\tconst defaultError = {\n\t\t\tcode: MESSAGE_CODES.UNKNOWN,\n\t\t\tmessage: \"message\" in error ? typeof error.message === \"string\" ? error.message || defaultMessage : JSON.stringify(error.message) : defaultMessage\n\t\t};\n\t\tswitch (keyword) {\n\t\t\tcase \"~guard\": {\n\t\t\t\tconst p = params;\n\t\t\t\tconst messages = Array.isArray(p?.errors) ? p.errors.flatMap((e) => {\n\t\t\t\t\treturn e.message ? [e.message] : [];\n\t\t\t\t}) : [];\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.TYPE_INVALID,\n\t\t\t\t\tmessage: messages.length ? messages.join(\"; \") : p.errors ? JSON.stringify(p.errors) : defaultMessage\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"type\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.TYPE_INVALID,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.TYPE_INVALID], p.type)\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"minLength\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.STRING_MIN_LENGTH,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.STRING_MIN_LENGTH], p.limit, pluralize(p.limit))\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"maxLength\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.STRING_MAX_LENGTH,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.STRING_MAX_LENGTH], p.limit, pluralize(p.limit))\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"pattern\": return {\n\t\t\t\tcode: MESSAGE_CODES.STRING_PATTERN,\n\t\t\t\tmessage: messageMap[MESSAGE_CODES.STRING_PATTERN]\n\t\t\t};\n\t\t\tcase \"format\": {\n\t\t\t\tconst p = params;\n\t\t\t\tconst formatMap = {\n\t\t\t\t\temail: MESSAGE_CODES.STRING_FORMAT_EMAIL,\n\t\t\t\t\tdate: MESSAGE_CODES.STRING_FORMAT_DATE,\n\t\t\t\t\t\"date-time\": MESSAGE_CODES.STRING_FORMAT_DATETIME,\n\t\t\t\t\ttime: MESSAGE_CODES.STRING_FORMAT_TIME,\n\t\t\t\t\turi: MESSAGE_CODES.STRING_FORMAT_URI,\n\t\t\t\t\turl: MESSAGE_CODES.STRING_FORMAT_URL,\n\t\t\t\t\tuuid: MESSAGE_CODES.STRING_FORMAT_UUID,\n\t\t\t\t\tipv4: MESSAGE_CODES.STRING_FORMAT_IPV4,\n\t\t\t\t\tipv6: MESSAGE_CODES.STRING_FORMAT_IPV6,\n\t\t\t\t\thostname: MESSAGE_CODES.STRING_FORMAT_HOSTNAME,\n\t\t\t\t\t\"json-pointer\": MESSAGE_CODES.STRING_FORMAT_JSON_POINTER,\n\t\t\t\t\tregex: MESSAGE_CODES.STRING_FORMAT_REGEX\n\t\t\t\t};\n\t\t\t\tconst code = formatMap[p.format] || MESSAGE_CODES.STRING_FORMAT;\n\t\t\t\treturn {\n\t\t\t\t\tcode,\n\t\t\t\t\tmessage: formatMap[p.format] ? messageMap[code] : format(messageMap[MESSAGE_CODES.STRING_FORMAT], p.format)\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"minimum\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.NUMBER_MINIMUM,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.NUMBER_MINIMUM], p.comparison, p.limit)\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"maximum\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.NUMBER_MAXIMUM,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.NUMBER_MAXIMUM], p.comparison, p.limit)\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"exclusiveMinimum\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.NUMBER_EXCLUSIVE_MINIMUM,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.NUMBER_EXCLUSIVE_MINIMUM], p.comparison, p.limit)\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"exclusiveMaximum\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.NUMBER_EXCLUSIVE_MAXIMUM,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.NUMBER_EXCLUSIVE_MAXIMUM], p.comparison, p.limit)\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"multipleOf\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.NUMBER_MULTIPLE_OF,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.NUMBER_MULTIPLE_OF], p.multipleOf)\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"minItems\": {\n\t\t\t\tconst p = params;\n\t\t\t\tif (isTupleValidation) return {\n\t\t\t\t\tcode: MESSAGE_CODES.TUPLE_MIN_ITEMS,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.TUPLE_MIN_ITEMS], p.limit, pluralize(p.limit))\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.ARRAY_MIN_ITEMS,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.ARRAY_MIN_ITEMS], p.limit, pluralize(p.limit))\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"maxItems\": {\n\t\t\t\tconst p = params;\n\t\t\t\tif (isTupleValidation) return {\n\t\t\t\t\tcode: MESSAGE_CODES.TUPLE_MAX_ITEMS,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.TUPLE_MAX_ITEMS], p.limit, pluralize(p.limit))\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.ARRAY_MAX_ITEMS,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.ARRAY_MAX_ITEMS], p.limit, pluralize(p.limit))\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"uniqueItems\": {\n\t\t\t\tconst duplicateCount = params.duplicateItems?.length || 0;\n\t\t\t\tconst suffix = duplicateCount ? format(messageMap[MESSAGE_CODES.FOUND_N_DUPLICATES], duplicateCount, pluralize(duplicateCount)) : \"\";\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.ARRAY_UNIQUE_ITEMS,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.ARRAY_UNIQUE_ITEMS], suffix)\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"contains\": {\n\t\t\t\tconst minContains = params.minContains || 1;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.ARRAY_CONTAINS,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.ARRAY_CONTAINS], minContains, pluralize(minContains))\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"unevaluatedItems\": return {\n\t\t\t\tcode: MESSAGE_CODES.ARRAY_UNEVALUATED_ITEMS,\n\t\t\t\tmessage: messageMap[MESSAGE_CODES.ARRAY_UNEVALUATED_ITEMS]\n\t\t\t};\n\t\t\tcase \"required\": {\n\t\t\t\tconst p = params;\n\t\t\t\tconst missingProps = p.requiredProperties || p.missingProperty;\n\t\t\t\tif (Array.isArray(missingProps)) {\n\t\t\t\t\tconst props = missingProps.map((prop) => `\"${prop}\"`).join(\", \");\n\t\t\t\t\tconst propWord = missingProps.length === 1 ? messageMap[MESSAGE_CODES.PROPERTY] : messageMap[MESSAGE_CODES.PROPERTIES];\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcode: MESSAGE_CODES.OBJECT_REQUIRED,\n\t\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.OBJECT_REQUIRED], propWord, props)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.OBJECT_REQUIRED,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.OBJECT_REQUIRED], messageMap[MESSAGE_CODES.PROPERTY], `\"${missingProps}\"`)\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"additionalProperties\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.OBJECT_ADDITIONAL_PROPERTIES,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.OBJECT_ADDITIONAL_PROPERTIES], p.additionalProperties.join(\", \"))\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"minProperties\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.OBJECT_MIN_PROPERTIES,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.OBJECT_MIN_PROPERTIES], p.limit, messageMap[p.limit === 1 ? MESSAGE_CODES.PROPERTY : MESSAGE_CODES.PROPERTIES])\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"maxProperties\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.OBJECT_MAX_PROPERTIES,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.OBJECT_MAX_PROPERTIES], p.limit, messageMap[p.limit === 1 ? MESSAGE_CODES.PROPERTY : MESSAGE_CODES.PROPERTIES])\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"propertyNames\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.OBJECT_PROPERTY_NAMES,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.OBJECT_PROPERTY_NAMES], p.propertyNames.join(\", \"))\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"dependencies\":\n\t\t\tcase \"dependentRequired\": {\n\t\t\t\tconst p = params;\n\t\t\t\tconst deps = p.deps || p.dependentRequired;\n\t\t\t\tconst depsStr = Array.isArray(deps) ? deps.map((d) => `\"${d}\"`).join(\", \") : deps;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.OBJECT_DEPENDENCIES,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.OBJECT_DEPENDENCIES], depsStr)\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"unevaluatedProperties\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.OBJECT_UNEVALUATED_PROPERTIES,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.OBJECT_UNEVALUATED_PROPERTIES], p.unevaluatedProperties.join(\", \"))\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"enum\": {\n\t\t\t\tconst p = params;\n\t\t\t\tif (Array.isArray(p.allowedValues) && p.allowedValues.length <= 5) {\n\t\t\t\t\tconst values = p.allowedValues.map((v) => JSON.stringify(v)).join(\", \");\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcode: MESSAGE_CODES.ENUM_MISMATCH,\n\t\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.ENUM_MISMATCH], values)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.ENUM_MISMATCH,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.ENUM_MISMATCH], messageMap[MESSAGE_CODES.ALLOWED_VALUES])\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"const\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.CONST_MISMATCH,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.CONST_MISMATCH], JSON.stringify(p.allowedValue))\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"if\": return {\n\t\t\t\tcode: MESSAGE_CODES.CONDITIONAL_IF,\n\t\t\t\tmessage: messageMap[MESSAGE_CODES.CONDITIONAL_IF]\n\t\t\t};\n\t\t\tcase \"oneOf\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: MESSAGE_CODES.COMPOSITION_ONE_OF,\n\t\t\t\t\tmessage: format(messageMap[MESSAGE_CODES.COMPOSITION_ONE_OF], p.passingSchemas?.length || 0)\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"anyOf\": return {\n\t\t\t\tcode: MESSAGE_CODES.COMPOSITION_ANY_OF,\n\t\t\t\tmessage: messageMap[MESSAGE_CODES.COMPOSITION_ANY_OF]\n\t\t\t};\n\t\t\tcase \"not\": return {\n\t\t\t\tcode: MESSAGE_CODES.COMPOSITION_NOT,\n\t\t\t\tmessage: messageMap[MESSAGE_CODES.COMPOSITION_NOT]\n\t\t\t};\n\t\t\tcase \"boolean\":\n\t\t\t\tif (schemaPath?.includes(\"/items\") || schemaPath?.includes(\"/additionalItems\")) return {\n\t\t\t\t\tcode: MESSAGE_CODES.ARRAY_ITEMS,\n\t\t\t\t\tmessage: messageMap[MESSAGE_CODES.ARRAY_ITEMS]\n\t\t\t\t};\n\t\t\t\treturn defaultError;\n\t\t\t/**\n\t\t\t* TODO: Periodically check the TypeBox repository for implementation updates.\n\t\t\t* Some validation cases (minContains, prefixItems, etc.) are not yet\n\t\t\t* implemented by TypeBox, so they are commented out below.\n\t\t\t*/\n\t\t\t/**\n\t\t\tcase \"minContains\": {\n\t\t\tconst p = params as { limit: number };\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.ARRAY_MIN_CONTAINS,\n\t\t\tmessage: format(\n\t\t\tmessageMap[MESSAGE_CODES.ARRAY_MIN_CONTAINS],\n\t\t\tp.limit,\n\t\t\tpluralize(p.limit),\n\t\t\t),\n\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tcase \"maxContains\": {\n\t\t\tconst p = params as { limit: number };\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.ARRAY_MAX_CONTAINS,\n\t\t\tmessage: format(\n\t\t\tmessageMap[MESSAGE_CODES.ARRAY_MAX_CONTAINS],\n\t\t\tp.limit,\n\t\t\tpluralize(p.limit),\n\t\t\t),\n\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tcase \"prefixItems\":\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.ARRAY_PREFIX_ITEMS,\n\t\t\tmessage: messageMap[MESSAGE_CODES.ARRAY_PREFIX_ITEMS],\n\t\t\t};\n\t\t\t\n\t\t\tcase \"items\":\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.ARRAY_ITEMS,\n\t\t\tmessage: messageMap[MESSAGE_CODES.ARRAY_ITEMS],\n\t\t\t};\n\t\t\t\n\t\t\tcase \"then\":\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.CONDITIONAL_THEN,\n\t\t\tmessage: messageMap[MESSAGE_CODES.CONDITIONAL_THEN],\n\t\t\t};\n\t\t\t\n\t\t\tcase \"else\":\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.CONDITIONAL_ELSE,\n\t\t\tmessage: messageMap[MESSAGE_CODES.CONDITIONAL_ELSE],\n\t\t\t};\n\t\t\t\n\t\t\tcase \"allOf\":\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.COMPOSITION_ALL_OF,\n\t\t\tmessage: messageMap[MESSAGE_CODES.COMPOSITION_ALL_OF],\n\t\t\t};\n\t\t\t\n\t\t\t// Content validation\n\t\t\tcase \"discriminator\": {\n\t\t\tconst p = params as { propertyName: string };\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.CONTENT_DISCRIMINATOR,\n\t\t\tmessage: format(\n\t\t\tmessageMap[MESSAGE_CODES.CONTENT_DISCRIMINATOR],\n\t\t\tp.propertyName,\n\t\t\t),\n\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tcase \"contentEncoding\": {\n\t\t\tconst p = params as { encoding: string };\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.CONTENT_ENCODING,\n\t\t\tmessage: format(\n\t\t\tmessageMap[MESSAGE_CODES.CONTENT_ENCODING],\n\t\t\tp.encoding,\n\t\t\t),\n\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tcase \"contentMediaType\": {\n\t\t\tconst p = params as { mediaType: string };\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.CONTENT_MEDIA_TYPE,\n\t\t\tmessage: format(\n\t\t\tmessageMap[MESSAGE_CODES.CONTENT_MEDIA_TYPE],\n\t\t\tp.mediaType,\n\t\t\t),\n\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\t// Custom keywords\n\t\t\tcase \"range\": {\n\t\t\tconst p = params as { min?: number; max?: number };\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.CUSTOM_RANGE,\n\t\t\tmessage: format(messageMap[MESSAGE_CODES.CUSTOM_RANGE], p.min, p.max),\n\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tcase \"exclusiveRange\": {\n\t\t\tconst p = params as { min?: number; max?: number };\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.CUSTOM_EXCLUSIVE_RANGE,\n\t\t\tmessage: format(\n\t\t\tmessageMap[MESSAGE_CODES.CUSTOM_EXCLUSIVE_RANGE],\n\t\t\tp.min,\n\t\t\tp.max,\n\t\t\t),\n\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tcase \"regexp\":\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.CUSTOM_REGEXP,\n\t\t\tmessage: messageMap[MESSAGE_CODES.CUSTOM_REGEXP],\n\t\t\t};\n\t\t\t\n\t\t\tcase \"dynamicDefaults\":\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.CUSTOM_DYNAMIC_DEFAULTS,\n\t\t\tmessage: messageMap[MESSAGE_CODES.CUSTOM_DYNAMIC_DEFAULTS],\n\t\t\t};\n\t\t\t\n\t\t\tcase \"select\":\n\t\t\tcase \"selectCases\":\n\t\t\tcase \"selectDefault\":\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.CUSTOM_SELECT,\n\t\t\tmessage: messageMap[MESSAGE_CODES.CUSTOM_SELECT],\n\t\t\t};\n\t\t\t\n\t\t\tcase \"transform\":\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.CUSTOM_TRANSFORM,\n\t\t\tmessage: messageMap[MESSAGE_CODES.CUSTOM_TRANSFORM],\n\t\t\t};\n\t\t\t\n\t\t\tcase \"uniqueItemProperties\": {\n\t\t\tconst p = params as { properties?: string[] };\n\t\t\tconst props = p.properties || [];\n\t\t\treturn {\n\t\t\tcode: MESSAGE_CODES.CUSTOM_UNIQUE_ITEM_PROPERTIES,\n\t\t\tmessage: format(\n\t\t\tmessageMap[MESSAGE_CODES.CUSTOM_UNIQUE_ITEM_PROPERTIES],\n\t\t\tmessageMap[\n\t\t\tprops.length === 1 //\n\t\t\t? MESSAGE_CODES.PROPERTY\n\t\t\t: MESSAGE_CODES.PROPERTIES\n\t\t\t],\n\t\t\tprops.join(\", \"),\n\t\t\t),\n\t\t\t};\n\t\t\t}\n\t\t\t*/\n\t\t\tdefault: return defaultError;\n\t\t}\n\t}\n\t/**\n\t* Groups errors by field to avoid duplicate messages\n\t*/\n\tfunction groupErrorsByField(errors) {\n\t\tconst grouped = /* @__PURE__ */ new Map();\n\t\tfor (const error of errors) {\n\t\t\tconst field = error.instancePath;\n\t\t\tif (!grouped.has(field)) grouped.set(field, []);\n\t\t\tgrouped.get(field)?.push(error);\n\t\t}\n\t\treturn grouped;\n\t}\n\t/**\n\t* Prioritizes errors to show the most important one per field\n\t*/\n\tfunction prioritizeErrors(errors) {\n\t\tconst priority = {\n\t\t\trequired: 1,\n\t\t\ttype: 2,\n\t\t\tformat: 3,\n\t\t\tconst: 4,\n\t\t\tenum: 4,\n\t\t\tpattern: 5,\n\t\t\tminimum: 6,\n\t\t\tmaximum: 6,\n\t\t\texclusiveMinimum: 6,\n\t\t\texclusiveMaximum: 6,\n\t\t\tminLength: 6,\n\t\t\tmaxLength: 6,\n\t\t\tminItems: 6,\n\t\t\tmaxItems: 6,\n\t\t\tminProperties: 6,\n\t\t\tmaxProperties: 6\n\t\t};\n\t\treturn errors.sort((a, b) => {\n\t\t\treturn (priority[a.keyword] || 99) - (priority[b.keyword] || 99);\n\t\t})[0];\n\t}\n\t/**\n\t* Main function to format validation errors\n\t*/\n\tfunction formatValidationErrors(errors, options = {}) {\n\t\tif (!errors?.length) return [];\n\t\tconst { groupByField = true, singleError = false } = options;\n\t\tif (singleError) {\n\t\t\tconst error = errors[0];\n\t\t\tconst { code, message } = getErrorCodeAndMessage(error);\n\t\t\treturn [{\n\t\t\t\tkeyword: error.keyword,\n\t\t\t\tpath: formatFieldPath(error.instancePath, error.schemaPath),\n\t\t\t\tmessage,\n\t\t\t\tcode,\n\t\t\t\tparams: error.params\n\t\t\t}];\n\t\t}\n\t\tif (groupByField) {\n\t\t\tconst grouped = groupErrorsByField(errors);\n\t\t\tconst formatted = [];\n\t\t\tfor (const [_, fieldErrors] of grouped) {\n\t\t\t\tconst prioritized = prioritizeErrors(fieldErrors);\n\t\t\t\tconst { code, message } = getErrorCodeAndMessage(prioritized);\n\t\t\t\tformatted.push({\n\t\t\t\t\tkeyword: prioritized.keyword,\n\t\t\t\t\tpath: formatFieldPath(prioritized.instancePath, prioritized.schemaPath),\n\t\t\t\t\tmessage,\n\t\t\t\t\tcode,\n\t\t\t\t\tparams: prioritized.params\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn formatted;\n\t\t}\n\t\treturn errors.map((error) => {\n\t\t\tconst { code, message } = getErrorCodeAndMessage(error);\n\t\t\treturn {\n\t\t\t\tkeyword: error.keyword,\n\t\t\t\tpath: formatFieldPath(error.instancePath, error.schemaPath),\n\t\t\t\tmessage,\n\t\t\t\tcode,\n\t\t\t\tparams: error.params\n\t\t\t};\n\t\t});\n\t}\n\t/**\n\t* Formats errors into a single human-readable message\n\t*/\n\tfunction formatValidationErrorMessage(errors, options = {}) {\n\t\tconst { prefix = messageMap[MESSAGE_CODES.VALIDATION_FAILED_PREFIX], separator = \"; \", includeField = true } = options;\n\t\tconst messageList = formatValidationErrors(errors, { groupByField: true }).map((error) => {\n\t\t\tif (includeField && error.path !== \"root\") return `${error.path}: ${error.message}`;\n\t\t\treturn error.message;\n\t\t});\n\t\treturn `${prefix}${prefix ? \" \" : \"\"}${messageList.join(separator)}`;\n\t}\n\t/**\n\t* Gets a simple error summary for quick feedback\n\t*/\n\tfunction getErrorSummary(errors) {\n\t\tif (!errors?.length) return messageMap[MESSAGE_CODES.VALIDATION_PASSED];\n\t\tconst fieldCount = new Set(errors.map((e) => e.instancePath)).size;\n\t\tif (fieldCount === 1) {\n\t\t\tconst error = errors[0];\n\t\t\tconst { message } = getErrorCodeAndMessage(error);\n\t\t\tconst field = formatFieldPath(error.instancePath, error.schemaPath);\n\t\t\treturn field === \"root\" ? message : `${field}: ${message}`;\n\t\t}\n\t\treturn format(messageMap[MESSAGE_CODES.ERROR_SUMMARY], errors.length, pluralize(errors.length), fieldCount, pluralize(fieldCount));\n\t}\n\treturn {\n\t\tformatValidationErrors,\n\t\tformatValidationErrorMessage,\n\t\tgetErrorSummary\n\t};\n};\n/**\n* Standalone format function for browser builds.\n* Avoids importing node:util to keep bundle size small and browser-compatible.\n* Supports: %s (string), %d (number), %i (integer), %f (float), %% (literal %)\n* */\nvar format = (fmt, ...args) => {\n\tconst argsIterator = args[Symbol.iterator]();\n\tconst str = String(fmt).replace(/%[sdif%]/g, (match) => {\n\t\tif (match === \"%%\") return \"%\";\n\t\tconst next = argsIterator.next();\n\t\tif (next.done) return match;\n\t\tconst arg = next.value;\n\t\tswitch (match) {\n\t\t\tcase \"%s\": return String(arg);\n\t\t\tcase \"%d\": return String(Number(arg));\n\t\t\tcase \"%i\": return String(parseInt(String(arg), 10));\n\t\t\tcase \"%f\": return String(parseFloat(String(arg)));\n\t\t\tdefault: return match;\n\t\t}\n\t});\n\tconst remaining = [...argsIterator];\n\tif (remaining.length > 0) return [str, remaining.map((arg) => String(arg)).join(\" \")].join(\" \");\n\treturn str;\n};\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator((options) => {\n\tconst meta = {\n\t\tname: \"TypeBox\",\n\t\tresolveTypes: true,\n\t\tdependencies: { typebox: package_default.devDependencies.typebox }\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tfactory: (sourceFolder) => factory_default(meta, sourceFolder, options)\n\t};\n});\n//#endregion\nexport { MESSAGE_CODES, src_default as default, errorHandlerFactory };\n\n//# sourceMappingURL=index.js.map","import { basename, dirname, join, resolve } from \"node:path\";\nimport crc from \"crc/crc32\";\nimport \"tfusion\";\nimport \"ts-morph\";\nimport picomatch from \"picomatch\";\nimport { access, constants, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport handlebars from \"handlebars\";\nimport \"path-to-regexp\";\nimport \"mime-types\";\nimport \"@topcli/spinner\";\n//#region ../../packages/lib/pkg/index.js\nvar defaults$1 = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets$1 = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets$1 = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets$1,\n\t...RequestBodyTargets$1\n});\nvar defineGenerator = (f) => f;\nvar defineGeneratorFactory = (f) => f;\nvar createTemplateResolver = (customTemplates, defaultTemplate) => {\n\tconst templates = Object.entries({ ...customTemplates }).map(([pattern, template]) => [picomatch(pattern), template]);\n\treturn (pattern, entry) => {\n\t\tconst match = templates.find(([isMatch]) => isMatch(pattern));\n\t\tif (!match) return defaultTemplate;\n\t\treturn typeof match[1] === \"function\" ? match[1](entry) : match[1];\n\t};\n};\nvar pathResolver = (sourceFolder) => {\n\tconst createPath = (...a) => {\n\t\treturn sourceFolder.root ? resolve(sourceFolder.root, join(...a)) : join(...a);\n\t};\n\tconst createImport = {\n\t\tsrc(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults$1.srcPrefix, ...a) : join(defaults$1.appPrefix, defaults$1.srcDir, sourceFolder.name, ...a);\n\t\t},\n\t\tapi(a, o) {\n\t\t\treturn this.src([defaults$1.apiDir, ...a], o);\n\t\t},\n\t\tpages(a, o) {\n\t\t\treturn this.src([defaults$1.pagesDir, ...a], o);\n\t\t},\n\t\tlib(a, { origin }) {\n\t\t\treturn origin === \"src\" ? join(defaults$1.libPrefix, ...a) : join(defaults$1.appPrefix, defaults$1.libDir, sourceFolder.name, ...a);\n\t\t},\n\t\tlibCore(a, o) {\n\t\t\treturn this.lib([\"core\", ...a], o);\n\t\t},\n\t\tlibApi(a, o) {\n\t\t\treturn this.lib([defaults$1.apiDir, ...a], o);\n\t\t},\n\t\tlibEntry(a, o) {\n\t\t\treturn this.lib([defaults$1.entryDir, ...a], o);\n\t\t}\n\t};\n\treturn {\n\t\tcreatePath: {\n\t\t\tsrc(...a) {\n\t\t\t\treturn createPath(defaults$1.srcDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tapi(...a) {\n\t\t\t\treturn this.src(defaults$1.apiDir, ...a);\n\t\t\t},\n\t\t\tpages(...a) {\n\t\t\t\treturn this.src(defaults$1.pagesDir, ...a);\n\t\t\t},\n\t\t\tentry(...a) {\n\t\t\t\treturn this.src(defaults$1.entryDir, ...a);\n\t\t\t},\n\t\t\tlib(...a) {\n\t\t\t\treturn createPath(defaults$1.libDir, sourceFolder.name, ...a);\n\t\t\t},\n\t\t\tlibCore(...a) {\n\t\t\t\treturn this.lib(\"core\", ...a);\n\t\t\t},\n\t\t\tlibApi(...a) {\n\t\t\t\treturn this.lib(defaults$1.apiDir, ...a);\n\t\t\t},\n\t\t\tlibEntry(...a) {\n\t\t\t\treturn this.lib(defaults$1.entryDir, ...a);\n\t\t\t},\n\t\t\tlibPages(...a) {\n\t\t\t\treturn this.lib(defaults$1.pagesDir, ...a);\n\t\t\t},\n\t\t\tdistDir(...a) {\n\t\t\t\treturn createPath(sourceFolder.distDir, sourceFolder.name, ...a);\n\t\t\t}\n\t\t},\n\t\tcreateImport,\n\t\tcreateImportHelpers(o) {\n\t\t\tif (![\"src\", \"lib\"].includes(o?.origin)) throw new Error(`createImportHelpers: required exactly one argument of shape { origin: \"src|lib\" }`);\n\t\t\treturn { createImport(key, ...a) {\n\t\t\t\treturn createImport[key](a.slice(0, -1), o);\n\t\t\t} };\n\t\t}\n\t};\n};\nvar pathExists = async (path) => {\n\ttry {\n\t\tawait access(path, constants.F_OK);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\nvar render = (template, context, options) => {\n\tconst { noEscape = true, renderer = handlebars } = { ...options };\n\treturn renderer.compile(template, { noEscape })(context);\n};\nvar renderToFile = async (file, template, context, options) => {\n\tconst content = render(template, context, options);\n\t/**\n\t* Two fs calls (exists + read) are worth it to avoid touching the file\n\t* and triggering watchers unnecessarily.\n\t* */\n\tif (await pathExists(file)) {\n\t\tconst { overwrite = true } = { ...options };\n\t\tif (overwrite === false) return;\n\t\tconst fileContent = await readFile(file, \"utf8\");\n\t\tif (typeof overwrite === \"function\" && !overwrite(fileContent)) return;\n\t\tif (crc(content) === crc(fileContent)) return;\n\t}\n\tawait mkdir(dirname(file), { recursive: true });\n\tawait writeFile(file, content, \"utf8\");\n};\nvar renderFactory = (options) => {\n\tconst createRenderer = (selfOoptions) => {\n\t\tconst renderer = handlebars.create();\n\t\trenderer.registerPartial({\n\t\t\t...options?.partials,\n\t\t\t...selfOoptions?.partials\n\t\t});\n\t\trenderer.registerHelper({\n\t\t\t...options?.helpers,\n\t\t\t...selfOoptions?.helpers\n\t\t});\n\t\treturn renderer;\n\t};\n\treturn {\n\t\trender(template, context, selfOoptions) {\n\t\t\treturn render(template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t},\n\t\tasync renderToFile(file, template, context, selfOoptions) {\n\t\t\treturn renderToFile(options?.outdir ? join(options.outdir, file) : file, template, context, {\n\t\t\t\t...options,\n\t\t\t\t...selfOoptions,\n\t\t\t\trenderer: createRenderer(selfOoptions)\n\t\t\t});\n\t\t}\n\t};\n};\nvar normalizeStaticValue = (value) => {\n\treturn value.replace(/\\+/g, \"\\\\\\\\+\");\n};\nvar API_INDEX_PATTERN = `index.ts`;\nvar API_USE_PATTERN = `use.ts`;\nvar PAGE_INDEX_BASENAME = \"index\";\nvar PAGE_INDEX_PATTERN = `${PAGE_INDEX_BASENAME}.{tsx,vue,mdx,md}`;\nvar PAGE_LAYOUT_BASENAME = \"layout\";\nvar PAGE_LAYOUT_PATTERN = `${PAGE_LAYOUT_BASENAME}.{tsx,vue,mdx}`;\n`${defaults$1.apiDir}${API_INDEX_PATTERN}`, `${defaults$1.apiDir}${API_USE_PATTERN}`, `${defaults$1.pagesDir}${PAGE_INDEX_PATTERN}`, `${defaults$1.pagesDir}${PAGE_LAYOUT_PATTERN}`;\n/**\n* Weight of a single path segment.\n*\n* Fixed values per kind prevent complex mixed segments\n* from outscoring multiple statics.\n*\n* static: 4 (exact match, most specific)\n* mixed: 3+ (static + param parts; more statics = slightly higher)\n* required: 2 (matches any single segment)\n* optional: 1 (may or may not match)\n* splat: 0 (matches anything, least specific)\n* */\nvar segmentWeight = (token) => {\n\tif (token.kind === \"static\") return 4;\n\tif (token.kind === \"mixed\") {\n\t\tlet statics = 0;\n\t\tlet optionals = 0;\n\t\tfor (const part of token.parts) if (part.type === \"static\") statics += 1;\n\t\telse if (part.kind === \"optional\" || part.kind === \"splat\") optionals += 1;\n\t\treturn 3 + statics * .01 - optionals * .005;\n\t}\n\tswitch (token.parts[0].kind) {\n\t\tcase \"required\": return 2;\n\t\tcase \"optional\": return 1;\n\t\tcase \"splat\": return 0;\n\t}\n};\n/**\n* Compare two route entries for registration order.\n*\n* More specific routes sort first (higher priority).\n* Segments are compared left-to-right; first difference wins.\n*\n* When one route is a prefix of the other, the trailing segment\n* determines order: a trailing splat loses (shorter sibling first),\n* anything else wins (longer route is more specific).\n*\n* At equal weight and length, lexicographic tiebreak ensures\n* deterministic ordering across JS engines.\n* */\nvar sortRoutes = (a, b) => {\n\tconst pairs = Array.from({ length: Math.max(a.pathTokens.length, b.pathTokens.length) }, (_, i) => [a.pathTokens[i], b.pathTokens[i]]);\n\tfor (const [at, bt] of pairs) {\n\t\tif (!at || !bt) {\n\t\t\tconst extra = at ?? bt;\n\t\t\tif (extra?.kind === \"param\" ? extra.parts[0].kind === \"splat\" : false) return at ? 1 : -1;\n\t\t\treturn at ? -1 : 1;\n\t\t}\n\t\tconst aw = segmentWeight(at);\n\t\tconst bw = segmentWeight(bt);\n\t\tif (aw !== bw) return bw - aw;\n\t}\n\treturn a.pathPattern.localeCompare(b.pathPattern);\n};\nvar nestedRoutesFactory = (routeEntries) => {\n\tconst entryStack = structuredClone(routeEntries).sort(sortRoutes);\n\t/**\n\t* Group entries by name (at the same level, both layout and index share same name).\n\t*\n\t* Handle 3 cases:\n\t* - both index and layout exists\n\t* - only index exists\n\t* - only layout exists\n\t*\n\t* */\n\tconst transformEntries = (entries, parent) => {\n\t\treturn [...new Set(entries.map((e) => e.name))].flatMap((name) => {\n\t\t\tconst nameEntries = entryStack.flatMap(({ fileFullpath, ...entry }) => {\n\t\t\t\treturn entry.name === name ? [entry] : [];\n\t\t\t});\n\t\t\tconst index = nameEntries.find((e) => basename(e.file).startsWith(PAGE_INDEX_BASENAME));\n\t\t\tconst layout = nameEntries.find((e) => basename(e.file).startsWith(PAGE_LAYOUT_BASENAME));\n\t\t\tif (index || layout) return [{\n\t\t\t\tindex: index ? {\n\t\t\t\t\t...index,\n\t\t\t\t\tpathTokens: index.pathTokens.slice(parent?.pathTokens.length || 0)\n\t\t\t\t} : void 0,\n\t\t\t\tlayout: layout ? {\n\t\t\t\t\t...layout,\n\t\t\t\t\tpathTokens: layout.pathTokens.slice(parent?.pathTokens.length || 0)\n\t\t\t\t} : void 0,\n\t\t\t\tparent: parent?.name,\n\t\t\t\tchildren: transformEntries(findDescendantEntries(index || layout), index || layout)\n\t\t\t}];\n\t\t\treturn [];\n\t\t});\n\t};\n\t/**\n\t* Recursively finds direct descendant routes.\n\t*\n\t* \"Direct\" means the next existing route in the path hierarchy,\n\t* skipping intermediate path segments that don't have index/layout files.\n\t*\n\t* Example: blog/post/[slug]/index.tsx is a direct child of blog/index.tsx\n\t* even though \"post\" segment exists (it has no index.tsx).\n\t* */\n\tconst findDescendantEntries = ({ name, pathTokens }) => {\n\t\tconst potentialChildren = entryStack.filter((entry) => {\n\t\t\tif (entry.pathTokens.length <= pathTokens.length) return false;\n\t\t\tif (!entry.name.startsWith(`${name}/`)) return false;\n\t\t\treturn true;\n\t\t});\n\t\treturn potentialChildren.filter((child) => {\n\t\t\treturn !potentialChildren.some((intermediate) => {\n\t\t\t\tif (intermediate === child) return false;\n\t\t\t\tif (intermediate.pathTokens.length <= pathTokens.length) return false;\n\t\t\t\tif (intermediate.pathTokens.length >= child.pathTokens.length) return false;\n\t\t\t\treturn child.name.startsWith(`${intermediate.name}/`);\n\t\t\t});\n\t\t});\n\t};\n\treturn transformEntries(entryStack.filter((entry) => {\n\t\treturn !entryStack.some((potential) => {\n\t\t\tif (potential === entry) return false;\n\t\t\tif (potential.pathTokens.length >= entry.pathTokens.length) return false;\n\t\t\treturn entry.name.startsWith(`${potential.name}/`);\n\t\t});\n\t}));\n};\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/vue-generator\",\n\tversion: \"0.1.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\n\timports: { \"#templates/*\": \"./src/templates/*\" },\n\texports: { \".\": {\n\t\t\"types\": \"./pkg/index.d.ts\",\n\t\t\"default\": \"./pkg/index.js\"\n\t} },\n\tscripts: {\n\t\t\"build\": \"wsbuild src/index.ts\",\n\t\t\"test\": \"vitest --root ../.. --project generators/vue-generator\"\n\t},\n\tdevDependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@vitejs/plugin-vue\": \"^6.0.6\",\n\t\t\"path-to-regexp\": \"^8.4.2\",\n\t\t\"vue\": \"^3.5.33\",\n\t\t\"vue-router\": \"^5.0.6\"\n\t}\n};\n//#endregion\n//#region ../../packages/core/pkg/index.js\nvar defaults = {\n\tappPrefix: \"@\",\n\tsrcPrefix: \"~\",\n\tlibPrefix: \"_\",\n\tcoreDir: \"core\",\n\tsrcDir: \"src\",\n\tlibDir: \"lib\",\n\tconfigDir: \"config\",\n\tapiDir: \"api\",\n\tpagesDir: \"pages\",\n\tentryDir: \"entry\",\n\tfetchDir: \"fetch\",\n\trefineTypeName: \"VRefine\"\n};\n/**\n* Request metadata validation targets.\n* */\nvar RequestMetadataTargets = {\n\tquery: \"URL query parameters\",\n\theaders: \"HTTP request headers\",\n\tcookies: \"HTTP cookies\"\n};\n/**\n* Request body validation targets.\n*\n* Body formats are mutually exclusive - only one should be specified per handler.\n*\n* **Development behavior:**\n* - If multiple formats are defined, the builder displays a warning and\n* disables validation schemas for the affected handler.\n* - If an unsuitable target is defined (e.g., `json`, `form`)\n* for a method without a body like GET, HEAD), a warning is displayed and\n* validation schemas are disabled for that handler.\n*\n* This ensures misconfigurations are detected during development\n* for runtime to execute without false positive validation failures.\n*\n* Always define exactly one target that is suitable for current handler.\n* */\nvar RequestBodyTargets = {\n\tjson: \"JSON request body\",\n\tform: \"URL-encoded or Multipart form\",\n\traw: \"Raw body format (string/Buffer/ArrayBuffer/Blob)\"\n};\n({\n\t...RequestMetadataTargets,\n\t...RequestBodyTargets\n});\n//#endregion\n//#region ../../packages/core/pkg/generators/index.js\nvar routeRenderHelpers = () => {\n\treturn {\n\t\tpageLinkBase({ name, pathPattern, params }) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tname,\n\t\t\t\tpathPattern,\n\t\t\t\tparams\n\t\t\t});\n\t\t},\n\t\tserializeParamsTupleElements: (route) => {\n\t\t\treturn route.params.schema.map((p, i) => {\n\t\t\t\tif (p.kind === \"splat\") {\n\t\t\t\t\tconst suffix = route.params.schema[i + 1] ? \"\" : \"?\";\n\t\t\t\t\treturn `${p.const + suffix}: Array<string | number>`;\n\t\t\t\t}\n\t\t\t\treturn p.kind === \"optional\" ? `${p.const}?: string | number` : `${p.const}: string | number`;\n\t\t\t}).join(\", \");\n\t\t},\n\t\tserializeParamsLiteral(route) {\n\t\t\treturn `{ ${route.params.schema.map((e) => {\n\t\t\t\treturn [[e.name, e.kind === \"required\" ? \"\" : \"?\"].join(\"\"), e.kind === \"splat\" ? \"Array<string>\" : \"string\"].join(\": \");\n\t\t\t}).join(\"; \")} }`;\n\t\t}\n\t};\n};\n//#endregion\n//#region src/base.ts\nvar pathFactory = (pathTokens) => {\n\tconst staticValue = ({ value }) => {\n\t\treturn normalizeStaticValue(value);\n\t};\n\tconst paramValue = (p) => {\n\t\tif (p.kind === \"splat\") return `:${p.name}(.*)?`;\n\t\tif (p.kind === \"optional\") return `:${p.name}?`;\n\t\treturn `:${p.name}`;\n\t};\n\treturn pathTokens.flatMap((token) => {\n\t\tif (token.kind === \"static\") return [staticValue(token.parts[0])];\n\t\tif (token.kind === \"param\") return [paramValue(token.parts[0])];\n\t\treturn [token.parts.map((part) => {\n\t\t\treturn part.type === \"static\" ? staticValue(part) : paramValue(part);\n\t\t}).join(\"\")];\n\t}).join(\"/\");\n};\nvar traverseFactory = () => {\n\tconst hasSplatParam = (token) => {\n\t\tif (token?.kind === \"param\") return token.parts[0]?.kind === \"splat\";\n\t\treturn false;\n\t};\n\tconst traverseEntries = (entries, parent) => {\n\t\treturn entries.flatMap(({ index, layout, children }) => {\n\t\t\tconst { name, pathTokens } = {\n\t\t\t\t...index,\n\t\t\t\t...layout\n\t\t\t};\n\t\t\tif (!pathTokens) return [];\n\t\t\tconst layoutName = `${name}:layout`;\n\t\t\tconst path = parent ? pathFactory(pathTokens) : join(\"/\", pathFactory(pathTokens));\n\t\t\tif (hasSplatParam(pathTokens.at(-1))) {\n\t\t\t\tif (index && layout) return [{\n\t\t\t\t\tname: layoutName,\n\t\t\t\t\tpath,\n\t\t\t\t\tcomponent: layout.id,\n\t\t\t\t\tchildren: [{\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tpath: \"\",\n\t\t\t\t\t\tcomponent: index.id\n\t\t\t\t\t}]\n\t\t\t\t}];\n\t\t\t\tif (index) return [{\n\t\t\t\t\tpath,\n\t\t\t\t\tchildren: [{\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tpath: \"\",\n\t\t\t\t\t\tcomponent: index.id\n\t\t\t\t\t}, ...traverseEntries(children, name)]\n\t\t\t\t}];\n\t\t\t\tif (layout) return [{\n\t\t\t\t\tname: layoutName,\n\t\t\t\t\tpath,\n\t\t\t\t\tcomponent: layout.id,\n\t\t\t\t\tchildren: traverseEntries(children, name)\n\t\t\t\t}];\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tif (index && layout) return [{\n\t\t\t\tname: layoutName,\n\t\t\t\tpath,\n\t\t\t\tcomponent: layout.id,\n\t\t\t\tchildren: [{\n\t\t\t\t\tname,\n\t\t\t\t\tpath: \"\",\n\t\t\t\t\tcomponent: index.id\n\t\t\t\t}, ...traverseEntries(children, name)]\n\t\t\t}];\n\t\t\tif (index) return [{\n\t\t\t\tpath,\n\t\t\t\tchildren: [{\n\t\t\t\t\tname,\n\t\t\t\t\tpath: \"\",\n\t\t\t\t\tcomponent: index.id\n\t\t\t\t}, ...traverseEntries(children, name)]\n\t\t\t}];\n\t\t\tif (layout) return [{\n\t\t\t\tname: layoutName,\n\t\t\t\tpath,\n\t\t\t\tcomponent: layout.id,\n\t\t\t\tchildren: traverseEntries(children, name)\n\t\t\t}];\n\t\t\treturn [];\n\t\t});\n\t};\n\treturn traverseEntries;\n};\nvar randomCongratMessage = () => {\n\tconst messages = [\n\t\t\"🎉 Well done! You just created a new Vue route.\",\n\t\t\"🚀 Success! A fresh Vue route is ready to roll.\",\n\t\t\"🌟 Nice work! Another Vue route added to your app.\",\n\t\t\"🧩 All set! A new Vue route has been scaffolded.\",\n\t\t\"🔧 Scaffold complete! Your new Vue route is in place.\",\n\t\t\"✅ Built! Your Vue route is scaffolded and ready.\",\n\t\t\"✨ Fantastic! Your new Vue route is good to go.\",\n\t\t\"🎯 Nailed it! A brand new Vue route just landed.\",\n\t\t\"💫 Awesome! Another Vue route joins the party.\",\n\t\t\"⚡ Lightning fast! A new Vue route created successfully.\"\n\t];\n\treturn messages[Math.floor(Math.random() * messages.length)];\n};\n//#endregion\n//#region src/templates/lib/entry/client.hbs?raw\nvar client_default$1 = \"import { clientRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\n{{#each pageEntries}}\\nconst {{id}} = () => import(\\\"{{ createImport \\\"pages\\\" file }}\\\");\\n{{/each}}\\n\\nconst NotFound = () => import(\\\"{{ createImport \\\"pages\\\" \\\"404.vue\\\" }}\\\");\\n\\nexport const createRoutes = () => {\\n return [\\n {{#each nestedRoutes}}{{> routePartial}},\\n {{/each}}\\n // catch-all 404 - always last\\n {\\n path: \\\"/:catchAll(.*)*\\\",\\n name: \\\"NotFound\\\",\\n component: NotFound,\\n },\\n ];\\n}\\n\\nexport default clientRenderFactory(import.meta.env.SSR);\\n\";\n//#endregion\n//#region src/templates/lib/entry/routePartial.hbs?raw\nvar routePartial_default = \"{\\n path: \\\"{{path}}\\\",\\n {{#if name}}\\n name: \\\"{{name}}\\\",\\n {{/if}}\\n {{#if component}}\\n component: {{component}},\\n {{/if}}\\n {{#if children.length}}\\n children: [ {{#each children}}{{> routePartial}}, {{/each}}],\\n {{/if}}\\n}\\n\";\n//#endregion\n//#region src/templates/lib/entry/server.hbs?raw\nvar server_default$1 = \"import { serverRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\n{{#each pageEntries}}\\nimport {{id}} from \\\"{{ createImport \\\"pages\\\" file }}\\\";\\n{{/each}}\\n\\nimport NotFound from \\\"{{ createImport \\\"pages\\\" \\\"404.vue\\\" }}\\\";\\n\\nexport const createRoutes = () => {\\n return [\\n {{#each nestedRoutes}}{{> routePartial}},\\n {{/each}}\\n // catch-all 404 - always last\\n {\\n path: \\\"/:catchAll(.*)*\\\",\\n name: \\\"NotFound\\\",\\n component: NotFound,\\n },\\n ];\\n}\\n\\nexport default serverRenderFactory();\\n\";\n//#endregion\n//#region src/templates/lib/env.d.ts?raw\nvar env_d_default = \"declare module \\\"*.vue\\\" {\\n import type { DefineComponent } from \\\"vue\\\";\\n const component: DefineComponent<{}, {}, any>;\\n export default component;\\n}\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/404.hbs?raw\nvar _404_default$1 = \"<script setup lang=\\\"ts\\\">\\nimport styles from \\\"./styles.module.css\\\";\\ndefineProps<{\\n headline?: string;\\n}>();\\n<\\/script>\\n\\n<template>\\n <div :class=\\\"styles.container\\\">\\n <div :class=\\\"styles.card\\\">\\n <h1 :class=\\\"styles.title\\\">\\n \\\\{{headline || \\\"404: Not Found\\\"}}\\n </h1>\\n <br />\\n\\n <div :class=\\\"styles.stepsBox\\\">\\n <h2 :class=\\\"styles.stepsTitle\\\">\\n Something went wrong...\\n </h2>\\n 🚧 No page found here\\n </div>\\n\\n <div :class=\\\"styles.footer\\\">\\n <p :class=\\\"styles.footerText\\\">\\n Built for reliability and developer experience\\n </p>\\n <br />\\n <a\\n href=\\\"https://kosmojs.dev/\\\"\\n :class=\\\"styles.docsLink\\\"\\n target=\\\"_blank\\\"\\n rel=\\\"noopener noreferrer\\\"\\n >\\n KosmoJS Documentation →\\n </a>\\n </div>\\n </div>\\n </div>\\n</template>\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/page.hbs?raw\nvar page_default$1 = \"<script setup lang=\\\"ts\\\">\\nimport styles from \\\"./styles.module.css\\\";\\ndefineProps<{\\n message: string;\\n routeName: string;\\n pathMap: { page: string; pages: string; api: string }\\n}>();\\n<\\/script>\\n\\n<template>\\n <div :data-page-route=\\\"routeName\\\" :class=\\\"styles.container\\\">\\n <div :class=\\\"styles.card\\\">\\n <h2 :class=\\\"styles.subtitle\\\">\\n \\\\{{message}}\\n </h2>\\n <br />\\n\\n <div :class=\\\"styles.stepsBox\\\">\\n <ul :class=\\\"styles.stepsList\\\">\\n <li>\\n Edit this page at <code>\\\\{{pathMap.page}}</code>\\n </li>\\n <li>\\n Create new routes by adding folders in\\n <code>\\\\{{pathMap.pages}}/</code>\\n </li>\\n <li>\\n Add API endpoints in <code>\\\\{{pathMap.api}}/</code>\\n </li>\\n </ul>\\n </div>\\n\\n <div :class=\\\"styles.footer\\\">\\n <p :class=\\\"styles.footerText\\\">\\n Built for reliability and developer experience\\n </p>\\n <br />\\n <a\\n href=\\\"https://kosmojs.dev/\\\"\\n :class=\\\"styles.docsLink\\\"\\n target=\\\"_blank\\\"\\n rel=\\\"noopener noreferrer\\\"\\n >\\n KosmoJS Documentation →\\n </a>\\n </div>\\n </div>\\n </div>\\n</template>\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/styles.css?raw\nvar styles_default = \"* {\\n margin: 0;\\n padding: 0;\\n box-sizing: border-box;\\n}\\n\\n.container {\\n min-height: 100vh;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\\n padding: 2rem;\\n}\\n\\n.card {\\n background: white;\\n border-radius: 1rem;\\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\\n max-width: 48rem;\\n padding: 3rem;\\n}\\n\\n.header {\\n text-align: center;\\n margin-bottom: 2rem;\\n}\\n\\n.icon {\\n font-size: 2rem;\\n margin-bottom: 1rem;\\n}\\n\\n.title {\\n font-size: 2.5rem;\\n font-weight: 700;\\n color: #4a5568;\\n margin-bottom: 0.5rem;\\n}\\n\\n.subtitle {\\n font-size: 1.125rem;\\n color: #718096;\\n}\\n\\n.featuresBox {\\n background: #f7fafc;\\n border-radius: 0.5rem;\\n padding: 1.5rem;\\n margin-bottom: 2rem;\\n}\\n\\n.featuresTitle {\\n font-size: 1.125rem;\\n font-weight: 600;\\n color: #4a5568;\\n margin-bottom: 1rem;\\n display: flex;\\n align-items: center;\\n gap: 0.5rem;\\n}\\n\\n.featuresSubtitle {\\n color: #667eea;\\n font-weight: 600;\\n margin-bottom: .5rem;\\n}\\n\\n.featuresList {\\n list-style: none;\\n display: flex;\\n flex-direction: column;\\n gap: 0.75rem;\\n}\\n\\n.featureItem {\\n display: flex;\\n align-items: center;\\n gap: 0.5rem;\\n color: #4a5568;\\n}\\n\\n.featureBullet {\\n color: #48bb78;\\n}\\n\\n.stepsBox {\\n border-left: 4px solid #667eea;\\n padding-left: 1rem;\\n margin-bottom: 2rem;\\n}\\n\\n.stepsTitle {\\n font-size: 1.125rem;\\n font-weight: 600;\\n color: #4a5568;\\n margin-bottom: 0.5rem;\\n}\\n\\n.stepsList {\\n color: #4a5568;\\n padding-left: 1.25rem;\\n line-height: 1.75;\\n}\\n\\n.stepsList code {\\n background: #edf2f7;\\n padding: 0.125rem 0.375rem;\\n border-radius: 0.25rem;\\n font-family: Monaco, Consolas, monospace;\\n font-size: 0.875rem;\\n}\\n\\n.footer {\\n text-align: center;\\n padding-top: 1.5rem;\\n border-top: 1px solid #e2e8f0;\\n}\\n\\n.footerText {\\n color: #718096;\\n font-size: 0.875rem;\\n}\\n\\n.docsLink {\\n color: #667eea;\\n text-decoration: none;\\n font-weight: 600;\\n display: inline-flex;\\n align-items: center;\\n gap: 0.25rem;\\n}\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/welcome.hbs?raw\nvar welcome_default$1 = \"<script setup lang=\\\"ts\\\">\\nimport styles from \\\"./styles.module.css\\\";\\n<\\/script>\\n\\n<template>\\n <div :class=\\\"styles.container\\\">\\n <div :class=\\\"styles.card\\\">\\n <div :class=\\\"styles.header\\\">\\n <div :class=\\\"styles.icon\\\">✨</div>\\n <h1 :class=\\\"styles.title\\\">Welcome to KosmoJS</h1>\\n <p :class=\\\"styles.subtitle\\\">\\n Type-safe full-stack development with Vite\\n </p>\\n </div>\\n\\n <div :class=\\\"styles.featuresBox\\\">\\n <h2 :class=\\\"styles.featuresTitle\\\">\\n Powered by Vue and ready to perform\\n </h2>\\n <div :class=\\\"styles.featuresSubtitle\\\">What's included:</div>\\n <ul :class=\\\"styles.featuresList\\\">\\n <li :class=\\\"styles.featureItem\\\">\\n <span :class=\\\"styles.featureBullet\\\">🔹</span>\\n Directory-based routing\\n </li>\\n <li :class=\\\"styles.featureItem\\\">\\n <span :class=\\\"styles.featureBullet\\\">🔹</span>\\n End-to-End Type Safety\\n </li>\\n <li :class=\\\"styles.featureItem\\\">\\n <span :class=\\\"styles.featureBullet\\\">🔹</span>\\n Generated Fetch Clients\\n </li>\\n </ul>\\n </div>\\n\\n <div :class=\\\"styles.stepsBox\\\">\\n <h2 :class=\\\"styles.stepsTitle\\\">Next Steps 🚂</h2>\\n <ul :class=\\\"styles.stepsList\\\">\\n <li>\\n Edit this page at <code>pages/index/index.vue</code>\\n </li>\\n <li>Create new routes by adding folders in <code>pages/</code></li>\\n <li>Add API endpoints in <code>api/</code></li>\\n </ul>\\n </div>\\n\\n <div :class=\\\"styles.footer\\\">\\n <p :class=\\\"styles.footerText\\\">\\n Built for reliability and developer experience\\n </p>\\n <br />\\n <a\\n href=\\\"https://kosmojs.dev/\\\"\\n :class=\\\"styles.docsLink\\\"\\n target=\\\"_blank\\\"\\n rel=\\\"noopener noreferrer\\\"\\n >\\n Read the documentation →\\n </a>\\n </div>\\n </div>\\n </div>\\n</template>\\n\";\n//#endregion\n//#region src/templates/lib/router.hbs?raw\nvar router_default$1 = \"import type { App } from \\\"vue\\\";\\nimport type { RouteRecordRaw } from \\\"vue-router\\\";\\nimport { createRouterFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nexport default createRouterFactory<RouteRecordRaw, App>();\\n\";\n//#endregion\n//#region src/templates/lib/unwrap.ts?raw\nvar unwrap_default = \"import { type Ref, unref } from \\\"vue\\\";\\n\\nexport type MaybeWrapped<T> = Ref<T> | T;\\n\\nexport function unwrap<T>(value: MaybeWrapped<T>): T {\\n return unref(value);\\n}\\n\";\n//#endregion\n//#region src/templates/src/App.vue?raw\nvar App_default = \"<template>\\n <RouterView />\\n</template>\\n\";\n//#endregion\n//#region src/templates/src/components/Link.vue?raw\nvar Link_default = \"<script setup lang=\\\"ts\\\" generic=\\\"T extends LinkProps\\\">\\nimport { computed } from \\\"vue\\\";\\nimport { RouterLink } from \\\"vue-router\\\";\\n\\nimport { pageRouteMap, type LinkProps } from \\\"{{ createImport 'libCore' }}\\\";\\n\\ninterface Props {\\n to: T\\n query?: Record<string | number, unknown>\\n replace?: boolean\\n activeClass?: string\\n exactActiveClass?: string\\n}\\n\\nconst props = defineProps<Props>();\\n\\nconst href = computed(() => {\\n const [key, ...params] = props.to\\n return pageRouteMap[key]?.base(params as never, props.query)\\n})\\n<\\/script>\\n\\n<template>\\n <RouterLink\\n :to=\\\"href\\\"\\n :replace=\\\"replace\\\"\\n :active-class=\\\"activeClass\\\"\\n :exact-active-class=\\\"exactActiveClass\\\"\\n >\\n <slot />\\n </RouterLink>\\n</template>\\n\";\n//#endregion\n//#region src/templates/src/entry/client.ts?raw\nvar client_default = \"import renderFactory, { createRoutes } from \\\"{{ createImport 'libEntry' 'client' }}\\\";\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes();\\nconst { clientRouter } = routerFactory(routes);\\n\\nconst root = document.getElementById(\\\"app\\\");\\n\\nif (root) {\\n renderFactory(() => {\\n return {\\n async mount() {\\n const page = await clientRouter();\\n page.mount(root);\\n },\\n async hydrate() {\\n const page = await clientRouter();\\n page.mount(root, true);\\n },\\n };\\n });\\n} else {\\n console.error(\\\"❌ Root element not found!\\\");\\n}\\n\";\n//#endregion\n//#region src/templates/src/entry/server.ts?raw\nvar server_default = \"import { renderToString } from \\\"vue/server-renderer\\\";\\n\\nimport renderFactory, { createRoutes } from \\\"{{ createImport 'libEntry' 'server' }}\\\";\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes();\\nconst { serverRouter } = routerFactory(routes);\\n\\nexport default renderFactory(() => {\\n return {\\n async renderToString(url, { assets }) {\\n const page = await serverRouter(url);\\n const head = assets.map(({ tag }) => tag).join(\\\"\\\\n\\\");\\n const html = await renderToString(page);\\n return { head, html };\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/templates/src/index.html?raw\nvar src_default$1 = \"<!doctype html>\\n<html lang=\\\"en\\\">\\n<head>\\n <meta charset=\\\"UTF-8\\\" />\\n <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" />\\n <!--app-head-->\\n</head>\\n<body>\\n <div id=\\\"app\\\"><!--app-html--></div>\\n <script type=\\\"module\\\" src=\\\"/{{ entryDir }}/client.ts\\\"><\\/script>\\n</body>\\n</html>\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/404.vue?raw\nvar _404_default = \"<script setup lang=\\\"ts\\\">\\nimport PageSample from \\\"{{ createImport 'lib' 'pageSamples/404.vue' }}\\\";\\n<\\/script>\\n\\n<template>\\n <PageSample />\\n</template>\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/layout.hbs?raw\nvar layout_default = \"<template>\\n <router-view />\\n</template>\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/page.hbs?raw\nvar page_default = \"<script setup lang=\\\"ts\\\">\\nimport PageSample from \\\"{{ createImport \\\"lib\\\" \\\"pageSamples/page.vue\\\" }}\\\";\\n<\\/script>\\n\\n<template>\\n <PageSample\\n message=\\\"{{message}}\\\"\\n routeName=\\\"{{route.name}}\\\"\\n :pathMap=\\\"{\\n page: '{{ createImport 'pages' route.file }}',\\n pages: '{{ createImport 'pages' }}',\\n api: '{{ createImport 'api' }}',\\n }\\\"\\n />\\n</template>\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/welcome.hbs?raw\nvar welcome_default = \"<script setup lang=\\\"ts\\\">\\nimport WelcomePage from \\\"{{ createImport \\\"lib\\\" \\\"pageSamples/welcome.vue\\\" }}\\\";\\n<\\/script>\\n\\n<template>\\n <WelcomePage />\\n</template>\\n\";\n//#endregion\n//#region src/templates/src/router.ts?raw\nvar router_default = \"import { createApp, createSSRApp } from \\\"vue\\\";\\nimport {\\n createMemoryHistory,\\n createRouter,\\n createWebHistory,\\n} from \\\"vue-router\\\";\\n\\nimport { base } from \\\"{{ createImport 'libCore' }}\\\";\\nimport routerFactory from \\\"{{ createImport 'lib' 'router' }}\\\";\\nimport App from \\\"./App.vue\\\";\\n\\nexport default routerFactory((routes) => {\\n return {\\n async clientRouter() {\\n const app = createApp(App);\\n const router = createRouter({\\n history: createWebHistory(base),\\n routes,\\n strict: true,\\n });\\n app.use(router);\\n return app;\\n },\\n async serverRouter(url) {\\n const app = createSSRApp(App);\\n const router = createRouter({\\n history: createMemoryHistory(base),\\n routes,\\n strict: true,\\n });\\n await router.push(url.pathname.replace(base, \\\"\\\"));\\n await router.isReady();\\n app.use(router);\\n return app;\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((meta, sourceFolder, options) => {\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { renderToFile: deployLibFile } = renderFactory({\n\t\thelpers: {\n\t\t\t...createImportHelpers({ origin: \"lib\" }),\n\t\t\t...routeRenderHelpers()\n\t\t},\n\t\tpartials: { routePartial: routePartial_default }\n\t});\n\tconst { renderToFile: deploySrcFile } = renderFactory({ helpers: createImportHelpers({ origin: \"src\" }) });\n\tconst entriesTraverser = traverseFactory();\n\tconst overwrite = (content) => !content?.trim().length;\n\tconst templateResolver = createTemplateResolver(options?.templates, page_default);\n\tconst generateSrcFiles = async (entries) => {\n\t\tfor (const { kind, entry } of entries) if (kind === \"pageRoute\") await deploySrcFile(createPath.pages(entry.file), entry.name === \"index\" ? welcome_default : templateResolver(entry.name, entry), {\n\t\t\troute: entry,\n\t\t\tmessage: randomCongratMessage()\n\t\t}, { overwrite });\n\t\telse if (kind === \"pageLayout\") await deploySrcFile(createPath.pages(entry.file), layout_default, { route: entry }, { overwrite });\n\t};\n\tconst generateLibFiles = async (entries) => {\n\t\tconst indexRoutes = entries.flatMap(({ kind, entry }) => {\n\t\t\treturn kind === \"pageRoute\" ? [entry] : [];\n\t\t}).sort(sortRoutes);\n\t\tconst pageEntries = entries.flatMap(({ kind, entry }) => {\n\t\t\treturn kind === \"pageRoute\" || kind === \"pageLayout\" ? [entry] : [];\n\t\t});\n\t\tconst nestedRoutes = entriesTraverser(nestedRoutesFactory(pageEntries));\n\t\tfor (const [file, template] of [[\"client.ts\", client_default$1], [\"server.ts\", server_default$1]]) await deployLibFile(createPath.libEntry(file), template, {\n\t\t\tpageEntries,\n\t\t\tnestedRoutes\n\t\t});\n\t\tawait deployLibFile(createPath.lib(\"router.ts\"), router_default$1, {\n\t\t\tentries,\n\t\t\tindexRoutes\n\t\t});\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tasync start() {\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"env.d.ts\", env_d_default],\n\t\t\t\t[\"unwrap.ts\", unwrap_default],\n\t\t\t\t[\"pageSamples/styles.module.css\", styles_default],\n\t\t\t\t[\"pageSamples/welcome.vue\", welcome_default$1],\n\t\t\t\t[\"pageSamples/page.vue\", page_default$1],\n\t\t\t\t[\"pageSamples/404.vue\", _404_default$1]\n\t\t\t]) await deployLibFile(createPath.lib(file), template, {});\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"pages/404.vue\", _404_default],\n\t\t\t\t[\"components/Link.vue\", Link_default],\n\t\t\t\t[\"App.vue\", App_default],\n\t\t\t\t[\"router.ts\", router_default]\n\t\t\t]) await deploySrcFile(createPath.src(file), template, { entryDir: defaults.entryDir }, { overwrite });\n\t\t\tawait deploySrcFile(createPath.src(\"index.html\"), src_default$1, { entryDir: defaults.entryDir }, { overwrite: (c) => {\n\t\t\t\treturn c?.trim().length ? !c.replace(/<!--[\\s\\S]*?-->/g, \"\").trim().length : true;\n\t\t\t} });\n\t\t\tfor (const [file, template] of [[\"client.ts\", client_default], [\"server.ts\", server_default]]) await deploySrcFile(createPath.entry(file), template, {}, { overwrite });\n\t\t},\n\t\tasync watch(entries, event) {\n\t\t\tif (!event || event.kind === \"create\") await generateSrcFiles(entries);\n\t\t\tawait generateLibFiles(entries);\n\t\t},\n\t\tasync build(entries) {\n\t\t\tawait generateSrcFiles(entries);\n\t\t\tawait generateLibFiles(entries);\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator((options) => {\n\tconst meta = {\n\t\tname: \"Vue\",\n\t\tdependencies: {\n\t\t\tvue: package_default.devDependencies.vue,\n\t\t\t\"vue-router\": package_default.devDependencies[\"vue-router\"],\n\t\t\t\"path-to-regexp\": package_default.devDependencies[\"path-to-regexp\"]\n\t\t},\n\t\tdevDependencies: { \"@vitejs/plugin-vue\": package_default.devDependencies[\"@vitejs/plugin-vue\"] },\n\t\tjsxImportSource: \"vue\"\n\t};\n\treturn {\n\t\tmeta,\n\t\toptions,\n\t\tfactory: (sourceFolder) => factory_default(meta, sourceFolder, options)\n\t};\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { join } from \"node:path\";\n\nimport {\n DEFAULT_APIBASE,\n DEFAULT_BASE,\n type FolderConfig,\n type SourceFolder,\n} from \"@kosmojs/core\";\n\nexport { default as fetchGenerator } from \"@kosmojs/fetch-generator\";\nexport { default as honoGenerator } from \"@kosmojs/hono-generator\";\nexport { default as koaGenerator } from \"@kosmojs/koa-generator\";\nexport { default as mdxGenerator } from \"@kosmojs/mdx-generator\";\nexport { default as openapiGenerator } from \"@kosmojs/openapi-generator\";\nexport { default as reactGenerator } from \"@kosmojs/react-generator\";\nexport { default as solidGenerator } from \"@kosmojs/solid-generator\";\nexport { default as ssgGenerator } from \"@kosmojs/ssg-generator\";\nexport { default as ssrGenerator } from \"@kosmojs/ssr-generator\";\nexport { default as typeboxGenerator } from \"@kosmojs/typebox-generator\";\nexport { default as vueGenerator } from \"@kosmojs/vue-generator\";\n\nexport const defineConfig: (config: FolderConfig) => SourceFolder[\"config\"] = ({\n base,\n apiBase,\n ...config\n}) => {\n return {\n ...config,\n base: join(\"/\", base[process.env.NODE_ENV as never] || DEFAULT_BASE),\n apiBase: join(\"/\", apiBase || DEFAULT_APIBASE),\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { join } from \"node:path\";\n\nimport {\n DEFAULT_APIBASE,\n DEFAULT_BASE,\n type FolderConfig,\n type SourceFolder,\n} from \"@kosmojs/core\";\n\nexport { default as fetchGenerator } from \"@kosmojs/fetch-generator\";\nexport { default as honoGenerator } from \"@kosmojs/hono-generator\";\nexport { default as koaGenerator } from \"@kosmojs/koa-generator\";\nexport { default as mdxGenerator } from \"@kosmojs/mdx-generator\";\nexport { default as openapiGenerator } from \"@kosmojs/openapi-generator\";\nexport { default as reactGenerator } from \"@kosmojs/react-generator\";\nexport { default as solidGenerator } from \"@kosmojs/solid-generator\";\nexport { default as ssgGenerator } from \"@kosmojs/ssg-generator\";\nexport { default as ssrGenerator } from \"@kosmojs/ssr-generator\";\nexport { default as typeboxGenerator } from \"@kosmojs/typebox-generator\";\nexport { default as vueGenerator } from \"@kosmojs/vue-generator\";\n\nexport const defineConfig: (config: FolderConfig) => SourceFolder[\"config\"] = ({\n base,\n apiBase,\n ...config\n}) => {\n return {\n ...config,\n base: join(\"/\", base[process.env.NODE_ENV as never] || DEFAULT_BASE),\n apiBase: join(\"/\", apiBase || DEFAULT_APIBASE),\n };\n};\n"],"mappings":";;;;;;;;;;;;;;AAqBA,IAAa,gBAAkE,EAC7E,MACA,SACA,GAAG,aACC;AACJ,QAAO;EACL,GAAG;EACH,MAAM,KAAK,KAAK,KAAA,QAAA,IAAA,aAAuC,aAAa;EACpE,SAAS,KAAK,KAAK,WAAW,gBAAgB;EAC/C"}
|