@kosmojs/dev 0.4.4 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/pkg/chassis.js +606 -291
- package/pkg/chassis.js.map +1 -1
- package/pkg/index.d.ts +16 -16
- package/pkg/index.js +8525 -9946
- package/pkg/index.js.map +1 -1
- package/pkg/runner.d.ts +2 -15
package/pkg/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["d","f","p","m","h","g","_","v","y","b","x","S","C","l","w","t","n","o","s","i","r","u","a","e","c","l","u","d","f","p","n","r","i","s","a","o","e","t","f","p","m","h","g","_","v","y","b","x","S","C","w","T","E","D","O","k","A","j","r","i","o","d","u","c","a","e","s","t","n","f","p","m","h","g","_","v","y","b","x","S","C","w","T","E","D","O","k","A","j","r","i","o","d","u","c","a","e","s","t","M","n","f","p","m","h","g","_","v","y","b","x","S","C","w","T","E","D","O","k","A","j","r","i","o","d","u","c","a","e","s","t","M","n","f","p","m","c","d","h","g","_","v","y","b","x","S","C","w","T","E","D","O","k","A","j","M","N","P","F","I","L","n","r","i","l","s","a","o","e","t","d","f","l","s","c","o","p","u","i","m","t","n","r","e","f","p","d","m","h","g","_","v","y","b","x","S","C","w","T","E","D","O","k","A","j","M","N","P","F","I","L","R","z","B","n","i","a","u","c","o","r","l","e","t","f","p","m","d","h","g","_","v","y","b","x","S","C","w","T","E","D","O","k","A","j","M","N","P","F","I","L","R","z","B","V","n","i","a","u","c","o","r","s","l","e","t","C","w","T","n","a","o","S","s","y","u","d","b","c","x","r","l","e","_","E","f","i","v","p","g","h","m","t","h","g","_","v","y","b","n","a","o","m","s","c","e","p","r","d","l","f","i","u","t","d","f","p","m","h","g","_","v","y","b","x","S","C","w","T","E","D","O","k","A","j","M","N","P","F","I","L","R","z","n","r","i","u","c","a","o","s","l","e","t","s","c","l","u","f","p","n","r","i","a","e","m","h","t","m","d","h","v","x","T","D","M","R","B","V","H","n","i","a","u","c","o","r","s","l","e","t"],"sources":["../../../generators/core-generator/pkg/index.js","../../../generators/fetch-generator/pkg/index.js","../../../generators/h3-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/svelte-generator/pkg/index.js","../../../generators/typebox-generator/pkg/index.js","../../../generators/vue-generator/pkg/index.js","../src/index.ts"],"sourcesContent":["import{defineGenerator as e,defineGeneratorFactory as t,pathResolver as n,renderFactory as r,renderToFile as i}from\"@kosmojs/lib\";import{dirname as a,resolve as o}from\"node:path\";import{styleText as s}from\"node:util\";import c from\"semver\";import{defaults as l}from\"@kosmojs/core\";import{routeRenderHelpers as u}from\"@kosmojs/core/generators\";var d={type:`module`,private:!0,name:`@kosmojs/core-generator`,version:`0.3.0`,author:`Slee Woo`,license:`MIT`,files:[`pkg/*`],exports:{\".\":{types:`./pkg/index.d.ts`,default:`./pkg/index.js`}},scripts:{build:`wsbuild src/index.ts`},dependencies:{\"@kosmojs/core\":`workspace:^`,\"@kosmojs/lib\":`workspace:^`,semver:`^7.8.5`},devDependencies:{\"@types/semver\":`^7.8.0`,\"path-to-regexp\":`^8.4.2`}},f=`export const base = \"{{config.base}}\";\nexport const apiBase = \"{{config.apiBase}}\";\n`,p=`import type { StaticParams } from \"./types\";\n\nexport * from \"./config\";\nexport * from \"./routes\";\nexport * from \"./types\";\n\nexport const defineStaticParams = <T extends keyof StaticParams>(\n variants: Array<StaticParams[T]>,\n) => {\n return variants\n};\n`,m=`{{> routeMapperPartial}}\n\nimport { base, apiBase } from \"./config\";\n\n// used by backend generators and fetch clients\nexport const apiRouteMap = {\n {{#each apiRoutes}}\n \"{{name}}\": apiRouteMapper<[{{serializeParamsTupleElements .}}]>(\n join(base, apiBase),\n {{serializeApiRoute .}},\n ),\n {{/each}}\n};\n\n// used by frontend generators on Link component\nexport const pageRouteMap = {\n {{#each pageRoutes}}\n \"{{name}}\": pageRouteMapper<[{{serializeParamsTupleElements .}}]>(\n base,\n {{serializePageRoute .}},\n ),\n {{/each}}\n};\n`,h=`import { compile, match } from \"path-to-regexp\";\n\nimport {\n type ApiRouteSerialized,\n type PageRouteSerialized,\n stringifySearchParams,\n type ValidationTarget,\n} from \"@kosmojs/core\";\nimport { createHost, join } from \"@kosmojs/core/fetch\";\nimport type { RoutePathMethods } from \"@kosmojs/core/generators\";\n\ntype NormalizeParams = (path: string) => Record<string, unknown>;\n\ntype NormalizeSearchParams = (\n searchParams: Record<string, unknown>,\n method: string,\n) => Record<string, unknown>;\n\ntype PayloadResolver = <T>(\n payload: Record<ValidationTarget, T> | undefined,\n target: ValidationTarget,\n method: string,\n) => T | Record<string, unknown> | undefined;\n\nexport const apiRouteMapper = <ParamsT extends readonly unknown[]>(\n base: string,\n {\n name,\n pathPattern,\n params,\n numericProperties,\n booleanProperties,\n }: ApiRouteSerialized,\n): RoutePathMethods<ParamsT> & {\n normalizeParams: NormalizeParams;\n normalizeSearchParams: NormalizeSearchParams;\n payloadResolver: PayloadResolver;\n} => {\n const toPath = compile(pathPattern);\n const pathMatcher = match(join(base, pathPattern));\n\n const maybeNumber = (val: unknown) => {\n if (val === undefined || val === null) {\n return val;\n }\n const n = Number(val);\n return Number.isFinite(n) ? n : val;\n };\n\n const maybeBoolean = (val: unknown) => {\n return [true, false, \"true\", \"false\"].includes(val as never) //\n ? JSON.parse(val as never)\n : val;\n };\n\n const resolveParam = (path: string, param: (typeof params)[number]) => {\n try {\n const match = pathMatcher(path);\n return match ? match.params[param] : undefined;\n } catch (e) {\n return undefined;\n }\n };\n\n const normalizeSearchParams: NormalizeSearchParams = (\n searchParams,\n method,\n ) => {\n return Object.fromEntries(\n Object.entries(searchParams).map(([k, v]) => {\n if (numericProperties.query?.[method]?.includes(k)) {\n return [\n k,\n Array.isArray(v) ? v.map((e) => maybeNumber(e)) : maybeNumber(v),\n ];\n }\n if (booleanProperties.query?.[method]?.includes(k)) {\n return [\n k,\n Array.isArray(v) ? v.map((e) => maybeBoolean(e)) : maybeBoolean(v),\n ];\n }\n return [k, v];\n }),\n );\n };\n\n const normalizeParams: NormalizeParams = (path) => {\n return params.reduce((map: Record<string, unknown>, param) => {\n const value = resolveParam(path, param);\n if (Array.isArray(value)) {\n map[param] = numericProperties.params.includes(param)\n ? value.map((e) => maybeNumber(e))\n : value;\n } else if (value) {\n map[param] = numericProperties.params.includes(param)\n ? maybeNumber(value)\n : value;\n }\n return map;\n }, {});\n };\n\n const paramsMapper: RoutePathMethods<ParamsT>[\"paramsMapper\"] = (\n input,\n opt,\n ) => {\n return params.reduce<Record<string, unknown>>((map, name, i) => {\n const coerceNumbers = opt?.coerceNumbers\n ? numericProperties.params.includes(name)\n : false;\n if (Array.isArray(input[i])) {\n map[name] = coerceNumbers\n ? input[i].map((v) => maybeNumber(v))\n : input[i].map(String);\n } else if (input[i] !== undefined) {\n map[name] = coerceNumbers ? maybeNumber(input[i]) : String(input[i]);\n }\n return map;\n }, {});\n };\n\n const parametrize: RoutePathMethods<ParamsT>[\"parametrize\"] = (params) => {\n try {\n return toPath(paramsMapper(params) as never);\n } catch (error) {\n console.error(\\`❗ERROR: Failed building path for \\${name}\\`);\n throw error;\n }\n };\n\n const path: RoutePathMethods<ParamsT>[\"path\"] = (params, query, opt) => {\n const path = join(\n opt?.prefix === false\n ? \"/\"\n : typeof opt?.prefix === \"string\"\n ? opt.prefix\n : base,\n parametrize(params),\n );\n return query //\n ? [path, stringifySearchParams(query)].join(\"?\")\n : path;\n };\n\n const href: RoutePathMethods<ParamsT>[\"href\"] = (\n host,\n params,\n query,\n opt,\n ) => {\n return createHost(host) + path(params, query, opt);\n };\n\n const payloadResolver: PayloadResolver = (payload, target, method) => {\n const data = payload?.[target];\n\n if (target === \"query\") {\n return Object.fromEntries(\n Object.entries({ ...data }).map(([k, v]) => {\n return [\n k,\n numericProperties.query[method]?.includes(k)\n ? Array.isArray(v)\n ? v.map((v) => maybeNumber(v))\n : maybeNumber(v)\n : v,\n ];\n }),\n );\n }\n\n if (data instanceof FormData) {\n return [...data].reduce<\n Record<string, FormDataEntryValue | Array<FormDataEntryValue>>\n >((map, [key, val]) => {\n if (key in map) {\n map[key] = [map[key]].flat().concat(val);\n } else {\n map[key] = val;\n }\n return map;\n }, {});\n }\n\n return data;\n };\n\n return {\n normalizeParams,\n normalizeSearchParams,\n payloadResolver,\n paramsMapper,\n parametrize,\n path,\n href,\n };\n};\n\nexport const pageRouteMapper = <ParamsT extends readonly unknown[]>(\n base: string,\n route: PageRouteSerialized,\n): RoutePathMethods<ParamsT> => {\n const toPath = compile(route.pathPattern);\n\n const paramsMapper: RoutePathMethods<ParamsT>[\"paramsMapper\"] = (params) => {\n return route.params.reduce<Record<string, unknown>>((map, name, i) => {\n if (Array.isArray(params[i])) {\n map[name] = params[i].map(String);\n } else if (params[i] !== undefined) {\n map[name] = String(params[i]);\n }\n return map;\n }, {});\n };\n\n const parametrize: RoutePathMethods<ParamsT>[\"parametrize\"] = (params) => {\n try {\n return toPath(paramsMapper(params) as never);\n } catch (error) {\n console.error(\\`❗ERROR: Failed building path for \\${route.name}\\`);\n throw error;\n }\n };\n\n const path: RoutePathMethods<ParamsT>[\"path\"] = (params, query, opt) => {\n const path = join(\n opt?.prefix === false\n ? \"/\"\n : typeof opt?.prefix === \"string\"\n ? opt.prefix\n : base,\n parametrize(params),\n );\n return query //\n ? [path, stringifySearchParams(query)].join(\"?\")\n : path;\n };\n\n const href: RoutePathMethods<ParamsT>[\"href\"] = (\n host,\n params,\n query,\n opt,\n ) => {\n return createHost(host) + path(params, query, opt);\n };\n\n return {\n paramsMapper,\n parametrize,\n path,\n href,\n };\n};\n`,g=`import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport type RequestContext = {\n headers?: HeadersInit;\n tsqClient?: unknown;\n error?: unknown;\n};\n\n/**\n * Request-scoped context store.\n * */\nexport const store = new AsyncLocalStorage<RequestContext>();\n\n/**\n * Origin used to absolutize the relative URLs the client produces.\n * */\nexport const ssrOrigin = \"http://ssr.local\";\n\nexport const redirectCodes = [\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`,_=`export type Override<A, B> = Omit<A, keyof B> & B;\n\nexport type StaticParams = {\n {{#each pageRoutes}}\n \"{{name}}\": [ {{serializeParamsTupleElements .}} ];\n {{/each}}\n};\n\n{{#if pageRoutes.length}}\nexport type LinkProps =\n {{#each pageRoutes}}\n | [ \"{{name}}\", {{serializeParamsTupleElements .}} ]\n {{/each}};\n{{else}}\nexport type LinkProps = never;\n{{/if}}\n`,v=`declare module \"virtual:kosmo/env\" {\n export const command: \"serve\" | \"build\";\n}\n\ndeclare module \"virtual:kosmo/backend-app\" {\n import type { FetchApp, NodeApp } from \"@kosmojs/core\";\n const backend: FetchApp | NodeApp | undefined;\n export default backend;\n}\n\ndeclare module \"virtual:kosmo/fetch-transport\" {\n import type { Transport } from \"@kosmojs/core/fetch\";\n /**\n * Undefined on the client, where fetch clients fall back to global fetch.\n * On the SSR bundle it dispatches straight into the backend app, in process.\n * Supplied by the \\`kosmo:virtualModules\\` Vite plugin - there is no file.\n * */\n export const transport: Transport | undefined;\n}\n\n/**\n * Enhances base TypeScript types with JSON Schema validation constraints.\n * Allows declaring refined types that carry validation metadata for runtime\n * schema validation while maintaining full TypeScript type safety.\n *\n * Useful for generating validation schemas and ensuring\n * data conforms to specific business rules beyond basic type checking.\n * */\ndeclare type VRefine<\n T extends unknown[] | number | string | object,\n _ extends T extends unknown[]\n ? TArrayOptions\n : T extends number\n ? TNumberOptions\n : T extends string\n ? TStringOptions\n : TObjectOptions,\n> = T;\n\n/**\n * Type definitions inspired by and gently adapted from TypeBox.\n * Original TypeBox created by sinclairzx81: https://github.com/sinclairzx81/typebox\n * TypeBox is licensed under MIT: https://github.com/sinclairzx81/typebox/blob/main/license\n *\n * These types provide JSON Schema compatible type refinements for TypeScript.\n * */\ninterface TSchema {}\n\n// ------------------------------------------------------------------\n// ObjectOptions\n// ------------------------------------------------------------------\ninterface TObjectOptions {\n /**\n * Defines whether additional properties are allowed beyond those explicitly defined in \\`properties\\`.\n */\n additionalProperties?: TSchema | boolean;\n /**\n * The minimum number of properties required in the object.\n */\n minProperties?: number;\n /**\n * The maximum number of properties allowed in the object.\n */\n maxProperties?: number;\n /**\n * Defines conditional requirements for properties.\n */\n dependencies?: Record<string, boolean | TSchema | string[]>;\n /**\n * Specifies properties that *must* be present if a given property is present.\n */\n dependentRequired?: Record<string, string[]>;\n /**\n * Defines schemas that apply if a specific property is present.\n */\n dependentSchemas?: Record<string, TSchema>;\n /**\n * Maps regular expressions to schemas properties matching a pattern must validate against the schema.\n */\n patternProperties?: Record<string, TSchema>;\n /**\n * A schema that all property names within the object must validate against.\n */\n propertyNames?: TSchema;\n}\n\n// ------------------------------------------------------------------\n// ArrayOptions\n// ------------------------------------------------------------------\ninterface TArrayOptions {\n /**\n * The minimum number of items allowed in the array.\n */\n minItems?: number;\n /**\n * The maximum number of items allowed in the array.\n */\n maxItems?: number;\n /**\n * A schema that at least one item in the array must validate against.\n */\n contains?: TSchema;\n /**\n * The minimum number of array items that must validate against the \\`contains\\` schema.\n */\n minContains?: number;\n /**\n * The maximum number of array items that may validate against the \\`contains\\` schema.\n */\n maxContains?: number;\n /**\n * An array of schemas, where each schema in \\`prefixItems\\` validates against items at corresponding positions from the beginning of the array.\n */\n prefixItems?: TSchema[];\n /**\n * If \\`true\\`, all items in the array must be unique.\n */\n uniqueItems?: boolean;\n}\n\n// ------------------------------------------------------------------\n// NumberOptions\n// ------------------------------------------------------------------\ninterface TNumberOptions {\n /**\n * Specifies an exclusive upper limit for the number (number must be less than this value).\n */\n exclusiveMaximum?: number | bigint;\n /**\n * Specifies an exclusive lower limit for the number (number must be greater than this value).\n */\n exclusiveMinimum?: number | bigint;\n /**\n * Specifies an inclusive upper limit for the number (number must be less than or equal to this value).\n */\n maximum?: number | bigint;\n /**\n * Specifies an inclusive lower limit for the number (number must be greater than or equal to this value).\n */\n minimum?: number | bigint;\n /**\n * Specifies that the number must be a multiple of this value.\n */\n multipleOf?: number | bigint;\n}\n\n// ------------------------------------------------------------------\n// StringOptions\n// ------------------------------------------------------------------\ntype TFormat =\n | \"date-time\"\n | \"date\"\n | \"duration\"\n | \"email\"\n | \"hostname\"\n | \"idn-email\"\n | \"idn-hostname\"\n | \"ipv4\"\n | \"ipv6\"\n | \"iri-reference\"\n | \"iri\"\n | \"json-pointer-uri-fragment\"\n | \"json-pointer\"\n | \"json-string\"\n | \"regex\"\n | \"relative-json-pointer\"\n | \"time\"\n | \"uri-reference\"\n | \"uri-template\"\n | \"url\"\n | \"uuid\";\n\ninterface TStringOptions {\n /**\n * Specifies the expected string format.\n *\n * Common values include:\n * - \\`base64\\` – Base64-encoded string.\n * - \\`date-time\\` – [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time format.\n * - \\`date\\` – [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (YYYY-MM-DD).\n * - \\`duration\\` – [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) duration format.\n * - \\`email\\` – RFC 5321/5322 compliant email address.\n * - \\`hostname\\` – RFC 1034/1035 compliant host name.\n * - \\`idn-email\\` – Internationalized email address.\n * - \\`idn-hostname\\` – Internationalized host name.\n * - \\`ipv4\\` – IPv4 address.\n * - \\`ipv6\\` – IPv6 address.\n * - \\`iri\\` / \\`iri-reference\\` – Internationalized Resource Identifier.\n * - \\`json-pointer\\` / \\`json-pointer-uri-fragment\\` – JSON Pointer format.\n * - \\`json-string\\` – String containing valid JSON.\n * - \\`regex\\` – Regular expression syntax.\n * - \\`relative-json-pointer\\` – Relative JSON Pointer format.\n * - \\`time\\` – [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) time (HH:MM:SS).\n * - \\`uri-reference\\` / \\`uri-template\\` – URI reference or template.\n * - \\`url\\` – Web URL format.\n * - \\`uuid\\` – RFC 4122 UUID string.\n *\n * May also be a custom format string.\n */\n format?: TFormat;\n /**\n * Specifies the minimum number of characters allowed in the string.\n * Must be a non-negative integer.\n */\n minLength?: number;\n /**\n * Specifies the maximum number of characters allowed in the string.\n * Must be a non-negative integer.\n */\n maxLength?: number;\n /**\n * Specifies a regular expression pattern that the string value must match.\n * Can be provided as a string (ECMA-262 regex syntax) or a \\`RegExp\\` object.\n */\n pattern?: string | RegExp;\n}\n`,y=`# Ignore all files\n*\n\n# But don't ignore directories (so Git can traverse them)\n!*/\n\n# And don't ignore these files at any depth\n!cache.json\n!types.ts\n`,b=`export declare global {\n interface Window {\n __KOSMO_HYDRATION_BOOL__: boolean;\n __KOSMO_HYDRATION_DATA__: Record<string, unknown> | undefined;\n }\n}\n`,x=`<!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 <link rel=\"icon\" type=\"image/svg+xml\" href=\"/favicon.svg\" />\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`,S=`// stub schemas, specialized generators supposed to overwrite this file\nimport type { ValidationSchemas } from \"@kosmojs/core\";\nexport type { ValidationSchemas };\nexport const validationSchemas: ValidationSchemas = {};\n`,C=({dependencies:e,devDependencies:t},n)=>{let r=\"${configDir}\",i=Object.keys({...e,...t}),a={types:[`vite/client`,...[`node`,`deno`,`bun`].flatMap(e=>i.includes(`@types/${e}`)?[`@types/${e}`]:[])],moduleResolution:`bundler`,module:`ESNext`,target:`ESNext`,strict:!0,exactOptionalPropertyTypes:!0,noImplicitAny:!0,noImplicitThis:!0,noImplicitOverride:!0,noImplicitReturns:!0,noUnusedLocals:!1,noUnusedParameters:!1,allowArbitraryExtensions:!0,allowImportingTsExtensions:!0,allowUnreachableCode:!1,allowUnusedLabels:!1,useUnknownInCatchVariables:!0,noFallthroughCasesInSwitch:!0,noUncheckedSideEffectImports:!0,resolveJsonModule:!0,esModuleInterop:!0,verbatimModuleSyntax:!0,skipLibCheck:!0,noEmit:!0};return n?{include:[`${r}/`,`${r}/../../${l.libDir}/${n}/`,`${r}/../../**/*.d.ts`],compilerOptions:{...a,types:[...a.types],paths:{[`${l.appPrefix}/*`]:[`${r}/../../*`],[`${l.srcPrefix}/*`]:[`${r}/*`],[`${l.libPrefix}/*`]:[`${r}/../../${l.libDir}/${n}/*`]}}}:{include:[`${r}/`],exclude:[`${r}/${l.srcDir}/`],compilerOptions:{...a,paths:{[`${l.appPrefix}/*`]:[`${r}/*`]}}}},w=t(e=>{let{createPath:t,createImportHelpers:d}=n(e),{generators:w}=e.config,T=async()=>{let{dependencies:n={},devDependencies:r={}}=await import(o(e.root,`package.json`),{with:{type:`json`}}).then(e=>e.default);{let e=[],t=[],i=w.flatMap(e=>[`dependencies`,`devDependencies`].flatMap(t=>e[t]?Object.entries(typeof e[t]==`function`?e[t](e.options):e[t]).flatMap(([e,n])=>{let r=c.minVersion(n)?.version;return r?[[e,r,t]]:[]}):[]));for(let[a,o,s]of i){let i=n[a]||r[a],l=i?c.minVersion(i)?.version:void 0;!i||!l?e.push([a,o,s]):c.lt(l,o)&&t.push([a,o,s])}if(e.length){console.error(s([`red`,`italic`],`There are ${e.length} missing dependencies, please consider installing them.`));for(let t of[`dependencies`,`devDependencies`]){let n=e.filter(e=>e[2]===t);n.length&&console.error(`${t}: ${s([`blue`],n.map(([e])=>e).join(` `))}`)}}t.length&&(console.error(s([`yellow`,`italic`],`There are ${t.length} outdated dependencies, please consider updating them:`)),console.error(t.map(([e])=>e).join(` `)),console.error())}{await i(o(e.root,`tsconfig.json`),JSON.stringify({extends:`./${l.libDir}/tsconfig.json`},void 0,2),{},{overwrite:!1}),await i(t.lib(`../tsconfig.json`),JSON.stringify(C({dependencies:n,devDependencies:r}),void 0,2),{}),await i(t.src(`tsconfig.json`),JSON.stringify({extends:`../../${l.libDir}/${e.name}/tsconfig.json`},void 0,2),{},{overwrite:!1});let a=C({dependencies:n,devDependencies:r},e.name),s={},c=new Set(a.compilerOptions.types||[]);for(let{meta:e}of w){e.jsx&&(s.jsx=e.jsx),e.jsxImportSource&&(s.jsxImportSource=e.jsxImportSource);for(let t of e.types||[])c.add(t)}await i(t.lib(`tsconfig.json`),JSON.stringify({...a,compilerOptions:{...a.compilerOptions,...s,types:[...c.values()]}},void 0,2),{})}for(let[e,n]of[[`env.d.ts`,v],[`global.d.ts`,b]])await i(t.lib(`../${e}`),n,{});await i(t.lib(`../.gitignore`),y,{},{overwrite:!1}),w.some(e=>e.meta.slot===`frontend`)&&await i(t.src(`index.html`),x,{entryDir:l.entryDir},{overwrite:e=>!e?.trim()})},E=async n=>{let{renderToFile:i}=r({helpers:{...d({origin:`lib`}),...u()},partials:{routeMapperPartial:h}}),o=n.flatMap(({kind:e,entry:t})=>e===`apiRoute`?[t]:[]),s=n.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]);await i(t.libCore(`routes.ts`),m,{apiRoutes:o,pageRoutes:s});for(let[n,r]of[[`config.ts`,f],[`types.ts`,_],[`ssr.ts`,g],[`index.ts`,p]])await i(t.libCore(n),r,{...e,apiRoutes:o,pageRoutes:s});for(let{kind:e,entry:r}of n)e===`apiRoute`&&await i(t.libApi(a(r.file),`schemas.ts`),S,{route:r},{overwrite:!1})};return{start:T,watch:E,build:E,virtualModules(){let{createImport:t}=n(e);return[{specifier:`virtual:kosmo/backend-app`,csr:`export default undefined;`,ssr:w.some(e=>e.meta.slot===`backend`)?`export { default } from \"${t.api([`app`],{origin:`lib`})}\";`:`export default undefined;`}]}}}),T=e({meta:{name:`Core`},dependencies:{\"path-to-regexp\":d.devDependencies[`path-to-regexp`]},factory:w});export{T as default};\n//# sourceMappingURL=index.js.map","import{createWatchedApiRouteEntriesFilter as e,defineGenerator as t,defineGeneratorFactory as n,pathResolver as r,renderFactory as i,sortRoutes as a}from\"@kosmojs/lib\";import{HTTPMethods as o}from\"@kosmojs/core/fetch\";import{routeRenderHelpers as s}from\"@kosmojs/core/generators\";var c={type:`module`,private:!0,name:`@kosmojs/fetch-generator`,version:`0.3.0`,author:`Slee Woo`,license:`MIT`,files:[`pkg/*`],exports:{\".\":{types:`./pkg/index.d.ts`,default:`./pkg/index.js`}},scripts:{build:`wsbuild src/index.ts`,test:`vitest --root ../.. --project generators/fetch-generator`},dependencies:{\"@kosmojs/core\":`workspace:^`,\"@kosmojs/lib\":`workspace:^`},devDependencies:{\"light-my-request\":`^6.6.0`}},l=`{{#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`,u=`import fetchFactory, { join } from \"@kosmojs/core/fetch\";\n\nimport { base, apiBase, apiRouteMap } from \"{{ createImport 'libCore' }}\";\nimport { transport } from \"virtual:kosmo/fetch-transport\";\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 payloadResolver,\n path,\n href,\n} = apiRouteMap[\"{{route.name}}\"];\n\nconst fetchApi = fetchFactory(\n join(base, apiBase),\n { transport },\n);\n\n{{#each routeMethods}}\nexport const {{method}} = (\n _params{{#if ../route.optionalParams}}?{{/if}}: MaybeWrapped<ParamsT>,\n _payload?: {\n {{#each payloadTypes}}\n {{target}}: MaybeWrapped<{{id}}>,\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 // validate only on client, skip double validation in SSR mode\n if (!import.meta.env.SSR) {\n if (validationSchemas.params) {\n validationSchemas.params.validate(\n paramsMapper(params as never, { coerceNumbers: true }),\n );\n }\n {{#each payloadTypes}}\n if (validationSchemas.{{target}}?.{{method}}) {\n validationSchemas.{{target}}.{{method}}.validate(\n payloadResolver(payload as never, \"{{target}}\", \"{{../method}}\"),\n );\n }\n {{/each}}\n }\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 validationSchemas,\n};\n`,d=`import backend from \"virtual:kosmo/backend-app\";\n\nimport {\n redirectCodes,\n ssrOrigin,\n store,\n} from \"{{ createImport 'libCore' 'ssr' }}\";\n\n/**\n * Maximum redirect hops, mirroring the fetch spec limit.\n * */\nexport const maxRedirects = 5;\n\n/**\n * HeadersProvider for createTransport.\n * */\nconst headersProvider = () => {\n return store.getStore()?.headers;\n};\n\nconst createDispatch = (app) => {\n return typeof app.fetch === \"function\"\n ? app.fetch\n : async (request) => {\n const { inject } = await import(\"light-my-request\");\n\n /**\n * Node dispatch: serializes the web Request into light-my-request's\n * injection format and lifts the injected response back into a web Response.\n * */\n const url = new URL(request.url);\n\n const payload = [\"GET\", \"HEAD\"].includes(request.method)\n ? undefined\n : Buffer.from(await request.arrayBuffer());\n\n const result = await inject(app.callback(), {\n method: request.method,\n url: url.pathname + url.search,\n headers: Object.fromEntries(request.headers),\n ...(payload?.length ? { payload } : {}),\n });\n\n const headers = new Headers();\n\n for (const [key, value] of Object.entries(result.headers)) {\n for (const entry of Array.isArray(value) ? value : [value]) {\n if (entry !== undefined) {\n headers.append(key, String(entry));\n }\n }\n }\n\n /**\n * 204/304 responses must not carry a body per the Response\n * constructor contract.\n * */\n const body = [204, 304].includes(result.statusCode)\n ? null\n : new Uint8Array(result.rawPayload);\n\n return new Response(body, {\n status: result.statusCode,\n statusText: result.statusMessage,\n headers,\n });\n };\n};\n\nconst createTransport = (app) => {\n const dispatch = createDispatch(app);\n\n /**\n * Build a fetch-compatible transport that dispatches requests\n * directly into the given app - no sockets, no interception.\n * Redirects are followed in-process, including the 303 and 301/302 method rewrite to GET.\n * */\n return async (input, init) => {\n /**\n * Request-scoped headers act as defaults: anything set explicitly\n * on the call itself wins over forwarded values.\n * */\n const headers = new Headers(init?.headers);\n\n // When the body is FormData, the Request constructor sets a multipart\n // Content-Type with a fresh boundary. A forwarded Content-Type default would\n // override that boundary and desync it from the serialized body, so never\n // forward Content-Type for FormData bodies.\n const isFormBody = init?.body instanceof FormData;\n\n for (const [key, value] of new Headers(headersProvider() || undefined)) {\n if (isFormBody && key.toLowerCase() === \"content-type\") {\n continue;\n }\n if (!headers.has(key)) {\n headers.set(key, value);\n }\n }\n\n let request = new Request(new URL(String(input), ssrOrigin), {\n ...init,\n headers,\n });\n\n /**\n * Bodies are buffered once so they can be replayed across\n * 307/308 hops; the client only ever sends strings, FormData\n * and buffer-ish payloads, so this is safe and cheap.\n * */\n const body = [\"GET\", \"HEAD\"].includes(request.method)\n ? undefined\n : await request.arrayBuffer();\n\n for (let hop = 0; ; hop++) {\n if (hop === maxRedirects) {\n throw new TypeError(\"Failed to fetch: too many redirects\");\n }\n\n const response = await dispatch(\n body === undefined || request.method === \"GET\"\n ? new Request(request, { body: null })\n : new Request(request, { body }),\n );\n\n const location = response.headers.get(\"location\");\n\n if (!location || !redirectCodes.includes(response.status)) {\n return response;\n }\n\n const method =\n response.status === 303 ||\n ([301, 302].includes(response.status) && request.method === \"POST\")\n ? \"GET\"\n : request.method;\n\n request = new Request(new URL(location, request.url), {\n method,\n headers: request.headers,\n });\n }\n };\n};\n\nconst ssrTransport = backend ? createTransport(backend) : undefined;\n\nexport const transport = ssrTransport\n ? async (input, init) => {\n try {\n const response = await ssrTransport(input, init);\n if (response?.ok) {\n return response;\n }\n // the rethrow here needed cause ssrTransport does not throw on non-2xx responses\n throw new SSRFetchError([\n input,\n response,\n typeof response?.text === \"function\"\n ? await response.text()\n : response?.statusText,\n ]);\n } catch (error) {\n /**\n * Capture the fetch error at the transport level and stash it on the request store.\n * Some frameworks - Solid notably - swallow a rejecting loader and still emit a partial render tree.\n * Storing the error here keeps it observable regardless of how the framework handles the loader rejection.\n * */\n const storage = store.getStore();\n if (storage) {\n storage.error = error;\n }\n throw error;\n }\n }\n : undefined; // let fetch clients pick the transport\n\nclass SSRFetchError extends Error {\n constructor([input, response, message]) {\n const pathname = pathnameOf(input);\n const status = response.status ?? \"unknown\";\n super(\\`\\${pathname}: \\${status} [ \\${message} ]\\`.trim());\n this.name = \"SSRFetchError\";\n }\n}\n\nconst pathnameOf = (input) => {\n try {\n if (typeof input === \"string\") {\n return new URL(input, \"http://x\").pathname;\n }\n if (input instanceof URL) {\n return input.pathname;\n }\n if (input instanceof Request) {\n return new URL(input.url).pathname;\n }\n } catch {}\n return String(input);\n};\n`,f=`export type MaybeWrapped<T> = T;\nexport const unwrap = <T>(data: T) => data;\n`,p=n(t=>{let{createPath:n,createImportHelpers:c}=r(t),{render:p,renderToFile:m}=i({helpers:{...c({origin:`lib`}),...s()}}),h=async(e,t)=>{let r=e.flatMap(({kind:e,entry:t})=>e===`apiRoute`?[t]:[]).sort(a);await m(n.lib(`fetch.ts`),l,{routes:r});for(let{kind:e,entry:r}of t)if(e===`apiRoute`){let e=[];for(let t of r.validationDefinitions)if(t.target===`response`)for(let{id:n,status:r,body:i,resolvedType:a}of t.variants)!i||Math.floor(r/100)!==2||e.push({id:n,target:t.target,method:t.method,resolvedType:a});else{let{id:n,resolvedType:r}=t.schema;e.push({id:n,target:t.target,method:t.method,resolvedType:r})}let t=Object.keys(o),i=r.methods.flatMap(n=>t.includes(n)?[{method:n,payloadTypes:e.filter(e=>e.method===n&&![`headers`,`cookies`,`response`].includes(e.target)),responseType:e.find(e=>e.target===`response`&&e.method===n)}]:[]),a=Object.values(e.reduce((e,{id:t,target:n,method:r,resolvedType:i})=>(n===`response`&&(e[r]||(e[r]={method:r,types:[]}),e[r].types.push({id:t,target:n,method:r,resolvedType:i})),e),{}));await m(n.libApi(r.name,`fetch.ts`),u,{route:r,validationTypes:e,routeMethods:i,responseTypes:a})}};return{async start(){for(let[e,t]of[[`unwrap.ts`,f]])await m(n.lib(e),t,{})},async watch(t,n){await h(t,t.filter(e(n,[`create`,`update`])))},async build(e){await h(e,e)},virtualModules(){return[{specifier:`virtual:kosmo/fetch-transport`,csr:`export const transport = undefined;`,ssr:p(d,{})}]}}}),m=t({meta:{name:`Fetch`,slot:`fetch`},dependencies:{\"light-my-request\":c.devDependencies[`light-my-request`]},factory:p});export{m as default};\n//# sourceMappingURL=index.js.map","import{createH3Pattern as e,createWatchedApiRouteEntriesFilter as t,defineGenerator as n,defineGeneratorFactory as r,pathResolver as i,pathTokensFactory as a,renderFactory as o,sortRoutes as s}from\"@kosmojs/lib\";import{join as c}from\"node:path\";import l from\"crc/crc32\";import{createTemplateResolver as u}from\"@kosmojs/core\";import{routeRenderHelpers as d}from\"@kosmojs/core/generators\";var f={type:`module`,private:!0,name:`@kosmojs/h3-generator`,version:`0.3.0`,author:`Slee Woo`,license:`MIT`,files:[`pkg/*`],exports:{\".\":{types:`./pkg/index.d.ts`,default:`./pkg/index.js`}},scripts:{build:`wsbuild src/index.ts`,test:`vitest --root ../.. --project generators/h3-generator`},dependencies:{\"@kosmojs/core\":`workspace:^`,\"@kosmojs/lib\":`workspace:^`,crc:`^4.3.2`},devDependencies:{h3:`2.0.1-rc.29`,vite:`^8.2.2`}},p=`import { H3, type Middleware } from \"h3\";\n\nimport type { Route, RouteDebugOption } from \"@kosmojs/core/api\";\n\n/**\n * The interface is a nameable symbol of this module, emit stops here and never chases through to the class.\n * */\nexport interface App extends H3 {}\n\nexport type AppOptions = ConstructorParameters<typeof H3>[0] & {\n debug?: RouteDebugOption;\n};\n\nexport function appFactory(\n routes: Array<Route<Middleware>>,\n options: AppOptions,\n): App;\n\nexport function appFactory(\n routes: Array<Route<Middleware>>,\n fn: (a: { app: App }) => void,\n): App;\n\nexport function appFactory(\n routes: Array<Route<Middleware>>,\n options: AppOptions,\n fn: (a: { app: App }) => void,\n): App;\n\nexport function appFactory(\n routes: Array<Route<Middleware>>,\n ...rest: Array<unknown>\n): App {\n const [options, fn] = typeof rest[0] === \"function\" ? [{}, rest[0]] : rest;\n\n const { debug = undefined, ...appOptions } = {\n ...(options ? { ...options } : {}),\n };\n\n const app = new H3(appOptions);\n\n if (typeof fn === \"function\") {\n fn({ app });\n }\n\n for (const route of routes) {\n if (typeof debug === \"function\") {\n (debug as Function)(route.debug, route);\n } else if (debug) {\n console.log(route.debug[typeof debug === \"string\" ? debug : \"full\"]);\n }\n\n // last middleware is the handler\n const handler = route.middleware.at(-1);\n\n if (handler) {\n app.on(route.method, route.path, handler as never, {\n middleware: route.middleware.slice(0, -1),\n });\n if (\n route.method === \"GET\" &&\n !routes.some((e) => e.path === route.path && e.method === \"HEAD\")\n ) {\n /**\n * Register HEAD against the sibling GET handler,\n * matching the HEAD-via-GET dispatch hono and koa provide natively.\n * */\n app.on(\"HEAD\", route.path, handler as never, {\n middleware: route.middleware.slice(0, -1),\n });\n }\n }\n }\n\n const routesByPath = routes.reduce<Record<string, Array<Route<Middleware>>>>(\n (map, route) => {\n if (!map[route.path]) {\n map[route.path] = [];\n }\n map[route.path].push(route);\n return map;\n },\n {},\n );\n\n for (const [path, routes] of Object.entries(routesByPath)) {\n const methods = routes.map((e) => e.method);\n\n app.all(path, (event) => {\n const allowedMethods = new Set([...methods, \"OPTIONS\"]);\n\n if (methods.includes(\"GET\")) {\n allowedMethods.add(\"HEAD\");\n }\n\n const status = event.req.method === \"OPTIONS\" ? 204 : 405;\n\n return new Response(undefined, {\n status,\n headers: { Allow: [...allowedMethods].join(\", \") },\n });\n });\n }\n\n return app;\n}\n`,m=`import type { DevSetup } from \"@kosmojs/core/api\";\n\nexport const devSetup = (setup: DevSetup) => setup;\n`,h=`import { type H3Event, HTTPError } from \"h3\";\n\nimport { ValidationError } from \"@kosmojs/core/errors\";\n\ntype ErrorHandler = (\n error: any,\n event: H3Event,\n) => Promise<Response> | Response;\n\nexport type ErrorHandlerFactory = (handler: ErrorHandler) => ErrorHandler;\n\nexport const errorHandlerFactory: ErrorHandlerFactory = (handler) => {\n // H3 wraps errors in its own HTTPError with the original error as \\`cause\\`\n return (error, event) => {\n return handler(\n error instanceof HTTPError\n ? error.cause instanceof ValidationError\n ? error.cause\n : error\n : error,\n event,\n );\n };\n};\n`,g=`import { createListener } from \"./server\";\n\nimport app from \"{{ createImport 'api' 'app' }}\";\n\n/**\n * Entry for the \\`dist/<folder>/api/listener.js\\` bundle.\n * Exposes this folder's API as a plain node:http listener, mounted by \\`dist/run.js\\`\n * next to the other folders. Nothing here listens on a port - \\`server.ts\\` does that.\n * */\nexport default createListener(app);\n`,_=`import { type H3Event, readBody } from \"h3\";\n\nimport {\n parseCookies,\n parseSearchParams,\n type RequestBodyTarget,\n type RequestMetadataTarget,\n} from \"@kosmojs/core\";\n\nexport const metaparsers: {\n [T in RequestMetadataTarget]: (event: H3Event) => unknown;\n} = {\n query(event) {\n return parseSearchParams(event.url);\n },\n\n headers(event) {\n return Object.fromEntries(event.req.headers);\n },\n\n cookies(event) {\n return parseCookies(Object.fromEntries(event.req.headers));\n },\n};\n\nexport const bodyparsers: {\n [T in RequestBodyTarget]: (event: H3Event) => Promise<unknown>;\n} = {\n json(event) {\n return event.req.json();\n },\n\n form(event) {\n return readBody(event, { type: \"formData\" });\n },\n\n raw(event) {\n return event.req.text();\n },\n};\n`,v=`import { command } from \"virtual:kosmo/env\";\nimport type { Middleware } from \"h3\";\n\nimport type {\n RequestBodyTarget,\n RequestMetadataTarget,\n RequestValidationTarget,\n ValidationErrorEntry,\n} from \"@kosmojs/core\";\nimport {\n type CreateRouteMiddleware,\n createRoutes,\n type HTTPMethod,\n StateKey,\n} from \"@kosmojs/core/api\";\nimport { ValidationError } from \"@kosmojs/core/errors\";\n\nimport {\n type DefaultContext,\n type ParameterizedEvent,\n type ParameterizedMiddleware,\n use,\n} from \"../api\";\nimport { bodyparsers, metaparsers } from \"./parsers\";\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 \\`event.bodyparser\\` (lazy, cached) and \\`event.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, validationSchemas, normalizeParams, normalizeSearchParams }) => {\n const validationMiddleware = [\n /**\n * Extends H3 event with:\n *\n * - \\`event.metaparser[target]()\\` - lazy, cached meta parsers.\n * Each parser (query, headers, cookies) runs at most once per request;\n * subsequent calls return the cached result.\n *\n * - \\`event.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 * - \\`event.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 \\`event[StateKey]\\` (a Symbol-keyed Map) to keep it\n * hidden from public API surface and serialization.\n * */\n use(\n function useExtendContext(event, next) {\n if (!event[StateKey]) {\n // initialize per-request cache with empty params\n // (later populated by useValidateParams)\n event[StateKey] = new Map([[\"params\", {}]]);\n\n Object.defineProperty(event, \"metaparser\", {\n value: Object.entries(metaparsers).reduce<{\n [T in RequestMetadataTarget]?: () => unknown;\n }>((map, entry) => {\n const [target, parser] = entry as [\n RequestMetadataTarget,\n Function,\n ];\n map[target] = () => {\n if (!event[StateKey].has(target)) {\n event[StateKey].set(\n target,\n target === \"query\"\n ? normalizeSearchParams(\n parser(event),\n event.req.method === \"HEAD\"\n ? \"GET\"\n : event.req.method,\n )\n : parser(event),\n );\n }\n return event[StateKey].get(target);\n };\n return map;\n }, {}),\n enumerable: true,\n });\n\n Object.defineProperty(event, \"bodyparser\", {\n value: Object.entries(bodyparsers).reduce<{\n [T in RequestBodyTarget]?: () => Promise<unknown>;\n }>((map, entry) => {\n const [target, parser] = entry as [RequestBodyTarget, Function];\n map[target] = async () => {\n if (!event[StateKey].has(target)) {\n event[StateKey].set(target, await parser(event));\n }\n return event[StateKey].get(target);\n };\n return map;\n }, {}),\n enumerable: true,\n });\n\n Object.defineProperty(event, \"validated\", {\n get() {\n return Object.fromEntries(event[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 \\`event.validated.params\\`\n * reflects the normalized (and validated) values.\n * */\n use(\n function useValidateParams(event, next) {\n const normalizedParams = normalizeParams(event.url.pathname);\n validationSchemas.params?.validate(normalizedParams);\n event[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(event, next) {\n const variants =\n validationSchemas.response?.[\n event.req.method === \"HEAD\" ? \"GET\" : event.req.method\n ] || [];\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 (command === \"build\") {\n // production build - skip if undefined or explicitly set to false\n if (runtimeValidation === undefined || runtimeValidation === false) {\n return next();\n }\n } else {\n // dev mode - 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 const body = await next();\n\n /**\n * H3 builds the actual Response AFTER the middleware chain completes,\n * so at this point event.res only reflects what handlers set explicitly.\n * Reconstruct what will be sent instead: a returned Response is authoritative;\n * otherwise an unset status means 200, and the content type follows H3's\n * serialization rules for the returned value (string -> text, object -> JSON).\n * */\n const rawResponse = body instanceof Response ? body : undefined;\n\n const response: {\n status: number;\n contentType: string | null;\n body?: unknown;\n } = {\n status: rawResponse?.status ?? event.res.status ?? 200,\n contentType:\n rawResponse?.headers.get(\"Content-Type\") ??\n event.res.headers.get(\"Content-Type\") ??\n (typeof body === \"string\"\n ? \"text/plain\"\n : body === undefined || body === null\n ? null\n : \"application/json\"),\n };\n\n // validate only 2xx responses\n if (Math.floor(response.status / 100) !== 2) {\n return;\n }\n\n // Validate body only for JSON variants\n if (variants.some((e) => e.contentType?.includes(\"json\"))) {\n response.body = rawResponse\n ? await rawResponse\n .clone()\n .json()\n .catch(() => undefined)\n : 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 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 (event.query, event.headers, or event.bodyparser)\n * 4. Validates via \\`schema.validate()\\` which throws on failure\n *\n * Body targets (json, form, raw) go through \\`event.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 event: ParameterizedEvent<Record<string, string>, DefaultContext>,\n ) => Promise<unknown>\n > = {\n query: async (event) => event.metaparser.query(),\n headers: async (event) => event.metaparser.headers(),\n cookies: async (event) => event.metaparser.cookies(),\n json: async (event) => event.bodyparser.json(),\n form: async (event) => event.bodyparser.form(),\n raw: async (event) => event.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 (event, next) => {\n const schema = {\n ...validationSchemas[target]?.[\n event.req.method === \"HEAD\" ? \"GET\" : event.req.method\n ],\n };\n if (schema.validate && schema.runtimeValidation !== false) {\n schema.validate(await loadData(event 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, Middleware>(\n routeSources,\n {\n globalMiddleware: globalMiddleware as never,\n createRouteMiddleware,\n },\n);\n`,y=`import { join } from \"node:path\";\n\nimport type { RouteSource } from \"@kosmojs/core/api\";\n\nimport {\n base,\n apiBase,\n apiRouteMap,\n apiRouteMapper,\n // needed for cascadingMiddleware\n type Override,\n} from \"{{ createImport 'libCore' }}\";\n\n{{#each routes}}\nimport {{id}} from \"{{ createImport 'api' file }}\";\nimport { validationSchemas as {{id}}_schemas } from \"{{ createImport 'libApi' basename 'schemas' }}\";\n{{/each}}\n\n{{#each cascadingMiddleware}}\nimport {{id}}, { type UseT as UseT{{id}} } from \"{{ createImport 'api' file }}\";\n{{/each}}\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 {{#if alias}}\n ...apiRouteMapper(apiBase, { ...{{serializeApiRoute .}}, pathPattern: \"{{alias}}\" }),\n path: \"{{alias}}\",\n pathPattern: \"{{alias}}\",\n {{else}}\n ...apiRouteMap[\"{{name}}\"],\n path: join(base, apiBase, \"{{path}}\"),\n pathPattern: join(base, apiBase, \"{{pathPattern}}\"),\n {{/if}}\n name: \"{{name}}\",\n file: \"{{file}}\",\n cascadingMiddleware: [ {{#each cascadingMiddleware}}{{id}}, {{/each}}].flat() as Array<never>,\n definitionItems: {{id}} as never,\n validationSchemas: {{id}}_schemas,\n },\n {{/each}}\n];\n`,b=`import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { parseArgs, styleText } from \"node:util\";\n\nimport { serve as h3serve } from \"h3\";\nimport { toNodeHandler } from \"h3/node\";\n\nimport type { App } from \"./app\";\n\nexport type NodeListener = (req: IncomingMessage, res: ServerResponse) => void;\n\n/**\n * Wrap the app into a node:http request listener.\n * Used by dist/run.js to mount this folder's API next to other folders;\n * the standalone server (\\`serve\\`) binds the app through h3's own adapter instead.\n * */\nexport const createListener = <T extends App>(app: T): NodeListener => {\n return toNodeHandler(app);\n};\n\ntype Handles = {\n port?: number | undefined;\n onListen?: () => Promise<void>;\n};\n\nconst getListenHandles = async (opt?: Handles) => {\n const { port } = opt\n ? opt\n : parseArgs({\n options: {\n port: {\n type: \"string\",\n short: \"p\",\n },\n },\n }).values;\n\n if (![port].some(Boolean)) {\n throw new Error(\"Please provide -p/--port number\");\n }\n\n const onListen = async () => {\n console.log(\n \\`\\\\n ✨ Server Started \\${styleText([\"dim\"], \"[ %s ]\")}\\`,\n \\`port: \\${port}\\`,\n );\n };\n\n return {\n port: Number(port),\n onListen: opt?.onListen || onListen,\n };\n};\n\nexport const serve = async <T extends App>(app: T, opt?: Handles) => {\n const { port, onListen } = await getListenHandles(opt);\n\n const server = h3serve(app, { port });\n await server.ready().then(onListen);\n\n return server as never;\n};\n`,x=`import type { H3Event, H3EventContext } from \"h3\";\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 { RouteMap } from \"./@api/routes\";\n\nexport interface DefaultContext extends H3EventContext {}\n\ntype MaybePromise<T = unknown> = T | Promise<T>;\n\ntype Next = () => MaybePromise<unknown | undefined>;\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 ParameterizedEvent<\n ParamsT,\n ContextT,\n VDefs extends ValidationDefmap = {},\n VOpts extends ValidationOptmap = {},\n> = H3Event & { context: DefaultContext } & ContextT &\n ExtendContext<ParamsT, VDefs, VOpts>;\n\nexport type ParameterizedMiddleware<\n ParamsT = Record<string, string>,\n ContextT = Record<string, unknown>,\n> = (\n event: ParameterizedEvent<ParamsT, ContextT>,\n next: Next,\n) => MaybePromise<unknown>;\n\nexport type RouteHandler<\n ParamsT,\n ContextT,\n VDefs extends ValidationDefmap,\n VOpts extends ValidationOptmap = {},\n> = (\n event: ParameterizedEvent<ParamsT, ContextT, VDefs, VOpts>,\n) => MaybePromise<ValidatedResponseBodies<VDefs>>;\n\nexport type DefineRouteFactory<ParamsT, ContextT> = (\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, ContextT>\n | Array<ParameterizedMiddleware<ParamsT, ContextT>>,\n options?: UseOptions,\n ) => MiddlewareDefinition<ParameterizedMiddleware<ParamsT, ContextT>>;\n } & {\n [M in HTTPMethod]: <\n VDefs extends ValidationDefmap,\n VOpts extends ValidationOptmap = {},\n >(\n handler:\n | RouteHandler<ParamsT, ContextT, VDefs, VOpts>\n | Array<RouteHandler<ParamsT, ContextT, VDefs, VOpts>>,\n ) => HandlerDefinition<ParameterizedMiddleware<ParamsT, ContextT>>;\n },\n) => Array<RouteDefinitionItem<ParameterizedMiddleware<ParamsT, ContextT>>>;\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 = <ContextT = DefaultContext>(\n middleware:\n | ParameterizedMiddleware<Record<string, string>, ContextT>\n | Array<ParameterizedMiddleware<Record<string, string>, ContextT>>,\n options?: UseOptions,\n) => {\n return createUse<ParameterizedMiddleware<Record<string, string>, ContextT>>(\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 ContextT extends object = object,\n>(\n factory: DefineRouteFactory<\n ParamsMap<RouteMap[R][\"paramsMappings\"], ParamsD>,\n ContextT & RouteMap[R][\"cascadingState\"]\n >,\n) => Array<\n RouteDefinitionItem<\n ParameterizedMiddleware<\n ParamsMap<RouteMap[R][\"paramsMappings\"], ParamsD>,\n ContextT & RouteMap[R][\"cascadingState\"]\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`,S=`export * from \"./@api/app\";\nexport { appFactory as default } from \"./@api/app\";\nexport * from \"./@api/dev\";\nexport * from \"./@api/errors\";\nexport * from \"./@api/router\";\nexport * from \"./@api/routes\";\nexport * from \"./@api/server\";\n`,C=`import { onError } from \"h3\";\n\nimport appFactory, { routes } from \"{{ createImport 'lib' 'api:factory' }}\";\nimport defaultErrorHandler from \"./errors\";\n\nexport default appFactory(routes, ({ app }) => {\n app.use(onError(defaultErrorHandler));\n});\n`,w=`import { toNodeHandler } from \"h3/node\";\n\nimport app from \"./app\";\n\nimport { devSetup } from \"{{ createImport 'lib' 'api:factory' }}\";\n\nexport default devSetup({\n requestHandler() {\n return toNodeHandler(app);\n },\n teardownHandler() {\n // close db connections, server sockets etc.\n },\n});\n\nprocess.on(\"unhandledRejection\", (reason) => {\n console.error(\"💥 UNHANDLED REJECTION\");\n console.error(\"Reason:\", reason);\n process.exit(1);\n});\n`,T=`export declare module \"{{ createImport 'libApi' }}\" {\n interface DefaultContext {}\n}\n`,E=`import { ValidationError } from \"@kosmojs/core/errors\";\nimport { HTTPError } from \"h3\";\n\nimport { errorHandlerFactory } from \"{{ createImport 'lib' 'api:factory' }}\";\n\nexport default errorHandlerFactory(async (error, event) => {\n const [status, message = \"Unknown error occurred\"] = 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 const accept = event.req.headers.get(\"accept\");\n\n return accept?.includes(\"application/json\")\n ? new Response(JSON.stringify({ error: message }), {\n status,\n headers: { \"Content-Type\": \"application/json\" },\n })\n : new Response(message, {\n status,\n headers: { \"Content-Type\": \"text/plain\" },\n });\n});\n`,D=`import { defineRoute } from \"{{ createImport 'libApi' }}\";\n\nexport default defineRoute<\"{{route.name}}\">(({ GET }) => [\n GET(async (event) => {\n return \"Automatically generated route\";\n }),\n]);\n`,O=`import { use } from \"{{ createImport 'libApi' }}\";\n\nexport type UseT = {};\n\nexport default [\n use<UseT>(async (event, next) => {\n return next();\n }),\n];\n`,k=`import { serve } from \"{{ createImport 'lib' 'api:factory' }}\";\nimport app from \"./app\";\n\nawait serve(app);\n`,A=`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(event, next) {\n return next();\n }),\n];\n`,j=r((n,r)=>{let{createPath:f,createImportHelpers:j}=i(n),M=e=>e.length===0?`{}`:e.length===1?e[0]:`Override<${e[0]}, ${M(e.slice(1))}>`,{renderToFile:N}=o({helpers:{...j({origin:`lib`}),...d(),paramsDefaults({params:e}){return`[${e.schema.map(()=>`unknown?`).join(`, `)}]`},paramsMappings({params:e}){return`[${e.schema.map(({name:e,kind:t})=>`[\"${e}\", unknown, ${t===`required`?`true`:`false`}]`).join(`, `)}]`},cascadingState({cascadingMiddleware:e}){return M(e.map(({id:e})=>`UseT${e}`))}}}),{renderToFile:P}=o({helpers:j({origin:`src`})}),F=e=>e?.trim().length===0,I=u(r?.templates,D),L=async e=>{for(let{kind:t,entry:n}of e)t===`apiRoute`?await P(f.api(n.file),I(n.name,n),{route:n},{overwrite:F}):t===`apiUse`&&await P(f.api(n.file),O,{},{overwrite:F})},R=async t=>{let n=t.flatMap(({kind:e,entry:t})=>e===`apiUse`?[t]:[]),i=t.flatMap(({kind:t,entry:i})=>{if(t!==`apiRoute`)return[];let o=i.name.split(`/`).reduce((e,t)=>{let n=e[e.length-1];return e.push(n?c(n,t):t),e},[]),s={...i,path:i.h3Pattern,basename:i.name,cascadingMiddleware:n.flatMap(e=>o.some(t=>e.name===t)?[e]:[])};return[s,...Object.entries({...r?.alias}).flatMap(([t,n])=>{let r=a(t);return n===i.name?[{...s,name:t,basename:i.name,id:`${s.id}_${l(t)}`,alias:e(r),pathTokens:r}]:[]})]}).sort(s);for(let[e,t]of[[`@api/routes.ts`,y]])await N(f.lib(e),t,{routes:i,cascadingMiddleware:n})};return{async start(){for(let[e,t]of[[`api.ts`,x],[`api:factory.ts`,S],[`@api/app.ts`,p],[`@api/parsers.ts`,_],[`@api/dev.ts`,m],[`@api/errors.ts`,h],[`@api/listener.ts`,g],[`@api/router.ts`,v],[`@api/server.ts`,b]])await N(f.lib(e),t,{});for(let[e,t]of[[`app.ts`,C],[`dev.ts`,w],[`errors.ts`,E],[`server.ts`,k],[`use.ts`,A],[`env.d.ts`,T]])await P(f.api(e),t,{},{overwrite:F})},async watch(e,n){await L(e.filter(t(n,[`create`]))),await R(e)},async build(e){await L(e),await R(e)}}}),M=n({meta:{name:`H3`,slot:`backend`},dependencies:{h3:f.devDependencies.h3},factory:j});export{M as default};\n//# sourceMappingURL=index.js.map","import{createHonoPattern as e,createWatchedApiRouteEntriesFilter as t,defineGenerator as n,defineGeneratorFactory as r,pathResolver as i,pathTokensFactory as a,renderFactory as o,sortRoutes as s}from\"@kosmojs/lib\";import{join as c}from\"node:path\";import l from\"crc/crc32\";import{createTemplateResolver as u}from\"@kosmojs/core\";import{routeRenderHelpers as d}from\"@kosmojs/core/generators\";var f={type:`module`,private:!0,name:`@kosmojs/hono-generator`,version:`0.3.0`,author:`Slee Woo`,license:`MIT`,files:[`pkg/*`],exports:{\".\":{types:`./pkg/index.d.ts`,default:`./pkg/index.js`}},scripts:{build:`wsbuild src/index.ts`,test:`vitest --root ../.. --project generators/hono-generator`},dependencies:{\"@kosmojs/core\":`workspace:^`,\"@kosmojs/lib\":`workspace:^`,crc:`^4.3.2`},devDependencies:{\"@hono/node-server\":`^2.1.1`,hono:`^4.13.3`,vite:`^8.2.2`}},p=`import { Hono, type MiddlewareHandler } from \"hono\";\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\";\n\nimport type { Route, RouteDebugOption } 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 debug?: RouteDebugOption;\n};\n\nexport function appFactory(\n routes: Array<Route<MiddlewareHandler>>,\n options: AppOptions,\n): App;\n\nexport function appFactory(\n routes: Array<Route<MiddlewareHandler>>,\n fn: (a: { app: App; router: Router<never> }) => void,\n): App;\n\nexport function appFactory(\n routes: Array<Route<MiddlewareHandler>>,\n options: AppOptions,\n fn: (a: { app: App; router: Router<never> }) => void,\n): App;\n\nexport function appFactory(\n routes: Array<Route<MiddlewareHandler>>,\n ...rest: Array<unknown>\n): App {\n const [options, fn] = typeof rest[0] === \"function\" ? [{}, rest[0]] : rest;\n\n const router = new SmartRouter({\n routers: [new RegExpRouter(), new TrieRouter()],\n }) as Router<never>;\n\n const { debug = undefined, ...appOptions } = {\n ...(options ? { ...options } : {}),\n };\n\n const app = new Hono({\n strict: false,\n router,\n ...appOptions,\n });\n\n if (typeof fn === \"function\") {\n fn({ app, router });\n }\n\n for (const route of routes) {\n if (typeof debug === \"function\") {\n (debug as Function)(route.debug, route);\n } else if (debug) {\n console.log(route.debug[typeof debug === \"string\" ? debug : \"full\"]);\n }\n\n app.on(route.method, [route.path], ...route.middleware);\n }\n\n const routesByPath = routes.reduce<\n Record<string, Array<Route<MiddlewareHandler>>>\n >((map, route) => {\n if (!map[route.path]) {\n map[route.path] = [];\n }\n map[route.path].push(route);\n return map;\n }, {});\n\n for (const [path, routes] of Object.entries(routesByPath)) {\n const methods = routes.map((e) => e.method);\n\n app.all(path, (ctx) => {\n const allowedMethods = new Set([...methods, \"OPTIONS\"]);\n\n if (methods.includes(\"GET\")) {\n allowedMethods.add(\"HEAD\");\n }\n\n const status = ctx.req.method === \"OPTIONS\" ? 204 : 405;\n\n return new Response(undefined, {\n status,\n headers: { Allow: [...allowedMethods].join(\", \") },\n });\n });\n }\n\n return app as never;\n}\n`,m=`import type { DevSetup } from \"@kosmojs/core/api\";\n\nexport const devSetup = (setup: DevSetup) => setup;\n`,h=`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`,g=`import { createListener } from \"./server\";\n\nimport app from \"{{ createImport 'api' 'app' }}\";\n\n/**\n * Entry for the \\`dist/<folder>/api/listener.js\\` bundle.\n * Exposes this folder's API as a plain node:http listener, mounted by \\`dist/run.js\\`\n * next to the other folders. Nothing here listens on a port - \\`server.ts\\` does that.\n * */\nexport default createListener(app);\n`,_=`import type { Context } from \"hono\";\n\nimport {\n parseCookies,\n parseSearchParams,\n type RequestBodyTarget,\n type RequestMetadataTarget,\n} 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 metaparsers: {\n [T in RequestMetadataTarget]: (ctx: Context) => unknown;\n} = {\n query(ctx) {\n return parseSearchParams(ctx.req.url);\n },\n\n headers(ctx) {\n return Object.fromEntries(ctx.req.raw.headers);\n },\n\n cookies(ctx) {\n return parseCookies(Object.fromEntries(ctx.req.raw.headers));\n },\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`,v=`import { command } from \"virtual:kosmo/env\";\nimport type { MiddlewareHandler } from \"hono\";\n\nimport type {\n RequestBodyTarget,\n RequestMetadataTarget,\n RequestValidationTarget,\n ValidationErrorEntry,\n} from \"@kosmojs/core\";\nimport {\n type CreateRouteMiddleware,\n createRoutes,\n type HTTPMethod,\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, metaparsers } from \"./parsers\";\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, validationSchemas, normalizeParams, normalizeSearchParams }) => {\n const validationMiddleware = [\n /**\n * Extends Hono context with:\n *\n * - \\`ctx.metaparser[target]()\\` - lazy, cached meta parsers.\n * Each parser (query, headers, cookies) runs at most once per request;\n * subsequent calls return the cached result.\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\n Object.defineProperty(ctx, \"metaparser\", {\n value: Object.entries(metaparsers).reduce<{\n [T in RequestMetadataTarget]?: () => unknown;\n }>((map, entry) => {\n const [target, parser] = entry as [\n RequestMetadataTarget,\n Function,\n ];\n map[target] = () => {\n if (!ctx[StateKey].has(target)) {\n ctx[StateKey].set(\n target,\n target === \"query\"\n ? normalizeSearchParams(\n parser(ctx),\n ctx.req.method === \"HEAD\" ? \"GET\" : ctx.req.method,\n )\n : parser(ctx),\n );\n }\n return ctx[StateKey].get(target);\n };\n return map;\n }, {}),\n enumerable: true,\n });\n\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\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 normalizedParams = normalizeParams(ctx.req.path);\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 =\n validationSchemas.response?.[\n ctx.req.method === \"HEAD\" ? \"GET\" : ctx.req.method\n ] || [];\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 (command === \"build\") {\n // production build - skip if undefined or explicitly set to false\n if (runtimeValidation === undefined || runtimeValidation === false) {\n return next();\n }\n } else {\n // dev mode - 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 only 2xx responses\n if (Math.floor(response.status / 100) !== 2) {\n return;\n }\n\n // Validate body only for JSON variants\n if (variants.some((e) => e.contentType?.includes(\"json\"))) {\n response.body = await ctx.res\n .clone()\n .json()\n .catch(() => undefined);\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.metaparser.query(),\n headers: async (ctx) => ctx.metaparser.headers(),\n cookies: async (ctx) => ctx.metaparser.cookies(),\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]?.[\n ctx.req.method === \"HEAD\" ? \"GET\" : ctx.req.method\n ],\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`,y=`import { join } from \"node:path\";\n\nimport type { RouteSource } from \"@kosmojs/core/api\";\n\nimport {\n base,\n apiBase,\n apiRouteMap,\n apiRouteMapper,\n // needed for cascadingMiddleware\n type Override,\n} from \"{{ createImport 'libCore' }}\";\n\n{{#each routes}}\nimport {{id}} from \"{{ createImport 'api' file }}\";\nimport { validationSchemas as {{id}}_schemas } from \"{{ createImport 'libApi' basename 'schemas' }}\";\n{{/each}}\n\n{{#each cascadingMiddleware}}\nimport {{id}}, { type UseT as UseT{{id}} } from \"{{ createImport 'api' file }}\";\n{{/each}}\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 {{#if alias}}\n ...apiRouteMapper(apiBase, { ...{{serializeApiRoute .}}, pathPattern: \"{{alias}}\" }),\n path: \"{{alias}}\",\n pathPattern: \"{{alias}}\",\n {{else}}\n ...apiRouteMap[\"{{name}}\"],\n path: join(base, apiBase, \"{{path}}\"),\n pathPattern: join(base, apiBase, \"{{pathPattern}}\"),\n {{/if}}\n name: \"{{name}}\",\n file: \"{{file}}\",\n cascadingMiddleware: [ {{#each cascadingMiddleware}}{{id}}, {{/each}}].flat() as Array<never>,\n definitionItems: {{id}} as never,\n validationSchemas: {{id}}_schemas,\n },\n {{/each}}\n];\n`,b=`import { chmod, unlink } from \"node:fs/promises\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { parseArgs, styleText } from \"node:util\";\n\nimport { createAdaptorServer, getRequestListener } from \"@hono/node-server\";\n\nimport type { App } from \"./app\";\n\nexport type NodeListener = (req: IncomingMessage, res: ServerResponse) => void;\n\n/**\n * Wrap the app into a node:http request listener.\n * Used by dist/run.js to mount this folder's API next to other folders;\n * the standalone server (\\`serve\\`) binds the app through the runtime's native adapter instead.\n * */\nexport const createListener = <T extends App>(app: T): NodeListener => {\n return getRequestListener(app.fetch);\n};\n\ntype Handles = {\n port?: number | undefined;\n sock?: string | undefined;\n onListen?: () => Promise<void>;\n};\n\nconst getListenHandles = async (opt?: Handles) => {\n const { port, sock } = opt\n ? opt\n : parseArgs({\n options: {\n port: {\n type: \"string\",\n short: \"p\",\n },\n sock: {\n type: \"string\",\n short: \"s\",\n },\n },\n }).values;\n\n if (![port, sock].some(Boolean)) {\n throw new Error(\"Please provide either -p/--port number or -s/--sock path\");\n }\n\n if (sock) {\n await unlink(sock).catch((error) => {\n if (error.code !== \"ENOENT\") {\n throw error;\n }\n });\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 \\`\\\\n ✨ Server Started \\${styleText([\"dim\"], \"[ %s ]\")}\\`,\n sock ? \\`sock: \\${sock}\\` : \\`port: \\${port}\\`,\n );\n };\n\n return {\n port: Number(port),\n sock,\n onListen: opt?.onListen || onListen,\n };\n};\n\nexport const serve = async <T extends App>(app: T, opt?: Handles) => {\n const { port, sock, onListen } = await getListenHandles(opt);\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`,x=`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/parsers\";\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`,S=`export * from \"./@api/app\";\nexport { appFactory as default } from \"./@api/app\";\nexport * from \"./@api/dev\";\nexport * from \"./@api/errors\";\nexport * from \"./@api/router\";\nexport * from \"./@api/routes\";\nexport * from \"./@api/server\";\n`,C=`import appFactory, { routes } from \"{{ createImport 'lib' 'api:factory' }}\";\nimport defaultErrorHandler from \"./errors\";\n\nexport default appFactory(routes, ({ app }) => {\n app.onError(defaultErrorHandler);\n})\n`,w=`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\nprocess.on(\"unhandledRejection\", (reason) => {\n console.error(\"💥 UNHANDLED REJECTION\");\n console.error(\"Reason:\", reason);\n process.exit(1);\n});\n\n`,T=`export declare module \"{{ createImport 'libApi' }}\" {\n interface DefaultVariables {}\n interface DefaultBindings {}\n}\n`,E=`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(async (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`,D=`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`,O=`import { use } from \"{{ createImport 'libApi' }}\";\n\nexport type UseT = {};\n\nexport default [\n use<UseT>(async (ctx, next) => {\n // Always \\`return next()\\` or \\`await next()\\`;\n // ❗ Never call \\`next()\\` by itself!\n return next();\n }),\n];\n`,k=`import { serve } from \"{{ createImport 'lib' 'api:factory' }}\";\nimport app from \"./app\";\n\nawait serve(app);\n`,A=`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`,j=r((n,r)=>{let{createPath:f,createImportHelpers:j}=i(n),M=e=>e.length===0?`{}`:e.length===1?e[0]:`Override<${e[0]}, ${M(e.slice(1))}>`,{renderToFile:N}=o({helpers:{...j({origin:`lib`}),...d(),paramsDefaults({params:e}){return`[${e.schema.map(()=>`unknown?`).join(`, `)}]`},paramsMappings({params:e}){return`[${e.schema.map(({name:e,kind:t})=>`[\"${e}\", unknown, ${t===`required`?`true`:`false`}]`).join(`, `)}]`},cascadingState({cascadingMiddleware:e}){return M(e.map(({id:e})=>`UseT${e}`))}}}),{renderToFile:P}=o({helpers:j({origin:`src`})}),F=e=>e?.trim().length===0,I=u(r?.templates,D),L=async e=>{for(let{kind:t,entry:n}of e)t===`apiRoute`?await P(f.api(n.file),I(n.name,n),{route:n},{overwrite:F}):t===`apiUse`&&await P(f.api(n.file),O,{},{overwrite:F})},R=async t=>{let n=t.flatMap(({kind:e,entry:t})=>e===`apiUse`?[t]:[]),i=t.flatMap(({kind:t,entry:i})=>{if(t!==`apiRoute`)return[];let o=i.name.split(`/`).reduce((e,t)=>{let n=e[e.length-1];return e.push(n?c(n,t):t),e},[]),s={...i,path:i.honoPattern,basename:i.name,cascadingMiddleware:n.flatMap(e=>o.some(t=>e.name===t)?[e]:[])};return[s,...Object.entries({...r?.alias}).flatMap(([t,n])=>{let r=a(t);return n===i.name?[{...s,name:t,basename:i.name,id:`${s.id}_${l(t)}`,alias:e(r),pathTokens:r}]:[]})]}).sort(s);for(let[e,t]of[[`@api/routes.ts`,y]])await N(f.lib(e),t,{routes:i,cascadingMiddleware:n})};return{async start(){for(let[e,t]of[[`api.ts`,x],[`api:factory.ts`,S],[`@api/app.ts`,p],[`@api/parsers.ts`,_],[`@api/dev.ts`,m],[`@api/errors.ts`,h],[`@api/listener.ts`,g],[`@api/router.ts`,v],[`@api/server.ts`,b]])await N(f.lib(e),t,{});for(let[e,t]of[[`app.ts`,C],[`dev.ts`,w],[`errors.ts`,E],[`server.ts`,k],[`use.ts`,A],[`env.d.ts`,T]])await P(f.api(e),t,{},{overwrite:F})},async watch(e,n){await L(e.filter(t(n,[`create`]))),await R(e)},async build(e){await L(e),await R(e)}}}),M=n({meta:{name:`Hono`,slot:`backend`},dependencies:{hono:f.devDependencies.hono,\"@hono/node-server\":f.devDependencies[`@hono/node-server`]},factory:j});export{M as default};\n//# sourceMappingURL=index.js.map","import{createPathPattern as e,createWatchedApiRouteEntriesFilter as t,defineGenerator as n,defineGeneratorFactory as r,pathResolver as i,pathTokensFactory as a,renderFactory as o,sortRoutes as s}from\"@kosmojs/lib\";import{join as c}from\"node:path\";import l from\"crc/crc32\";import{createTemplateResolver as u}from\"@kosmojs/core\";import{routeRenderHelpers as d}from\"@kosmojs/core/generators\";var f={type:`module`,private:!0,name:`@kosmojs/koa-generator`,version:`0.3.0`,author:`Slee Woo`,license:`MIT`,files:[`pkg/*`],exports:{\".\":{types:`./pkg/index.d.ts`,default:`./pkg/index.js`},\"./lib\":{types:`./pkg/lib.d.ts`,default:`./pkg/lib.js`}},scripts:{build:`wsbuild src/index.ts src/lib.ts`,test:`vitest --root ../.. --project generators/koa-generator`},dependencies:{\"@kosmojs/core\":`workspace:^`,\"@kosmojs/lib\":`workspace:^`,crc:`^4.3.2`},devDependencies:{\"@koa/router\":`^15.7.0`,\"@types/formidable\":`^3.5.1`,\"@types/koa\":`^3.0.3`,\"@types/koa-compose\":`^3.2.9`,formidable:`^3.5.4`,koa:`^3.2.1`,\"koa-compose\":`^4.1.0`,\"light-my-request\":`^6.6.0`,\"raw-body\":`^4.0.0`,vite:`^8.2.2`}},p=`import { styleText } from \"node:util\";\n\nimport Router, { type RouterMiddleware } from \"@koa/router\";\nimport Koa from \"koa\";\n\nimport type { Route, RouteDebugOption } 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] & { debug?: RouteDebugOption };\n\nexport function appFactory(\n routes: Array<Route<RouterMiddleware>>,\n options: AppOptions,\n): App;\n\nexport function appFactory(\n routes: Array<Route<RouterMiddleware>>,\n fn: (a: { app: App; router: Router<never> }) => void,\n): App;\n\nexport function appFactory(\n routes: Array<Route<RouterMiddleware>>,\n options: AppOptions,\n fn: (a: { app: App; router: Router<never> }) => void,\n): App;\n\nexport function appFactory(\n routes: Array<Route<RouterMiddleware>>,\n ...rest: Array<unknown>\n): App {\n const [options, fn] = typeof rest[0] === \"function\" ? [{}, rest[0]] : rest;\n\n const { debug = undefined, ...appOptions } = {\n ...(options ? { ...options } : {}),\n };\n\n const app = new Koa(appOptions);\n const router = new Router();\n\n for (const route of routes) {\n if (typeof debug === \"function\") {\n (debug as Function)(route.debug, route);\n } else if (debug) {\n console.log(route.debug[typeof debug === \"string\" ? debug : \"full\"]);\n }\n router.register(route.path, [route.method], route.middleware, route);\n }\n\n const routesByPath = routes.reduce<\n Record<string, Array<Route<RouterMiddleware>>>\n >((map, route) => {\n if (!map[route.path]) {\n map[route.path] = [];\n }\n map[route.path].push(route);\n return map;\n }, {});\n\n for (const [path, routes] of Object.entries(routesByPath)) {\n const methods = routes.map((e) => e.method);\n\n if (\n methods.includes(\"GET\") &&\n methods.indexOf(\"HEAD\") > methods.indexOf(\"GET\")\n ) {\n console.warn(\"----\");\n console.warn(\n \\`\\${styleText(\"yellow\", \"WARN\")}: HEAD handler for \\${styleText(\"blue\", routes[0].name)} route is unreachable - \\${styleText(\"magenta\", \"define HEAD before GET\")}\\`,\n );\n console.warn(\"----\");\n }\n\n router.all(path, (ctx) => {\n const allowedMethods = new Set([...methods, \"OPTIONS\"]);\n\n if (methods.includes(\"GET\")) {\n allowedMethods.add(\"HEAD\");\n }\n\n ctx.status = ctx.method === \"OPTIONS\" ? 204 : 405;\n\n ctx.set(\"Allow\", [...allowedMethods].join(\", \"));\n });\n }\n\n if (typeof fn === \"function\") {\n fn({ app, router });\n }\n\n // NOTE: Routes should be added last, after any middleware\n app.use(router.routes());\n\n return app;\n}\n`,m=`import type { DevSetup } from \"@kosmojs/core/api\";\n\nexport const devSetup = (setup: DevSetup) => setup;\n`,h=`import type {\n DefaultContext,\n DefaultState,\n ParameterizedContext,\n} from \"../api\";\n\ntype ErrorHandler = (\n ctx: ParameterizedContext<unknown, DefaultState, DefaultContext>,\n next: Function,\n) => Promise<void>;\n\nexport type ErrorHandlerFactory = (handler: ErrorHandler) => ErrorHandler;\n\nexport const errorHandlerFactory: ErrorHandlerFactory = (handler) => {\n return handler;\n};\n`,g=`import { createListener } from \"./server\";\n\nimport app from \"{{ createImport 'api' 'app' }}\";\n\n/**\n * Entry for the \\`dist/<folder>/api/listener.js\\` bundle.\n * Exposes this folder's API as a plain node:http listener, mounted by \\`dist/run.js\\`\n * next to the other folders. Nothing here listens on a port - \\`server.ts\\` does that.\n * */\nexport default createListener(app);\n`,_=`import zlib from \"node:zlib\";\n\nimport type { RouterContext } from \"@koa/router\";\nimport Formidable, { type Options as FormidableOptions } from \"formidable\";\nimport rawParser from \"raw-body\";\n\nimport {\n parseCookies,\n parseSearchParams,\n type RequestBodyTarget,\n type RequestMetadataTarget,\n} from \"@kosmojs/core\";\n\nimport type {\n DefaultContext,\n DefaultState,\n ParameterizedContext,\n} from \"../api\";\n\nexport const metaparsers: {\n [T in RequestMetadataTarget]: (ctx: RouterContext) => unknown;\n} = {\n query(ctx) {\n return parseSearchParams(ctx.req.url ?? \"\");\n },\n\n headers(ctx) {\n return ctx.req.headers;\n },\n\n cookies(ctx) {\n return parseCookies(ctx.req.headers);\n },\n};\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 === false) {\n return [k, v];\n }\n if (opt === undefined || 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`,v=`import { command } from \"virtual:kosmo/env\";\nimport type { RouterMiddleware } from \"@koa/router\";\n\nimport type {\n RequestBodyTarget,\n RequestMetadataTarget,\n RequestValidationTarget,\n ValidationErrorEntry,\n} from \"@kosmojs/core\";\nimport {\n type CreateRouteMiddleware,\n createRoutes,\n type HTTPMethod,\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, metaparsers } from \"./parsers\";\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, validationSchemas, normalizeParams, normalizeSearchParams }) => {\n const validationMiddleware = [\n /**\n * Extends Koa context with:\n *\n * - \\`ctx.metaparser[target]()\\` - lazy, cached meta parsers.\n * Each parser (query, headers, cookies) runs at most once per request;\n * subsequent calls return the cached result.\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\n Object.defineProperty(ctx, \"metaparser\", {\n value: Object.entries(metaparsers).reduce<{\n [T in RequestMetadataTarget]?: () => unknown;\n }>((map, entry) => {\n const [target, parser] = entry as [\n RequestMetadataTarget,\n Function,\n ];\n map[target] = () => {\n if (!ctx[StateKey].has(target)) {\n ctx[StateKey].set(\n target,\n target === \"query\"\n ? normalizeSearchParams(\n parser(ctx),\n ctx.method === \"HEAD\" ? \"GET\" : ctx.method,\n )\n : parser(ctx),\n );\n }\n return ctx[StateKey].get(target);\n };\n return map;\n }, {}),\n enumerable: true,\n });\n\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\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 normalizedParams = normalizeParams(ctx.path);\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 =\n validationSchemas.response?.[\n ctx.method === \"HEAD\" ? \"GET\" : ctx.method\n ] || [];\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 (command === \"build\") {\n // production build - skip if undefined or explicitly set to false\n if (runtimeValidation === undefined || runtimeValidation === false) {\n return next();\n }\n } else {\n // dev mode - 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 only 2xx responses\n if (Math.floor(response.status / 100) !== 2) {\n return;\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.metaparser.query(),\n headers: async (ctx) => ctx.metaparser.headers(),\n cookies: async (ctx) => ctx.metaparser.cookies(),\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]?.[\n ctx.method === \"HEAD\" ? \"GET\" : ctx.method\n ],\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`,y=`import { join } from \"node:path\";\n\nimport type { RouteSource } from \"@kosmojs/core/api\";\n\nimport {\n base,\n apiBase,\n apiRouteMap,\n apiRouteMapper,\n // needed for cascadingMiddleware\n type Override,\n} from \"{{ createImport 'libCore' }}\";\n\n{{#each routes}}\nimport {{id}} from \"{{ createImport 'api' file }}\";\nimport { validationSchemas as {{id}}_schemas } from \"{{ createImport 'libApi' basename 'schemas' }}\";\n{{/each}}\n\n{{#each cascadingMiddleware}}\nimport {{id}}, { type UseT as UseT{{id}} } from \"{{ createImport 'api' file }}\";\n{{/each}}\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 {{#if alias}}\n ...apiRouteMapper(apiBase, { ...{{serializeApiRoute .}}, pathPattern: \"{{alias}}\" }),\n path: \"{{alias}}\",\n pathPattern: \"{{alias}}\",\n {{else}}\n ...apiRouteMap[\"{{name}}\"],\n path: join(base, apiBase, \"{{path}}\"),\n pathPattern: join(base, apiBase, \"{{pathPattern}}\"),\n {{/if}}\n name: \"{{name}}\",\n file: \"{{file}}\",\n cascadingMiddleware: [ {{#each cascadingMiddleware}}{{id}}, {{/each}}].flat() as Array<never>,\n definitionItems: {{id}} as never,\n validationSchemas: {{id}}_schemas,\n },\n {{/each}}\n];\n`,b=`import { chmod, unlink } from \"node:fs/promises\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { parseArgs, styleText } from \"node:util\";\n\nimport type { App } from \"./app\";\n\nexport type NodeListener = (req: IncomingMessage, res: ServerResponse) => void;\n\n/**\n * Wrap the app into a node:http request listener.\n * Used by dist/run.js to mount this folder's API next to other folders;\n * the standalone server (\\`serve\\`) calls app.listen() directly instead.\n * */\nexport const createListener = <T extends App>(app: T): NodeListener => {\n return app.callback();\n};\n\ntype Handles = {\n port?: number | undefined;\n sock?: string | undefined;\n onListen?: () => Promise<void>;\n};\n\nconst getListenHandles = async (opt?: Handles): Promise<Handles> => {\n const { port, sock } = opt\n ? opt\n : parseArgs({\n options: {\n port: {\n type: \"string\",\n short: \"p\",\n },\n sock: {\n type: \"string\",\n short: \"s\",\n },\n },\n }).values;\n\n if (![port, sock].some(Boolean)) {\n throw new Error(\"Please provide either -p/--port number or -s/--sock path\");\n }\n\n if (sock) {\n await unlink(sock).catch((error) => {\n if (error.code !== \"ENOENT\") {\n throw error;\n }\n });\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 \\`\\\\n ✨ Server Started \\${styleText([\"dim\"], \"[ %s ]\")}\\`,\n sock ? \\`sock: \\${sock}\\` : \\`port: \\${port}\\`,\n );\n };\n\n return {\n port: port ? Number(port) : undefined,\n sock,\n onListen: opt?.onListen || onListen,\n };\n};\n\nexport const serve = async <T extends App>(app: T, opt?: Handles) => {\n const { port, sock, onListen } = await getListenHandles(opt);\n const server = app.listen(port || sock, onListen);\n return server as never;\n};\n`,x=`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/parsers\";\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`,S=`export * from \"./@api/app\";\nexport { appFactory as default } from \"./@api/app\";\nexport * from \"./@api/dev\";\nexport * from \"./@api/errors\";\nexport * from \"./@api/router\";\nexport * from \"./@api/routes\";\nexport * from \"./@api/server\";\n`,C=`import appFactory, { routes } from \"{{ createImport 'lib' 'api:factory' }}\";\nimport defaultErrorHandler from \"./errors\";\n\nexport default appFactory(routes, ({ app }) => {\n app.use(defaultErrorHandler);\n})\n`,w=`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\nprocess.on(\"unhandledRejection\", (reason) => {\n console.error(\"💥 UNHANDLED REJECTION\");\n console.error(\"Reason:\", reason);\n process.exit(1);\n});\n`,T=`export declare module \"{{ createImport 'libApi' }}\" {\n interface DefaultState {}\n interface DefaultContext {}\n}\n`,E=`import { HTTPError, ValidationError } from \"@kosmojs/core/errors\";\n\nimport { errorHandlerFactory } from \"{{ createImport 'lib' 'api:factory' }}\";\n\nexport default errorHandlerFactory(async (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`,D=`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`,O=`import { use } from \"{{ createImport 'libApi' }}\";\n\nexport type UseT = {};\n\nexport default [\n use<UseT>(async (ctx, next) => {\n // Always \\`return next()\\` or \\`await next()\\`;\n // ❗ Never call \\`next()\\` by itself!\n return next();\n }),\n];\n`,k=`import { serve } from \"{{ createImport 'lib' 'api:factory' }}\";\nimport app from \"./app\";\n\nawait serve(app);\n`,A=`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`,j=r((n,r)=>{let{createPath:f,createImportHelpers:j}=i(n),M=e=>e.length===0?`{}`:e.length===1?e[0]:`Override<${e[0]}, ${M(e.slice(1))}>`,{renderToFile:N}=o({helpers:{...j({origin:`lib`}),...d(),paramsDefaults({params:e}){return`[${e.schema.map(()=>`unknown?`).join(`, `)}]`},paramsMappings({params:e}){return`[${e.schema.map(({name:e,kind:t})=>`[\"${e}\", unknown, ${t===`required`?`true`:`false`}]`).join(`, `)}]`},cascadingState({cascadingMiddleware:e}){return M(e.map(({id:e})=>`UseT${e}`))}}}),{renderToFile:P}=o({helpers:j({origin:`src`})}),F=e=>e?.trim().length===0,I=u(r?.templates,D),L=async e=>{for(let{kind:t,entry:n}of e)t===`apiRoute`?await P(f.api(n.file),I(n.name,n),{route:n},{overwrite:F}):t===`apiUse`&&await P(f.api(n.file),O,{},{overwrite:F})},R=async t=>{let n=t.flatMap(({kind:e,entry:t})=>e===`apiUse`?[t]:[]),i=t.flatMap(({kind:t,entry:i})=>{if(t!==`apiRoute`)return[];let o=i.name.split(`/`).reduce((e,t)=>{let n=e[e.length-1];return e.push(n?c(n,t):t),e},[]),s={...i,basename:i.name,path:i.pathPattern,cascadingMiddleware:n.flatMap(e=>o.some(t=>e.name===t)?[e]:[])};return[s,...Object.entries({...r?.alias}).flatMap(([t,n])=>{let r=a(t);return n===i.name?[{...s,name:t,basename:i.name,id:`${s.id}_${l(t)}`,alias:e(r),pathTokens:r}]:[]})]}).sort(s);for(let[e,t]of[[`@api/routes.ts`,y]])await N(f.lib(e),t,{routes:i,cascadingMiddleware:n})};return{async start(){for(let[e,t]of[[`api.ts`,x],[`api:factory.ts`,S],[`@api/app.ts`,p],[`@api/dev.ts`,m],[`@api/errors.ts`,h],[`@api/listener.ts`,g],[`@api/parsers.ts`,_],[`@api/router.ts`,v],[`@api/server.ts`,b]])await N(f.lib(e),t,{});for(let[e,t]of[[`app.ts`,C],[`dev.ts`,w],[`errors.ts`,E],[`server.ts`,k],[`use.ts`,A],[`env.d.ts`,T]])await P(f.api(e),t,{},{overwrite:F})},async watch(e,n){await L(e.filter(t(n,[`create`]))),await R(e)},async build(e){await L(e),await R(e)}}}),M=n({meta:{name:`Koa`,slot:`backend`,types:[`@types/koa`]},dependencies:{koa:f.devDependencies.koa,\"@koa/router\":f.devDependencies[`@koa/router`],formidable:f.devDependencies.formidable,\"raw-body\":f.devDependencies[`raw-body`]},devDependencies:{\"@types/koa\":f.devDependencies[`@types/koa`],\"@types/formidable\":f.devDependencies[`@types/formidable`]},factory:j});export{M as default};\n//# sourceMappingURL=index.js.map","import{createWatchedPageRouteEntriesFilter as e,defineGenerator as t,defineGeneratorFactory as n,pathResolver as r,renderFactory as i,sortRoutes as a,sortRoutesForResolution as o}from\"@kosmojs/lib\";import{createTemplateResolver as s,defaults as c}from\"@kosmojs/core\";import{routeRenderHelpers as l}from\"@kosmojs/core/generators\";import u from\"@mdx-js/rollup\";import{createFilter as d}from\"vite\";var f={type:`module`,private:!0,name:`@kosmojs/mdx-generator`,version:`0.3.0`,author:`Slee Woo`,license:`MIT`,files:[`pkg/*`],exports:{\".\":{types:`./pkg/index.d.ts`,default:`./pkg/index.js`}},scripts:{build:`wsbuild src/index.ts`},dependencies:{\"@kosmojs/core\":`workspace:^`,\"@kosmojs/lib\":`workspace:^`,\"@mdx-js/rollup\":`^3.1.1`,vite:`^8.2.2`},devDependencies:{\"@mdx-js/mdx\":`^3.1.1`,\"@mdx-js/preact\":`^3.1.1`,\"path-to-regexp\":`^8.4.2`,preact:`^10.29.8`,\"preact-render-to-string\":`^6.7.0`,\"remark-frontmatter\":`^5.0.0`,\"remark-mdx-frontmatter\":`^5.2.0`}},p=()=>{let e=[`🎉 Well done! You just created a new MDX page.`,`🚀 Success! A fresh MDX page is ready to roll.`,`🌟 Nice work! Another MDX page added to your site.`,`🧩 All set! A new MDX page has been scaffolded.`,`🔧 Scaffold complete! Your new MDX page is in place.`,`✅ Built! Your MDX page is scaffolded and ready.`,`✨ Fantastic! Your new MDX page is good to go.`,`🎯 Nailed it! A brand new MDX page just landed.`,`💫 Awesome! Another MDX page joins the party.`,`⚡ Lightning fast! A new MDX page created successfully.`];return e[Math.floor(Math.random()*e.length)]},m=(e,t,n)=>{let{remarkPlugins:r=[],rehypePlugins:i=[]}={...n},a=()=>{let t=[`${c.srcDir}/${e.name}/${c.entryDir}/client.ts`].map(e=>d(e)),n=e=>t.some(t=>t(e));return{name:`kosmo:mdx[hmr]`,enforce:`post`,transform(e,t){if(!(!n(t)||e.includes(`import.meta.hot.accept`)))return{code:[e,`\nif (import.meta.hot) {\n import.meta.hot.accept(() => {});\n}\n`].join(`\n`)}}}},o=[u({jsxImportSource:`preact`,providerImportSource:`@mdx-js/preact`,remarkPlugins:r,rehypePlugins:i})];return t===`serve`&&o.push(a()),o},h=`import type { FunctionComponent } from \"preact\";\n\nexport const AppProvider: FunctionComponent = (props) => {\n return props.children;\n};\n`,g=`import { render, hydrate as hydrateOrig } from \"preact\";\nimport type { RouterFactoryReturn } from \"@kosmojs/core\";\nimport { clientRenderFactory } from \"@kosmojs/core/generators\";\n\nimport { createRoute, type RouteComponent } from \"../mdx\";\n\n{{#each pageRoutes}}\nconst {{id}} = () => import(\"{{ createImport 'pages' file }}\");\n{{/each}}\n{{#each layouts}}\nconst {{id}} = () => import(\"{{ createImport 'pages' file }}\");\n{{/each}}\n\nexport const createRoutes = () => {\n return [\n {{#each pageRoutes}}\n createRoute(\"{{name}}\", \"{{pathPattern}}\", {{id}}, [\n {{#each layouts}}[\"{{name}}\", {{id}}], {{/each}}\n ]),\n {{/each}}\n ];\n};\n\nexport const hydrate = async (\n resolver: () => RouterFactoryReturn<Promise<RouteComponent>>,\n root: HTMLElement,\n) => {\n const { component } = await resolver();\n hydrateOrig(component, root);\n window.__KOSMO_HYDRATION_DATA__ = undefined;\n}\n\nexport const mount = async (\n resolver: () => RouterFactoryReturn<Promise<RouteComponent>>,\n root: HTMLElement,\n) => {\n const { component } = await resolver();\n render(component, root);\n}\n\nexport default clientRenderFactory();\n`,_=`import { renderToString as renderToStringOrig } from \"preact-render-to-string\";\n\nimport type {\n RenderToStringWrapper,\n RouterFactoryReturn,\n SSRRenderWrapper,\n} from \"@kosmojs/core\";\n\nimport { serverRenderFactory } from \"@kosmojs/core/generators\";\n\nimport { createRoute, type Route, type RouteComponent } 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}}[\"{{name}}\", async () => {{id}}], {{/each}}\n ]),\n {{/each}}\n ];\n};\n\nconst generateHeaderTags = ({ name, frontmatter, loaderData }: Route) => {\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 tags.push(\n \\`<script>\n window.__KOSMO_HYDRATION_DATA__ = JSON.parse(\n \\${JSON.stringify(JSON.stringify(loaderData))}\n );\n <\\/script>\\`\n )\n\n return tags\n};\n\nexport const renderWrapper: SSRRenderWrapper = (_context, render) => render();\n\nexport const renderToString: RenderToStringWrapper<\n () => RouterFactoryReturn<Promise<RouteComponent>, { route: Route }>\n> = async (resolver, { headerTags = [] } = {}) => {\n const { component, route } = await resolver();\n const html = renderToStringOrig(component);\n return {\n head: [...headerTags, ...generateHeaderTags(route as never)].join(\"\\\\n\"),\n html,\n }\n}\n\nexport default serverRenderFactory<false>();\n`,v=`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`,y=`import { MDXProvider } from \"@mdx-js/preact\";\nimport { match, pathToRegexp } from \"path-to-regexp\";\nimport { type ComponentType, createContext, h, type VNode } from \"preact\";\n\nimport { parseSearchParams } from \"@kosmojs/core\";\n\nimport { paramNames } from \"{{ createImport 'lib' 'params' }}\";\nimport { base } from \"{{ createImport 'libCore' }}\";\n\nexport type RawRoute = {\n name: string;\n regexp: RegExp;\n extractParams: (path: string) => Route[\"params\"];\n loader: () => Promise<RouteModule>;\n layouts: Array<[name: string, source: () => Promise<LayoutModule>]>;\n};\n\ntype Loader = (\n route: Pick<Route, \"name\" | \"params\" | \"paramsEntries\" | \"searchParams\">,\n) => Promise<unknown> | undefined;\n\ntype LayoutModule = {\n default: ComponentType;\n loader?: Loader;\n};\n\ntype RouteModule = {\n default: ComponentType;\n frontmatter: Route[\"frontmatter\"];\n loader?: Loader;\n};\n\nexport type RouteComponent = VNode<{ value: Route }>;\n\nexport type Route = {\n name: string;\n params: Record<string, string | Array<string>>;\n paramsEntries: [keys: Array<string>, values: Array<unknown>];\n searchParams: Record<string, unknown>;\n frontmatter: Record<string, unknown>;\n loaderData: Record<string, unknown>;\n};\n\nexport const RouterContext = createContext<Route>({\n name: \"\",\n params: {},\n paramsEntries: [[], []],\n searchParams: {},\n frontmatter: {},\n loaderData: {},\n});\n\nexport const RouterProvider = RouterContext.Provider;\n\nexport const createRouter = (\n routes: Array<RawRoute>,\n app: ComponentType,\n opt: { components?: Record<string, ComponentType<never>> },\n) => {\n const catchallRoute = createRoute(\n \"NotFound\",\n \"\",\n () => import(\"{{ createImport 'pages' '404.mdx' }}\"),\n [],\n );\n\n const runLoader = async (key: string, fetcher: () => ReturnType<Loader>) => {\n if (typeof window === \"undefined\" || !window.__KOSMO_HYDRATION_DATA__) {\n return fetcher();\n }\n return key in window.__KOSMO_HYDRATION_DATA__\n ? window.__KOSMO_HYDRATION_DATA__[key]\n : fetcher();\n };\n\n return {\n async resolve(url: URL = new URL(window.location.href)) {\n const searchParams = parseSearchParams(url);\n\n // The routes array is generated pre-sorted by specificity\n // (static beats required beats optional beats splat, token by token),\n // the same ordering the SSR server registers routes in -\n // so the first pattern that matches IS the most specific one,\n // and CSR resolution stays consistent with SSR.\n // A route with optional parameters matches a range of segment counts,\n // which is why no segment-count heuristic can disambiguate here.\n // Lightweight \\`RegExp.test()\\` on linear scan - no capture allocation.\n const matchedRoute =\n routes.find(({ regexp }) => {\n return regexp.test(url.pathname);\n }) || catchallRoute;\n\n const params = matchedRoute\n ? matchedRoute.extractParams(url.pathname)\n : {};\n\n const { name } = matchedRoute;\n\n const routeModule = await matchedRoute.loader();\n\n const paramsEntries = (\n Array.isArray(paramNames[name as never])\n ? [\n [...paramNames[name as never]],\n [...paramNames[name as never]].map((key) => params[key]),\n ]\n : [\n // fallback\n Object.keys(params),\n Object.values(params),\n ]\n ) as never;\n\n const { frontmatter = {} } = routeModule;\n\n const loaderData: Record<string, unknown> = {};\n\n loaderData[name] = await runLoader(name, () => {\n return routeModule.loader\n ? routeModule.loader({ name, params, paramsEntries, searchParams })\n : undefined; // should not survive serialization if no loader defined\n });\n\n const layouts: Array<{\n name: string;\n component: LayoutModule[\"default\"];\n }> = [];\n\n for (const [name, source] of matchedRoute.layouts || []) {\n const layoutModule = await source();\n layouts.push({ name, component: layoutModule.default });\n const key = \\`\\${name}/layout\\`;\n loaderData[key] = await runLoader(key, () => {\n return layoutModule.loader\n ? layoutModule.loader({ name, params, paramsEntries, searchParams })\n : undefined; // should not survive serialization if no loader defined\n });\n }\n\n const route: Route = {\n name,\n params,\n paramsEntries,\n searchParams,\n frontmatter,\n loaderData,\n };\n\n const component = [{ name: \"\", component: app }, ...layouts].reduce(\n (children, { component }) => {\n return h(component, { children } as never);\n },\n h(routeModule.default, {}),\n );\n\n return {\n component: h(\n RouterProvider,\n { value: route },\n h(MDXProvider, opt as never, component),\n ),\n route,\n };\n },\n };\n};\n\nexport const createRoute = (\n name: string,\n pathPattern: string,\n loader: RawRoute[\"loader\"],\n layouts: RawRoute[\"layouts\"],\n): RawRoute => {\n // strip trailing slash (keeping a sole \"/\") so the base-joined index route\n // matches both with and without it - \"/docs/\" as a pattern rejects \"/docs\"\n const path = \\`\\${base}/\\${pathPattern}\\`\n .replace(/\\\\/+/g, \"/\")\n .replace(/(.+)\\\\/$/, \"$1\");\n\n const { regexp } = pathToRegexp(path, { sensitive: true });\n const matcher = match<Route[\"params\"]>(path);\n\n return {\n name,\n regexp,\n extractParams: (path) => {\n const match = matcher(path);\n return match ? match.params : {};\n },\n loader,\n layouts,\n };\n};\n`,b=`/* @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`,x=`/* @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`,S=`* {\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`,C=`/* @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`,w=`export type ParamsMap = {\n{{#each pageRoutes}}\"{{name}}\": {{serializeParamsLiteral .}};\n{{/each}}\n};\n\nexport const paramNames = {\n{{#each pageRoutes}}\"{{name}}\": [ {{#each params.schema}}\"{{name}}\", {{/each}}],\n{{/each}}\n} as const;\n`,T=`import type { ComponentType } from \"preact\";\n\nimport type { RouterFactoryReturn } from \"@kosmojs/core\";\nimport { createRouterFactory } from \"@kosmojs/core/generators\";\n\nimport {\n createRouter,\n type RawRoute,\n type Route,\n type RouteComponent,\n} from \"./mdx\";\n\nexport const createRouters = (\n routes: Array<RawRoute>,\n {\n app,\n components,\n }: {\n app: ComponentType;\n components: Record<string, ComponentType<never>>;\n },\n): {\n clientRouter: () => RouterFactoryReturn<Promise<RouteComponent>>;\n serverRouter: (\n url: URL,\n ) => RouterFactoryReturn<Promise<RouteComponent>, { route: Route }>;\n} => {\n const router = createRouter(routes, app, { components });\n\n return {\n clientRouter() {\n return router.resolve();\n },\n serverRouter(url) {\n return router.resolve(url);\n },\n };\n};\n\nexport default createRouterFactory<\n RawRoute,\n Promise<RouteComponent>,\n { server: { route: Route } }\n>();\n`,E=`import { useContext } from \"preact/hooks\";\n\nimport { RouterContext } from \"./mdx\";\n\nimport type { ParamsMap, paramNames } from \"{{ createImport 'lib' 'params' }}\";\n\nexport function useRoute() {\n return structuredClone(useContext(RouterContext));\n}\n\nexport function useParams<T extends keyof ParamsMap>(): ParamsMap[T] {\n return useRoute().params as ParamsMap[T];\n}\n\ntype SameLengthTuple<T extends readonly unknown[], U> = { [K in keyof T]: U };\n\nexport function useParamsEntries<T extends keyof ParamsMap>(): [\n (typeof paramNames)[T],\n SameLengthTuple<(typeof paramNames)[T], unknown>,\n] {\n return useRoute().paramsEntries as never;\n}\n\nexport function useSearchParams() {\n return useRoute().searchParams;\n}\n\n/**\n * Reads loader data for the current page or one of its layouts.\n * Without a key, returns the page's own data.\n * For a layout, pass its path-qualified name (e.g. \"dashboard/layout\") -\n * a hook can't tell which layout it runs in.\n * */\nexport const useLoaderData = <T>(key?: string): T | undefined => {\n const route = useRoute();\n return route.loaderData?.[key || route.name] as T;\n};\n\n/**\n * Reads the current route's frontmatter.\n * */\nexport const useFrontmatter = <\n T extends Record<string, unknown> = Record<string, unknown>,\n>(): T => {\n return useRoute().frontmatter as T;\n};\n`,D=`import { AppProvider } from \"{{ createImport 'lib' 'app' }}\";\n\n<AppProvider>{props.children}</AppProvider>\n`,O=`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]?.path(params as never, query);\n\n return h(\"a\", { ...restProps, href }, children);\n}\n`,k=`/**\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 * 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 type { ComponentType } from \"preact\";\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} satisfies Record<string, ComponentType<never>>;;\n\ndeclare global {\n type MDXProvidedComponents = typeof components;\n}\n`,A=`import renderFactory, {\n createRoutes,\n hydrate,\n mount,\n} from \"{{ createImport 'libEntry' 'client' }}\";\n\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 hydrate() {\n return hydrate(() => clientRouter(), root);\n },\n mount() {\n return mount(() => clientRouter(), root);\n },\n };\n });\n} else {\n console.error(\"❌ Root element not found!\");\n}\n`,j=`import renderFactory, {\n createRoutes,\n renderToString,\n // no renderToStream on MDX folders\n} from \"{{ createImport 'libEntry' 'server' }}\";\n\nimport routerFactory from \"../router\";\n\nconst routes = createRoutes();\nconst { serverRouter } = routerFactory(routes);\n\nexport default renderFactory(() => {\n return {\n renderToString(url, { assets }) {\n return renderToString(\n () => serverRouter(url),\n { headerTags: assets.map(({ tag }) => tag) },\n );\n },\n };\n});\n`,M=`import PageSample from \"{{ createImport 'lib' 'pageSamples/404.tsx' }}\";\n\nexport default function Page() {\n return <PageSample />;\n}\n`,N=`{props.children}\n`,P=`---\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`,F=`---\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`,I=`import routerFactory, { createRouters } from \"{{ createImport 'lib' 'router' }}\";\n\nimport app from \"./app.mdx\";\nimport { components } from \"./components/mdx\"\n\nexport default routerFactory((routes) => {\n const { clientRouter, serverRouter } = createRouters(routes, { app, components });\n return {\n clientRouter() {\n return clientRouter()\n },\n serverRouter(url) {\n return serverRouter(url)\n },\n };\n});\n`,L=n((t,n)=>{let{createPath:u,createImportHelpers:d}=r(t),{renderToFile:f}=i({helpers:{...d({origin:`lib`}),...l(),serializeParams(e){return JSON.stringify(e.params)}}}),{renderToFile:L}=i({helpers:d({origin:`src`})}),R=e=>!e?.trim().length,z=s(n?.templates,P),B=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await L(u.pages(n.file),n.name===`index`?F:z(n.name,n),{route:n,title:n.name.replace(/\\{([^}]+)\\}/g,`$1`),message:p()},{overwrite:R}):t===`pageLayout`&&await L(u.pages(n.file),N,{route:n},{overwrite:R})},V=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageLayout`?[t]:[]),n=e.flatMap(({kind:e,entry:n})=>{if(e===`pageRoute`){let{name:e,file:r}=n;return[{...n,layouts:t.flatMap(t=>t.name===e||r.startsWith(`${t.name}/`)?[t]:[]).sort(a)}]}return[]}).sort(o);for(let[e,r]of[[`client.ts`,g],[`server.ts`,_]])await f(u.libEntry(e),r,{pageRoutes:n,layouts:t});for(let[e,t]of[[`params.ts`,w],[`router.ts`,T]])await f(u.lib(e),t,{pageRoutes:n})};return{config({command:e}){return{oxc:{jsx:{runtime:`automatic`,importSource:`preact`}},plugins:m(t,e,n)}},async start(){for(let[e,t]of[[`env.d.ts`,v],[`app.ts`,h],[`mdx.ts`,y],[`use.ts`,E],[`pageSamples/styles.module.css`,S],[`pageSamples/welcome.tsx`,C],[`pageSamples/page.tsx`,x],[`pageSamples/404.tsx`,b]])await f(u.lib(e),t,{});for(let[e,t]of[[`pages/404.mdx`,M],[`components/Link.tsx`,O],[`components/mdx.ts`,k],[`app.mdx`,D],[`router.ts`,I]])await L(u.src(e),t,{entryDir:c.entryDir},{overwrite:R});for(let[e,t]of[[`client.ts`,A],[`server.ts`,j]])await L(u.entry(e),t,{},{overwrite:R})},async watch(t,n){await B(t.filter(e(n,[`create`]))),await V(t)},async build(e){await B(e),await V(e)}}}),R=t({meta:{name:`MDX`,slot:`frontend`,jsx:`react-jsx`,jsxImportSource:`preact`},dependencies:{\"path-to-regexp\":f.devDependencies[`path-to-regexp`]},devDependencies:{preact:f.devDependencies.preact,\"preact-render-to-string\":f.devDependencies[`preact-render-to-string`],\"@mdx-js/preact\":f.devDependencies[`@mdx-js/preact`],\"remark-frontmatter\":f.devDependencies[`remark-frontmatter`],\"remark-mdx-frontmatter\":f.devDependencies[`remark-mdx-frontmatter`]},factory:L});export{R as default};\n//# sourceMappingURL=index.js.map","import{defineGenerator as e,defineGeneratorFactory as t,pathResolver as n,renderToFile as r,sortRoutes as i}from\"@kosmojs/lib\";import a from\"yaml\";import{join as o}from\"node:path\";import s from\"crc/crc32\";import{parse as c}from\"path-to-regexp\";import l from\"typebox\";import{RequestBodyTargets as u}from\"@kosmojs/core\";var d={json:`application/json`,form:[`application/x-www-form-urlencoded`,`multipart/form-data`],raw:void 0},f=()=>{let e=e=>[`Buffer`,`ArrayBuffer`,`Blob`].includes(e)?{type:`string`,format:`binary`}:l.Script(e),t=(e,t,n)=>{let r=n?`${t}_${n.replace(/[^\\w.-]/g,`_`)}${s(n)}`:t;return`${e.id}_${r}`},n=(e,n,r,i)=>[`#`,`components`,e,t(n,r,i)].join(`/`),r=e=>e.split(`/`).reduce((e,t)=>e+ +!t.includes(`{`),0),a=e=>{if(e.name===`index`)return[`/`];let{tokens:t}=c(e.pathPattern),n=e=>e.flatMap(e=>{switch(e.type){case`param`:return[e.name];case`wildcard`:return[e.name];case`group`:return n(e.tokens);default:return[]}}),i=(e,t)=>{if(!e.length)return[t];let[r,...a]=e;switch(r.type){case`text`:return i(a,{path:`${t.path}${r.value}`,params:t.params});case`param`:return i(a,{path:`${t.path}{${r.name}}`,params:[...t.params,r.name]});case`wildcard`:return i(a,{path:`${t.path}{${r.name}*}`,params:[...t.params,r.name]});case`group`:{let e=i(a,t),o=i([...r.tokens,...a],t),s=n(r.tokens),c=o.filter(e=>s.some(t=>e.params.includes(t)));return[...e,...c]}}},a=i(t,{path:``,params:[]}),s=e.params.schema.reduce((e,{name:t},n)=>(e[n]=t,e),{});return a.reduce((e,t)=>{let n=o(`/`,t.path);return e.includes(n)||t.params.every((e,t)=>e===s[t])&&e.push(n),e},[]).sort((e,t)=>r(t)-r(e))},f=(e,t)=>{let r=e.params.resolvedType?.properties?.flatMap(r=>RegExp(`\\\\{${r.name}\\\\*?\\\\}`).test(t)?[{$ref:n(`parameters`,e,e.params.id,r.name)}]:[]);return r?.length?r:void 0},m=(e,t)=>{let r=e.validationDefinitions.find(e=>e.method===t&&e.target===`response`);return Array.isArray(r?.variants)?r.variants.reduce((t,{id:r,status:i,contentType:a,body:o})=>(t[i]=p(i,a)||{description:`Success`,content:{[a||`application/json`]:{schema:o?{$ref:n(`schemas`,e,r)}:{type:`object`}}}},t),{}):{200:{description:`Success - TODO: Add response schema`,content:{\"text/plain\":{schema:{type:`string`}}}}}},h=n=>{let{parameters:r,schemas:i}={parameters:{},schemas:{}};for(let r of n.validationDefinitions)if(r.target===`response`)for(let{id:a,resolvedType:o}of r.variants)o?.typeboxSchema&&(i[t(n,a)]=e(o.typeboxSchema));else if(r.target===`query`){let{id:a,resolvedType:o}=r.schema;for(let r of o?.properties||[])if(r?.typeboxSchema){let o=t(n,a,r.name);i[o]=e(r.typeboxSchema)}}else{let{id:a,resolvedType:o}=r.schema;o?.typeboxSchema&&(i[t(n,a)]=e(o.typeboxSchema))}if(n.params.resolvedType)for(let i of n.params.resolvedType.properties||[])i?.typeboxSchema&&(r[t(n,n.params.id,i.name)]={name:i.name,in:`path`,required:!0,schema:e(i.typeboxSchema)});return{parameters:r,schemas:i}},g=e=>{let t={},r=e.validationDefinitions.flatMap(e=>e.target===`response`?[]:e.schema.resolvedType?[e]:[]);for(let i of a(e))for(let a of e.methods){let o={responses:m(e,a)},s=f(e,i);s&&(o.parameters=s);let c=r.find(e=>e.method===a&&e.target===`query`);if(c?.schema)for(let t of c.schema.resolvedType?.properties||[])o.parameters||=[],o.parameters.push({name:t.name,in:`query`,required:!t.optional,schema:{$ref:n(`schemas`,e,c.schema.id,t.name)}});let l=r.filter(e=>e.method===a&&Object.keys(u).includes(e.target));l.length&&(o.requestBody={required:!0,content:l.reduce((t,r)=>{let{contentType:i=d[r.target]}=r;if(i){let a={$ref:n(`schemas`,e,r.schema.id)};for(let e of[i].flat())t[e]={schema:a}}return t},{})}),t[i]||(t[i]={}),t[i][a.toLowerCase()]=o}return t};return{generateComponentId:t,generateComponentPath:n,generatePathVariations:a,generateOpenAPISchema:e=>{let t=new Map;for(let n of e)t.set(n.name,a(n));let{components:n,paths:r}=e.sort(i).flatMap(n=>{let r=t.get(n.name)??[];return r.length>0&&e.some(e=>{if(e.name===n.name)return!1;let i=t.get(e.name)??[],a=new Set(i);return r.every(e=>a.has(e))})?[]:[n]}).reduce((e,t)=>{let n=g(t),{parameters:r,schemas:i}=h(t);return{paths:{...e.paths,...n},components:{parameters:{...e.components.parameters,...r},schemas:{...e.components.schemas,...i}}}},{paths:{},components:{parameters:{},schemas:{}}});return{paths:r,components:n}}}},p=(e,t)=>{let n={type:`string`,format:`uri`,...t?{enum:[t]}:{}};return{301:{description:`Moved Permanently`,headers:{Location:{description:`New permanent location`,schema:n}}},302:{description:`Found`,headers:{Location:{description:`Temporary location`,schema:n}}},303:{description:`See Other`,headers:{Location:{description:`Location to GET after POST/PUT/DELETE`,schema:n}}},307:{description:`Temporary Redirect`,headers:{Location:{description:`Temporary location (preserves request method)`,schema:n}}},308:{description:`Permanent Redirect`,headers:{Location:{description:`New permanent location (preserves request method)`,schema:n}}}}[e]},m=t((e,t)=>{let{outfile:i=``,...o}={...t},{createPath:s}=n(e),{generateOpenAPISchema:c}=f(),l=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`apiRoute`?[t]:[]),{paths:n,components:l}=c(t),u={...JSON.parse(JSON.stringify(o)),paths:n,components:l},d=/ya?ml/.test(i)?a.stringify(u):JSON.stringify(u,null,2);await r(s.src(i),d,{})};return{async watch(e){await l(e)},async build(e){await l(e)}}}),h=e({meta:{name:`OpenAPI`,resolveTypes:!0},factory:m});export{h as default};\n//# sourceMappingURL=index.js.map","import{createWatchedPageRouteEntriesFilter as e,defineGenerator as t,defineGeneratorFactory as n,nestedRoutesFactory as r,pathResolver as i,renderFactory as a,sortRoutes as o}from\"@kosmojs/lib\";import s from\"@vitejs/plugin-react\";import{createTemplateResolver as c,defaults as l}from\"@kosmojs/core\";import{routeRenderHelpers as u}from\"@kosmojs/core/generators\";import{styleText as d}from\"node:util\";var f={type:`module`,private:!0,name:`@kosmojs/react-generator`,version:`0.3.0`,author:`Slee Woo`,license:`MIT`,files:[`pkg/*`],exports:{\".\":{types:`./pkg/index.d.ts`,default:`./pkg/index.js`}},scripts:{build:`wsbuild src/index.ts`,test:`vitest --root ../.. --project generators/react-generator`},dependencies:{\"@kosmojs/core\":`workspace:^`,\"@kosmojs/lib\":`workspace:^`,\"@vitejs/plugin-react\":`^6.1.0`},devDependencies:{\"@tanstack/react-query\":`^5.102.2`,\"@types/react\":`^19.2.18`,\"@types/react-dom\":`^19.2.5`,react:`^19.2.8`,\"react-dom\":`^19.2.8`,\"react-router\":`^8.3.0`}},p=e=>{let t=e.map(e=>e.orig).join(`/`),n=e=>e.kind===`splat`?`*`:e.kind===`optional`?`:${e.name}?`:`:${e.name}`;return e.flatMap(e=>e.kind===`static`?[e.parts[0].value]:e.kind===`param`?[n(e.parts[0])]:(/\\.\\w+$/.test(e.orig)||(console.warn(`❗${d([`red`,`bold`],`WARN`)}: React Router v7 only supports dot-suffix mixed segments (e.g. :param.html).`),console.warn(` ${d([`magenta`],e.orig)} in ${d([`blue`],t)} route won't match as expected.`),console.warn()),[e.parts.map(e=>e.type===`static`?e.value:n(e)).join(``)])).join(`/`)},m=()=>{let e=e=>e?.kind===`param`&&e.parts[0]?.kind===`splat`,t=n=>n.flatMap(({index:n,layout:r,children:i})=>{let{name:a,pathTokens:o}={...n,...r};if(!o)return[];let s=`${a}:layout`,c=p(o),l=o.at(-1);return e(l)?n&&r?[{name:s,path:c,component:r.id,children:[{name:a,path:`*`,component:n.id}]}]:n?[{path:c,children:[{name:a,path:`*`,component:n.id},...t(i)]}]:r?[{name:s,path:c,component:r.id,children:t(i)}]:[]:n&&r?[{name:s,path:c,component:r.id,children:[{name:a,index:!0,component:n.id},...t(i)]}]:n?[{path:c,children:[{name:a,index:!0,component:n.id},...t(i)]}]:r?[{name:s,path:c,component:r.id,children:t(i)}]:[]});return t},h=()=>{let e=[`🎉 Well done! You just created a new React route.`,`🚀 Success! A fresh React route is ready to roll.`,`🌟 Nice work! Another React route added to your app.`,`⚡ Quick and easy! Your new React route is good to go.`,`🥳 Congrats! Your app just leveled up with a new React route.`,`🧩 All set! A new React route has been scaffolded.`,`🔧 Scaffold complete! Your new React route is in place.`,`✨ Fantastic! Your new React route is ready.`,`🎯 Nailed it! A brand new React route just landed.`,`💫 Awesome! Another React route joins the lineup.`];return e[Math.floor(Math.random()*e.length)]},g=`import type { ReactNode } from \"react\";\n\nexport const AppProvider = ({ children }: { children: ReactNode }) => {\n return children;\n}\n`,_=`import { type QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport type { ReactNode } from \"react\";\n\nimport { getQueryClient } from \"./query\";\n\nexport const AppProvider = ({\n client,\n children,\n}: {\n client?: QueryClient;\n children: ReactNode;\n}) => {\n const queryClient = client ?? getQueryClient();\n return (\n <QueryClientProvider client={queryClient}>\n {children}\n </QueryClientProvider>\n );\n}\n`,v=`import { lazy, type JSX } from \"react\";\n\nimport {\n createRoot,\n hydrateRoot,\n type HydrationOptions,\n type RootOptions,\n} from \"react-dom/client\";\n\nimport type { RouterFactoryReturn } from \"@kosmojs/core\";\n\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 const hydrate = async (\n resolver: () => RouterFactoryReturn<Promise<JSX.Element>>,\n root: HTMLElement,\n options?: HydrationOptions,\n) => {\n const { component } = await resolver();\n hydrateRoot(root, component, options);\n}\n\nexport const mount = async (\n resolver: () => RouterFactoryReturn<Promise<JSX.Element>>,\n root: HTMLElement,\n options?: RootOptions,\n) => {\n const { component } = await resolver();\n createRoot(root, options).render(component);\n}\n\nexport default clientRenderFactory();\n`,y=`{\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`,b=`import type { JSX } from \"react\";\n\nimport {\n renderToString as renderToStringOrig,\n renderToReadableStream,\n} from \"react-dom/server\";\n\nimport type { StaticHandlerContext } from \"react-router\";\n\nimport type {\n RenderToStringWrapper,\n RenderToStreamWrapper,\n RouterFactoryReturn,\n SSRRenderWrapper,\n} from \"@kosmojs/core\";\n\nimport { 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 const renderWrapper: SSRRenderWrapper = (_context, render) => render();\n\nexport const renderToString: RenderToStringWrapper<\n () => RouterFactoryReturn<Promise<JSX.Element>>,\n Parameters<typeof renderToStringOrig>[1]\n> = async (resolver, { headerTags = [], ...options } = {}) => {\n const { component } = await resolver();\n return {\n head: [...headerTags].join(\"\\\\n\"),\n html: renderToStringOrig(component, options),\n };\n};\n\nexport const renderToStream: RenderToStreamWrapper<\n () => RouterFactoryReturn<Promise<JSX.Element>>,\n Parameters<typeof renderToReadableStream>[1]\n> = async (resolver, { headerTags = [], ...options } = {}) => {\n const { component } = await resolver();\n return {\n head: [...headerTags].join(\"\\\\n\"),\n html: await renderToReadableStream(component, options),\n };\n};\n\nexport default serverRenderFactory();\n`,x=`declare module \"virtual:kosmo/tsq-client\" {\n import type { QueryClient, QueryClientConfig } from \"@tanstack/react-query\";\n export const createQueryClient: (options?: QueryClientConfig) => QueryClient;\n export const getQueryClient: () => QueryClient;\n}\n`,S=`/* @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`,C=`/* @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`,w=`* {\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`,T=`/* @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`,E=`export * from \"virtual:kosmo/tsq-client\";\n`,D=`import { QueryClient } from \"@tanstack/react-query\";\n\nlet client = undefined;\n\nexport const createQueryClient = (options) => {\n client = new QueryClient(options);\n return client;\n};\n\nexport const getQueryClient = () => {\n if (!client) {\n client = new QueryClient();\n }\n return client;\n};\n`,O=`import { QueryClient } from \"@tanstack/react-query\";\n\nimport { store } from \"{{ createImport 'libCore' 'ssr' }}\";\n\nexport const createQueryClient = (options) => {\n const client = new QueryClient(options);\n const ctx = store?.getStore();\n if (ctx) {\n ctx.tsqClient = client;\n }\n return client;\n};\n\nexport const getQueryClient = () => {\n const ctx = store?.getStore();\n if (!ctx) {\n throw new Error(\"getQueryClient(): called outside an SSR request scope\");\n }\n if (!ctx.tsqClient) {\n ctx.tsqClient = new QueryClient();\n }\n return ctx.tsqClient;\n};\n`,k=`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 const component = await componentLoader();\n // Return null, not undefined, when a route has no loader.\n // React Router keys hydration data by route id;\n // an undefined value is dropped by JSON.stringify during serialization,\n // leaving the id absent, which makes RR re-run the loader on the client and double-render.\n // null survives serialization, so the id stays present.\n return typeof component.loader === \"function\"\n ? await component.loader(arg)\n : null;\n };\n return opt?.withPreload ? { loader } : {};\n };\n};\n`,A=`import type { JSX, ComponentType } from \"react\";\n\nimport {\n type RouteObject,\n createBrowserRouter,\n createStaticHandler,\n createStaticRouter,\n RouterProvider,\n StaticRouterProvider,\n} from \"react-router\";\n\nimport type { RouterFactoryReturn } from \"@kosmojs/core\";\nimport { createRouterFactory } from \"@kosmojs/core/generators\";\n\nimport { base } from \"{{ createImport 'libCore' }}\";\n\nexport const createRouters = (\n routes: Array<RouteObject>,\n { app }: { app: ComponentType },\n): {\n clientRouter: () => RouterFactoryReturn<Promise<JSX.Element>>;\n serverRouter: (url: URL) => RouterFactoryReturn<Promise<JSX.Element>>;\n} => {\n const routeStack = [\n {\n path: \"/\",\n Component: app,\n children: routes,\n },\n ];\n\n const handler = createStaticHandler(routeStack, { basename: base });\n\n const clientRouter = async () => {\n const router = createBrowserRouter(routeStack, { basename: base });\n const component = <RouterProvider router={router} />;\n return { component };\n }\n\n const serverRouter = async (url: URL) => {\n\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 const component = <StaticRouterProvider router={router} context={context} />;\n\n return { component };\n }\n\n return { clientRouter, serverRouter }\n}\n\nexport default createRouterFactory<RouteObject, Promise<JSX.Element>>();\n`,j=`import { Outlet } from \"react-router\";\nimport { AppProvider } from \"{{ createImport 'lib' 'app' }}\";\n\nexport default function App() {\n return (\n <AppProvider>\n <Outlet />\n </AppProvider>\n );\n}\n`,M=`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]?.path(params as never, query, { prefix: false });\n };\n\n return (\n <RouterLink {...restProps} to={href()}>\n {children}\n </RouterLink>\n );\n}\n`,N=`import renderFactory, {\n createRoutes,\n hydrate,\n mount,\n} from \"{{ createImport 'libEntry' 'client' }}\";\n\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 hydrate() {\n return hydrate(() => clientRouter(), root);\n },\n mount() {\n return mount(() => clientRouter(), root);\n },\n };\n });\n} else {\n console.error(\"❌ Root element not found!\");\n}\n`,P=`import renderFactory, {\n createRoutes,\n renderToStream,\n renderToString,\n} from \"{{ createImport 'libEntry' 'server' }}\";\n\nimport routerFactory from \"../router\";\n\nconst routes = createRoutes({ withPreload: true });\nconst { serverRouter } = routerFactory(routes);\n\nexport default renderFactory(() => {\n return {\n renderToString(url, { assets }) {\n return renderToString(\n () => serverRouter(url),\n { headerTags: assets.map(({ tag }) => tag) },\n );\n },\n renderToStream(url, { assets }) {\n return renderToStream(\n () => serverRouter(url),\n { headerTags: assets.map(({ tag }) => tag) },\n );\n },\n };\n});\n`,F=`import PageSample from \"{{ createImport 'lib' 'pageSamples/404.tsx' }}\";\n\nexport default function Page() {\n return <PageSample />;\n}\n`,I=`import { Outlet } from \"react-router\";\n\nexport default function Layout() {\n return <Outlet />;\n}\n`,L=`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`,R=`export { default } from \"{{ createImport 'lib' 'pageSamples/welcome.tsx' }}\";\n`,z=`import routerFactory, { createRouters } from \"{{ createImport 'lib' 'router' }}\";\n\nimport app from \"./app\";\n\nexport default routerFactory((routes) => {\n const { clientRouter, serverRouter } = createRouters(routes, { app });\n return {\n clientRouter() {\n return clientRouter()\n },\n serverRouter(url) {\n return serverRouter(url)\n },\n };\n});\n`,B=n((t,n)=>{let{createPath:d,createImportHelpers:f}=i(t),{render:p,renderToFile:B}=a({helpers:{...f({origin:`lib`}),...u()},partials:{routePartial:y}}),{renderToFile:V}=a({helpers:f({origin:`src`})}),H=m(),U=e=>!e?.trim().length,W=c(n?.templates,L),G=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await V(d.pages(n.file),n.name===`index`?R:W(n.name,n),{route:n,message:h()},{overwrite:U}):t===`pageLayout`&&await V(d.pages(n.file),I,{route:n},{overwrite:U})},K=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(o),n=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`||e===`pageLayout`?[t]:[]),i=H(r(n));for(let[e,t]of[[`client.ts`,v],[`server.ts`,b]])await B(d.libEntry(e),t,{pageEntries:n,nestedRoutes:i});await B(d.lib(`router.tsx`),A,{entries:e,indexRoutes:t})};return{config(){let{templates:e,...t}={...n};return{plugins:[s(t)]}},async start(){for(let[e,t]of[[`env.d.ts`,x],[`react.ts`,k],[`pageSamples/styles.module.css`,w],[`pageSamples/welcome.tsx`,T],[`pageSamples/page.tsx`,C],[`pageSamples/404.tsx`,S],...n?.tanstack?.query?[[`app.tsx`,_],[`query.ts`,E]]:[[`app.tsx`,g],[`query.ts`,`/** tanstack query disabled */`]]])await B(d.lib(e),t,{});for(let[e,t]of[[`pages/404.tsx`,F],[`components/Link.tsx`,M],[`app.tsx`,j],[`router.ts`,z]])await V(d.src(e),t,{entryDir:l.entryDir},{overwrite:U});for(let[e,t]of[[`client.ts`,N],[`server.ts`,P]])await V(d.entry(e),t,{},{overwrite:U})},async watch(t,n){await G(t.filter(e(n,[`create`]))),await K(t)},async build(e){await G(e),await K(e)},virtualModules(){return n?.tanstack?.query?[{specifier:`virtual:kosmo/tsq-client`,csr:p(D,{}),ssr:p(O,{})}]:[]}}}),V=t({meta:{name:`React`,slot:`frontend`,jsx:`preserve`,jsxImportSource:`react`},dependencies(e){return{react:f.devDependencies.react,\"react-router\":f.devDependencies[`react-router`],...e?.tanstack?.query?{\"@tanstack/react-query\":f.devDependencies[`@tanstack/react-query`]}:{}}},devDependencies:{\"@types/react\":f.devDependencies[`@types/react`],\"@types/react-dom\":f.devDependencies[`@types/react-dom`],\"react-dom\":f.devDependencies[`react-dom`]},factory:B});export{V as default};\n//# sourceMappingURL=index.js.map","import{createWatchedPageRouteEntriesFilter as e,defineGenerator as t,defineGeneratorFactory as n,nestedRoutesFactory as r,pathResolver as i,renderFactory as a,sortRoutes as o}from\"@kosmojs/lib\";import s from\"vite-plugin-solid\";import{createTemplateResolver as c,defaults as l}from\"@kosmojs/core\";import{routeRenderHelpers as u}from\"@kosmojs/core/generators\";import{styleText as d}from\"node:util\";var f={type:`module`,private:!0,name:`@kosmojs/solid-generator`,version:`0.3.0`,author:`Slee Woo`,license:`MIT`,files:[`pkg/*`],exports:{\".\":{types:`./pkg/index.d.ts`,default:`./pkg/index.js`}},scripts:{build:`wsbuild src/index.ts`,test:`vitest --root ../.. --project generators/solid-generator`},dependencies:{\"@kosmojs/core\":`workspace:^`,\"@kosmojs/lib\":`workspace:^`,\"vite-plugin-solid\":`^2.11.14`},devDependencies:{\"@solidjs/router\":`^1.0.0`,\"@tanstack/solid-query\":`^5.102.2`,\"solid-js\":`^1.9.15`}},p=()=>{let e=e=>e?.kind===`param`&&e.parts[0]?.kind===`splat`,t=t=>t?.kind===`param`?t.parts[0]?.kind===`optional`||e(t):!1,n=r=>r.flatMap(({index:r,layout:i,children:a})=>{let{pathTokens:o}={...r,...i},s=m(o.map(e=>e.kind===`param`&&a.some(e=>e.index?.pathTokens.some(t))?{...e,parts:[{...e.parts[0],kind:`required`}]}:e)),c=o.at(-1);if(e(c)){let e=m([c]);return r&&i?[{path:s,component:i.id,children:[{path:e,component:r.id}]}]:r?[{path:s,children:[{path:e,component:r.id},...n(a)]}]:i?[{path:s,component:i.id,children:n(a)}]:[]}return r&&i?[{path:s,component:i.id,children:[{path:`/`,component:r.id},...n(a)]}]:r?[{path:s,children:[{path:`/`,component:r.id},...n(a)]}]:i?[{path:s,component:i.id,children:n(a)}]:[]});return n},m=e=>{let t=e.map(e=>e.orig).join(`/`),n=e=>e.kind===`splat`?`*${e.name}`:e.kind===`optional`?`:${e.name}?`:`:${e.name}`;return e.flatMap(e=>e.kind===`static`?[e.parts[0].value]:e.kind===`param`?[n(e.parts[0])]:(e.parts.length&&(console.warn(`❗${d([`red`,`bold`],`WARN`)}: At the moment Solid Router does not support mixed path segments.`),console.warn(` ${d([`magenta`],e.orig)} segment in ${d([`blue`],t)} route won't match as expected.`),console.warn()),[e.parts.map(e=>e.type===`static`?e.value:n(e)).join(``)])).join(`/`)},h=()=>{let e=[`🎉 Well done! You just created a new Solid route.`,`🚀 Success! A fresh Solid route is ready to roll.`,`🌟 Nice work! Another Solid route added to your app.`,`🧩 All set! A new Solid route has been scaffolded.`,`🔧 Scaffold complete! Your new Solid route is in place.`,`✅ Built! Your Solid route is scaffolded and ready.`,`✨ Fantastic! Your new Solid route is good to go.`,`🎯 Nailed it! A brand new Solid route just landed.`,`💫 Awesome! Another Solid route joins the party.`,`⚡ Lightning fast! A new Solid route created successfully.`];return e[Math.floor(Math.random()*e.length)]},g=`import type { ParentComponent } from \"solid-js\";\n\nexport const AppProvider: ParentComponent = (props) => {\n return props.children;\n};\n`,_=`import type { ParentComponent } from \"solid-js\";\nimport { type QueryClient, QueryClientProvider } from \"@tanstack/solid-query\";\n\nimport { getQueryClient } from \"./query\";\n\nexport const AppProvider: ParentComponent<{ client?: QueryClient }> = (props) => {\n return (\n <QueryClientProvider client={props.client ?? getQueryClient()}>\n {props.children}\n </QueryClientProvider>\n );\n};\n`,v=`import { lazy, type JSX } from \"solid-js\";\nimport { hydrate as hydrateOrig, render } from \"solid-js/web\";\nimport type { RouterFactoryReturn } from \"@kosmojs/core\";\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 const hydrate = async (\n resolver: () => RouterFactoryReturn<JSX.Element>,\n root: HTMLElement,\n opts?: Parameters<typeof hydrateOrig>[2],\n) => {\n hydrateOrig(() => resolver().component, root, opts);\n}\n\nexport const mount = async (\n resolver: () => RouterFactoryReturn<JSX.Element>,\n root: HTMLElement,\n init?: Parameters<typeof render>[2],\n opts?: Parameters<typeof render>[3],\n) => {\n render(() => resolver().component, root, init, opts);\n}\n\nexport default clientRenderFactory();\n`,y=`{\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`,b=`import type { JSX } from \"solid-js\";\n\nimport {\n generateHydrationScript,\n renderToStringAsync,\n renderToStream as renderToStreamOrig,\n} from \"solid-js/web\";\n\nimport { provideRequestEvent } from \"solid-js/web/storage\";\n\nimport type {\n RenderToStringWrapper,\n RenderToStreamWrapper,\n RouterFactoryReturn,\n SSRRenderWrapper,\n} from \"@kosmojs/core\";\n\nimport { 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 const renderWrapper: SSRRenderWrapper = (context, render) => {\n const event = {\n request: new Request(context.url ?? \"http://ssr.local\", {\n headers: new Headers(context.headers),\n }),\n locals: {},\n };\n return provideRequestEvent(event as never, render);\n};\n\nexport const renderToString: RenderToStringWrapper<\n () => RouterFactoryReturn<JSX.Element>,\n Parameters<typeof renderToStringAsync>[1]\n> = async (resolver, { headerTags = [], timeoutMs = 30_000, ...options } = {}) => {\n /**\n * renderToStringAsync adaptation.\n * Solid arms its internal timeout before invoking the component,\n * so a component throwing synchronously leaves that timeout promise orphaned -\n * its rejection, 30s later, is unhandled and fatal to the process.\n * renderToStream's thenable resolves with the same html;\n * deferring the call turns a sync throw into an immediate, catchable rejection carrying the real error,\n * and the replacement timeout below is pre-observed, so it can never reject unhandled.\n * */\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n\n const timeout = new Promise<never>((_, reject) => {\n timeoutHandle = setTimeout(() => {\n reject(new Error(\"SSR: solid render timed out\"));\n }, timeoutMs);\n });\n\n timeout.catch(() => {});\n\n try {\n return {\n head: [...headerTags, generateHydrationScript()].join(\"\\\\n\"),\n html: await Promise.race([\n Promise.resolve().then(() => {\n // typed as a stream handle, but resolving to the full html at runtime.\n // renderToStringAsync itself races it the same way.\n return renderToStreamOrig(\n () => resolver().component,\n options,\n ) as unknown as Promise<string>;\n }),\n timeout,\n ]),\n };\n } finally {\n clearTimeout(timeoutHandle);\n }\n};\n\nexport const renderToStream: RenderToStreamWrapper<\n () => RouterFactoryReturn<JSX.Element>,\n Parameters<typeof renderToStreamOrig>[1]\n> = async (resolver, { headerTags = [], ...options } = {}) => {\n const stream = renderToStreamOrig(() => resolver().component, options);\n const { readable, writable } = new TransformStream<string, string>();\n /**\n * On failure, pipeTo aborts the writable, which errors the readable side\n * and surfaces the error to the stream consumer; catching here only keeps\n * the rejection from escaping as an unhandled one.\n * */\n void Promise.resolve(stream.pipeTo(writable)).catch(() => {});\n return {\n head: [...headerTags, generateHydrationScript()].join(\"\\\\n\"),\n html: readable,\n };\n};\n\nexport default serverRenderFactory<true>();\n`,x=`declare module \"virtual:kosmo/tsq-client\" {\n import type { QueryClient, QueryClientConfig } from \"@tanstack/solid-query\";\n export const createQueryClient: (options?: QueryClientConfig) => QueryClient;\n export const getQueryClient: () => QueryClient;\n}\n`,S=`/* @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`,C=`/* @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`,w=`* {\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`,T=`/* @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`,E=`export * from \"virtual:kosmo/tsq-client\";\n`,D=`import { QueryClient } from \"@tanstack/solid-query\";\n\nlet client = undefined;\n\nexport const createQueryClient = (options) => {\n client = new QueryClient(options);\n return client;\n};\n\nexport const getQueryClient = () => {\n if (!client) {\n client = new QueryClient();\n }\n return client;\n};\n`,O=`import { QueryClient } from \"@tanstack/solid-query\";\n\nimport { store } from \"{{ createImport 'libCore' 'ssr' }}\";\n\nexport const createQueryClient = (options) => {\n const client = new QueryClient(options);\n const ctx = store?.getStore();\n if (ctx) {\n ctx.tsqClient = client;\n }\n return client;\n};\n\nexport const getQueryClient = () => {\n const ctx = store?.getStore();\n if (!ctx) {\n throw new Error(\"getQueryClient(): called outside an SSR request scope\");\n }\n if (!ctx.tsqClient) {\n ctx.tsqClient = new QueryClient();\n }\n return ctx.tsqClient;\n};\n`,k=`import type { JSX, ParentComponent } from \"solid-js\";\nimport { Router, type RouteDefinition } from \"@solidjs/router\";\nimport type { RouterFactoryReturn } from \"@kosmojs/core\";\nimport { createRouterFactory } from \"@kosmojs/core/generators\";\n\nimport { base } from \"{{ createImport 'libCore' }}\";\n\nexport const createRouters = (\n routes: Array<RouteDefinition>,\n { app }: { app: ParentComponent },\n): {\n clientRouter: () => RouterFactoryReturn<JSX.Element>;\n serverRouter: (url: URL) => RouterFactoryReturn<JSX.Element>;\n} => {\n const clientRouter = () => {\n const component = (\n <Router root={app} base={base}>\n {routes}\n </Router>\n );\n return { component };\n }\n\n const serverRouter = (url: URL) => {\n const component = (\n <Router root={app} base={base} url={url.pathname + url.search}>\n {routes}\n </Router>\n );\n return { component };\n }\n\n return { clientRouter, serverRouter };\n}\n\nexport default createRouterFactory<RouteDefinition, JSX.Element>();\n`,A=`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 const component = await componentLoader();\n return typeof component.preload === \"function\"\n ? component.preload\n : undefined;\n };\n return opt?.withPreload ? { preload } : {};\n };\n};\n`,j=`export type MaybeWrapped<T> = import(\"solid-js/store\").Store<T> | T;\n\nexport { unwrap } from \"solid-js/store\";\n`,M=`import type { ParentComponent } from \"solid-js\";\nimport { AppProvider } from \"{{ createImport 'lib' 'app' }}\";\n\nconst App: ParentComponent = (props) => {\n return <AppProvider>{props.children}</AppProvider>;\n};\n\nexport default App;\n`,N=`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]?.path(params as never, knownProps.query, { prefix: false });\n };\n\n return <A {...{ ...restProps, href: href() }}>{knownProps.children}</A>;\n}\n`,P=`import renderFactory, {\n createRoutes,\n hydrate,\n mount,\n} from \"{{ createImport 'libEntry' 'client' }}\";\n\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 hydrate() {\n return hydrate(() => clientRouter(), root);\n },\n mount() {\n return mount(() => clientRouter(), root);\n },\n };\n });\n} else {\n console.error(\"❌ Root element not found!\");\n}\n`,F=`import renderFactory, {\n createRoutes,\n renderToStream,\n renderToString,\n} from \"{{ createImport 'libEntry' 'server' }}\";\n\nimport routerFactory from \"../router\";\n\nconst routes = createRoutes({ withPreload: true });\nconst { serverRouter } = routerFactory(routes);\n\nexport default renderFactory(() => {\n return {\n renderToString(url, { assets }) {\n return renderToString(\n () => serverRouter(url),\n { headerTags: assets.map(({ tag }) => tag) },\n );\n },\n renderToStream(url, { assets }) {\n return renderToStream(\n () => serverRouter(url),\n { headerTags: assets.map(({ tag }) => tag) },\n );\n },\n };\n});\n`,I=`import PageSample from \"{{ createImport 'lib' 'pageSamples/404.tsx' }}\";\n\nexport default function Page() {\n return <PageSample />;\n}\n`,L=`import type { ParentComponent } from \"solid-js\";\n\nconst Layout: ParentComponent = (props) => {\n return props.children;\n};\n\nexport default Layout;\n`,R=`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`,z=`export { default } from \"{{ createImport 'lib' 'pageSamples/welcome.tsx' }}\";\n`,B=`import routerFactory, { createRouters } from \"{{ createImport 'lib' 'router' }}\";\n\nimport app from \"./app\";\n\nexport default routerFactory((routes) => {\n const { clientRouter, serverRouter } = createRouters(routes, { app });\n return {\n clientRouter() {\n return clientRouter()\n },\n serverRouter(url) {\n return serverRouter(url)\n },\n };\n});\n`,V=n((t,n)=>{let{generators:d=[]}=t.config,{createPath:f,createImportHelpers:m}=i(t),{render:V,renderToFile:H}=a({helpers:{...m({origin:`lib`}),...u()},partials:{routePartial:y}}),{renderToFile:U}=a({helpers:m({origin:`src`})}),W=p(),G=e=>!e?.trim().length,K=c(n?.templates,R),q=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await U(f.pages(n.file),n.name===`index`?z:K(n.name,n),{route:n,message:h()},{overwrite:G}):t===`pageLayout`&&await U(f.pages(n.file),L,{route:n},{overwrite:G})},J=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(o),n=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`||e===`pageLayout`?[t]:[]),i=W(r(n));for(let[e,t]of[[`client.ts`,v],[`server.ts`,b]])await H(f.libEntry(e),t,{pageEntries:n,nestedRoutes:i});await H(f.lib(`router.tsx`),k,{entries:e,indexRoutes:t})};return{config({command:e}){let{templates:t,...r}={...n};return{oxc:{jsx:{importSource:`solid-js`}},plugins:e===`build`?[s({...r,...d.some(e=>e.meta.slot===`ssr`)?{ssr:!0,solid:{...r?.solid,hydratable:!0}}:{}})]:[s({...r,dev:!0,hot:!0})]}},async start(){for(let[e,t]of[[`env.d.ts`,x],[`solid.ts`,A],[`unwrap.ts`,j],[`pageSamples/styles.module.css`,w],[`pageSamples/welcome.tsx`,T],[`pageSamples/page.tsx`,C],[`pageSamples/404.tsx`,S],...n?.tanstack?.query?[[`app.tsx`,_],[`query.ts`,E]]:[[`app.tsx`,g],[`query.ts`,`/** tanstack query disabled */`]]])await H(f.lib(e),t,{});for(let[e,t]of[[`pages/404.tsx`,I],[`components/Link.tsx`,N],[`app.tsx`,M],[`router.ts`,B]])await U(f.src(e),t,{entryDir:l.entryDir},{overwrite:G});for(let[e,t]of[[`client.ts`,P],[`server.ts`,F]])await U(f.entry(e),t,{},{overwrite:G})},async watch(t,n){await q(t.filter(e(n,[`create`]))),await J(t)},async build(e){await q(e),await J(e)},virtualModules(){return n?.tanstack?.query?[{specifier:`virtual:kosmo/tsq-client`,csr:V(D,{}),ssr:V(O,{})}]:[]}}}),H=t({meta:{name:`SolidJS`,slot:`frontend`,jsx:`preserve`,jsxImportSource:`solid-js`},dependencies(e){return{\"solid-js\":f.devDependencies[`solid-js`],\"@solidjs/router\":f.devDependencies[`@solidjs/router`],...e?.tanstack?.query?{\"@tanstack/solid-query\":f.devDependencies[`@tanstack/solid-query`]}:{}}},factory:V});export{H as default};\n//# sourceMappingURL=index.js.map","import{collectVirtualModules as e,defineGenerator as t,defineGeneratorFactory as n,mergeConfigs as r,pathExists as i,pathResolver as a,renderFactory as o,sortRoutes as s,spinnerFactory as c,vitePlugins as l}from\"@kosmojs/lib\";import{access as u,constants as d,cp as f,mkdir as p,rm as m,writeFile as h}from\"node:fs/promises\";import{dirname as g,join as _,posix as v,resolve as y}from\"node:path\";import{styleText as b}from\"node:util\";import{build as x}from\"vite\";import{routeRenderHelpers as S}from\"@kosmojs/core/generators\";var C=`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\ntype StaticParams = Array<Array<string | number | Array<string | number>>>;\n\n/**\n * Where a page declares the parameter sets to pre-render:\n * - a \\`staticParams\\` named export - React/Solid page modules,\n * a plain \\`<script>\\` block in Vue, a \\`<script module>\\` block in Svelte\n * - \\`staticParams\\` in MDX frontmatter\n * Each entry is positional, in the route's parameter order.\n * */\nconst staticParamsOf = (module: unknown): StaticParams | undefined => {\n const { staticParams, frontmatter } = (module ?? {}) as {\n staticParams?: unknown;\n frontmatter?: { staticParams?: unknown };\n };\n const value = staticParams ?? frontmatter?.staticParams;\n return Array.isArray(value) ? (value as StaticParams) : undefined;\n};\n\nconst paramsMapper = (\n params: PageRoute[\"params\"],\n value: StaticParams[number],\n) => {\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, { module, pathPattern, params }]) => {\n if (!params.schema.length) {\n // static route\n return [pathPattern.replace(/^index\\\\/?/, \"\")];\n }\n\n const staticParams = staticParamsOf(module);\n\n // a dynamic route without staticParams has nothing to pre-render\n if (!staticParams) {\n return [];\n }\n\n const toPath = compile(pathPattern);\n\n return staticParams.flatMap((entry) => {\n try {\n return [toPath(paramsMapper(params, entry) as never)];\n } catch (error) {\n console.error(\\`❗SSG: Failed building path for \\${name}\\`);\n console.error(error);\n return [];\n }\n });\n })\n .map((path) => join(base, path));\n`,w=`import type { PageRoute } from \"@kosmojs/core\";\n\n{{#each pageRoutes}}\nimport * as {{id}} from \"{{ createImport 'pages' file }}\";\n{{/each}}\n\ntype SSGRoute = {\n // the page module as imported; the shape differs per framework\n module: unknown;\n pathPattern: string;\n params: PageRoute[\"params\"];\n};\n\nconst routeMap: Record<string, SSGRoute> = {\n{{#each pageRoutes}}\n \"{{name}}\": {\n module: {{id}},\n pathPattern: \"{{pathPattern}}\",\n params: {{serializeParams .}},\n },\n{{/each}}\n};\n\nexport default routeMap;\n`,T=n(t=>{let{generators:n=[],refineTypeName:T,...D}={...t.config},{base:O}=D,{createPath:k,createImportHelpers:A}=a(t),{renderToFile:j}=o({helpers:{...A({origin:`lib`}),...S(),serializeParams(e){return JSON.stringify(e.params)}}}),M=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(s);await j(k.lib(`ssg:routes.ts`),w,{pageRoutes:t})};return{async start(){await j(k.lib(`ssg.ts`),C,{})},async watch(e){await M(e)},async build(e){await M(e)},async postBuild(){let a=k.distDir(`ssg`),o=y(a,`../ssr/server.js`);if(!await u(o,d.F_OK).then(()=>!0,()=>!1)){console.error(),console.error(b(`red`,`❗Please enable ssrGenerator in ${t.name}/kosmo.config.ts`)),console.error(` SSG generator can not run without SSR server`),console.error();return}let s=c(`${t.name}: SSG`);s.append(`preparing...`);let{createApp:S}=await import(o);s.append(`bundling routes...`),await x(r(D,...n.map(({factory:e})=>e(t).config?.({kind:`client`,command:`build`})),{root:k.lib(),appType:`custom`,plugins:[l.tsconfigPaths(t),l.nodePrefix(),l.virtualModules(e(t,n),{kind:`csr`,command:`build`})],resolve:{conditions:[`node`]},build:{ssr:k.lib(`ssg.ts`),target:`esnext`,sourcemap:!1,emptyOutDir:!0,rolldownOptions:{output:{dir:a,entryFileNames:`routes.js`,format:`esm`}}}}));try{let e=await import(_(a,`routes.js`)).then(e=>e.default),t=new Map,n=await S(e=>{t.set(new URL(e.url).pathname,{error:e.message})});for(let[r,i]of e.entries()){s.append(`[ ${r+1} of ${e.length} ] ${i}`);try{let e=await E(n,i);t.has(i)||t.set(i,{html:e})}catch(e){t.has(i)||t.set(i,{error:String(e)})}}let r=[...t.entries()].flatMap(([e,t])=>`error`in t?[[e,t.error]]:[]);if(r.length)throw s.failed(`failed ❗`),Error([`SSG: failed rendering ${r.length} route(s):`,...r.map(([e,t])=>` ${e} - ${t}`)].join(`\n`));await f(y(a,`../ssr/assets`),_(a,`assets`),{recursive:!0});let o=y(a,`../ssr/public`);await i(o)&&await f(o,a,{recursive:!0});for(let[e,n]of t)if(`html`in n){let t=_(a,v.relative(O,e),`index.html`);await p(g(t),{recursive:!0}),await h(t,n.html,`utf8`)}s.succeed(`done ✨`)}finally{await m(`${a}/routes.js`)}}}}),E=async(e,t)=>{let n=await e.fetch(new Request(`http://localhost${t}`));if(!n.ok)throw Error(`app responded with ${n.status}`);return n.text()},D=t({meta:{name:`SSG`,slot:`ssg`},factory:T});export{D as default};\n//# sourceMappingURL=index.js.map","import{collectVirtualModules as e,defineGenerator as t,defineGeneratorFactory as n,mergeConfigs as r,pathExists as i,pathResolver as a,renderFactory as o,sortRoutes as s,vitePlugins as c}from\"@kosmojs/lib\";import{cp as l,rm as u}from\"node:fs/promises\";import{join as d,resolve as f}from\"node:path\";import{build as p}from\"vite\";import{createRouteResolver as m}from\"@kosmojs/core\";var h={type:`module`,private:!0,name:`@kosmojs/ssr-generator`,version:`0.3.0`,author:`Slee Woo`,license:`MIT`,files:[`pkg/*`],exports:{\".\":{types:`./pkg/index.d.ts`,default:`./pkg/index.js`}},scripts:{build:`wsbuild src/index.ts`},dependencies:{\"@kosmojs/core\":`workspace:^`,\"@kosmojs/lib\":`workspace:^`,vite:`^8.2.2`},devDependencies:{\"@hono/node-server\":`^2.1.1`,hono:`^4.13.3`,tinyglobby:`^0.2.17`}},g=`import { type RequestContext, store } from \"{{ createImport 'libCore' 'ssr' }}\";\nimport { renderWrapper } from \"{{ createImport 'libEntry' 'server' }}\";\n\nexport { default as backendApp } from \"virtual:kosmo/backend-app\";\n\nexport { default as ssrApp } from \"{{ createImport 'entry' 'server' }}\";\n\n/**\n * Wrap a render call, making the given context visible to every component\n * */\nexport const withSsrContext = <T>(\n context: RequestContext,\n render: () => T,\n): T => {\n return store.run(context, () => renderWrapper(context, render));\n};\n\nexport const errorProvider = () => {\n return store.getStore()?.error;\n};\n`,_=`export const routeMap = [\n{{#each pageRoutes}}\n { pathPattern: \"{{honoPattern}}\", renderMode: \"{{renderMode}}\" },\n{{/each}}\n];\n`,v=`import { access, chmod, constants, readFile, unlink } from \"node:fs/promises\";\nimport {\n createServer,\n type IncomingMessage,\n type ServerResponse,\n} from \"node:http\";\nimport { extname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { parseArgs, styleText } from \"node:util\";\n\nimport { getRequestListener } from \"@hono/node-server\";\nimport { type Context, Hono } from \"hono\";\nimport { HTTPException } from \"hono/http-exception\";\nimport { stream } from \"hono/streaming\";\nimport { glob } from \"tinyglobby\";\n\nimport {\n type FetchApp,\n MIME_TYPES,\n type NodeApp,\n type SSRSetup,\n} from \"@kosmojs/core\";\n\nimport { routeMap } from \"{{ createImport 'lib' '@ssr/routes' }}\";\nimport { apiBase, base } from \"{{ createImport 'libCore' }}\";\nimport { redirectCodes, ssrOrigin } from \"{{ createImport 'libCore' 'ssr' }}\";\n\nconst ROOT = import.meta.dirname;\nconst HEAD_CLOSE_PATTERN = /<\\\\/head\\\\s*>/i;\n\ntype AssetInfo = {\n file: string;\n // Raw file contents kept in memory for fast, zero-I/O responses.\n buffer: Uint8Array;\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;\n // Cache-Control header - hashed assets are immutable, public/ files are not.\n cacheControl: string;\n};\n\nexport const createApp = async (\n errorHandler?: (error: Error & { url: string }) => void | undefined,\n) => {\n // Import the SSR entry produced by Vite's ssr build.\n const {\n ssrApp,\n withSsrContext,\n errorProvider,\n }: {\n ssrApp: SSRSetup;\n withSsrContext: <T>(\n context: { headers?: Record<string, string>; url?: string },\n render: () => T,\n ) => Promise<T>;\n errorProvider: () => Error | undefined;\n } = await import(\\`\\${ROOT}/app.js\\`);\n\n // Read the client index.html that includes <!--app-html--> placeholder\n const template = await readFile(\\`\\${ROOT}/index.html\\`, \"utf8\");\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 const { renderToString, renderToStream, onError } = ssrApp;\n\n const [htmlStart, htmlEnd = \"\"] = template.split(/<!--\\\\s*app-html\\\\s*-->/);\n\n const assets = await loadAssets(ROOT);\n\n const ssrOptions = () => {\n const cssAssets = [...assets.entries()].flatMap(\n ([path, { file, buffer, size }]) => {\n // Vite is naming assets by entry name\n if (!/^__kosmo_ssr_bundle-.+\\\\.css$/i.test(file)) {\n return [];\n }\n\n // skip if template contains a file with same hash\n if (template.includes(file.replace(/^__kosmo_ssr_bundle\\\\b/, \"\"))) {\n return [];\n }\n\n return [\n {\n kind: \"css\" as const,\n tag: \\`<link rel=\"stylesheet\" crossorigin href=\"\\${path}\" />\\`,\n content: new TextDecoder().decode(buffer),\n size,\n path,\n },\n ];\n },\n );\n\n const content = \"window.__KOSMO_HYDRATION_BOOL__ = true;\";\n\n return {\n template,\n manifest,\n assets: [\n ...cssAssets,\n {\n kind: \"js\" as const,\n tag: \\`<script>\\${content}<\\/script>\\`,\n content,\n size: content.length,\n },\n ],\n };\n };\n\n const handleError = (url: string, error: Error, fallback: Function) => {\n // assign, not spread: message and stack are non-enumerable on Error,\n // a spread silently drops them\n Object.assign(error, { url });\n if (onError) {\n onError(error as never);\n } else {\n fallback();\n }\n errorHandler?.(error as never);\n };\n\n const injectHead = (html: string, head: string) => {\n const error = \"WARN: missing </head> - required for SSR head injection\";\n if (HEAD_CLOSE_PATTERN.test(html)) {\n return html.replace(HEAD_CLOSE_PATTERN, (headEnd) => {\n return [head, headEnd].join(\"\\\\n\");\n });\n }\n console.error(error);\n return \\`\\${html}\\\\n<script>console.error(\"\\${error}\")<\\/script>\\`;\n };\n\n const renderPage = async (url: URL, ctx: Context) => {\n const {\n head = \"\",\n html,\n error,\n } = await withSsrContext(\n {\n headers: Object.fromEntries(ctx.req.raw.headers),\n url: ctx.req.url,\n },\n async () => {\n try {\n /**\n * Catch a hard SSR render failure and fall back to CSR,\n * where the client's error boundaries can surface a meaningful error.\n * Server-side error boundaries behave inconsistently across frameworks,\n * can not rely on them here.\n * Instead, the SSR output are discarded and the client shell served verbatim,\n * letting the client re-render and handle the error uniformly.\n * This is the render-level counterpart to the transport-level catch in loaders.\n * */\n const { head = \"\", html } = await renderToString(url, ssrOptions());\n return { head, html, error: errorProvider() };\n } catch (error) {\n return { error };\n }\n },\n );\n\n if (error) {\n const errorMessage = \"WARN: SSR failed, fallback to CSR\";\n handleError(ctx.req.url, error as never, () => {\n console.error(errorMessage);\n console.error(error);\n console.error();\n });\n return [\n injectHead(\n htmlStart,\n \\`<script>console.error(\"\\${errorMessage}\")<\\/script>\\`,\n ),\n htmlEnd,\n ].join(\"\");\n }\n\n return [injectHead(htmlStart, head), html ?? \"\", htmlEnd].join(\"\");\n };\n\n const app = new Hono({ strict: false });\n\n // Static files win over routes, as they do in vite dev and behind a reverse proxy.\n // This covers hashed assets/ (JS, CSS, images, fonts, .map siblings) and public/ files.\n app.use(async (ctx, next) => {\n if (![\"GET\", \"HEAD\"].includes(ctx.req.method)) {\n return next();\n }\n\n const asset = assets.get(ctx.req.path);\n\n if (!asset) {\n return next();\n }\n\n return new Response(\n ctx.req.method === \"HEAD\" ? null : (asset.buffer as never),\n {\n headers: {\n \"Content-Type\": asset.contentType,\n \"Content-Length\": String(asset.size),\n \"Cache-Control\": asset.cacheControl,\n },\n },\n );\n });\n\n for (const { pathPattern, renderMode } of routeMap) {\n app.get(join(base, pathPattern), async (ctx) => {\n try {\n const url = new URL(ctx.req.url);\n\n if (renderMode === \"string\" && typeof renderToString === \"function\") {\n const page = await renderPage(url, ctx);\n return ctx.html(page);\n }\n\n if (renderMode === \"stream\" && typeof renderToStream === \"function\") {\n ctx.header(\"Content-Type\", \"text/html\");\n return stream(ctx, async (stream) => {\n let error: Error | undefined;\n\n /**\n * Stream failures surface here, not in a catch upstream:\n * on solid and vue pipe rejects; react shell errors reject the render promise itself.\n * The shell may already be on the wire -\n * reporting is all that is left to do, the response cannot be replaced.\n * */\n try {\n const { head = \"\", html } = await withSsrContext(\n {\n headers: Object.fromEntries(ctx.req.raw.headers),\n url: ctx.req.url,\n },\n () => renderToStream(url, ssrOptions(), stream as never),\n );\n await stream.write(injectHead(htmlStart, head));\n await stream.pipe(html);\n error = errorProvider();\n await stream.write(htmlEnd);\n } catch (e: any) {\n error = e;\n }\n\n if (error) {\n handleError(ctx.req.url, error, () => {\n console.error(\"ERROR: SSR stream render failed\");\n console.error(error);\n console.error();\n });\n }\n });\n }\n\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 || !redirectCodes.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 // render 404 page\n if (typeof renderToString === \"function\") {\n const url = new URL(ctx.req.url);\n const page = await renderPage(url, ctx);\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, loading asset content into memory.\n * The asset graph always includes every built asset URL so the SSR server\n * can correctly recognize static asset requests.\n *\n * Two roots, each directory being its own allowlist - nothing else in the bundle root is served:\n * - assets/ - emitted by vite with content hashes, served at base/assets/, cacheable forever\n * - public/ - copied verbatim from the folder's public dir, served at base/, names are stable so clients must revalidate\n * */\nconst loadAssets = async (root: string) => {\n // Resolve HTTP Content-Type from the asset's file extension.\n const contentTypeResolver = (filePath: string) => {\n const ext = extname(filePath).toLowerCase();\n return MIME_TYPES[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 roots = [\n {\n folder: \"assets\",\n prefix: join(base, \"assets\"),\n cacheControl: \"public, max-age=31536000, immutable\",\n },\n {\n folder: \"public\",\n prefix: base,\n cacheControl: \"no-cache\",\n },\n ];\n\n for (const { folder, prefix, cacheControl } of roots) {\n const cwd = resolve(root, folder);\n\n const readable = await access(cwd, constants.F_OK).then(\n () => true,\n () => false,\n );\n\n if (!readable) {\n continue;\n }\n\n const files = await glob(\"**\", {\n cwd,\n onlyFiles: true,\n absolute: false,\n });\n\n for (const file of files) {\n const buffer = new Uint8Array(await readFile(resolve(cwd, file)));\n assetCache.set(join(prefix, file), {\n file,\n buffer,\n contentType: contentTypeResolver(file),\n size: buffer.length,\n cacheControl,\n });\n }\n }\n\n return assetCache;\n};\n\ntype NodeListener = (req: IncomingMessage, res: ServerResponse) => void;\n\nconst createNodeListener = (app: FetchApp | NodeApp): NodeListener => {\n return typeof (app as FetchApp).fetch === \"function\"\n ? getRequestListener((app as FetchApp).fetch)\n : (app as NodeApp).callback();\n};\n\n/**\n * The folder's complete request surface as a single node:http listener:\n * API requests under \\`apiBase\\` go to the bundled backend, everything else to the SSR app.\n * \\`startServer\\` binds it to a port/socket; \\`dist/run.js\\` mounts it next to other folders.\n * */\nexport const createListener = async (): Promise<NodeListener> => {\n const {\n backendApp,\n }: {\n backendApp: FetchApp | NodeApp;\n } = await import(\\`\\${ROOT}/app.js\\`);\n\n const ssrApp = await createApp();\n const apiPrefix = join(base, apiBase);\n\n const ssrListener = createNodeListener(ssrApp as never);\n\n const apiListener = backendApp\n ? createNodeListener(backendApp as never)\n : async () => {};\n\n return (req, res) => {\n const { pathname } = new URL(req.url ?? \"/\", ssrOrigin);\n return pathname === apiPrefix || pathname.startsWith(\\`\\${apiPrefix}/\\`)\n ? apiListener(req, res)\n : ssrListener(req, res);\n };\n};\n\nexport const startServer = 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 \\`\\\\n ➜ Starting SSR Server \\${styleText([\"dim\"], \"[ %s ]\")}\\`,\n sock ? \\`sock: \\${sock}\\` : \\`port: \\${port}\\`,\n );\n\n const server = createServer(await createListener());\n\n server.listen(sock || port, 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 return server;\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 startServer({ sock, port });\n } catch (error: any) {\n console.error(styleText(\"red\", \"✗ Failed starting SSR server\"));\n console.error(error);\n process.exit(1);\n }\n}\n`,y=`string`,b=n((t,n)=>{let{createPath:h,createImportHelpers:b}=a(t),{generators:x,refineTypeName:S,...C}=t.config,{renderToFile:w}=o({helpers:{...b({origin:`lib`})}});return{async build(e){let t=n?.renderMode?typeof n.renderMode==`string`?()=>n.renderMode:m(n?.renderMode,`string`):()=>y,r={renderMode:JSON.stringify(n?.renderMode||null),pageRoutes:e.flatMap(e=>e.kind===`pageRoute`?[{...e.entry,renderMode:t(e.entry.name)}]:[]).sort(s),apiGenerator:x.some(e=>e.meta.slot===`backend`)};for(let[e,t]of[[`ssr.ts`,v],[`@ssr/__kosmo_ssr_bundle.ts`,g],[`@ssr/routes.ts`,_]])await w(h.lib(e),t,r)},async postBuild(){if(!x.some(e=>e.meta.slot===`frontend`))return;let n=h.distDir(`ssr`),a=[c.tsconfigPaths(t),c.nodePrefix(),c.virtualModules(e(t,x),{kind:`ssr`,command:`build`})];await p(r(C,...x.map(({factory:e})=>e(t).config?.({kind:`client`,command:`build`})),{root:h.src(),plugins:a,build:{ssr:h.lib(`@ssr/__kosmo_ssr_bundle`),ssrEmitAssets:!0,sourcemap:!0,emptyOutDir:!0,minify:!1,copyPublicDir:!1,rolldownOptions:{output:{dir:n,entryFileNames:`app.js`,format:`esm`}}}})),await p({root:h.lib(),configFile:!1,appType:`custom`,plugins:a,resolve:{conditions:[`node`]},build:{ssr:h.lib(`ssr.ts`),target:`esnext`,sourcemap:!0,emptyOutDir:!0,rolldownOptions:{output:{dir:d(n,`server`),entryFileNames:`server.js`,format:`esm`}}}});for(let e of[`.vite`,`assets`,`index.html`])await l(f(n,`../client`,e),d(n,e),{recursive:!0});if(![!1,``].includes(C.publicDir)){let e=f(h.src(),C.publicDir||`public`);await i(e)&&await l(e,d(n,`public`),{recursive:!0})}for(let e of[`server.js`,`server.js.map`])await l(`${n}/server/${e}`,`${n}/${e}`);await u(`${n}/server`,{recursive:!0,force:!0})}}}),x=t({meta:{name:`SSR`,slot:`ssr`},dependencies:{tinyglobby:h.devDependencies.tinyglobby,hono:h.devDependencies.hono,\"@hono/node-server\":h.devDependencies[`@hono/node-server`]},factory:b});export{x as default};\n//# sourceMappingURL=index.js.map","import{createWatchedPageRouteEntriesFilter as e,defineGenerator as t,defineGeneratorFactory as n,pathResolver as r,renderFactory as i,sortRoutes as a,sortRoutesForResolution as o}from\"@kosmojs/lib\";import{svelte as s}from\"@sveltejs/vite-plugin-svelte\";import{createTemplateResolver as c,defaults as l}from\"@kosmojs/core\";import{routeRenderHelpers as u}from\"@kosmojs/core/generators\";var d={type:`module`,private:!0,name:`@kosmojs/svelte-generator`,version:`0.3.0`,author:`Slee Woo`,license:`MIT`,files:[`pkg/*`],exports:{\".\":{types:`./pkg/index.d.ts`,default:`./pkg/index.js`}},scripts:{build:`wsbuild src/index.ts`},dependencies:{\"@kosmojs/core\":`workspace:^`,\"@kosmojs/lib\":`workspace:^`,\"@sveltejs/vite-plugin-svelte\":`^7.3.0`,vite:`^8.2.2`},devDependencies:{\"@tanstack/svelte-query\":`^6.1.41`,\"path-to-regexp\":`^8.4.2`,svelte:`^5.56.10`}},f=()=>{let e=[`🎉 Well done! You just created a new Svelte page.`,`🚀 Success! A fresh Svelte page is ready to roll.`,`🌟 Nice work! Another Svelte page added to your app.`,`🧩 All set! A new Svelte page has been scaffolded.`,`🔧 Scaffold complete! Your new Svelte page is in place.`,`✅ Built! Your Svelte page is scaffolded and ready.`,`✨ Fantastic! Your new Svelte page is good to go.`,`🎯 Nailed it! A brand new Svelte page just landed.`,`💫 Awesome! Another Svelte page joins the party.`,`⚡ Lightning fast! A new Svelte page created successfully.`];return e[Math.floor(Math.random()*e.length)]},p=`<script lang=\"ts\">\n import type { Snippet } from \"svelte\";\n\n let { children }: { children: Snippet } = $props();\n<\\/script>\n\n{@render children()}\n`,m=`<script lang=\"ts\">\n import { type QueryClient, QueryClientProvider } from \"@tanstack/svelte-query\";\n import type { Snippet } from \"svelte\";\n\n import { getQueryClient } from \"../query\";\n\n let { client, children }: {\n client?: QueryClient;\n children: Snippet;\n } = $props();\n\n const queryClient = $derived(client ?? getQueryClient());\n<\\/script>\n\n<QueryClientProvider client={queryClient}>\n {@render children()}\n</QueryClientProvider>\n`,h=`import { hydrate as hydrateOrig, mount as mountOrig } from \"svelte\";\nimport type { RouterFactoryReturn } from \"@kosmojs/core\";\nimport { clientRenderFactory } from \"@kosmojs/core/generators\";\n\nimport { createRoute, type RouteComponent } from \"../svelte\";\n\n{{#each pageRoutes}}\nconst {{id}} = () => import(\"{{ createImport 'pages' file }}\");\n{{/each}}\n{{#each layouts}}\nconst {{id}} = () => import(\"{{ createImport 'pages' file }}\");\n{{/each}}\n\nexport const createRoutes = () => {\n return [\n {{#each pageRoutes}}\n createRoute(\"{{name}}\", \"{{pathPattern}}\", {{id}}, [\n {{#each layouts}}[\"{{name}}\", {{id}}], {{/each}}\n ]),\n {{/each}}\n ];\n};\n\nexport const hydrate = async (\n resolver: () => RouterFactoryReturn<Promise<RouteComponent>>,\n root: HTMLElement,\n) => {\n const { component } = await resolver();\n hydrateOrig(component.Component, { target: root, props: component.props });\n window.__KOSMO_HYDRATION_DATA__ = undefined;\n}\n\nexport const mount = async (\n resolver: () => RouterFactoryReturn<Promise<RouteComponent>>,\n root: HTMLElement,\n) => {\n const { component } = await resolver();\n mountOrig(component.Component, { target: root, props: component.props });\n}\n\nexport default clientRenderFactory();\n`,g=`import { render as renderOrig } from \"svelte/server\";\n\nimport type {\n RenderToStringWrapper,\n RouterFactoryReturn,\n SSRRenderWrapper,\n} from \"@kosmojs/core\";\n\nimport { serverRenderFactory } from \"@kosmojs/core/generators\";\n\nimport { createRoute, type Route, type RouteComponent } from \"../svelte\";\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}}[\"{{name}}\", async () => {{id}}], {{/each}}\n ]),\n {{/each}}\n ];\n};\n\nconst createHydrationScript = (loaderData: Route[\"loaderData\"]) => {\n return loaderData\n ? \\`<script>\n window.__KOSMO_HYDRATION_DATA__ = JSON.parse(\n \\${JSON.stringify(JSON.stringify(loaderData))}\n );\n <\\/script>\\`\n : undefined;\n};\n\nexport const renderWrapper: SSRRenderWrapper = (_context, render) => render();\n\nexport const renderToString: RenderToStringWrapper<\n () => RouterFactoryReturn<Promise<RouteComponent>, { route: Route }>\n> = async (resolver, { headerTags = [] } = {}) => {\n const { component, route } = await resolver();\n\n // svelte/server render() returns \\`head\\` - everything the page and its\n // layouts put in <svelte:head> - plus \\`body\\`. That covers what MDX builds\n // from frontmatter, so there is no generateHeaderTags() counterpart here.\n const { head, body } = await renderOrig(component.Component, {\n props: component.props,\n });\n\n const script = createHydrationScript(route.loaderData);\n\n return {\n head: [...headerTags, head, ...(script ? [script] : [])]\n .filter(Boolean)\n .join(\"\\\\n\"),\n html: body,\n }\n}\n\n// svelte/server exposes only render() - no web-stream renderer -\n// so this folder is string-only SSR.\nexport default serverRenderFactory<false>();\n`,_=`declare module \"*.svelte\" {\n import type { Component } from \"svelte\";\n const component: Component;\n export default component;\n}\n\ndeclare module \"virtual:kosmo/tsq-client\" {\n import type { QueryClient, QueryClientConfig } from \"@tanstack/svelte-query\";\n export const createQueryClient: (options?: QueryClientConfig) => QueryClient;\n export const getQueryClient: () => QueryClient;\n}\n`,v=`<script lang=\"ts\">\n /**\n * Folds [app, ...layouts] around the page component.\n *\n * MDX does this with \\`reduce((children, layout) => h(layout, { children }))\\`.\n * Svelte has no vnode children to reduce over, so the chain is walked with a\n * recursive snippet and the page is rendered at the leaf.\n *\n * Layouts receive nothing but their \\`children\\` snippet - same as MDX, where\n * a layout gets only \\`props.children\\`. Route data is read from context via\n * useRoute()/useParams()/useLoaderData().\n * */\n import { setRouteContext, type LayoutsProps } from \"./svelte\";\n\n let { app, layouts, page, route }: LayoutsProps = $props();\n\n setRouteContext(() => route);\n\n const chain = $derived([app, ...layouts.toReversed()]);\n<\\/script>\n\n{#snippet layer(index: number)}\n {#if index < chain.length}\n {@const Layout = chain[index]}\n <Layout>\n {@render layer(index + 1)}\n </Layout>\n {:else}\n {@const Page = page}\n <Page />\n {/if}\n{/snippet}\n\n{@render layer(0)}\n`,y=`<script lang=\"ts\">\n import styles from \"./styles.module.css\";\n\n let { headline }: { headline?: string } = $props();\n<\\/script>\n\n<div class={styles.container}>\n <div class={styles.card}>\n <h2 class={styles.title}>{headline || \"404: Not Found\"}</h2>\n <br />\n\n <div class={styles.stepsBox}>\n <h2 class={styles.stepsTitle}>Something went wrong...</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`,b=`<script lang=\"ts\">\n import styles from \"./styles.module.css\";\n\n let {\n message,\n routeName,\n pathMap,\n }: {\n message: string;\n routeName: string;\n pathMap: { page: string; pages: string; api: string };\n } = $props();\n<\\/script>\n\n<div data-page-route={routeName} class={styles.container}>\n <div class={styles.card}>\n <h2 class={styles.subtitle}>{message}</h2>\n <br />\n\n <div class={styles.stepsBox}>\n <ul class={styles.stepsList}>\n <li>Edit this page at <code>{pathMap.page}</code></li>\n <li>\n Create new pages by adding folders in <code>{pathMap.pages}/</code>\n </li>\n <li>Add API endpoints in <code>{pathMap.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 KosmoJS Documentation ➜\n </a>\n </div>\n </div>\n</div>\n`,x=`* {\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`,S=`<script lang=\"ts\">\n import styles from \"./styles.module.css\";\n<\\/script>\n\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 Component-first development with Svelte and Vite\n </p>\n </div>\n\n <div class={styles.featuresBox}>\n <h2 class={styles.featuresTitle}>Powered by Svelte and ready to ship</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 Svelte 5 runes and snippets\n </li>\n <li class={styles.featureItem}>\n <span class={styles.featureBullet}>🔹</span>\n Nested layouts, loaders and <svelte:head>\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>Edit this page at <code>pages/index/index.svelte</code></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`,C=`export type ParamsMap = {\n{{#each pageRoutes}}\"{{name}}\": {{serializeParamsLiteral .}};\n{{/each}}\n};\n\nexport const paramNames = {\n{{#each pageRoutes}}\"{{name}}\": [ {{#each params.schema}}\"{{name}}\", {{/each}}],\n{{/each}}\n} as const;\n`,w=`export * from \"virtual:kosmo/tsq-client\";\n`,T=`import { QueryClient } from \"@tanstack/svelte-query\";\n\nlet client = undefined;\n\nexport const createQueryClient = (options) => {\n client = new QueryClient(options);\n return client;\n};\n\nexport const getQueryClient = () => {\n if (!client) {\n client = new QueryClient();\n }\n return client;\n};\n`,E=`import { QueryClient } from \"@tanstack/svelte-query\";\n\nimport { store } from \"{{ createImport 'libCore' 'ssr' }}\";\n\nexport const createQueryClient = (options) => {\n const client = new QueryClient(options);\n const ctx = store?.getStore();\n if (ctx) {\n ctx.tsqClient = client;\n }\n return client;\n};\n\nexport const getQueryClient = () => {\n const ctx = store?.getStore();\n if (!ctx) {\n throw new Error(\"getQueryClient(): called outside an SSR request scope\");\n }\n if (!ctx.tsqClient) {\n ctx.tsqClient = new QueryClient();\n }\n return ctx.tsqClient;\n};\n`,D=`import type { RouterFactoryReturn } from \"@kosmojs/core\";\nimport { createRouterFactory } from \"@kosmojs/core/generators\";\n\nimport Layouts from \"./Layouts.svelte\";\nimport {\n type AnyComponent,\n createRouter,\n type RawRoute,\n type Route,\n type RouteComponent,\n} from \"./svelte\";\n\nexport const createRouters = (\n routes: Array<RawRoute>,\n { app }: { app: AnyComponent },\n): {\n clientRouter: () => RouterFactoryReturn<Promise<RouteComponent>>;\n serverRouter: (\n url: URL,\n ) => RouterFactoryReturn<Promise<RouteComponent>, { route: Route }>;\n} => {\n // <Layouts> is injected here rather than imported by ./svelte, so the core\n // router stays a plain module and there is no .ts <-> .svelte import cycle.\n const router = createRouter(routes, app, Layouts);\n\n return {\n clientRouter() {\n return router.resolve();\n },\n serverRouter(url) {\n return router.resolve(url);\n },\n };\n};\n\nexport default createRouterFactory<\n RawRoute,\n Promise<RouteComponent>,\n { server: { route: Route } }\n>();\n`,O=`import { match, pathToRegexp } from \"path-to-regexp\";\nimport { type Component, createContext } from \"svelte\";\n\nimport { parseSearchParams } from \"@kosmojs/core\";\n\nimport { paramNames } from \"{{ createImport 'lib' 'params' }}\";\nimport { base } from \"{{ createImport 'libCore' }}\";\n\n/**\n * The loose component type for anything resolved dynamically from a \\`.svelte\\`\n * module's default export.\n *\n * It must be \\`any\\`-propped, not \\`never\\`-propped: a \\`Component<never>\\` is a\n * function accepting \\`never\\`, so - by parameter contravariance - no real\n * component is assignable to it and \\`<Layout />\\` fails to typecheck.\n * */\nexport type AnyComponent = Component<any, any, any>;\n\nexport type RawRoute = {\n name: string;\n regexp: RegExp;\n extractParams: (path: string) => Route[\"params\"];\n loader: () => Promise<RouteModule>;\n layouts: Array<[name: string, source: () => Promise<LayoutModule>]>;\n};\n\ntype Loader = (\n route: Pick<Route, \"name\" | \"params\" | \"paramsEntries\" | \"searchParams\">,\n) => Promise<unknown> | undefined;\n\n/**\n * \\`.svelte\\` modules export their component as \\`default\\`; an optional data\n * \\`loader\\` comes from a \\`<script module>\\` block.\n * */\ntype LayoutModule = {\n default: AnyComponent;\n loader?: Loader;\n};\n\ntype RouteModule = {\n default: AnyComponent;\n loader?: Loader;\n};\n\n/**\n * Props of <Layouts>, the fixed root component every route renders through.\n * */\nexport type LayoutsProps = {\n app: AnyComponent;\n layouts: Array<AnyComponent>;\n page: AnyComponent;\n route: Route;\n};\n\n/**\n * Preact can prebuild the whole tree and hand back a VNode; Svelte cannot -\n * components are constructors, not values. So the resolved \"component\" is a\n * (constructor, props) pair and the entry templates feed it to\n * mount()/hydrate()/render().\n * */\nexport type RouteComponent = {\n Component: Component<LayoutsProps>;\n props: LayoutsProps;\n};\n\nexport type Route = {\n name: string;\n params: Record<string, string | Array<string>>;\n paramsEntries: [keys: Array<string>, values: Array<unknown>];\n searchParams: Record<string, unknown>;\n loaderData: Record<string, unknown>;\n};\n\n/**\n * Route context, the Svelte counterpart to MDX's Preact RouterContext.\n *\n * Holds a getter rather than the value: <Layouts> receives \\`route\\` as a prop,\n * and reading a prop into a non-reactive position at init is exactly what\n * Svelte's \\`state_referenced_locally\\` check flags. The getter also keeps reads\n * current if the wrapper is ever reused instead of remounted.\n *\n * \\`createContext\\` returns a typed [get, set] pair and \\`get\\` throws when no\n * parent called \\`set\\`, so a page rendered outside <Layouts> fails loudly.\n * */\nexport const [getRouteContext, setRouteContext] = createContext<() => Route>();\n\nexport const createRouter = (\n routes: Array<RawRoute>,\n app: AnyComponent,\n Layouts: Component<LayoutsProps>,\n) => {\n const catchallRoute = createRoute(\n \"NotFound\",\n \"\",\n () => import(\"{{ createImport 'pages' '404.svelte' }}\"),\n [],\n );\n\n const runLoader = async (key: string, fetcher: () => ReturnType<Loader>) => {\n if (typeof window === \"undefined\" || !window.__KOSMO_HYDRATION_DATA__) {\n return fetcher();\n }\n return key in window.__KOSMO_HYDRATION_DATA__\n ? window.__KOSMO_HYDRATION_DATA__[key]\n : fetcher();\n };\n\n return {\n async resolve(url: URL = new URL(window.location.href)) {\n const searchParams = parseSearchParams(url);\n\n // The routes array is generated pre-sorted by specificity\n // (static beats required beats optional beats splat, token by token),\n // the same ordering the SSR server registers routes in -\n // so the first pattern that matches IS the most specific one, and CSR resolution stays consistent with SSR.\n // A route with optional parameters matches a range of segment counts,\n // which is why no segment-count heuristic can disambiguate here.\n // Lightweight \\`RegExp.test()\\` on linear scan - no capture allocation.\n const matchedRoute =\n routes.find(({ regexp }) => {\n return regexp.test(url.pathname);\n }) || catchallRoute;\n\n const params = matchedRoute\n ? matchedRoute.extractParams(url.pathname)\n : {};\n\n const { name } = matchedRoute;\n\n const routeModule = await matchedRoute.loader();\n\n const paramsEntries = (\n Array.isArray(paramNames[name as never])\n ? [\n [...paramNames[name as never]],\n [...paramNames[name as never]].map((key) => params[key]),\n ]\n : [\n // fallback\n Object.keys(params),\n Object.values(params),\n ]\n ) as never;\n\n const loaderData: Record<string, unknown> = {};\n\n loaderData[name] = await runLoader(name, () => {\n return routeModule.loader\n ? routeModule.loader({ name, params, paramsEntries, searchParams })\n : undefined; // should not survive serialization if no loader defined\n });\n\n const layouts: Array<AnyComponent> = [];\n\n for (const [layoutName, source] of matchedRoute.layouts || []) {\n const layoutModule = await source();\n layouts.push(layoutModule.default);\n const key = \\`\\${layoutName}/layout\\`;\n loaderData[key] = await runLoader(key, () => {\n return layoutModule.loader\n ? layoutModule.loader({\n name: layoutName,\n params,\n paramsEntries,\n searchParams,\n })\n : undefined; // should not survive serialization if no loader defined\n });\n }\n\n const route: Route = {\n name,\n params,\n paramsEntries,\n searchParams,\n loaderData,\n };\n\n return {\n // <Layouts> folds [app, ...layouts] around the page - Svelte has no\n // vnode children to reduce over the way \\`h(layout, { children })\\` does.\n component: {\n Component: Layouts,\n props: { app, layouts, page: routeModule.default, route },\n } satisfies RouteComponent,\n route,\n };\n },\n };\n};\n\nexport const createRoute = (\n name: string,\n pathPattern: string,\n loader: RawRoute[\"loader\"],\n layouts: RawRoute[\"layouts\"],\n): RawRoute => {\n // strip trailing slash (keeping a sole \"/\") so the base-joined index route\n // matches both with and without it - \"/docs/\" as a pattern rejects \"/docs\"\n const path = \\`\\${base}/\\${pathPattern}\\`\n .replace(/\\\\/+/g, \"/\")\n .replace(/(.+)\\\\/$/, \"$1\");\n\n const { regexp } = pathToRegexp(path, { sensitive: true });\n const matcher = match<Route[\"params\"]>(path);\n\n return {\n name,\n regexp,\n extractParams: (path) => {\n const match = matcher(path);\n return match ? match.params : {};\n },\n loader,\n layouts,\n };\n};\n`,k=`import { getRouteContext } from \"./svelte\";\n\nimport type { ParamsMap, paramNames } from \"{{ createImport 'lib' 'params' }}\";\n\n/**\n * These read Svelte context, so - like every getContext() call - they are only\n * valid during component initialisation: at the top level of a \\`<script>\\`,\n * never inside an event handler or a callback that runs later.\n * */\nexport function useRoute() {\n return getRouteContext()();\n}\n\nexport function useParams<T extends keyof ParamsMap>(): ParamsMap[T] {\n return useRoute().params as ParamsMap[T];\n}\n\ntype SameLengthTuple<T extends readonly unknown[], U> = { [K in keyof T]: U };\n\nexport function useParamsEntries<T extends keyof ParamsMap>(): [\n (typeof paramNames)[T],\n SameLengthTuple<(typeof paramNames)[T], unknown>,\n] {\n return useRoute().paramsEntries as never;\n}\n\nexport function useSearchParams() {\n return useRoute().searchParams;\n}\n\n/**\n * Reads loader data for the current page or one of its layouts.\n * Without a key, returns the page's own data.\n * For a layout, pass its path-qualified name (e.g. \"dashboard/layout\") -\n * context can't tell which layout it runs in.\n * */\nexport const useLoaderData = <T>(key?: string): T | undefined => {\n const route = useRoute();\n return route.loaderData?.[key || route.name] as T;\n};\n`,A=`<script lang=\"ts\">\n import { AppProvider } from \"{{ createImport 'lib' 'app' }}\";\n import type { Snippet } from \"svelte\";\n\n let { children }: { children: Snippet } = $props();\n<\\/script>\n\n<AppProvider>\n {@render children()}\n</AppProvider>\n`,j=`<script lang=\"ts\">\n import type { Snippet } from \"svelte\";\n import type { HTMLAnchorAttributes } from \"svelte/elements\";\n\n import { pageRouteMap, type LinkProps } from \"{{ createImport 'libCore' }}\";\n\n let {\n to,\n query,\n children,\n ...rest\n }: Omit<HTMLAnchorAttributes, \"href\"> & {\n to: LinkProps;\n query?: Record<string | number, unknown>;\n children?: Snippet;\n } = $props();\n\n const href = $derived.by(() => {\n const [key, ...params] = to;\n return pageRouteMap[key]?.path(params as never, query);\n });\n<\\/script>\n\n<a {href} {...rest}>{@render children?.()}</a>\n`,M=`import renderFactory, {\n createRoutes,\n hydrate,\n mount,\n} from \"{{ createImport 'libEntry' 'client' }}\";\n\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 hydrate() {\n return hydrate(() => clientRouter(), root);\n },\n mount() {\n return mount(() => clientRouter(), root);\n },\n };\n });\n} else {\n console.error(\"❌ Root element not found!\");\n}\n`,N=`import renderFactory, {\n createRoutes,\n renderToString,\n // no renderToStream on Svelte folders\n} from \"{{ createImport 'libEntry' 'server' }}\";\n\nimport routerFactory from \"../router\";\n\nconst routes = createRoutes();\nconst { serverRouter } = routerFactory(routes);\n\nexport default renderFactory(() => {\n return {\n renderToString(url, { assets }) {\n return renderToString(\n () => serverRouter(url),\n { headerTags: assets.map(({ tag }) => tag) },\n );\n },\n };\n});\n`,P=`<script lang=\"ts\">\n import PageSample from \"{{ createImport 'lib' 'pageSamples/404.svelte' }}\";\n<\\/script>\n\n<PageSample />\n`,F=`<script lang=\"ts\">\n import type { Snippet } from \"svelte\";\n\n let { children }: { children: Snippet } = $props();\n<\\/script>\n\n{@render children()}\n`,I=`<script lang=\"ts\">\n import PageSample from \"{{ createImport 'lib' 'pageSamples/page.svelte' }}\";\n\n const pathMap = {\n page: \"{{ createImport 'pages' route.file }}\",\n pages: \"{{ createImport 'pages' }}\",\n api: \"{{ createImport 'api' }}\",\n };\n<\\/script>\n\n<svelte:head>\n <title>{{title}}</title>\n</svelte:head>\n\n<PageSample\n message=\"{{message}}\"\n routeName={\"{{route.name}}\"}\n {pathMap}\n/>\n`,L=`<script lang=\"ts\">\n import WelcomePage from \"{{ createImport 'lib' 'pageSamples/welcome.svelte' }}\";\n<\\/script>\n\n<svelte:head>\n <title>Welcome to KosmoJS</title>\n <meta\n name=\"description\"\n content=\"Component-first development with Svelte and Vite\"\n />\n</svelte:head>\n\n<WelcomePage />\n`,R=`import routerFactory, { createRouters } from \"{{ createImport 'lib' 'router' }}\";\n\nimport app from \"./app.svelte\";\n\nexport default routerFactory((routes) => {\n const { clientRouter, serverRouter } = createRouters(routes, { app });\n return {\n clientRouter() {\n return clientRouter()\n },\n serverRouter(url) {\n return serverRouter(url)\n },\n };\n});\n`,z=n((t,n)=>{let{createPath:d,createImportHelpers:z}=r(t),{render:B,renderToFile:V}=i({helpers:{...z({origin:`lib`}),...u()}}),{renderToFile:H}=i({helpers:z({origin:`src`})}),U=e=>!e?.trim().length,W=c(n?.templates,I),G=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await H(d.pages(n.file),n.name===`index`?L:W(n.name,n),{route:n,title:n.name.replace(/\\{([^}]+)\\}/g,`$1`),message:f()},{overwrite:U}):t===`pageLayout`&&await H(d.pages(n.file),F,{route:n},{overwrite:U})},K=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageLayout`?[t]:[]),n=e.flatMap(({kind:e,entry:n})=>{if(e===`pageRoute`){let{name:e,file:r}=n;return[{...n,layouts:t.flatMap(t=>t.name===e||r.startsWith(`${t.name}/`)?[t]:[]).sort(a)}]}return[]}).sort(o);for(let[e,r]of[[`client.ts`,h],[`server.ts`,g]])await V(d.libEntry(e),r,{pageRoutes:n,layouts:t});for(let[e,t]of[[`params.ts`,C],[`router.ts`,D]])await V(d.lib(e),t,{pageRoutes:n})};return{config(){let{templates:e,...t}={...n};return{plugins:s(t)}},async start(){for(let[e,t]of[[`env.d.ts`,_],[`svelte.ts`,O],[`Layouts.svelte`,v],[`use.ts`,k],[`pageSamples/styles.module.css`,x],[`pageSamples/welcome.svelte`,S],[`pageSamples/page.svelte`,b],[`pageSamples/404.svelte`,y],...n?.tanstack?.query?[[`app/app.svelte`,p],[`app/app-tsq.svelte`,m],[`app/index.ts`,`export { default as AppProvider } from \"./app-tsq.svelte\";`],[`query.ts`,w]]:[[`app/app.svelte`,p],[`app/app-tsq.svelte`,`/** tanstack query disabled */`],[`app/index.ts`,`export { default as AppProvider } from \"./app.svelte\";`],[`query.ts`,`/** tanstack query disabled */`]]])await V(d.lib(e),t,{});for(let[e,t]of[[`pages/404.svelte`,P],[`components/Link.svelte`,j],[`app.svelte`,A],[`router.ts`,R]])await H(d.src(e),t,{entryDir:l.entryDir},{overwrite:U});for(let[e,t]of[[`client.ts`,M],[`server.ts`,N]])await H(d.entry(e),t,{},{overwrite:U})},async watch(t,n){await G(t.filter(e(n,[`create`]))),await K(t)},async build(e){await G(e),await K(e)},virtualModules(){return n?.tanstack?.query?[{specifier:`virtual:kosmo/tsq-client`,csr:B(T,{}),ssr:B(E,{})}]:[]}}}),B=t({meta:{name:`Svelte`,slot:`frontend`},dependencies(e){return{svelte:d.devDependencies.svelte,...e?.tanstack?.query?{\"@tanstack/svelte-query\":d.devDependencies[`@tanstack/svelte-query`]}:{}}},factory:z});export{B as default};\n//# sourceMappingURL=index.js.map","import{createWatchedApiRouteEntriesFilter as e,defineGenerator as t,defineGeneratorFactory as n,pathResolver as r,renderFactory as i}from\"@kosmojs/lib\";import{RequestValidationTargets as a}from\"@kosmojs/core\";var o={type:`module`,private:!0,name:`@kosmojs/typebox-generator`,version:`0.3.0`,cacheVersion:`1`,author:`Slee Woo`,license:`MIT`,files:[`pkg/*`],exports:{\".\":{types:`./pkg/index.d.ts`,default:`./pkg/index.js`}},scripts:{build:`wsbuild src/index.ts`,test:`vitest --root ../.. --project generators/typebox-generator`},dependencies:{\"@kosmojs/core\":`workspace:^`,\"@kosmojs/lib\":`workspace:^`,crc:`^4.3.2`,semver:`^7.8.5`},devDependencies:{\"@kosmojs/core-generator\":`workspace:^`,\"@kosmojs/koa-generator\":`workspace:^`,typebox:`^1.3.18`}},s=`import Type from \"typebox\";\n\n/**\n * Custom types for JavaScript constructs that have no JSON Schema\n * representation (Date, File, Blob, Buffer, ArrayBuffer).\n *\n * Each entry is a factory so every use site gets a fresh schema instance,\n * matching the previous behaviour of \\`new TDate()\\` etc.\n * */\n\nconst customType = <T>(\n check: (value: unknown) => value is T,\n message: string,\n) => Type.Refine(Type.Unsafe<T>({}), check, () => message);\n\nexport const TDate = () => {\n return customType(\n (value): value is Date => value instanceof Date,\n \"must be Date\",\n );\n};\n\nconst isFormidableFile = (value: unknown) => {\n return value\n ? typeof value === \"object\"\n ? [\n //\n \"filepath\",\n \"originalFilename\",\n \"newFilename\",\n \"mimetype\",\n ].every((e) => e in value)\n : false\n : false;\n};\n\nexport const TFile = () => {\n return customType(\n (value): value is File => value instanceof File || isFormidableFile(value),\n \"must be File\",\n );\n};\n\nexport const TBlob = () => {\n return customType(\n (value): value is Blob => value instanceof Blob,\n \"must be Blob\",\n );\n};\n\nexport const TBuffer = () => {\n return customType(\n (value): value is Buffer =>\n typeof Buffer !== \"undefined\" && Buffer.isBuffer(value),\n \"must be Buffer\",\n );\n};\n\nexport const TArrayBuffer = () => {\n return customType(\n (value): value is ArrayBuffer => value instanceof ArrayBuffer,\n \"must be ArrayBuffer\",\n );\n};\n\nexport default {\n Date: TDate(),\n File: TFile(),\n Blob: TBlob(),\n Buffer: TBuffer(),\n ArrayBuffer: TArrayBuffer(),\n};\n`,c=`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 // 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 * A failed union of literals arrives as one \\`anyOf\\` error plus one \\`const\\` error per branch,\n * all at the same instancePath.\n * Collapse them into a single synthetic \\`enum\\` error so the message reflects the whole union.\n * */\n function collapseLiteralUnion(\n fieldErrors: TValidationError[],\n ): TValidationError[] {\n const anyOfError = fieldErrors.find((e) => e.keyword === \"anyOf\");\n if (!anyOfError) {\n return fieldErrors;\n }\n const branchConsts = fieldErrors.filter((e) => {\n return e.keyword === \"const\"\n ? e.schemaPath.startsWith(\\`\\${anyOfError.schemaPath}/anyOf/\\`)\n : false;\n });\n // bail unless EVERY sibling is a const branch of this anyOf -\n // mixed unions (literal | object) keep their current behavior\n if (\n !branchConsts.length ||\n fieldErrors.length !== branchConsts.length + 1\n ) {\n return fieldErrors;\n }\n return [\n {\n ...anyOfError,\n keyword: \"enum\",\n params: {\n allowedValues: branchConsts.map(\n (e) => (e.params as never)[\"allowedValue\"],\n ),\n },\n },\n ];\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(collapseLiteralUnion(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`,l=`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`,u=`import { Settings } from \"typebox/system\";\n\nSettings.Set({{settings}});\n\nexport { default as customTypes } from \"{{customTypesImport}}\";\n\nexport const validationMessages = {{validationMessages}};\n`,d=`import type { ValidationSchemas } from \"@kosmojs/core\";\n\nimport { validationSchemaFactory } from \"{{ createImport 'lib' '@typebox' }}\";\n\nconst schemas = {\n{{#each resolvedTypes}} {{name}}: \\`{{typeboxSchema}}\\`,\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`,f={exactOptionalPropertyTypes:!0},p=n((t,n)=>{let{createPath:o,createImport:p,createImportHelpers:m}=r(t),{renderToFile:h}=i({helpers:{...m({origin:`lib`})}}),{validationMessages:g={},customTypesImport:_=p.lib([`@typebox/custom-types`],{origin:`lib`}),settings:v}={...n},y=async e=>{for(let{kind:t,entry:n}of e){if(t!==`apiRoute`)continue;let e=[n.params,...n.validationDefinitions.flatMap(e=>e.target===`response`?e.variants:[e.schema])].flatMap(({resolvedType:e})=>e?[e]:[]),r=[...new Set(n.validationDefinitions.flatMap(({target:e})=>Object.keys(a).includes(e)?[e]:[]))].map(e=>({target:e,methods:n.methods.flatMap(t=>{let r=n.validationDefinitions.find(n=>n.method===t&&n.target===e);return r?[{route:n.name,method:t,target:e,schema:r.schema,...r.runtimeValidation===void 0?{}:{runtimeValidation:JSON.stringify(r.runtimeValidation)},...r.customErrors===void 0?{}:{customErrors:JSON.stringify(r.customErrors)}}]:[]})})),i=n.methods.flatMap(e=>{let t=n.validationDefinitions.find(t=>t.method===e&&t.target===`response`);return t?[{method:e,variants:t.variants.map(e=>({route:n.name,target:`response`,...e,...t.runtimeValidation===void 0?{}:{runtimeValidation:JSON.stringify(t.runtimeValidation)},...t.customErrors===void 0?{}:{customErrors:JSON.stringify(t.customErrors)}}))}]:[]});await h(o.libApi(n.name,`schemas.ts`),d,{route:n,resolvedTypes:e,requestSchemas:r,responseSchemas:i})}};return{async start(){for(let[e,t]of[[`custom-types.ts`,s],[`error-handler.ts`,c],[`index.ts`,l],[`setup.ts`,u]])await h(o.lib(`@typebox`,e),t,{validationMessages:JSON.stringify(g),customTypesImport:_,settings:JSON.stringify({...f,...v})})},async watch(t,n){await y(t.filter(e(n,[`create`,`update`])))},async build(e){await y(e)}}}),m={PROPERTY:`PROPERTY`,PROPERTIES:`PROPERTIES`,ALLOWED_VALUES:`ALLOWED_VALUES`,FOUND_N_DUPLICATES:`FOUND_N_DUPLICATES`,VALIDATION_PASSED:`VALIDATION_PASSED`,VALIDATION_FAILED_PREFIX:`VALIDATION_FAILED_PREFIX`,ERROR_SUMMARY:`ERROR_SUMMARY`,PLURAL_SUFFIX:`PLURAL_SUFFIX`,FIRST:`FIRST`,SECOND:`SECOND`,THIRD:`THIRD`,FOURTH:`FOURTH`,FIFTH:`FIFTH`,TYPE_INVALID:`TYPE_INVALID`,STRING_MIN_LENGTH:`STRING_MIN_LENGTH`,STRING_MAX_LENGTH:`STRING_MAX_LENGTH`,STRING_PATTERN:`STRING_PATTERN`,STRING_FORMAT:`STRING_FORMAT`,STRING_FORMAT_EMAIL:`STRING_FORMAT_EMAIL`,STRING_FORMAT_DATE:`STRING_FORMAT_DATE`,STRING_FORMAT_DATETIME:`STRING_FORMAT_DATETIME`,STRING_FORMAT_TIME:`STRING_FORMAT_TIME`,STRING_FORMAT_URI:`STRING_FORMAT_URI`,STRING_FORMAT_URL:`STRING_FORMAT_URL`,STRING_FORMAT_UUID:`STRING_FORMAT_UUID`,STRING_FORMAT_IPV4:`STRING_FORMAT_IPV4`,STRING_FORMAT_IPV6:`STRING_FORMAT_IPV6`,STRING_FORMAT_HOSTNAME:`STRING_FORMAT_HOSTNAME`,STRING_FORMAT_JSON_POINTER:`STRING_FORMAT_JSON_POINTER`,STRING_FORMAT_REGEX:`STRING_FORMAT_REGEX`,NUMBER_MINIMUM:`NUMBER_MINIMUM`,NUMBER_MAXIMUM:`NUMBER_MAXIMUM`,NUMBER_EXCLUSIVE_MINIMUM:`NUMBER_EXCLUSIVE_MINIMUM`,NUMBER_EXCLUSIVE_MAXIMUM:`NUMBER_EXCLUSIVE_MAXIMUM`,NUMBER_MULTIPLE_OF:`NUMBER_MULTIPLE_OF`,ARRAY_MIN_ITEMS:`ARRAY_MIN_ITEMS`,ARRAY_MAX_ITEMS:`ARRAY_MAX_ITEMS`,ARRAY_UNIQUE_ITEMS:`ARRAY_UNIQUE_ITEMS`,ARRAY_CONTAINS:`ARRAY_CONTAINS`,ARRAY_MIN_CONTAINS:`ARRAY_MIN_CONTAINS`,ARRAY_MAX_CONTAINS:`ARRAY_MAX_CONTAINS`,ARRAY_PREFIX_ITEMS:`ARRAY_PREFIX_ITEMS`,ARRAY_ITEMS:`ARRAY_ITEMS`,ARRAY_UNEVALUATED_ITEMS:`ARRAY_UNEVALUATED_ITEMS`,TUPLE_MIN_ITEMS:`TUPLE_MIN_ITEMS`,TUPLE_MAX_ITEMS:`TUPLE_MAX_ITEMS`,OBJECT_REQUIRED:`OBJECT_REQUIRED`,OBJECT_ADDITIONAL_PROPERTIES:`OBJECT_ADDITIONAL_PROPERTIES`,OBJECT_MIN_PROPERTIES:`OBJECT_MIN_PROPERTIES`,OBJECT_MAX_PROPERTIES:`OBJECT_MAX_PROPERTIES`,OBJECT_PROPERTY_NAMES:`OBJECT_PROPERTY_NAMES`,OBJECT_DEPENDENCIES:`OBJECT_DEPENDENCIES`,OBJECT_UNEVALUATED_PROPERTIES:`OBJECT_UNEVALUATED_PROPERTIES`,ENUM_MISMATCH:`ENUM_MISMATCH`,CONST_MISMATCH:`CONST_MISMATCH`,CONDITIONAL_IF:`CONDITIONAL_IF`,CONDITIONAL_THEN:`CONDITIONAL_THEN`,CONDITIONAL_ELSE:`CONDITIONAL_ELSE`,COMPOSITION_ONE_OF:`COMPOSITION_ONE_OF`,COMPOSITION_ANY_OF:`COMPOSITION_ANY_OF`,COMPOSITION_ALL_OF:`COMPOSITION_ALL_OF`,COMPOSITION_NOT:`COMPOSITION_NOT`,CONTENT_DISCRIMINATOR:`CONTENT_DISCRIMINATOR`,CONTENT_ENCODING:`CONTENT_ENCODING`,CONTENT_MEDIA_TYPE:`CONTENT_MEDIA_TYPE`,CUSTOM_RANGE:`CUSTOM_RANGE`,CUSTOM_EXCLUSIVE_RANGE:`CUSTOM_EXCLUSIVE_RANGE`,CUSTOM_REGEXP:`CUSTOM_REGEXP`,CUSTOM_DYNAMIC_DEFAULTS:`CUSTOM_DYNAMIC_DEFAULTS`,CUSTOM_SELECT:`CUSTOM_SELECT`,CUSTOM_TRANSFORM:`CUSTOM_TRANSFORM`,CUSTOM_UNIQUE_ITEM_PROPERTIES:`CUSTOM_UNIQUE_ITEM_PROPERTIES`,UNKNOWN:`UNKNOWN`},h={[m.PROPERTY]:`property`,[m.PROPERTIES]:`properties`,[m.ALLOWED_VALUES]:`the allowed values`,[m.FOUND_N_DUPLICATES]:` (found %d duplicate%s)`,[m.VALIDATION_PASSED]:`Validation Passed`,[m.VALIDATION_FAILED_PREFIX]:``,[m.ERROR_SUMMARY]:`%d validation error%s found across %d field%s`,[m.PLURAL_SUFFIX]:`s`,[m.FIRST]:`first`,[m.SECOND]:`second`,[m.THIRD]:`third`,[m.FOURTH]:`fourth`,[m.FIFTH]:`fifth`,[m.TYPE_INVALID]:`must be %s`,[m.STRING_MIN_LENGTH]:`must be at least %d character%s long`,[m.STRING_MAX_LENGTH]:`must not exceed %d character%s`,[m.STRING_PATTERN]:`must match the required pattern`,[m.STRING_FORMAT]:`must match format \"%s\"`,[m.STRING_FORMAT_EMAIL]:`must be a valid email address`,[m.STRING_FORMAT_DATE]:`must be a valid date`,[m.STRING_FORMAT_DATETIME]:`must be a valid date-time`,[m.STRING_FORMAT_TIME]:`must be a valid time`,[m.STRING_FORMAT_URI]:`must be a valid URI`,[m.STRING_FORMAT_URL]:`must be a valid URL`,[m.STRING_FORMAT_UUID]:`must be a valid UUID`,[m.STRING_FORMAT_IPV4]:`must be a valid IPv4 address`,[m.STRING_FORMAT_IPV6]:`must be a valid IPv6 address`,[m.STRING_FORMAT_HOSTNAME]:`must be a valid hostname`,[m.STRING_FORMAT_JSON_POINTER]:`must be a valid JSON pointer`,[m.STRING_FORMAT_REGEX]:`must be a valid regular expression`,[m.NUMBER_MINIMUM]:`must be %s %s`,[m.NUMBER_MAXIMUM]:`must be %s %s`,[m.NUMBER_EXCLUSIVE_MINIMUM]:`must be %s %s`,[m.NUMBER_EXCLUSIVE_MAXIMUM]:`must be %s %s`,[m.NUMBER_MULTIPLE_OF]:`must be a multiple of %s`,[m.ARRAY_MIN_ITEMS]:`must have at least %d item%s`,[m.ARRAY_MAX_ITEMS]:`must not have more than %d item%s`,[m.ARRAY_UNIQUE_ITEMS]:`must not have duplicate items%s`,[m.ARRAY_CONTAINS]:`must contain at least %d valid item%s`,[m.ARRAY_MIN_CONTAINS]:`must contain at least %d item%s matching the criteria`,[m.ARRAY_MAX_CONTAINS]:`must contain no more than %d item%s matching the criteria`,[m.ARRAY_PREFIX_ITEMS]:`tuple structure is invalid`,[m.ARRAY_ITEMS]:`array items are invalid`,[m.ARRAY_UNEVALUATED_ITEMS]:`should not have unevaluated items`,[m.TUPLE_MIN_ITEMS]:`tuple must have at least %d element%s`,[m.TUPLE_MAX_ITEMS]:`tuple must not have more than %d element%s`,[m.OBJECT_REQUIRED]:`missing required %s: %s`,[m.OBJECT_ADDITIONAL_PROPERTIES]:`should not have additional property \"%s\"`,[m.OBJECT_MIN_PROPERTIES]:`must have at least %d %s`,[m.OBJECT_MAX_PROPERTIES]:`must not have more than %d %s`,[m.OBJECT_PROPERTY_NAMES]:`property name \"%s\" is invalid`,[m.OBJECT_DEPENDENCIES]:`requires %s when present`,[m.OBJECT_UNEVALUATED_PROPERTIES]:`should not have unevaluated property \"%s\"`,[m.ENUM_MISMATCH]:`must be one of: %s`,[m.CONST_MISMATCH]:`must be equal to %s`,[m.CONDITIONAL_IF]:`does not match the conditional schema`,[m.CONDITIONAL_THEN]:`does not satisfy the \"then\" schema condition`,[m.CONDITIONAL_ELSE]:`does not satisfy the \"else\" schema condition`,[m.COMPOSITION_ONE_OF]:`must match exactly one schema (currently matches %d)`,[m.COMPOSITION_ANY_OF]:`must match at least one schema`,[m.COMPOSITION_ALL_OF]:`must match all schemas`,[m.COMPOSITION_NOT]:`must not match the schema`,[m.CONTENT_DISCRIMINATOR]:`discriminator property \"%s\" has invalid value`,[m.CONTENT_ENCODING]:`content encoding \"%s\" is invalid`,[m.CONTENT_MEDIA_TYPE]:`content media type \"%s\" is invalid`,[m.CUSTOM_RANGE]:`must be within the range %s to %s`,[m.CUSTOM_EXCLUSIVE_RANGE]:`must be strictly within the range %s to %s`,[m.CUSTOM_REGEXP]:`must match the regular expression pattern`,[m.CUSTOM_DYNAMIC_DEFAULTS]:`failed to apply dynamic default value`,[m.CUSTOM_SELECT]:`does not match any of the selected cases`,[m.CUSTOM_TRANSFORM]:`transformation failed`,[m.CUSTOM_UNIQUE_ITEM_PROPERTIES]:`must have unique values for %s: %s`,[m.UNKNOWN]:`validation failed for keyword \"%s\"`},g=e=>{let t={...h,...e};function n(e,n){if(!e?.trim?.())return`root`;let r=n?.includes(`/prefixItems/`);return e.replace(/^\\//,``).replace(/\\//g,` ➜ `).replace(/(\\d+)/g,e=>{let n=Number(e);if(r){let r=[t[m.FIRST],t[m.SECOND],t[m.THIRD],t[m.FOURTH],t[m.FIFTH]];return r[n]?`(${r[n]})`:`[${e}]`}return`[${e}]`}).replace(/➜ \\[/g,`[`).replace(/➜ \\(/g,` `)}function r(e,n=t[m.PLURAL_SUFFIX]){return e===1?``:n}function i(e){let{keyword:n,params:i,schemaPath:a}=e,o=a?.includes(`/prefixItems/`),s=_(t[m.UNKNOWN],n),c={code:m.UNKNOWN,message:`message`in e?typeof e.message==`string`?e.message||s:JSON.stringify(e.message):s};switch(n){case`type`:{let e=i;return{code:m.TYPE_INVALID,message:_(t[m.TYPE_INVALID],e.type)}}case`minLength`:{let e=i;return{code:m.STRING_MIN_LENGTH,message:_(t[m.STRING_MIN_LENGTH],e.limit,r(e.limit))}}case`maxLength`:{let e=i;return{code:m.STRING_MAX_LENGTH,message:_(t[m.STRING_MAX_LENGTH],e.limit,r(e.limit))}}case`pattern`:return{code:m.STRING_PATTERN,message:t[m.STRING_PATTERN]};case`format`:{let e=i,n={email:m.STRING_FORMAT_EMAIL,date:m.STRING_FORMAT_DATE,\"date-time\":m.STRING_FORMAT_DATETIME,time:m.STRING_FORMAT_TIME,uri:m.STRING_FORMAT_URI,url:m.STRING_FORMAT_URL,uuid:m.STRING_FORMAT_UUID,ipv4:m.STRING_FORMAT_IPV4,ipv6:m.STRING_FORMAT_IPV6,hostname:m.STRING_FORMAT_HOSTNAME,\"json-pointer\":m.STRING_FORMAT_JSON_POINTER,regex:m.STRING_FORMAT_REGEX},r=n[e.format]||m.STRING_FORMAT;return{code:r,message:n[e.format]?t[r]:_(t[m.STRING_FORMAT],e.format)}}case`minimum`:{let e=i;return{code:m.NUMBER_MINIMUM,message:_(t[m.NUMBER_MINIMUM],e.comparison,e.limit)}}case`maximum`:{let e=i;return{code:m.NUMBER_MAXIMUM,message:_(t[m.NUMBER_MAXIMUM],e.comparison,e.limit)}}case`exclusiveMinimum`:{let e=i;return{code:m.NUMBER_EXCLUSIVE_MINIMUM,message:_(t[m.NUMBER_EXCLUSIVE_MINIMUM],e.comparison,e.limit)}}case`exclusiveMaximum`:{let e=i;return{code:m.NUMBER_EXCLUSIVE_MAXIMUM,message:_(t[m.NUMBER_EXCLUSIVE_MAXIMUM],e.comparison,e.limit)}}case`multipleOf`:{let e=i;return{code:m.NUMBER_MULTIPLE_OF,message:_(t[m.NUMBER_MULTIPLE_OF],e.multipleOf)}}case`minItems`:{let e=i;return o?{code:m.TUPLE_MIN_ITEMS,message:_(t[m.TUPLE_MIN_ITEMS],e.limit,r(e.limit))}:{code:m.ARRAY_MIN_ITEMS,message:_(t[m.ARRAY_MIN_ITEMS],e.limit,r(e.limit))}}case`maxItems`:{let e=i;return o?{code:m.TUPLE_MAX_ITEMS,message:_(t[m.TUPLE_MAX_ITEMS],e.limit,r(e.limit))}:{code:m.ARRAY_MAX_ITEMS,message:_(t[m.ARRAY_MAX_ITEMS],e.limit,r(e.limit))}}case`uniqueItems`:{let e=i.duplicateItems?.length||0,n=e?_(t[m.FOUND_N_DUPLICATES],e,r(e)):``;return{code:m.ARRAY_UNIQUE_ITEMS,message:_(t[m.ARRAY_UNIQUE_ITEMS],n)}}case`contains`:{let e=i.minContains||1;return{code:m.ARRAY_CONTAINS,message:_(t[m.ARRAY_CONTAINS],e,r(e))}}case`unevaluatedItems`:return{code:m.ARRAY_UNEVALUATED_ITEMS,message:t[m.ARRAY_UNEVALUATED_ITEMS]};case`required`:{let e=i,n=e.requiredProperties||e.missingProperty;if(Array.isArray(n)){let e=n.map(e=>`\"${e}\"`).join(`, `),r=n.length===1?t[m.PROPERTY]:t[m.PROPERTIES];return{code:m.OBJECT_REQUIRED,message:_(t[m.OBJECT_REQUIRED],r,e)}}return{code:m.OBJECT_REQUIRED,message:_(t[m.OBJECT_REQUIRED],t[m.PROPERTY],`\"${n}\"`)}}case`additionalProperties`:{let e=i;return{code:m.OBJECT_ADDITIONAL_PROPERTIES,message:_(t[m.OBJECT_ADDITIONAL_PROPERTIES],e.additionalProperties.join(`, `))}}case`minProperties`:{let e=i;return{code:m.OBJECT_MIN_PROPERTIES,message:_(t[m.OBJECT_MIN_PROPERTIES],e.limit,t[e.limit===1?m.PROPERTY:m.PROPERTIES])}}case`maxProperties`:{let e=i;return{code:m.OBJECT_MAX_PROPERTIES,message:_(t[m.OBJECT_MAX_PROPERTIES],e.limit,t[e.limit===1?m.PROPERTY:m.PROPERTIES])}}case`propertyNames`:{let e=i;return{code:m.OBJECT_PROPERTY_NAMES,message:_(t[m.OBJECT_PROPERTY_NAMES],e.propertyNames.join(`, `))}}case`dependencies`:case`dependentRequired`:{let e=i,n=e.deps||e.dependentRequired,r=Array.isArray(n)?n.map(e=>`\"${e}\"`).join(`, `):n;return{code:m.OBJECT_DEPENDENCIES,message:_(t[m.OBJECT_DEPENDENCIES],r)}}case`unevaluatedProperties`:{let e=i;return{code:m.OBJECT_UNEVALUATED_PROPERTIES,message:_(t[m.OBJECT_UNEVALUATED_PROPERTIES],e.unevaluatedProperties.join(`, `))}}case`enum`:{let e=i;if(Array.isArray(e.allowedValues)&&e.allowedValues.length<=5){let n=e.allowedValues.map(e=>JSON.stringify(e)).join(`, `);return{code:m.ENUM_MISMATCH,message:_(t[m.ENUM_MISMATCH],n)}}return{code:m.ENUM_MISMATCH,message:_(t[m.ENUM_MISMATCH],t[m.ALLOWED_VALUES])}}case`const`:{let e=i;return{code:m.CONST_MISMATCH,message:_(t[m.CONST_MISMATCH],JSON.stringify(e.allowedValue))}}case`if`:return{code:m.CONDITIONAL_IF,message:t[m.CONDITIONAL_IF]};case`oneOf`:{let e=i;return{code:m.COMPOSITION_ONE_OF,message:_(t[m.COMPOSITION_ONE_OF],e.passingSchemas?.length||0)}}case`anyOf`:return{code:m.COMPOSITION_ANY_OF,message:t[m.COMPOSITION_ANY_OF]};case`not`:return{code:m.COMPOSITION_NOT,message:t[m.COMPOSITION_NOT]};case`boolean`:return a?.includes(`/items`)||a?.includes(`/additionalItems`)?{code:m.ARRAY_ITEMS,message:t[m.ARRAY_ITEMS]}:c;default:return c}}function a(e){let t=new Map;for(let n of e){let e=n.instancePath;t.has(e)||t.set(e,[]),t.get(e)?.push(n)}return t}function o(e){let t={required:1,type:2,format:3,const:4,enum:4,pattern:5,minimum:6,maximum:6,exclusiveMinimum:6,exclusiveMaximum:6,minLength:6,maxLength:6,minItems:6,maxItems:6,minProperties:6,maxProperties:6};return e.sort((e,n)=>(t[e.keyword]||99)-(t[n.keyword]||99))[0]}function s(e){let t=e.find(e=>e.keyword===`anyOf`);if(!t)return e;let n=e.filter(e=>e.keyword===`const`&&e.schemaPath.startsWith(`${t.schemaPath}/anyOf/`));return!n.length||e.length!==n.length+1?e:[{...t,keyword:`enum`,params:{allowedValues:n.map(e=>e.params.allowedValue)}}]}function c(e,t={}){if(!e?.length)return[];let{groupByField:r=!0,singleError:c=!1}=t;if(c){let t=e[0],{code:r,message:a}=i(t);return[{keyword:t.keyword,path:n(t.instancePath,t.schemaPath),message:a,code:r,params:t.params}]}if(r){let t=a(e),r=[];for(let[e,a]of t){let e=o(s(a)),{code:t,message:c}=i(e);r.push({keyword:e.keyword,path:n(e.instancePath,e.schemaPath),message:c,code:t,params:e.params})}return r}return e.map(e=>{let{code:t,message:r}=i(e);return{keyword:e.keyword,path:n(e.instancePath,e.schemaPath),message:r,code:t,params:e.params}})}function l(e,n={}){let{prefix:r=t[m.VALIDATION_FAILED_PREFIX],separator:i=`; `,includeField:a=!0}=n,o=c(e,{groupByField:!0}).map(e=>a&&e.path!==`root`?`${e.path}: ${e.message}`:e.message);return`${r}${r?` `:``}${o.join(i)}`}function u(e){if(!e?.length)return t[m.VALIDATION_PASSED];let a=new Set(e.map(e=>e.instancePath)).size;if(a===1){let t=e[0],{message:r}=i(t),a=n(t.instancePath,t.schemaPath);return a===`root`?r:`${a}: ${r}`}return _(t[m.ERROR_SUMMARY],e.length,r(e.length),a,r(a))}return{formatValidationErrors:c,formatValidationErrorMessage:l,getErrorSummary:u}},_=(e,...t)=>{let n=t[Symbol.iterator](),r=String(e).replace(/%[sdif%]/g,e=>{if(e===`%%`)return`%`;let t=n.next();if(t.done)return e;let r=t.value;switch(e){case`%s`:return String(r);case`%d`:return String(Number(r));case`%i`:return String(parseInt(String(r),10));case`%f`:return String(parseFloat(String(r)));default:return e}}),i=[...n];return i.length>0?[r,i.map(e=>String(e)).join(` `)].join(` `):r},v=t({meta:{name:`TypeBox`,resolveTypes:!0},dependencies:{typebox:o.devDependencies.typebox},factory:p});export{m as MESSAGE_CODES,v as default,g as errorHandlerFactory};\n//# sourceMappingURL=index.js.map","import{createWatchedPageRouteEntriesFilter as e,defineGenerator as t,defineGeneratorFactory as n,nestedRoutesFactory as r,pathResolver as i,renderFactory as a,sortRoutes as o}from\"@kosmojs/lib\";import s from\"@vitejs/plugin-vue\";import{createTemplateResolver as c,defaults as l}from\"@kosmojs/core\";import{routeRenderHelpers as u}from\"@kosmojs/core/generators\";import{join as d}from\"node:path\";var f={type:`module`,private:!0,name:`@kosmojs/vue-generator`,version:`0.3.0`,author:`Slee Woo`,license:`MIT`,files:[`pkg/*`],exports:{\".\":{types:`./pkg/index.d.ts`,default:`./pkg/index.js`}},scripts:{build:`wsbuild src/index.ts`,test:`vitest --root ../.. --project generators/vue-generator`},dependencies:{\"@kosmojs/core\":`workspace:^`,\"@kosmojs/lib\":`workspace:^`,\"@vitejs/plugin-vue\":`^6.0.8`},devDependencies:{\"@tanstack/vue-query\":`^5.102.2`,vue:`^3.5.41`,\"vue-router\":`^5.2.0`}},p=e=>{let t=e=>e.kind===`splat`?`:${e.name}(.*)?`:e.kind===`optional`?`:${e.name}?`:`:${e.name}`;return e.flatMap(e=>e.kind===`static`?[e.parts[0].value]:e.kind===`param`?[t(e.parts[0])]:[e.parts.map(e=>e.type===`static`?e.value:t(e)).join(``)]).join(`/`)},m=()=>{let e=e=>e?.kind===`param`&&e.parts[0]?.kind===`splat`,t=(n,r)=>n.flatMap(({index:n,layout:i,children:a})=>{let{name:o,pathTokens:s}={...n,...i};if(!s)return[];let c=`${o}/layout`,l=r?p(s):d(`/`,p(s)),u=s.at(-1);return e(u)?n&&i?[{name:c,path:l,component:i.id,children:[{name:o,path:``,component:n.id}]}]:n?[{path:l,children:[{name:o,path:``,component:n.id},...t(a,o)]}]:i?[{name:c,path:l,component:i.id,children:t(a,o)}]:[]:n&&i?[{name:c,path:l,component:i.id,children:[{name:o,path:``,component:n.id},...t(a,o)]}]:n?[{path:l,children:[{name:o,path:``,component:n.id},...t(a,o)]}]:i?[{name:c,path:l,component:i.id,children:t(a,o)}]:[]});return t},h=()=>{let e=[`🎉 Well done! You just created a new Vue route.`,`🚀 Success! A fresh Vue route is ready to roll.`,`🌟 Nice work! Another Vue route added to your app.`,`🧩 All set! A new Vue route has been scaffolded.`,`🔧 Scaffold complete! Your new Vue route is in place.`,`✅ Built! Your Vue route is scaffolded and ready.`,`✨ Fantastic! Your new Vue route is good to go.`,`🎯 Nailed it! A brand new Vue route just landed.`,`💫 Awesome! Another Vue route joins the party.`,`⚡ Lightning fast! A new Vue route created successfully.`];return e[Math.floor(Math.random()*e.length)]},g=`import type { Plugin } from \"vue\";\n\nexport { default as AppProvider } from \"./provider.vue\";\n\nexport const appProvider: Plugin = {\n install() {},\n};\n`,_=`import { VueQueryPlugin } from \"@tanstack/vue-query\";\nimport type { Plugin } from \"vue\";\n\nimport { getQueryClient } from \"../query\";\n\nexport { default as AppProvider } from \"./provider.vue\";\n\nexport const appProvider: Plugin = {\n install(app) {\n app.use(VueQueryPlugin, { queryClient: getQueryClient() });\n },\n};\n`,v=`<template>\n <slot />\n</template>\n`,y=`import type { App } from \"vue\";\nimport type { RouterFactoryReturn } from \"@kosmojs/core\";\nimport { 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 const hydrate = async (\n resolver: () => RouterFactoryReturn<Promise<App>>,\n root: HTMLElement,\n) => {\n const { component } = await resolver();\n component.mount(root, true);\n}\n\nexport const mount = async (\n resolver: () => RouterFactoryReturn<Promise<App>>,\n root: HTMLElement,\n) => {\n const { component } = await resolver();\n component.mount(root);\n}\n\nexport default clientRenderFactory();\n`,b=`{\n path: \"{{path}}\",\n {{#if name}}\n name: \"{{name}}\",\n {{/if}}\n {{#if component}}\n {{#if @root.lazyLoad}}\n component: {{component}},\n meta: { module: {{component}} },\n {{else}}\n component: {{component}}.default,\n meta: { module: async () => {{component}} },\n {{/if}}\n {{/if}}\n {{#if children.length}}\n children: [ {{#each children}}{{> routePartial}}, {{/each}}],\n {{/if}}\n}\n`,x=`import type { App } from \"vue\";\n\nimport {\n renderToString as renderToStringOrig,\n renderToWebStream,\n} from \"vue/server-renderer\";\n\nimport type {\n RenderToStringWrapper,\n RenderToStreamWrapper,\n RouterFactoryReturn,\n SSRRenderWrapper,\n} from \"@kosmojs/core\";\n\nimport { serverRenderFactory } from \"@kosmojs/core/generators\";\n\n{{#each pageEntries}}\nimport * as {{id}} from \"{{ createImport 'pages' file }}\";\n{{/each}}\n\nimport * as 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.default,\n meta: { module: NotFound },\n },\n ];\n}\n\nexport const baseHeaderTags = (): Array<string> => [];\n\nconst createHydrationScript = (\n loaderData: Record<string, unknown>,\n) => {\n return loaderData\n ? \\`<script>\n window.__KOSMO_HYDRATION_DATA__ = JSON.parse(\n \\${JSON.stringify(JSON.stringify(loaderData))}\n );\n <\\/script>\\`\n : undefined;\n};\n\nexport const renderWrapper: SSRRenderWrapper = (_context, render) => render();\n\nexport const renderToString: RenderToStringWrapper<\n () => RouterFactoryReturn<\n Promise<App>,\n { loaderData: Record<string, unknown> }\n >,\n Parameters<typeof renderToStringOrig>[1]\n> = async (resolver, { headerTags = [], context = {} } = {}) => {\n const { component, loaderData } = await resolver();\n const html = await renderToStringOrig(component, context);\n const script = createHydrationScript(loaderData);\n return {\n head: [...headerTags, ...script ? [script] : []].join(\"\\\\n\"),\n html,\n }\n}\n\nexport const renderToStream: RenderToStreamWrapper<\n () => RouterFactoryReturn<\n Promise<App>,\n { loaderData: Record<string, unknown> }\n >,\n Parameters<typeof renderToWebStream>[1]\n> = async (resolver, { headerTags = [], context = {} } = {}) => {\n const { component, loaderData } = await resolver();\n\n /**\n * loaderData is fully resolved before streaming starts, so the hydration\n * script ships in head - same as string mode. Head is written with the shell,\n * guaranteeing delivery even when the stream errors mid-body.\n * */\n const script = createHydrationScript(loaderData);\n\n return {\n head: [...headerTags, ...script ? [script] : []].join(\"\\\\n\"),\n html: renderToWebStream(component, context),\n };\n}\n\nexport default serverRenderFactory();\n`,S=`declare module \"*.vue\" {\n import type { DefineComponent } from \"vue\";\n const component: DefineComponent<{}, {}, any>;\n export default component;\n}\n\ndeclare module \"virtual:kosmo/tsq-client\" {\n import type { QueryClient, QueryClientConfig } from \"@tanstack/vue-query\";\n export const createQueryClient: (options?: QueryClientConfig) => QueryClient;\n export const getQueryClient: () => QueryClient;\n}\n`,C=`<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`,w=`<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`,T=`* {\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`,E=`<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`,D=`export * from \"virtual:kosmo/tsq-client\";\n`,O=`import { QueryClient } from \"@tanstack/vue-query\";\n\nlet client = undefined\n\nexport const createQueryClient = (options) => {\n client = new QueryClient(options);\n return client;\n};\n\nexport const getQueryClient = () => {\n if (!client) {\n client = new QueryClient();\n }\n return client;\n};\n`,k=`import { QueryClient } from \"@tanstack/vue-query\";\n\nimport { store } from \"{{ createImport 'libCore' 'ssr' }}\";\n\nexport const createQueryClient = (options) => {\n const client = new QueryClient(options);\n const ctx = store?.getStore();\n if (ctx) {\n ctx.tsqClient = client;\n }\n return client;\n};\n\nexport const getQueryClient = () => {\n const ctx = store?.getStore();\n if (!ctx) {\n throw new Error(\"getQueryClient(): called outside an SSR request scope\");\n }\n if (!ctx.tsqClient) {\n ctx.tsqClient = new QueryClient();\n }\n return ctx.tsqClient;\n};\n`,A=`import {\n type App,\n type Component,\n createApp,\n createSSRApp,\n type Plugin,\n} from \"vue\";\nimport {\n createMemoryHistory,\n createRouter,\n createWebHistory,\n type RouteRecordRaw,\n type Router,\n} from \"vue-router\";\n\nimport type { RouterFactoryReturn } from \"@kosmojs/core\";\nimport { createRouterFactory } from \"@kosmojs/core/generators\";\n\nimport { base } from \"{{ createImport 'libCore' }}\";\n\nexport type RouterWithLoaderData = Router & {\n __loaderData: Record<string, unknown>;\n};\n\nconst runLoader = async (\n key: string,\n route: unknown,\n fetcher: (r: never) => Promise<unknown>,\n) => {\n if (typeof window === \"undefined\" || !window.__KOSMO_HYDRATION_DATA__) {\n return fetcher(route as never);\n }\n return key in window.__KOSMO_HYDRATION_DATA__\n ? window.__KOSMO_HYDRATION_DATA__[key]\n : fetcher(route as never);\n};\n\n/**\n * Installs a beforeResolve guard that runs the matched chain's loaders\n * (layouts + leaf) before navigation commits, so components read data\n * synchronously at render time - no onServerPrefetch, no Suspense.\n * */\nconst installLoaderGuard = (router: RouterWithLoaderData) => {\n router.__loaderData = {};\n\n router.beforeResolve(async (to) => {\n const data: RouterWithLoaderData[\"__loaderData\"] = {};\n\n for (const { name, meta } of to.matched) {\n if (!name || typeof name !== \"string\" || !meta.module) {\n continue;\n }\n\n const { loader } =\n typeof meta.module === \"function\" //\n ? await meta.module()\n : {};\n\n if (loader) {\n await runLoader(name, to, loader as never).then((v) => {\n // undefined does not survive JSON.stringify, thus null\n data[name] = v ?? null;\n });\n }\n }\n\n router.__loaderData = data;\n\n // consumed: clear so client navigations refetch, and click-handlers don't reuse\n if (typeof window !== \"undefined\") {\n window.__KOSMO_HYDRATION_DATA__ = undefined;\n }\n });\n};\n\nexport const createRouters = (\n routes: Array<RouteRecordRaw>,\n {\n app,\n use,\n }: {\n app: Component;\n use?: Array<[plugin: Plugin, options: object | undefined]>;\n },\n): {\n clientRouter: () => RouterFactoryReturn<Promise<App>>;\n serverRouter: (\n url: URL,\n ) => RouterFactoryReturn<\n Promise<App>,\n { loaderData: Record<string, unknown> }\n >;\n} => {\n return {\n async clientRouter() {\n const component = createApp(app);\n\n const router = createRouter({\n history: createWebHistory(base),\n routes,\n strict: true,\n });\n\n installLoaderGuard(router as never);\n\n component.use(router);\n\n if (Array.isArray(use)) {\n for (const [plugin, options] of use) {\n component.use(plugin, options);\n }\n }\n\n return { component };\n },\n\n async serverRouter(url) {\n const component = createSSRApp(app);\n\n const router = createRouter({\n history: createMemoryHistory(base),\n routes,\n strict: true,\n }) as RouterWithLoaderData;\n\n // must be installed before push - the initial navigation\n // would otherwise skip the guard\n installLoaderGuard(router);\n\n let { pathname } = url;\n\n if ((base as string) !== \"/\") {\n // strip the base from pushed paths\n if (pathname === base) {\n pathname = \"/\";\n } else if (pathname.startsWith(\\`\\${base}/\\`)) {\n pathname = pathname.slice(base.length);\n }\n }\n\n await router.push(pathname + url.search);\n\n await router.isReady();\n\n component.use(router);\n\n if (Array.isArray(use)) {\n for (const [plugin, options] of use) {\n component.use(plugin, options);\n }\n }\n\n return { component, loaderData: router.__loaderData };\n },\n };\n};\n\nexport default createRouterFactory<\n RouteRecordRaw,\n Promise<App>,\n { server: { loaderData: Record<string, unknown> } }\n>();\n`,j=`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`,M=`import { useRoute, useRouter } from \"vue-router\";\n\nimport type { RouterWithLoaderData } from \"./router\";\n\n/**\n * Reads loader data for the current page or one of its layouts.\n * Without a key, returns the page's own data.\n * For a layout, pass its path-qualified name (e.g. \"dashboard/layout\") -\n * a hook can't tell which layout it runs in.\n * */\nexport const useLoaderData = <T>(key?: string): T | undefined => {\n const router = useRouter() as RouterWithLoaderData;\n const route = useRoute();\n return router.__loaderData?.[key || (route.name as string)] as T;\n};\n`,N=`<script setup lang=\"ts\">\nimport { AppProvider } from \"_/app\";\n<\\/script>\n\n<template>\n <AppProvider>\n <RouterView />\n </AppProvider>\n</template>\n`,P=`<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\ntype 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]?.path(params as never, props.query, { prefix: false });\n})\n\nconst linkProps = computed(() => ({\n ...(props.replace !== undefined ? { replace: props.replace } : {}),\n ...(props.activeClass !== undefined ? { activeClass: props.activeClass } : {}),\n ...(props.exactActiveClass !== undefined ? { exactActiveClass: props.exactActiveClass } : {}),\n}))\n<\\/script>\n\n<template>\n <RouterLink :to=\"href\" v-bind=\"linkProps\">\n <slot />\n </RouterLink>\n</template>\n`,F=`import renderFactory, {\n createRoutes,\n hydrate,\n mount,\n} from \"{{ createImport 'libEntry' 'client' }}\";\n\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 hydrate() {\n return hydrate(() => clientRouter(), root);\n },\n mount() {\n return mount(() => clientRouter(), root);\n },\n };\n });\n} else {\n console.error(\"❌ Root element not found!\");\n}\n`,I=`import renderFactory, {\n createRoutes,\n renderToStream,\n renderToString,\n} from \"{{ createImport 'libEntry' 'server' }}\";\n\nimport routerFactory from \"../router\";\n\nconst routes = createRoutes();\nconst { serverRouter } = routerFactory(routes);\n\nexport default renderFactory(() => {\n return {\n renderToString(url, { assets }) {\n return renderToString(\n () => serverRouter(url),\n { headerTags: assets.map(({ tag }) => tag) },\n );\n },\n renderToStream(url, { assets }) {\n return renderToStream(\n () => serverRouter(url),\n { headerTags: assets.map(({ tag }) => tag) },\n );\n },\n };\n});\n`,L=`<script setup lang=\"ts\">\nimport PageSample from \"{{ createImport 'lib' 'pageSamples/404.vue' }}\";\n<\\/script>\n\n<template>\n <PageSample />\n</template>\n`,R=`<template>\n <router-view />\n</template>\n`,z=`<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`,B=`<script setup lang=\"ts\">\nimport WelcomePage from \"{{ createImport 'lib' 'pageSamples/welcome.vue' }}\";\n<\\/script>\n\n<template>\n <WelcomePage />\n</template>\n`,V=`import routerFactory, { createRouters } from \"{{ createImport 'lib' 'router' }}\";\nimport { appProvider } from \"{{ createImport 'lib' 'app' }}\";\n\nimport app from \"./app.vue\";\n\nexport default routerFactory((routes) => {\n const { clientRouter, serverRouter } = createRouters(routes, {\n app,\n use: [[appProvider, undefined]],\n });\n return {\n clientRouter() {\n return clientRouter()\n },\n serverRouter(url) {\n return serverRouter(url)\n },\n };\n});\n`,H=n((t,n)=>{let{createPath:d,createImportHelpers:f}=i(t),{render:p,renderToFile:H}=a({helpers:{...f({origin:`lib`}),...u()},partials:{routePartial:b}}),{renderToFile:U}=a({helpers:f({origin:`src`})}),W=m(),G=e=>!e?.trim().length,K=c(n?.templates,z),q=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await U(d.pages(n.file),n.name===`index`?B:K(n.name,n),{route:n,message:h()},{overwrite:G}):t===`pageLayout`&&await U(d.pages(n.file),R,{route:n},{overwrite:G})},J=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(o),n=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`||e===`pageLayout`?[t]:[]),i=W(r(n));for(let[e,t]of[[`client.ts`,y],[`server.ts`,x]])await H(d.libEntry(e),t,{pageEntries:n,nestedRoutes:i,lazyLoad:e===`client.ts`});await H(d.lib(`router.ts`),A,{entries:e,indexRoutes:t})};return{config(){let{templates:e,...t}={...n};return{plugins:[s(t)]}},async start(){for(let[e,t]of[[`env.d.ts`,S],[`unwrap.ts`,j],[`use.ts`,M],[`pageSamples/styles.module.css`,T],[`pageSamples/welcome.vue`,E],[`pageSamples/page.vue`,w],[`pageSamples/404.vue`,C],[`app/provider.vue`,v],...n?.tanstack?.query?[[`app/index.ts`,_],[`query.ts`,D]]:[[`app/index.ts`,g],[`query.ts`,`/** tanstack query disabled */`]]])await H(d.lib(e),t,{});for(let[e,t]of[[`pages/404.vue`,L],[`components/Link.vue`,P],[`app.vue`,N],[`router.ts`,V]])await U(d.src(e),t,{entryDir:l.entryDir},{overwrite:G});for(let[e,t]of[[`client.ts`,F],[`server.ts`,I]])await U(d.entry(e),t,{},{overwrite:G})},async watch(t,n){await q(t.filter(e(n,[`create`]))),await J(t)},async build(e){await q(e),await J(e)},virtualModules(){return n?.tanstack?.query?[{specifier:`virtual:kosmo/tsq-client`,csr:p(O,{}),ssr:p(k,{})}]:[]}}}),U=t({meta:{name:`Vue`,slot:`frontend`,jsxImportSource:`vue`},dependencies(e){return{vue:f.devDependencies.vue,\"vue-router\":f.devDependencies[`vue-router`],...e?.tanstack?.query?{\"@tanstack/vue-query\":f.devDependencies[`@tanstack/vue-query`]}:{}}},factory:H});export{U as default};\n//# sourceMappingURL=index.js.map","import { join } from \"node:path\";\nimport { styleText } from \"node:util\";\n\nimport {\n DEFAULT_APIBASE,\n type FolderConfig,\n type GeneratorMeta,\n type GeneratorSignature,\n type SourceFolder,\n} from \"@kosmojs/core\";\n\nimport coreGenerator from \"@kosmojs/core-generator\";\n\nexport { default as fetchGenerator } from \"@kosmojs/fetch-generator\";\nexport { default as h3Generator } from \"@kosmojs/h3-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 svelteGenerator } from \"@kosmojs/svelte-generator\";\nexport { default as typeboxGenerator } from \"@kosmojs/typebox-generator\";\nexport { default as vueGenerator } from \"@kosmojs/vue-generator\";\n\nexport { coreGenerator };\n\nexport const defineConfig: (config: FolderConfig) => SourceFolder[\"config\"] = (\n config,\n) => {\n const env = process.env.NODE_ENV || \"development\";\n const base = typeof config.base === \"string\" ? config.base : config.base[env];\n if (!base?.trim()) {\n throw new Error(\n styleText([\"red\"], \"ERROR: Invalid Config - no base provided\"),\n );\n }\n return {\n ...config,\n base: join(\"/\", base),\n apiBase: join(\"/\", config.apiBase || DEFAULT_APIBASE),\n generators: folderGenerators(config),\n };\n};\n\nconst folderGenerators = (config: FolderConfig): Array<GeneratorSignature> => {\n const generators: Array<GeneratorSignature> = [];\n\n const generatorsBySlot: Partial<\n Record<NonNullable<GeneratorMeta[\"slot\"]>, GeneratorSignature>\n > = {};\n\n for (const generator of config.generators || []) {\n if (generator.meta.slot) {\n generatorsBySlot[generator.meta.slot] = generator;\n } else {\n generators.push(generator);\n }\n }\n\n return [\n // core generator should run first\n coreGenerator(),\n // then backend generator\n ...(generatorsBySlot.backend ? [generatorsBySlot.backend] : []),\n // then fetch generator, only if backend generator also enabled\n ...(generatorsBySlot.fetch && generatorsBySlot.backend\n ? [generatorsBySlot.fetch]\n : []),\n // then frontend generator\n ...(generatorsBySlot.frontend ? [generatorsBySlot.frontend] : []),\n // then slotless generators in the order they were added\n ...generators,\n // ssr generator should run after user generators\n ...(generatorsBySlot.ssr ? [generatorsBySlot.ssr] : []),\n // ssg generator should run after ssr generator\n ...(generatorsBySlot.ssg ? [generatorsBySlot.ssg] : []),\n ];\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["package_default","ssr_default","env_d_default","schemas_default","factory_default","package_default","route_default","ssr_default","unwrap_default","factory_default","src_default","package_default","app_default$1","dev_default$1","errors_default$1","listener_default","parsers_default","router_default","routes_default","server_default$1","api_default","api_factory_default","app_default","dev_default","env_d_default","errors_default","route_default","use_default$1","server_default","use_default","factory_default","src_default","package_default","app_default$1","dev_default$1","errors_default$1","listener_default","parsers_default","router_default","routes_default","server_default$1","api_default","api_factory_default","app_default","dev_default","env_d_default","errors_default","route_default","use_default$1","server_default","use_default","factory_default","src_default","package_default","app_default$1","router_default","routes_default","server_default$1","app_default","env_d_default","use_default$1","server_default","use_default","factory_default","src_default","formatter","fence","pick","emptyOptions","name","isIdentifierName","parseYaml","parseToml","package_default","randomCongratMessage","app_default$1","client_default$1","server_default$1","env_d_default","_404_default$1","page_default$1","styles_default","welcome_default$1","params_default","router_default$1","use_default","app_default","Link_default","client_default","server_default","_404_default","layout_default","page_default","welcome_default","router_default","factory_default","frontmatterPlugin","mdxFrontmatterPlugin","src_default","parse","factory_default","src_default","package_default","pathFactory","traverseFactory","randomCongratMessage","app_default$1","app_tsq_default","client_default$1","routePartial_default","server_default$1","env_d_default","_404_default$1","page_default$1","styles_default","welcome_default$1","query_default","query_csr_default","query_ssr_default","router_default$1","app_default","Link_default","client_default","server_default","_404_default","layout_default","page_default","welcome_default","router_default","factory_default","vitePlugin","src_default","package_default","traverseFactory","pathFactory","randomCongratMessage","app_default$1","app_tsq_default","client_default$1","routePartial_default","server_default$1","env_d_default","_404_default$1","page_default$1","styles_default","welcome_default$1","query_default","query_csr_default","query_ssr_default","router_default$1","unwrap_default","app_default","Link_default","client_default","server_default","_404_default","layout_default","page_default","welcome_default","router_default","factory_default","vitePlugin","src_default","factory_default","src_default","package_default","factory_default","src_default","package_default","randomCongratMessage","app_default$1","app_tsq_default","client_default$1","server_default$1","env_d_default","_404_default$1","page_default$1","styles_default","welcome_default$1","query_default","query_csr_default","query_ssr_default","router_default$1","use_default","app_default","Link_default","client_default","server_default","_404_default","layout_default","page_default","welcome_default","router_default","factory_default","src_default","package_default","factory_default","src_default","vitePlugin","src_default"],"sources":["../../../generators/core-generator/pkg/index.js","../../../generators/fetch-generator/pkg/index.js","../../../generators/h3-generator/pkg/index.js","../../../generators/hono-generator/pkg/index.js","../../../generators/koa-generator/pkg/index.js","../../../node_modules/.pnpm/devlop@1.1.0/node_modules/devlop/lib/default.js","../../../node_modules/.pnpm/micromark-util-character@2.1.1/node_modules/micromark-util-character/index.js","../../../node_modules/.pnpm/format@0.2.2/node_modules/format/format.js","../../../node_modules/.pnpm/fault@2.0.1/node_modules/fault/index.js","../../../node_modules/.pnpm/micromark-extension-frontmatter@2.0.0/node_modules/micromark-extension-frontmatter/lib/to-matters.js","../../../node_modules/.pnpm/micromark-extension-frontmatter@2.0.0/node_modules/micromark-extension-frontmatter/lib/syntax.js","../../../node_modules/.pnpm/escape-string-regexp@5.0.0/node_modules/escape-string-regexp/index.js","../../../node_modules/.pnpm/mdast-util-frontmatter@2.0.1/node_modules/mdast-util-frontmatter/lib/index.js","../../../node_modules/.pnpm/remark-frontmatter@5.0.0/node_modules/remark-frontmatter/lib/index.js","../../../node_modules/.pnpm/estree-util-value-to-estree@3.5.0/node_modules/estree-util-value-to-estree/dist/estree-util-value-to-estree.js","../../../node_modules/.pnpm/toml@3.0.0/node_modules/toml/lib/parser.js","../../../node_modules/.pnpm/toml@3.0.0/node_modules/toml/lib/compiler.js","../../../node_modules/.pnpm/toml@3.0.0/node_modules/toml/index.js","../../../node_modules/.pnpm/estree-util-is-identifier-name@3.0.0/node_modules/estree-util-is-identifier-name/lib/index.js","../../../node_modules/.pnpm/estree-util-scope@1.0.1/node_modules/estree-util-scope/lib/index.js","../../../node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/walker.js","../../../node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js","../../../node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/index.js","../../../node_modules/.pnpm/unist-util-mdx-define@1.1.2/node_modules/unist-util-mdx-define/dist/unist-util-mdx-define.js","../../../node_modules/.pnpm/remark-mdx-frontmatter@5.2.0/node_modules/remark-mdx-frontmatter/dist/remark-mdx-frontmatter.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/svelte-generator/pkg/index.js","../../../generators/typebox-generator/pkg/index.js","../../../generators/vue-generator/pkg/index.js","../src/index.ts"],"sourcesContent":["import { createAliasPatterns, defineGenerator, defineGeneratorFactory, pathResolver, renderFactory, renderToFile, sortRoutes } from \"@kosmojs/lib\";\nimport { dirname, resolve } from \"node:path\";\nimport { styleText } from \"node:util\";\nimport semver from \"semver\";\nimport { defaults } from \"@kosmojs/core\";\nimport { routeRenderHelpers } from \"@kosmojs/core/generators\";\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/core-generator\",\n\tversion: \"0.3.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\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\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"semver\": \"^7.8.5\"\n\t},\n\tdevDependencies: {\n\t\t\"@types/semver\": \"^7.8.0\",\n\t\t\"path-to-regexp\": \"^8.4.2\"\n\t}\n};\n//#endregion\n//#region src/templates/core/config.hbs?raw\nvar config_default = \"export const base = {{base}};\\nexport const backendBase = {{backendBase}};\\nexport const backendAliasPatterns = {{backendAliasPatterns}};\\n\";\n//#endregion\n//#region src/templates/core/index.hbs?raw\nvar core_default = \"import type { StaticParams } from \\\"./types\\\";\\n\\nexport * from \\\"./config\\\";\\nexport * from \\\"./routes\\\";\\nexport * from \\\"./types\\\";\\n\\nexport const defineStaticParams = <T extends keyof StaticParams>(\\n variants: Array<StaticParams[T]>,\\n) => variants;\\n\";\n//#endregion\n//#region src/templates/core/routeMapper.hbs?raw\nvar routeMapper_default = \"{{> routeMapperPartial}}\\n\\nimport { base, backendBase } from \\\"./config\\\";\\n\\n// used by backend generators and fetch clients\\nexport const apiRouteMap = {\\n {{#each apiRoutes}}\\n \\\"{{name}}\\\": apiRouteMapper<[{{serializeParamsTupleElements .}}]>(\\n backendBase,\\n {{serializeApiRoute .}},\\n ),\\n {{/each}}\\n};\\n\\n// used by frontend generators on Link component\\nexport const pageRouteMap = {\\n {{#each pageRoutes}}\\n \\\"{{name}}\\\": pageRouteMapper<[{{serializeParamsTupleElements .}}]>(\\n base,\\n {{serializePageRoute .}},\\n ),\\n {{/each}}\\n};\\n\";\n//#endregion\n//#region src/templates/core/routeMapperPartial.ts?raw\nvar routeMapperPartial_default = \"import { compile, match } from \\\"path-to-regexp\\\";\\n\\nimport {\\n type ApiRouteSerialized,\\n type PageRouteSerialized,\\n stringifySearchParams,\\n type ValidationTarget,\\n} from \\\"@kosmojs/core\\\";\\nimport { createHost, join } from \\\"@kosmojs/core/fetch\\\";\\nimport type { RoutePathMethods } from \\\"@kosmojs/core/generators\\\";\\n\\ntype NormalizeParams = (path: string) => Record<string, unknown>;\\n\\ntype NormalizeSearchParams = (\\n searchParams: Record<string, unknown>,\\n method: string,\\n) => Record<string, unknown>;\\n\\ntype PayloadResolver = <T>(\\n payload: Record<ValidationTarget, T> | undefined,\\n target: ValidationTarget,\\n method: string,\\n) => T | Record<string, unknown> | undefined;\\n\\nexport const apiRouteMapper = <ParamsT extends readonly unknown[]>(\\n base: string,\\n {\\n name,\\n pathPattern,\\n params,\\n numericProperties,\\n booleanProperties,\\n }: ApiRouteSerialized,\\n): RoutePathMethods<ParamsT> & {\\n normalizeParams: NormalizeParams;\\n normalizeSearchParams: NormalizeSearchParams;\\n payloadResolver: PayloadResolver;\\n} => {\\n const toPath = compile(pathPattern);\\n const pathMatcher = match(join(base, pathPattern));\\n\\n const maybeNumber = (val: unknown) => {\\n if (val === undefined || val === null) {\\n return val;\\n }\\n const n = Number(val);\\n return Number.isFinite(n) ? n : val;\\n };\\n\\n const maybeBoolean = (val: unknown) => {\\n return [true, false, \\\"true\\\", \\\"false\\\"].includes(val as never) //\\n ? JSON.parse(val as never)\\n : val;\\n };\\n\\n const resolveParam = (path: string, param: (typeof params)[number]) => {\\n try {\\n const match = pathMatcher(path);\\n return match ? match.params[param] : undefined;\\n } catch (e) {\\n return undefined;\\n }\\n };\\n\\n const normalizeSearchParams: NormalizeSearchParams = (\\n searchParams,\\n method,\\n ) => {\\n return Object.fromEntries(\\n Object.entries(searchParams).map(([k, v]) => {\\n if (numericProperties.query?.[method]?.includes(k)) {\\n return [\\n k,\\n Array.isArray(v) ? v.map((e) => maybeNumber(e)) : maybeNumber(v),\\n ];\\n }\\n if (booleanProperties.query?.[method]?.includes(k)) {\\n return [\\n k,\\n Array.isArray(v) ? v.map((e) => maybeBoolean(e)) : maybeBoolean(v),\\n ];\\n }\\n return [k, v];\\n }),\\n );\\n };\\n\\n const normalizeParams: NormalizeParams = (path) => {\\n return params.reduce((map: Record<string, unknown>, param) => {\\n const value = resolveParam(path, param);\\n if (Array.isArray(value)) {\\n map[param] = numericProperties.params.includes(param)\\n ? value.map((e) => maybeNumber(e))\\n : value;\\n } else if (value) {\\n map[param] = numericProperties.params.includes(param)\\n ? maybeNumber(value)\\n : value;\\n }\\n return map;\\n }, {});\\n };\\n\\n const paramsMapper: RoutePathMethods<ParamsT>[\\\"paramsMapper\\\"] = (\\n input,\\n opt,\\n ) => {\\n return params.reduce<Record<string, unknown>>((map, name, i) => {\\n const coerceNumbers = opt?.coerceNumbers\\n ? numericProperties.params.includes(name)\\n : false;\\n if (Array.isArray(input[i])) {\\n map[name] = coerceNumbers\\n ? input[i].map((v) => maybeNumber(v))\\n : input[i].map(String);\\n } else if (input[i] !== undefined) {\\n map[name] = coerceNumbers ? maybeNumber(input[i]) : String(input[i]);\\n }\\n return map;\\n }, {});\\n };\\n\\n const parametrize: RoutePathMethods<ParamsT>[\\\"parametrize\\\"] = (params) => {\\n try {\\n return toPath(paramsMapper(params) as never);\\n } catch (error) {\\n console.error(`❗ERROR: Failed building path for ${name}`);\\n throw error;\\n }\\n };\\n\\n const path: RoutePathMethods<ParamsT>[\\\"path\\\"] = (params, query, opt) => {\\n const path = join(\\n opt?.prefix === false\\n ? \\\"/\\\"\\n : typeof opt?.prefix === \\\"string\\\"\\n ? opt.prefix\\n : base,\\n parametrize(params),\\n );\\n return query //\\n ? [path, stringifySearchParams(query)].join(\\\"?\\\")\\n : path;\\n };\\n\\n const href: RoutePathMethods<ParamsT>[\\\"href\\\"] = (\\n host,\\n params,\\n query,\\n opt,\\n ) => {\\n return createHost(host) + path(params, query, opt);\\n };\\n\\n const payloadResolver: PayloadResolver = (payload, target, method) => {\\n const data = payload?.[target];\\n\\n if (target === \\\"query\\\") {\\n return Object.fromEntries(\\n Object.entries({ ...data }).map(([k, v]) => {\\n return [\\n k,\\n numericProperties.query[method]?.includes(k)\\n ? Array.isArray(v)\\n ? v.map((v) => maybeNumber(v))\\n : maybeNumber(v)\\n : v,\\n ];\\n }),\\n );\\n }\\n\\n if (data instanceof FormData) {\\n return [...data].reduce<\\n Record<string, FormDataEntryValue | Array<FormDataEntryValue>>\\n >((map, [key, val]) => {\\n if (key in map) {\\n map[key] = [map[key]].flat().concat(val);\\n } else {\\n map[key] = val;\\n }\\n return map;\\n }, {});\\n }\\n\\n return data;\\n };\\n\\n return {\\n normalizeParams,\\n normalizeSearchParams,\\n payloadResolver,\\n paramsMapper,\\n parametrize,\\n path,\\n href,\\n };\\n};\\n\\nexport const pageRouteMapper = <ParamsT extends readonly unknown[]>(\\n base: string,\\n route: PageRouteSerialized,\\n): RoutePathMethods<ParamsT> => {\\n const toPath = compile(route.pathPattern);\\n\\n const paramsMapper: RoutePathMethods<ParamsT>[\\\"paramsMapper\\\"] = (params) => {\\n return route.params.reduce<Record<string, unknown>>((map, name, i) => {\\n if (Array.isArray(params[i])) {\\n map[name] = params[i].map(String);\\n } else if (params[i] !== undefined) {\\n map[name] = String(params[i]);\\n }\\n return map;\\n }, {});\\n };\\n\\n const parametrize: RoutePathMethods<ParamsT>[\\\"parametrize\\\"] = (params) => {\\n try {\\n return toPath(paramsMapper(params) as never);\\n } catch (error) {\\n console.error(`❗ERROR: Failed building path for ${route.name}`);\\n throw error;\\n }\\n };\\n\\n const path: RoutePathMethods<ParamsT>[\\\"path\\\"] = (params, query, opt) => {\\n const path = join(\\n opt?.prefix === false\\n ? \\\"/\\\"\\n : typeof opt?.prefix === \\\"string\\\"\\n ? opt.prefix\\n : base,\\n parametrize(params),\\n );\\n return query //\\n ? [path, stringifySearchParams(query)].join(\\\"?\\\")\\n : path;\\n };\\n\\n const href: RoutePathMethods<ParamsT>[\\\"href\\\"] = (\\n host,\\n params,\\n query,\\n opt,\\n ) => {\\n return createHost(host) + path(params, query, opt);\\n };\\n\\n return {\\n paramsMapper,\\n parametrize,\\n path,\\n href,\\n };\\n};\\n\";\n//#endregion\n//#region src/templates/core/ssr.ts?raw\nvar ssr_default = \"import { AsyncLocalStorage } from \\\"node:async_hooks\\\";\\n\\nexport type RequestContext = {\\n headers?: HeadersInit;\\n tsqClient?: unknown;\\n error?: unknown;\\n};\\n\\n/**\\n * Request-scoped context store.\\n * */\\nexport const store = new AsyncLocalStorage<RequestContext>();\\n\\n/**\\n * Origin used to absolutize the relative URLs the client produces.\\n * */\\nexport const ssrOrigin = \\\"http://ssr.local\\\";\\n\\nexport const redirectCodes = [\\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\";\n//#endregion\n//#region src/templates/core/types.hbs?raw\nvar types_default = \"export type Override<A, B> = Omit<A, keyof B> & B;\\n\\nexport type StaticParams = {\\n {{#each pageRoutes}}\\n \\\"{{name}}\\\": [ {{serializeParamsTupleElements .}} ];\\n {{/each}}\\n};\\n\\n{{#if pageRoutes.length}}\\nexport type LinkProps =\\n {{#each pageRoutes}}\\n | [ \\\"{{name}}\\\", {{serializeParamsTupleElements .}} ]\\n {{/each}};\\n{{else}}\\nexport type LinkProps = never;\\n{{/if}}\\n\";\n//#endregion\n//#region src/templates/env.d.ts?raw\nvar env_d_default = \"declare module \\\"virtual:kosmo/env\\\" {\\n export const command: \\\"serve\\\" | \\\"build\\\";\\n}\\n\\ndeclare module \\\"virtual:kosmo/backend-app\\\" {\\n import type { FetchApp, NodeApp } from \\\"@kosmojs/core\\\";\\n const backend: FetchApp | NodeApp | undefined;\\n export default backend;\\n}\\n\\ndeclare module \\\"virtual:kosmo/fetch-transport\\\" {\\n import type { Transport } from \\\"@kosmojs/core/fetch\\\";\\n /**\\n * Undefined on the client, where fetch clients fall back to global fetch.\\n * On the SSR bundle it dispatches straight into the backend app, in process.\\n * Supplied by the `kosmo:virtualModules` Vite plugin - there is no file.\\n * */\\n export const transport: Transport | undefined;\\n}\\n\\n/**\\n * Enhances base TypeScript types with JSON Schema validation constraints.\\n * Allows declaring refined types that carry validation metadata for runtime\\n * schema validation while maintaining full TypeScript type safety.\\n *\\n * Useful for generating validation schemas and ensuring\\n * data conforms to specific business rules beyond basic type checking.\\n * */\\ndeclare type VRefine<\\n T extends unknown[] | number | string | object,\\n _ extends T extends unknown[]\\n ? TArrayOptions\\n : T extends number\\n ? TNumberOptions\\n : T extends string\\n ? TStringOptions\\n : TObjectOptions,\\n> = T;\\n\\n/**\\n * Type definitions inspired by and gently adapted from TypeBox.\\n * Original TypeBox created by sinclairzx81: https://github.com/sinclairzx81/typebox\\n * TypeBox is licensed under MIT: https://github.com/sinclairzx81/typebox/blob/main/license\\n *\\n * These types provide JSON Schema compatible type refinements for TypeScript.\\n * */\\ninterface TSchema {}\\n\\n// ------------------------------------------------------------------\\n// ObjectOptions\\n// ------------------------------------------------------------------\\ninterface TObjectOptions {\\n /**\\n * Defines whether additional properties are allowed beyond those explicitly defined in `properties`.\\n */\\n additionalProperties?: TSchema | boolean;\\n /**\\n * The minimum number of properties required in the object.\\n */\\n minProperties?: number;\\n /**\\n * The maximum number of properties allowed in the object.\\n */\\n maxProperties?: number;\\n /**\\n * Defines conditional requirements for properties.\\n */\\n dependencies?: Record<string, boolean | TSchema | string[]>;\\n /**\\n * Specifies properties that *must* be present if a given property is present.\\n */\\n dependentRequired?: Record<string, string[]>;\\n /**\\n * Defines schemas that apply if a specific property is present.\\n */\\n dependentSchemas?: Record<string, TSchema>;\\n /**\\n * Maps regular expressions to schemas properties matching a pattern must validate against the schema.\\n */\\n patternProperties?: Record<string, TSchema>;\\n /**\\n * A schema that all property names within the object must validate against.\\n */\\n propertyNames?: TSchema;\\n}\\n\\n// ------------------------------------------------------------------\\n// ArrayOptions\\n// ------------------------------------------------------------------\\ninterface TArrayOptions {\\n /**\\n * The minimum number of items allowed in the array.\\n */\\n minItems?: number;\\n /**\\n * The maximum number of items allowed in the array.\\n */\\n maxItems?: number;\\n /**\\n * A schema that at least one item in the array must validate against.\\n */\\n contains?: TSchema;\\n /**\\n * The minimum number of array items that must validate against the `contains` schema.\\n */\\n minContains?: number;\\n /**\\n * The maximum number of array items that may validate against the `contains` schema.\\n */\\n maxContains?: number;\\n /**\\n * An array of schemas, where each schema in `prefixItems` validates against items at corresponding positions from the beginning of the array.\\n */\\n prefixItems?: TSchema[];\\n /**\\n * If `true`, all items in the array must be unique.\\n */\\n uniqueItems?: boolean;\\n}\\n\\n// ------------------------------------------------------------------\\n// NumberOptions\\n// ------------------------------------------------------------------\\ninterface TNumberOptions {\\n /**\\n * Specifies an exclusive upper limit for the number (number must be less than this value).\\n */\\n exclusiveMaximum?: number | bigint;\\n /**\\n * Specifies an exclusive lower limit for the number (number must be greater than this value).\\n */\\n exclusiveMinimum?: number | bigint;\\n /**\\n * Specifies an inclusive upper limit for the number (number must be less than or equal to this value).\\n */\\n maximum?: number | bigint;\\n /**\\n * Specifies an inclusive lower limit for the number (number must be greater than or equal to this value).\\n */\\n minimum?: number | bigint;\\n /**\\n * Specifies that the number must be a multiple of this value.\\n */\\n multipleOf?: number | bigint;\\n}\\n\\n// ------------------------------------------------------------------\\n// StringOptions\\n// ------------------------------------------------------------------\\ntype TFormat =\\n | \\\"date-time\\\"\\n | \\\"date\\\"\\n | \\\"duration\\\"\\n | \\\"email\\\"\\n | \\\"hostname\\\"\\n | \\\"idn-email\\\"\\n | \\\"idn-hostname\\\"\\n | \\\"ipv4\\\"\\n | \\\"ipv6\\\"\\n | \\\"iri-reference\\\"\\n | \\\"iri\\\"\\n | \\\"json-pointer-uri-fragment\\\"\\n | \\\"json-pointer\\\"\\n | \\\"json-string\\\"\\n | \\\"regex\\\"\\n | \\\"relative-json-pointer\\\"\\n | \\\"time\\\"\\n | \\\"uri-reference\\\"\\n | \\\"uri-template\\\"\\n | \\\"url\\\"\\n | \\\"uuid\\\";\\n\\ninterface TStringOptions {\\n /**\\n * Specifies the expected string format.\\n *\\n * Common values include:\\n * - `base64` – Base64-encoded string.\\n * - `date-time` – [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time format.\\n * - `date` – [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date (YYYY-MM-DD).\\n * - `duration` – [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) duration format.\\n * - `email` – RFC 5321/5322 compliant email address.\\n * - `hostname` – RFC 1034/1035 compliant host name.\\n * - `idn-email` – Internationalized email address.\\n * - `idn-hostname` – Internationalized host name.\\n * - `ipv4` – IPv4 address.\\n * - `ipv6` – IPv6 address.\\n * - `iri` / `iri-reference` – Internationalized Resource Identifier.\\n * - `json-pointer` / `json-pointer-uri-fragment` – JSON Pointer format.\\n * - `json-string` – String containing valid JSON.\\n * - `regex` – Regular expression syntax.\\n * - `relative-json-pointer` – Relative JSON Pointer format.\\n * - `time` – [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) time (HH:MM:SS).\\n * - `uri-reference` / `uri-template` – URI reference or template.\\n * - `url` – Web URL format.\\n * - `uuid` – RFC 4122 UUID string.\\n *\\n * May also be a custom format string.\\n */\\n format?: TFormat;\\n /**\\n * Specifies the minimum number of characters allowed in the string.\\n * Must be a non-negative integer.\\n */\\n minLength?: number;\\n /**\\n * Specifies the maximum number of characters allowed in the string.\\n * Must be a non-negative integer.\\n */\\n maxLength?: number;\\n /**\\n * Specifies a regular expression pattern that the string value must match.\\n * Can be provided as a string (ECMA-262 regex syntax) or a `RegExp` object.\\n */\\n pattern?: string | RegExp;\\n}\\n\";\n//#endregion\n//#region src/templates/gitignore.hbs?raw\nvar gitignore_default = \"# Ignore all files\\n*\\n\\n# But don't ignore directories (so Git can traverse them)\\n!*/\\n\\n# And don't ignore these files at any depth\\n!cache.json\\n!types.ts\\n\";\n//#endregion\n//#region src/templates/global.d.ts?raw\nvar global_d_default = \"export declare global {\\n interface Window {\\n __KOSMO_HYDRATION_BOOL__: boolean;\\n __KOSMO_HYDRATION_DATA__: Record<string, unknown> | undefined;\\n }\\n}\\n\";\n//#endregion\n//#region src/templates/index.html?raw\nvar templates_default = \"<!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 <link rel=\\\"icon\\\" type=\\\"image/svg+xml\\\" href=\\\"/favicon.svg\\\" />\\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/schemas.hbs?raw\nvar schemas_default = \"// stub schemas, specialized generators supposed to overwrite this file\\nimport type { ValidationSchemas } from \\\"@kosmojs/core\\\";\\nexport type { ValidationSchemas };\\nexport const validationSchemas: ValidationSchemas = {};\\n\";\n//#endregion\n//#region src/tsconfig.ts\nvar generateTsconfig = ({ dependencies, devDependencies }, sourceFolder) => {\n\tconst rootDir = \"${configDir}\";\n\tconst deps = Object.keys({\n\t\t...dependencies,\n\t\t...devDependencies\n\t});\n\tconst compilerOptions = {\n\t\ttypes: [\"vite/client\", ...[\n\t\t\t\"node\",\n\t\t\t\"deno\",\n\t\t\t\"bun\"\n\t\t].flatMap((e) => {\n\t\t\treturn deps.includes(`@types/${e}`) ? [`@types/${e}`] : [];\n\t\t})],\n\t\tmoduleResolution: \"bundler\",\n\t\tmodule: \"ESNext\",\n\t\ttarget: \"ESNext\",\n\t\tstrict: true,\n\t\texactOptionalPropertyTypes: true,\n\t\tnoImplicitAny: true,\n\t\tnoImplicitThis: true,\n\t\tnoImplicitOverride: true,\n\t\tnoImplicitReturns: true,\n\t\tnoUnusedLocals: false,\n\t\tnoUnusedParameters: false,\n\t\tallowArbitraryExtensions: true,\n\t\tallowImportingTsExtensions: true,\n\t\tallowUnreachableCode: false,\n\t\tallowUnusedLabels: false,\n\t\tuseUnknownInCatchVariables: true,\n\t\tnoFallthroughCasesInSwitch: true,\n\t\tnoUncheckedSideEffectImports: true,\n\t\tresolveJsonModule: true,\n\t\tesModuleInterop: true,\n\t\tverbatimModuleSyntax: true,\n\t\tskipLibCheck: true,\n\t\tnoEmit: true\n\t};\n\tif (sourceFolder) return {\n\t\tinclude: [\n\t\t\t`${rootDir}/`,\n\t\t\t`${rootDir}/../../${defaults.libDir}/${sourceFolder}/`,\n\t\t\t`${rootDir}/../../**/*.d.ts`\n\t\t],\n\t\tcompilerOptions: {\n\t\t\t...compilerOptions,\n\t\t\ttypes: [...compilerOptions.types],\n\t\t\tpaths: {\n\t\t\t\t[`${defaults.appPrefix}/*`]: [`${rootDir}/../../*`],\n\t\t\t\t[`${defaults.srcPrefix}/*`]: [`${rootDir}/*`],\n\t\t\t\t[`${defaults.libPrefix}/*`]: [`${rootDir}/../../${defaults.libDir}/${sourceFolder}/*`]\n\t\t\t}\n\t\t}\n\t};\n\treturn {\n\t\tinclude: [`${rootDir}/`],\n\t\texclude: [`${rootDir}/${defaults.srcDir}/`],\n\t\tcompilerOptions: {\n\t\t\t...compilerOptions,\n\t\t\tpaths: { [`${defaults.appPrefix}/*`]: [`${rootDir}/*`] }\n\t\t}\n\t};\n};\n//#endregion\n//#region src/factory.ts\n/**\n* Generates stub files required by various generators.\n* Ensures cross-generator dependencies remain resolvable\n* even if specialized generators supposed to generate these files are not installed.\n* */\nvar factory_default = defineGeneratorFactory((sourceFolder) => {\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { generators, frontend, backend } = sourceFolder.config;\n\tconst start = async () => {\n\t\tconst { dependencies = {}, devDependencies = {} } = await import(resolve(sourceFolder.root, \"package.json\"), { with: { type: \"json\" } }).then((m) => m.default);\n\t\t{\n\t\t\tconst missing = [];\n\t\t\tconst outdated = [];\n\t\t\tconst required = generators.flatMap((generator) => {\n\t\t\t\treturn [\"dependencies\", \"devDependencies\"].flatMap((key) => {\n\t\t\t\t\treturn generator[key] ? Object.entries(typeof generator[key] === \"function\" ? generator[key](generator.options) : generator[key]).flatMap(([name, v]) => {\n\t\t\t\t\t\tconst minVersion = semver.minVersion(v)?.version;\n\t\t\t\t\t\treturn minVersion ? [[\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tminVersion,\n\t\t\t\t\t\t\tkey\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\tfor (const [name, minVersion, key] of required) {\n\t\t\t\tconst rawVersion = dependencies[name] || devDependencies[name];\n\t\t\t\tconst version = rawVersion ? semver.minVersion(rawVersion)?.version : void 0;\n\t\t\t\tif (!rawVersion || !version) missing.push([\n\t\t\t\t\tname,\n\t\t\t\t\tminVersion,\n\t\t\t\t\tkey\n\t\t\t\t]);\n\t\t\t\telse if (semver.lt(version, minVersion)) outdated.push([\n\t\t\t\t\tname,\n\t\t\t\t\tminVersion,\n\t\t\t\t\tkey\n\t\t\t\t]);\n\t\t\t}\n\t\t\tif (missing.length) {\n\t\t\t\tconsole.error(styleText([\"red\", \"italic\"], `There are ${missing.length} missing dependencies, please consider installing them.`));\n\t\t\t\tfor (const key of [\"dependencies\", \"devDependencies\"]) {\n\t\t\t\t\tconst deps = missing.filter((e) => e[2] === key);\n\t\t\t\t\tif (deps.length) console.error(`${key}: ${styleText([\"blue\"], deps.map(([name]) => name).join(\" \"))}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (outdated.length) {\n\t\t\t\tconsole.error(styleText([\"yellow\", \"italic\"], `There are ${outdated.length} outdated dependencies, please consider updating them:`));\n\t\t\t\tconsole.error(outdated.map(([name]) => name).join(\" \"));\n\t\t\t\tconsole.error();\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tawait renderToFile(resolve(sourceFolder.root, \"tsconfig.json\"), JSON.stringify({ extends: `./${defaults.libDir}/tsconfig.json` }, void 0, 2), {}, { overwrite: false });\n\t\t\tawait renderToFile(createPath.lib(\"../tsconfig.json\"), JSON.stringify(generateTsconfig({\n\t\t\t\tdependencies,\n\t\t\t\tdevDependencies\n\t\t\t}), void 0, 2), {});\n\t\t\tawait renderToFile(createPath.src(\"tsconfig.json\"), JSON.stringify({ extends: `../../${defaults.libDir}/${sourceFolder.name}/tsconfig.json` }, void 0, 2), {}, { overwrite: false });\n\t\t\tconst tsconfig = generateTsconfig({\n\t\t\t\tdependencies,\n\t\t\t\tdevDependencies\n\t\t\t}, sourceFolder.name);\n\t\t\tconst compilerOptions = {};\n\t\t\tconst types = new Set(tsconfig.compilerOptions.types || []);\n\t\t\tfor (const { meta } of generators) {\n\t\t\t\tif (meta.jsx) compilerOptions.jsx = meta.jsx;\n\t\t\t\tif (meta.jsxImportSource) compilerOptions.jsxImportSource = meta.jsxImportSource;\n\t\t\t\tfor (const type of meta.types || []) types.add(type);\n\t\t\t}\n\t\t\tawait renderToFile(createPath.lib(\"tsconfig.json\"), JSON.stringify({\n\t\t\t\t...tsconfig,\n\t\t\t\tcompilerOptions: {\n\t\t\t\t\t...tsconfig.compilerOptions,\n\t\t\t\t\t...compilerOptions,\n\t\t\t\t\ttypes: [...types.values()]\n\t\t\t\t}\n\t\t\t}, void 0, 2), {});\n\t\t}\n\t\tfor (const [file, template] of [[\"env.d.ts\", env_d_default], [\"global.d.ts\", global_d_default]]) await renderToFile(createPath.lib(`../${file}`), template, {});\n\t\t/**\n\t\t* deploy a default gitignore file that ignore everything,\n\t\t* except cache.json files; if file exists, do not override.\n\t\t* */\n\t\tawait renderToFile(createPath.lib(\"../.gitignore\"), gitignore_default, {}, { overwrite: false });\n\t\tif (generators.some((e) => e.meta.slot === \"frontend\")) await renderToFile(createPath.src(\"index.html\"), templates_default, { entryDir: defaults.entryDir }, { overwrite: (c) => !c?.trim() });\n\t};\n\tconst generateLibFiles = async (entries) => {\n\t\tconst { renderToFile } = renderFactory({\n\t\t\thelpers: {\n\t\t\t\t...createImportHelpers({ origin: \"lib\" }),\n\t\t\t\t...routeRenderHelpers()\n\t\t\t},\n\t\t\tpartials: { routeMapperPartial: routeMapperPartial_default }\n\t\t});\n\t\tconst apiRoutes = entries.flatMap(({ kind, entry }) => {\n\t\t\treturn kind === \"apiRoute\" ? [entry] : [];\n\t\t}).sort(sortRoutes);\n\t\tconst pageRoutes = entries.flatMap(({ kind, entry }) => {\n\t\t\treturn kind === \"pageRoute\" ? [entry] : [];\n\t\t}).sort(sortRoutes);\n\t\tawait renderToFile(createPath.libCore(\"routes.ts\"), routeMapper_default, {\n\t\t\tapiRoutes,\n\t\t\tpageRoutes\n\t\t});\n\t\tfor (const [file, template] of [\n\t\t\t[\"config.ts\", config_default],\n\t\t\t[\"types.ts\", types_default],\n\t\t\t[\"ssr.ts\", ssr_default],\n\t\t\t[\"index.ts\", core_default]\n\t\t]) await renderToFile(createPath.libCore(file), template, {\n\t\t\tbase: frontend?.base ? JSON.stringify(frontend.base) : \"undefined\",\n\t\t\tbackendBase: backend?.base ? JSON.stringify(backend.base) : \"undefined\",\n\t\t\tbackendAliasPatterns: JSON.stringify(createAliasPatterns(backend?.alias)),\n\t\t\tapiRoutes,\n\t\t\tpageRoutes\n\t\t});\n\t\tfor (const { kind, entry } of entries) if (kind === \"apiRoute\") await renderToFile(createPath.libApi(dirname(entry.file), \"schemas.ts\"), schemas_default, { route: entry }, { overwrite: false });\n\t};\n\treturn {\n\t\tstart,\n\t\twatch: generateLibFiles,\n\t\tbuild: generateLibFiles,\n\t\tvirtualModules() {\n\t\t\tconst { createImport } = pathResolver(sourceFolder);\n\t\t\treturn [{\n\t\t\t\tspecifier: \"virtual:kosmo/backend-app\",\n\t\t\t\tcsr: \"export default undefined;\",\n\t\t\t\tssr: generators.some((e) => e.meta.slot === \"backend\") ? `export { default } from \"${createImport.api([\"app\"], { origin: \"lib\" })}\";` : \"export default undefined;\"\n\t\t\t}];\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\n/**\n* Generates stub files required by various generators.\n* Ensures cross-generator dependencies remain resolvable\n* even if specialized generators supposed to generate these files are not installed.\n* */\nvar src_default = defineGenerator({\n\tmeta: { name: \"Core\" },\n\tdependencies: { \"path-to-regexp\": package_default.devDependencies[\"path-to-regexp\"] },\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { createWatchedApiRouteEntriesFilter, defineGenerator, defineGeneratorFactory, pathResolver, renderFactory, sortRoutes } from \"@kosmojs/lib\";\nimport { HTTPMethods } from \"@kosmojs/core/fetch\";\nimport { routeRenderHelpers } from \"@kosmojs/core/generators\";\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/fetch-generator\",\n\tversion: \"0.3.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\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\tdependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\"\n\t},\n\tdevDependencies: { \"light-my-request\": \"^6.6.0\" }\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}}\\n \\\"{{name}}\\\": {{id}},\\n{{/each}}\\n}\\n\";\n//#endregion\n//#region src/templates/lib/route.hbs?raw\nvar route_default = \"import fetchFactory from \\\"@kosmojs/core/fetch\\\";\\n\\nimport { backendBase, apiRouteMap } from \\\"{{ createImport 'libCore' }}\\\";\\nimport { transport } from \\\"virtual:kosmo/fetch-transport\\\";\\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 payloadResolver,\\n path,\\n href,\\n} = apiRouteMap[\\\"{{route.name}}\\\"];\\n\\nconst fetchApi = fetchFactory(backendBase, { transport });\\n\\n{{#each routeMethods}}\\nexport const {{method}} = (\\n _params{{#if ../route.optionalParams}}?{{/if}}: MaybeWrapped<ParamsT>,\\n _payload?: {\\n {{#each payloadTypes}}\\n {{target}}: MaybeWrapped<{{id}}>,\\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 // validate only on client, skip double validation in SSR mode\\n if (!import.meta.env.SSR) {\\n if (validationSchemas.params) {\\n validationSchemas.params.validate(\\n paramsMapper(params as never, { coerceNumbers: true }),\\n );\\n }\\n {{#each payloadTypes}}\\n if (validationSchemas.{{target}}?.{{method}}) {\\n validationSchemas.{{target}}.{{method}}.validate(\\n payloadResolver(payload as never, \\\"{{target}}\\\", \\\"{{../method}}\\\"),\\n );\\n }\\n {{/each}}\\n }\\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 validationSchemas,\\n};\\n\";\n//#endregion\n//#region src/templates/lib/ssr.js?raw\nvar ssr_default = \"import backend from \\\"virtual:kosmo/backend-app\\\";\\n\\nimport {\\n redirectCodes,\\n ssrOrigin,\\n store,\\n} from \\\"{{ createImport 'libCore' 'ssr' }}\\\";\\n\\n/**\\n * Maximum redirect hops, mirroring the fetch spec limit.\\n * */\\nexport const maxRedirects = 5;\\n\\n/**\\n * HeadersProvider for createTransport.\\n * */\\nconst headersProvider = () => {\\n return store.getStore()?.headers;\\n};\\n\\nconst createDispatch = (app) => {\\n return typeof app.fetch === \\\"function\\\"\\n ? app.fetch\\n : async (request) => {\\n const { inject } = await import(\\\"light-my-request\\\");\\n\\n /**\\n * Node dispatch: serializes the web Request into light-my-request's\\n * injection format and lifts the injected response back into a web Response.\\n * */\\n const url = new URL(request.url);\\n\\n const payload = [\\\"GET\\\", \\\"HEAD\\\"].includes(request.method)\\n ? undefined\\n : Buffer.from(await request.arrayBuffer());\\n\\n const result = await inject(app.callback(), {\\n method: request.method,\\n url: url.pathname + url.search,\\n headers: Object.fromEntries(request.headers),\\n ...(payload?.length ? { payload } : {}),\\n });\\n\\n const headers = new Headers();\\n\\n for (const [key, value] of Object.entries(result.headers)) {\\n for (const entry of Array.isArray(value) ? value : [value]) {\\n if (entry !== undefined) {\\n headers.append(key, String(entry));\\n }\\n }\\n }\\n\\n /**\\n * 204/304 responses must not carry a body per the Response\\n * constructor contract.\\n * */\\n const body = [204, 304].includes(result.statusCode)\\n ? null\\n : new Uint8Array(result.rawPayload);\\n\\n return new Response(body, {\\n status: result.statusCode,\\n statusText: result.statusMessage,\\n headers,\\n });\\n };\\n};\\n\\nconst createTransport = (app) => {\\n const dispatch = createDispatch(app);\\n\\n /**\\n * Build a fetch-compatible transport that dispatches requests\\n * directly into the given app - no sockets, no interception.\\n * Redirects are followed in-process, including the 303 and 301/302 method rewrite to GET.\\n * */\\n return async (input, init) => {\\n /**\\n * Request-scoped headers act as defaults: anything set explicitly\\n * on the call itself wins over forwarded values.\\n * */\\n const headers = new Headers(init?.headers);\\n\\n // When the body is FormData, the Request constructor sets a multipart\\n // Content-Type with a fresh boundary. A forwarded Content-Type default would\\n // override that boundary and desync it from the serialized body, so never\\n // forward Content-Type for FormData bodies.\\n const isFormBody = init?.body instanceof FormData;\\n\\n for (const [key, value] of new Headers(headersProvider() || undefined)) {\\n if (isFormBody && key.toLowerCase() === \\\"content-type\\\") {\\n continue;\\n }\\n if (!headers.has(key)) {\\n headers.set(key, value);\\n }\\n }\\n\\n let request = new Request(new URL(String(input), ssrOrigin), {\\n ...init,\\n headers,\\n });\\n\\n /**\\n * Bodies are buffered once so they can be replayed across\\n * 307/308 hops; the client only ever sends strings, FormData\\n * and buffer-ish payloads, so this is safe and cheap.\\n * */\\n const body = [\\\"GET\\\", \\\"HEAD\\\"].includes(request.method)\\n ? undefined\\n : await request.arrayBuffer();\\n\\n for (let hop = 0; ; hop++) {\\n if (hop === maxRedirects) {\\n throw new TypeError(\\\"Failed to fetch: too many redirects\\\");\\n }\\n\\n const response = await dispatch(\\n body === undefined || request.method === \\\"GET\\\"\\n ? new Request(request, { body: null })\\n : new Request(request, { body }),\\n );\\n\\n const location = response.headers.get(\\\"location\\\");\\n\\n if (!location || !redirectCodes.includes(response.status)) {\\n return response;\\n }\\n\\n const method =\\n response.status === 303 ||\\n ([301, 302].includes(response.status) && request.method === \\\"POST\\\")\\n ? \\\"GET\\\"\\n : request.method;\\n\\n request = new Request(new URL(location, request.url), {\\n method,\\n headers: request.headers,\\n });\\n }\\n };\\n};\\n\\nconst ssrTransport = backend ? createTransport(backend) : undefined;\\n\\nexport const transport = ssrTransport\\n ? async (input, init) => {\\n try {\\n const response = await ssrTransport(input, init);\\n if (response?.ok) {\\n return response;\\n }\\n // the rethrow here needed cause ssrTransport does not throw on non-2xx responses\\n throw new SSRFetchError([\\n input,\\n response,\\n typeof response?.text === \\\"function\\\"\\n ? await response.text()\\n : response?.statusText,\\n ]);\\n } catch (error) {\\n /**\\n * Capture the fetch error at the transport level and stash it on the request store.\\n * Some frameworks - Solid notably - swallow a rejecting loader and still emit a partial render tree.\\n * Storing the error here keeps it observable regardless of how the framework handles the loader rejection.\\n * */\\n const storage = store.getStore();\\n if (storage) {\\n storage.error = error;\\n }\\n throw error;\\n }\\n }\\n : undefined; // let fetch clients pick the transport\\n\\nclass SSRFetchError extends Error {\\n constructor([input, response, message]) {\\n const pathname = pathnameOf(input);\\n const status = response.status ?? \\\"unknown\\\";\\n super(`${pathname}: ${status} [ ${message} ]`.trim());\\n this.name = \\\"SSRFetchError\\\";\\n }\\n}\\n\\nconst pathnameOf = (input) => {\\n try {\\n if (typeof input === \\\"string\\\") {\\n return new URL(input, \\\"http://x\\\").pathname;\\n }\\n if (input instanceof URL) {\\n return input.pathname;\\n }\\n if (input instanceof Request) {\\n return new URL(input.url).pathname;\\n }\\n } catch {}\\n return String(input);\\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((sourceFolder) => {\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { render: renderLibTpl, 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\") for (const { id, status, body, resolvedType } of def.variants) {\n\t\t\t\tif (!body || Math.floor(status / 100) !== 2) continue;\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\telse {\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 supportedMethods = Object.keys(HTTPMethods);\n\t\t\tconst routeMethods = entry.methods.flatMap((method) => {\n\t\t\t\tif (!supportedMethods.includes(method)) return [];\n\t\t\t\treturn [{\n\t\t\t\t\tmethod,\n\t\t\t\t\tpayloadTypes: validationTypes.filter((e) => {\n\t\t\t\t\t\treturn e.method === method ? ![\n\t\t\t\t\t\t\t\"headers\",\n\t\t\t\t\t\t\t\"cookies\",\n\t\t\t\t\t\t\t\"response\"\n\t\t\t\t\t\t].includes(e.target) : false;\n\t\t\t\t\t}),\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 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\tresponseTypes\n\t\t\t});\n\t\t}\n\t};\n\treturn {\n\t\tasync start() {\n\t\t\tfor (const [file, template] of [[\"unwrap.ts\", unwrap_default]]) await deployLibFile(createPath.lib(file), template, {});\n\t\t},\n\t\tasync watch(entries, event) {\n\t\t\tawait generateLibFiles(entries, entries.filter(createWatchedApiRouteEntriesFilter(event, [\"create\", \"update\"])));\n\t\t},\n\t\tasync build(entries) {\n\t\t\tawait generateLibFiles(entries, entries);\n\t\t},\n\t\tvirtualModules() {\n\t\t\treturn [{\n\t\t\t\tspecifier: \"virtual:kosmo/fetch-transport\",\n\t\t\t\tcsr: `export const transport = undefined;`,\n\t\t\t\tssr: renderLibTpl(ssr_default, {})\n\t\t\t}];\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator({\n\tmeta: {\n\t\tname: \"Fetch\",\n\t\tslot: \"fetch\"\n\t},\n\tdependencies: { \"light-my-request\": package_default.devDependencies[\"light-my-request\"] },\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { createH3Pattern, createPathPattern, createWatchedApiRouteEntriesFilter, defineGenerator, defineGeneratorFactory, pathResolver, pathTokensFactory, renderFactory, sortRoutes } from \"@kosmojs/lib\";\nimport { posix } from \"node:path\";\nimport crc from \"crc/crc32\";\nimport { createTemplateResolver } from \"@kosmojs/core\";\nimport { routeRenderHelpers } from \"@kosmojs/core/generators\";\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/h3-generator\",\n\tversion: \"0.3.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\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/h3-generator\"\n\t},\n\tdependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"crc\": \"^4.3.2\"\n\t},\n\tdevDependencies: {\n\t\t\"h3\": \"2.0.1-rc.31\",\n\t\t\"vite\": \"^8.2.2\"\n\t}\n};\n//#endregion\n//#region src/templates/lib/@api/app.ts?raw\nvar app_default$1 = \"import { H3, type Middleware } from \\\"h3\\\";\\n\\nimport type { Route, RouteDebugOption } from \\\"@kosmojs/core/api\\\";\\n\\n/**\\n * The interface is a nameable symbol of this module, emit stops here and never chases through to the class.\\n * */\\nexport interface App extends H3 {}\\n\\nexport type AppOptions = ConstructorParameters<typeof H3>[0] & {\\n debug?: RouteDebugOption;\\n};\\n\\nexport function appFactory(\\n routes: Array<Route<Middleware>>,\\n options: AppOptions,\\n): App;\\n\\nexport function appFactory(\\n routes: Array<Route<Middleware>>,\\n fn: (a: { app: App }) => void,\\n): App;\\n\\nexport function appFactory(\\n routes: Array<Route<Middleware>>,\\n options: AppOptions,\\n fn: (a: { app: App }) => void,\\n): App;\\n\\nexport function appFactory(\\n routes: Array<Route<Middleware>>,\\n ...rest: Array<unknown>\\n): App {\\n const [options, fn] = typeof rest[0] === \\\"function\\\" ? [{}, rest[0]] : rest;\\n\\n const { debug = undefined, ...appOptions } = {\\n ...(options ? { ...options } : {}),\\n };\\n\\n const app = new H3(appOptions);\\n\\n if (typeof fn === \\\"function\\\") {\\n fn({ app });\\n }\\n\\n for (const route of routes) {\\n if (typeof debug === \\\"function\\\") {\\n (debug as Function)(route.debug, route);\\n } else if (debug) {\\n console.log(route.debug[typeof debug === \\\"string\\\" ? debug : \\\"full\\\"]);\\n }\\n\\n // last middleware is the handler\\n const handler = route.middleware.at(-1);\\n\\n if (handler) {\\n app.on(route.method, route.path, handler as never, {\\n middleware: route.middleware.slice(0, -1),\\n });\\n if (\\n route.method === \\\"GET\\\" &&\\n !routes.some((e) => e.path === route.path && e.method === \\\"HEAD\\\")\\n ) {\\n /**\\n * Register HEAD against the sibling GET handler,\\n * matching the HEAD-via-GET dispatch hono and koa provide natively.\\n * */\\n app.on(\\\"HEAD\\\", route.path, handler as never, {\\n middleware: route.middleware.slice(0, -1),\\n });\\n }\\n }\\n }\\n\\n const routesByPath = routes.reduce<Record<string, Array<Route<Middleware>>>>(\\n (map, route) => {\\n if (!map[route.path]) {\\n map[route.path] = [];\\n }\\n map[route.path].push(route);\\n return map;\\n },\\n {},\\n );\\n\\n for (const [path, routes] of Object.entries(routesByPath)) {\\n const methods = routes.map((e) => e.method);\\n\\n app.all(path, (event) => {\\n const allowedMethods = new Set([...methods, \\\"OPTIONS\\\"]);\\n\\n if (methods.includes(\\\"GET\\\")) {\\n allowedMethods.add(\\\"HEAD\\\");\\n }\\n\\n const status = event.req.method === \\\"OPTIONS\\\" ? 204 : 405;\\n\\n return new Response(undefined, {\\n status,\\n headers: { Allow: [...allowedMethods].join(\\\", \\\") },\\n });\\n });\\n }\\n\\n return app;\\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 H3Event, HTTPError } from \\\"h3\\\";\\n\\nimport { ValidationError } from \\\"@kosmojs/core/errors\\\";\\n\\ntype ErrorHandler = (\\n error: any,\\n event: H3Event,\\n) => Promise<Response> | Response;\\n\\nexport type ErrorHandlerFactory = (handler: ErrorHandler) => ErrorHandler;\\n\\nexport const errorHandlerFactory: ErrorHandlerFactory = (handler) => {\\n // H3 wraps errors in its own HTTPError with the original error as `cause`\\n return (error, event) => {\\n return handler(\\n error instanceof HTTPError\\n ? error.cause instanceof ValidationError\\n ? error.cause\\n : error\\n : error,\\n event,\\n );\\n };\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@api/listener.ts?raw\nvar listener_default = \"import { createListener } from \\\"./server\\\";\\n\\nimport app from \\\"{{ createImport 'api' 'app' }}\\\";\\n\\n/**\\n * Entry for the `dist/<folder>/api/listener.js` bundle.\\n * Exposes this folder's API as a plain node:http listener, mounted by `dist/run.js`\\n * next to the other folders. Nothing here listens on a port - `server.ts` does that.\\n * */\\nexport default createListener(app);\\n\";\n//#endregion\n//#region src/templates/lib/@api/parsers.ts?raw\nvar parsers_default = \"import { type H3Event, readBody } from \\\"h3\\\";\\n\\nimport {\\n parseCookies,\\n parseSearchParams,\\n type RequestBodyTarget,\\n type RequestMetadataTarget,\\n} from \\\"@kosmojs/core\\\";\\n\\nexport const metaparsers: {\\n [T in RequestMetadataTarget]: (event: H3Event) => unknown;\\n} = {\\n query(event) {\\n return parseSearchParams(event.url);\\n },\\n\\n headers(event) {\\n return Object.fromEntries(event.req.headers);\\n },\\n\\n cookies(event) {\\n return parseCookies(Object.fromEntries(event.req.headers));\\n },\\n};\\n\\nexport const bodyparsers: {\\n [T in RequestBodyTarget]: (event: H3Event) => Promise<unknown>;\\n} = {\\n json(event) {\\n return event.req.json();\\n },\\n\\n form(event) {\\n return readBody(event, { type: \\\"formData\\\" });\\n },\\n\\n raw(event) {\\n return event.req.text();\\n },\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@api/router.ts?raw\nvar router_default = \"import { command } from \\\"virtual:kosmo/env\\\";\\nimport type { Middleware } from \\\"h3\\\";\\n\\nimport type {\\n RequestBodyTarget,\\n RequestMetadataTarget,\\n RequestValidationTarget,\\n ValidationErrorEntry,\\n} from \\\"@kosmojs/core\\\";\\nimport {\\n type CreateRouteMiddleware,\\n createRoutes,\\n type HTTPMethod,\\n StateKey,\\n} from \\\"@kosmojs/core/api\\\";\\nimport { ValidationError } from \\\"@kosmojs/core/errors\\\";\\n\\nimport {\\n type DefaultContext,\\n type ParameterizedEvent,\\n type ParameterizedMiddleware,\\n use,\\n} from \\\"../api\\\";\\nimport { bodyparsers, metaparsers } from \\\"./parsers\\\";\\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 `event.bodyparser` (lazy, cached) and `event.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, validationSchemas, normalizeParams, normalizeSearchParams }) => {\\n const validationMiddleware = [\\n /**\\n * Extends H3 event with:\\n *\\n * - `event.metaparser[target]()` - lazy, cached meta parsers.\\n * Each parser (query, headers, cookies) runs at most once per request;\\n * subsequent calls return the cached result.\\n *\\n * - `event.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 * - `event.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 `event[StateKey]` (a Symbol-keyed Map) to keep it\\n * hidden from public API surface and serialization.\\n * */\\n use(\\n function useExtendContext(event, next) {\\n if (!event[StateKey]) {\\n // initialize per-request cache with empty params\\n // (later populated by useValidateParams)\\n event[StateKey] = new Map([[\\\"params\\\", {}]]);\\n\\n Object.defineProperty(event, \\\"metaparser\\\", {\\n value: Object.entries(metaparsers).reduce<{\\n [T in RequestMetadataTarget]?: () => unknown;\\n }>((map, entry) => {\\n const [target, parser] = entry as [\\n RequestMetadataTarget,\\n Function,\\n ];\\n map[target] = () => {\\n if (!event[StateKey].has(target)) {\\n event[StateKey].set(\\n target,\\n target === \\\"query\\\"\\n ? normalizeSearchParams(\\n parser(event),\\n event.req.method === \\\"HEAD\\\"\\n ? \\\"GET\\\"\\n : event.req.method,\\n )\\n : parser(event),\\n );\\n }\\n return event[StateKey].get(target);\\n };\\n return map;\\n }, {}),\\n enumerable: true,\\n });\\n\\n Object.defineProperty(event, \\\"bodyparser\\\", {\\n value: Object.entries(bodyparsers).reduce<{\\n [T in RequestBodyTarget]?: () => Promise<unknown>;\\n }>((map, entry) => {\\n const [target, parser] = entry as [RequestBodyTarget, Function];\\n map[target] = async () => {\\n if (!event[StateKey].has(target)) {\\n event[StateKey].set(target, await parser(event));\\n }\\n return event[StateKey].get(target);\\n };\\n return map;\\n }, {}),\\n enumerable: true,\\n });\\n\\n Object.defineProperty(event, \\\"validated\\\", {\\n get() {\\n return Object.fromEntries(event[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 `event.validated.params`\\n * reflects the normalized (and validated) values.\\n * */\\n use(\\n function useValidateParams(event, next) {\\n const normalizedParams = normalizeParams(event.url.pathname);\\n validationSchemas.params?.validate(normalizedParams);\\n event[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(event, next) {\\n const variants =\\n validationSchemas.response?.[\\n event.req.method === \\\"HEAD\\\" ? \\\"GET\\\" : event.req.method\\n ] || [];\\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 (command === \\\"build\\\") {\\n // production build - skip if undefined or explicitly set to false\\n if (runtimeValidation === undefined || runtimeValidation === false) {\\n return next();\\n }\\n } else {\\n // dev mode - 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 const body = await next();\\n\\n /**\\n * H3 builds the actual Response AFTER the middleware chain completes,\\n * so at this point event.res only reflects what handlers set explicitly.\\n * Reconstruct what will be sent instead: a returned Response is authoritative;\\n * otherwise an unset status means 200, and the content type follows H3's\\n * serialization rules for the returned value (string -> text, object -> JSON).\\n * */\\n const rawResponse = body instanceof Response ? body : undefined;\\n\\n const response: {\\n status: number;\\n contentType: string | null;\\n body?: unknown;\\n } = {\\n status: rawResponse?.status ?? event.res.status ?? 200,\\n contentType:\\n rawResponse?.headers.get(\\\"Content-Type\\\") ??\\n event.res.headers.get(\\\"Content-Type\\\") ??\\n (typeof body === \\\"string\\\"\\n ? \\\"text/plain\\\"\\n : body === undefined || body === null\\n ? null\\n : \\\"application/json\\\"),\\n };\\n\\n // validate only 2xx responses\\n if (Math.floor(response.status / 100) !== 2) {\\n return;\\n }\\n\\n // Validate body only for JSON variants\\n if (variants.some((e) => e.contentType?.includes(\\\"json\\\"))) {\\n response.body = rawResponse\\n ? await rawResponse\\n .clone()\\n .json()\\n .catch(() => undefined)\\n : 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 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 (event.query, event.headers, or event.bodyparser)\\n * 4. Validates via `schema.validate()` which throws on failure\\n *\\n * Body targets (json, form, raw) go through `event.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 event: ParameterizedEvent<Record<string, string>, DefaultContext>,\\n ) => Promise<unknown>\\n > = {\\n query: async (event) => event.metaparser.query(),\\n headers: async (event) => event.metaparser.headers(),\\n cookies: async (event) => event.metaparser.cookies(),\\n json: async (event) => event.bodyparser.json(),\\n form: async (event) => event.bodyparser.form(),\\n raw: async (event) => event.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 (event, next) => {\\n const schema = {\\n ...validationSchemas[target]?.[\\n event.req.method === \\\"HEAD\\\" ? \\\"GET\\\" : event.req.method\\n ],\\n };\\n if (schema.validate && schema.runtimeValidation !== false) {\\n schema.validate(await loadData(event 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, Middleware>(\\n routeSources,\\n {\\n globalMiddleware: globalMiddleware as never,\\n createRouteMiddleware,\\n },\\n);\\n\";\n//#endregion\n//#region src/templates/lib/@api/routes.hbs?raw\nvar routes_default = \"import { posix } from \\\"node:path\\\";\\n\\nimport type { RouteSource } from \\\"@kosmojs/core/api\\\";\\n\\nimport {\\n backendBase,\\n apiRouteMap,\\n apiRouteMapper,\\n // needed for cascadingMiddleware\\n type Override,\\n} from \\\"{{ createImport 'libCore' }}\\\";\\n\\n{{#each routes}}\\nimport {{id}} from \\\"{{ createImport 'api' file }}\\\";\\nimport { validationSchemas as {{id}}_schemas } from \\\"{{ createImport 'libApi' basename 'schemas' }}\\\";\\n{{/each}}\\n\\n{{#each cascadingMiddleware}}\\nimport {{id}}, { type UseT as UseT{{id}} } from \\\"{{ createImport 'api' file }}\\\";\\n{{/each}}\\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 {{#if alias}}\\n ...apiRouteMapper(\\\"/\\\", { ...{{serializeApiRoute .}}, pathPattern: \\\"{{aliasPattern}}\\\" }),\\n path: \\\"{{alias}}\\\",\\n pathPattern: \\\"{{alias}}\\\",\\n {{else}}\\n ...apiRouteMap[\\\"{{name}}\\\"],\\n path: posix.join(backendBase, \\\"{{path}}\\\"),\\n pathPattern: posix.join(backendBase, \\\"{{pathPattern}}\\\"),\\n {{/if}}\\n name: \\\"{{name}}\\\",\\n file: \\\"{{file}}\\\",\\n cascadingMiddleware: [ {{#each cascadingMiddleware}}{{id}}, {{/each}}].flat() as Array<never>,\\n definitionItems: {{id}} as never,\\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 type { IncomingMessage, ServerResponse } from \\\"node:http\\\";\\nimport { parseArgs, styleText } from \\\"node:util\\\";\\n\\nimport { serve as h3serve } from \\\"h3\\\";\\nimport { toNodeHandler } from \\\"h3/node\\\";\\n\\nimport type { App } from \\\"./app\\\";\\n\\nexport type NodeListener = (req: IncomingMessage, res: ServerResponse) => void;\\n\\n/**\\n * Wrap the app into a node:http request listener.\\n * Used by dist/run.js to mount this folder's API next to other folders;\\n * the standalone server (`serve`) binds the app through h3's own adapter instead.\\n * */\\nexport const createListener = <T extends App>(app: T): NodeListener => {\\n return toNodeHandler(app);\\n};\\n\\ntype Handles = {\\n port?: number | undefined;\\n onListen?: () => Promise<void>;\\n};\\n\\nconst getListenHandles = async (opt?: Handles) => {\\n const { port } = opt\\n ? opt\\n : parseArgs({\\n options: {\\n port: {\\n type: \\\"string\\\",\\n short: \\\"p\\\",\\n },\\n },\\n }).values;\\n\\n if (![port].some(Boolean)) {\\n throw new Error(\\\"Please provide -p/--port number\\\");\\n }\\n\\n const onListen = async () => {\\n console.log(\\n `\\\\n ✨ Server Started ${styleText([\\\"dim\\\"], \\\"[ %s ]\\\")}`,\\n `port: ${port}`,\\n );\\n };\\n\\n return {\\n port: Number(port),\\n onListen: opt?.onListen || onListen,\\n };\\n};\\n\\nexport const serve = async <T extends App>(app: T, opt?: Handles) => {\\n const { port, onListen } = await getListenHandles(opt);\\n\\n const server = h3serve(app, { port });\\n await server.ready().then(onListen);\\n\\n return server as never;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/api.ts?raw\nvar api_default = \"import type { H3Event, H3EventContext } from \\\"h3\\\";\\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 { RouteMap } from \\\"./@api/routes\\\";\\n\\nexport interface DefaultContext extends H3EventContext {}\\n\\ntype MaybePromise<T = unknown> = T | Promise<T>;\\n\\ntype Next = () => MaybePromise<unknown | undefined>;\\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 ParameterizedEvent<\\n ParamsT,\\n ContextT,\\n VDefs extends ValidationDefmap = {},\\n VOpts extends ValidationOptmap = {},\\n> = H3Event & { context: DefaultContext } & ContextT &\\n ExtendContext<ParamsT, VDefs, VOpts>;\\n\\nexport type ParameterizedMiddleware<\\n ParamsT = Record<string, string>,\\n ContextT = Record<string, unknown>,\\n> = (\\n event: ParameterizedEvent<ParamsT, ContextT>,\\n next: Next,\\n) => MaybePromise<unknown>;\\n\\nexport type RouteHandler<\\n ParamsT,\\n ContextT,\\n VDefs extends ValidationDefmap,\\n VOpts extends ValidationOptmap = {},\\n> = (\\n event: ParameterizedEvent<ParamsT, ContextT, VDefs, VOpts>,\\n) => MaybePromise<ValidatedResponseBodies<VDefs>>;\\n\\nexport type DefineRouteFactory<ParamsT, ContextT> = (\\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, ContextT>\\n | Array<ParameterizedMiddleware<ParamsT, ContextT>>,\\n options?: UseOptions,\\n ) => MiddlewareDefinition<ParameterizedMiddleware<ParamsT, ContextT>>;\\n } & {\\n [M in HTTPMethod]: <\\n VDefs extends ValidationDefmap,\\n VOpts extends ValidationOptmap = {},\\n >(\\n handler:\\n | RouteHandler<ParamsT, ContextT, VDefs, VOpts>\\n | Array<RouteHandler<ParamsT, ContextT, VDefs, VOpts>>,\\n ) => HandlerDefinition<ParameterizedMiddleware<ParamsT, ContextT>>;\\n },\\n) => Array<RouteDefinitionItem<ParameterizedMiddleware<ParamsT, ContextT>>>;\\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 = <ContextT = DefaultContext>(\\n middleware:\\n | ParameterizedMiddleware<Record<string, string>, ContextT>\\n | Array<ParameterizedMiddleware<Record<string, string>, ContextT>>,\\n options?: UseOptions,\\n) => {\\n return createUse<ParameterizedMiddleware<Record<string, string>, ContextT>>(\\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 ContextT extends object = object,\\n>(\\n factory: DefineRouteFactory<\\n ParamsMap<RouteMap[R][\\\"paramsMappings\\\"], ParamsD>,\\n ContextT & RouteMap[R][\\\"cascadingState\\\"]\\n >,\\n) => Array<\\n RouteDefinitionItem<\\n ParameterizedMiddleware<\\n ParamsMap<RouteMap[R][\\\"paramsMappings\\\"], ParamsD>,\\n ContextT & RouteMap[R][\\\"cascadingState\\\"]\\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 { appFactory as default } 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 { onError } from \\\"h3\\\";\\n\\nimport appFactory, { routes } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\nimport defaultErrorHandler from \\\"./errors\\\";\\n\\nexport default appFactory(routes, ({ app }) => {\\n app.use(onError(defaultErrorHandler));\\n});\\n\";\n//#endregion\n//#region src/templates/src/dev.ts?raw\nvar dev_default = \"import { toNodeHandler } from \\\"h3/node\\\";\\n\\nimport app from \\\"./app\\\";\\n\\nimport { devSetup } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\n\\nexport default devSetup({\\n requestHandler() {\\n return toNodeHandler(app);\\n },\\n teardownHandler() {\\n // close db connections, server sockets etc.\\n },\\n});\\n\\nprocess.on(\\\"unhandledRejection\\\", (reason) => {\\n console.error(\\\"💥 UNHANDLED REJECTION\\\");\\n console.error(\\\"Reason:\\\", reason);\\n process.exit(1);\\n});\\n\";\n//#endregion\n//#region src/templates/src/env.d.ts?raw\nvar env_d_default = \"export declare module \\\"{{ createImport 'libApi' }}\\\" {\\n interface DefaultContext {}\\n}\\n\";\n//#endregion\n//#region src/templates/src/errors.ts?raw\nvar errors_default = \"import { ValidationError } from \\\"@kosmojs/core/errors\\\";\\nimport { HTTPError } from \\\"h3\\\";\\n\\nimport { errorHandlerFactory } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\n\\nexport default errorHandlerFactory(async (error, event) => {\\n const [status, message = \\\"Unknown error occurred\\\"] = 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 const accept = event.req.headers.get(\\\"accept\\\");\\n\\n return accept?.includes(\\\"application/json\\\")\\n ? new Response(JSON.stringify({ error: message }), {\\n status,\\n headers: { \\\"Content-Type\\\": \\\"application/json\\\" },\\n })\\n : new Response(message, {\\n status,\\n headers: { \\\"Content-Type\\\": \\\"text/plain\\\" },\\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 (event) => {\\n return \\\"{{route.name}} route starts here - replace this response with real logic.\\\";\\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 UseT = {};\\n\\nexport default [\\n use<UseT>(async (event, next) => {\\n return next();\\n }),\\n];\\n\";\n//#endregion\n//#region src/templates/src/server.ts?raw\nvar server_default = \"import { serve } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\nimport app from \\\"./app\\\";\\n\\nawait serve(app);\\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(event, next) {\\n return next();\\n }),\\n];\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((sourceFolder) => {\n\tconst { backend } = sourceFolder.config;\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\t...routeRenderHelpers(),\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 }) => `UseT${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(backend?.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 ? posix.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.h3Pattern,\n\t\t\t\tbasename: entry.name,\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({ ...backend?.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\tbasename: entry.name,\n\t\t\t\t\tid: `${baseRoute.id}_${crc(url)}`,\n\t\t\t\t\talias: posix.join(\"/\", createH3Pattern(pathTokens)),\n\t\t\t\t\taliasPattern: 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: routesWithAliases,\n\t\t\tcascadingMiddleware\n\t\t});\n\t};\n\treturn {\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/parsers.ts\", parsers_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/listener.ts\", listener_default],\n\t\t\t\t[\"@api/router.ts\", router_default],\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[\"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[\"server.ts\", server_default],\n\t\t\t\t[\"use.ts\", use_default],\n\t\t\t\t[\"env.d.ts\", env_d_default]\n\t\t\t]) await deploySrcFile(createPath.api(file), template, {}, { overwrite });\n\t\t},\n\t\tasync watch(entries, event) {\n\t\t\tawait generateSrcFiles(entries.filter(createWatchedApiRouteEntriesFilter(event, [\"create\"])));\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({\n\tmeta: {\n\t\tname: \"H3\",\n\t\tslot: \"backend\"\n\t},\n\tdependencies: { h3: package_default.devDependencies.h3 },\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { createHonoPattern, createPathPattern, createWatchedApiRouteEntriesFilter, defineGenerator, defineGeneratorFactory, pathResolver, pathTokensFactory, renderFactory, sortRoutes } from \"@kosmojs/lib\";\nimport { posix } from \"node:path\";\nimport crc from \"crc/crc32\";\nimport { createTemplateResolver } from \"@kosmojs/core\";\nimport { routeRenderHelpers } from \"@kosmojs/core/generators\";\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/hono-generator\",\n\tversion: \"0.3.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\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: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"crc\": \"^4.3.2\"\n\t},\n\tdevDependencies: {\n\t\t\"@hono/node-server\": \"^2.1.1\",\n\t\t\"hono\": \"^4.13.7\",\n\t\t\"vite\": \"^8.2.2\"\n\t}\n};\n//#endregion\n//#region src/templates/lib/@api/app.ts?raw\nvar app_default$1 = \"import { Hono, type MiddlewareHandler } from \\\"hono\\\";\\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\\\";\\n\\nimport type { Route, RouteDebugOption } 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 debug?: RouteDebugOption;\\n};\\n\\nexport function appFactory(\\n routes: Array<Route<MiddlewareHandler>>,\\n options: AppOptions,\\n): App;\\n\\nexport function appFactory(\\n routes: Array<Route<MiddlewareHandler>>,\\n fn: (a: { app: App; router: Router<never> }) => void,\\n): App;\\n\\nexport function appFactory(\\n routes: Array<Route<MiddlewareHandler>>,\\n options: AppOptions,\\n fn: (a: { app: App; router: Router<never> }) => void,\\n): App;\\n\\nexport function appFactory(\\n routes: Array<Route<MiddlewareHandler>>,\\n ...rest: Array<unknown>\\n): App {\\n const [options, fn] = typeof rest[0] === \\\"function\\\" ? [{}, rest[0]] : rest;\\n\\n const router = new SmartRouter({\\n routers: [new RegExpRouter(), new TrieRouter()],\\n }) as Router<never>;\\n\\n const { debug = undefined, ...appOptions } = {\\n ...(options ? { ...options } : {}),\\n };\\n\\n const app = new Hono({\\n strict: false,\\n router,\\n ...appOptions,\\n });\\n\\n if (typeof fn === \\\"function\\\") {\\n fn({ app, router });\\n }\\n\\n for (const route of routes) {\\n if (typeof debug === \\\"function\\\") {\\n (debug as Function)(route.debug, route);\\n } else if (debug) {\\n console.log(route.debug[typeof debug === \\\"string\\\" ? debug : \\\"full\\\"]);\\n }\\n\\n app.on(route.method, [route.path], ...route.middleware);\\n }\\n\\n const routesByPath = routes.reduce<\\n Record<string, Array<Route<MiddlewareHandler>>>\\n >((map, route) => {\\n if (!map[route.path]) {\\n map[route.path] = [];\\n }\\n map[route.path].push(route);\\n return map;\\n }, {});\\n\\n for (const [path, routes] of Object.entries(routesByPath)) {\\n const methods = routes.map((e) => e.method);\\n\\n app.all(path, (ctx) => {\\n const allowedMethods = new Set([...methods, \\\"OPTIONS\\\"]);\\n\\n if (methods.includes(\\\"GET\\\")) {\\n allowedMethods.add(\\\"HEAD\\\");\\n }\\n\\n const status = ctx.req.method === \\\"OPTIONS\\\" ? 204 : 405;\\n\\n return new Response(undefined, {\\n status,\\n headers: { Allow: [...allowedMethods].join(\\\", \\\") },\\n });\\n });\\n }\\n\\n return app as never;\\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/listener.ts?raw\nvar listener_default = \"import { createListener } from \\\"./server\\\";\\n\\nimport app from \\\"{{ createImport 'api' 'app' }}\\\";\\n\\n/**\\n * Entry for the `dist/<folder>/api/listener.js` bundle.\\n * Exposes this folder's API as a plain node:http listener, mounted by `dist/run.js`\\n * next to the other folders. Nothing here listens on a port - `server.ts` does that.\\n * */\\nexport default createListener(app);\\n\";\n//#endregion\n//#region src/templates/lib/@api/parsers.ts?raw\nvar parsers_default = \"import type { Context } from \\\"hono\\\";\\n\\nimport {\\n parseCookies,\\n parseSearchParams,\\n type RequestBodyTarget,\\n type RequestMetadataTarget,\\n} 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 metaparsers: {\\n [T in RequestMetadataTarget]: (ctx: Context) => unknown;\\n} = {\\n query(ctx) {\\n return parseSearchParams(ctx.req.url);\\n },\\n\\n headers(ctx) {\\n return Object.fromEntries(ctx.req.raw.headers);\\n },\\n\\n cookies(ctx) {\\n return parseCookies(Object.fromEntries(ctx.req.raw.headers));\\n },\\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/router.ts?raw\nvar router_default = \"import { command } from \\\"virtual:kosmo/env\\\";\\nimport type { MiddlewareHandler } from \\\"hono\\\";\\n\\nimport type {\\n RequestBodyTarget,\\n RequestMetadataTarget,\\n RequestValidationTarget,\\n ValidationErrorEntry,\\n} from \\\"@kosmojs/core\\\";\\nimport {\\n type CreateRouteMiddleware,\\n createRoutes,\\n type HTTPMethod,\\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, metaparsers } from \\\"./parsers\\\";\\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, validationSchemas, normalizeParams, normalizeSearchParams }) => {\\n const validationMiddleware = [\\n /**\\n * Extends Hono context with:\\n *\\n * - `ctx.metaparser[target]()` - lazy, cached meta parsers.\\n * Each parser (query, headers, cookies) runs at most once per request;\\n * subsequent calls return the cached result.\\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\\n Object.defineProperty(ctx, \\\"metaparser\\\", {\\n value: Object.entries(metaparsers).reduce<{\\n [T in RequestMetadataTarget]?: () => unknown;\\n }>((map, entry) => {\\n const [target, parser] = entry as [\\n RequestMetadataTarget,\\n Function,\\n ];\\n map[target] = () => {\\n if (!ctx[StateKey].has(target)) {\\n ctx[StateKey].set(\\n target,\\n target === \\\"query\\\"\\n ? normalizeSearchParams(\\n parser(ctx),\\n ctx.req.method === \\\"HEAD\\\" ? \\\"GET\\\" : ctx.req.method,\\n )\\n : parser(ctx),\\n );\\n }\\n return ctx[StateKey].get(target);\\n };\\n return map;\\n }, {}),\\n enumerable: true,\\n });\\n\\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\\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 normalizedParams = normalizeParams(ctx.req.path);\\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 =\\n validationSchemas.response?.[\\n ctx.req.method === \\\"HEAD\\\" ? \\\"GET\\\" : ctx.req.method\\n ] || [];\\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 (command === \\\"build\\\") {\\n // production build - skip if undefined or explicitly set to false\\n if (runtimeValidation === undefined || runtimeValidation === false) {\\n return next();\\n }\\n } else {\\n // dev mode - 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 only 2xx responses\\n if (Math.floor(response.status / 100) !== 2) {\\n return;\\n }\\n\\n // Validate body only for JSON variants\\n if (variants.some((e) => e.contentType?.includes(\\\"json\\\"))) {\\n response.body = await ctx.res\\n .clone()\\n .json()\\n .catch(() => undefined);\\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.metaparser.query(),\\n headers: async (ctx) => ctx.metaparser.headers(),\\n cookies: async (ctx) => ctx.metaparser.cookies(),\\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]?.[\\n ctx.req.method === \\\"HEAD\\\" ? \\\"GET\\\" : ctx.req.method\\n ],\\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\";\n//#endregion\n//#region src/templates/lib/@api/routes.hbs?raw\nvar routes_default = \"import { posix } from \\\"node:path\\\";\\n\\nimport type { RouteSource } from \\\"@kosmojs/core/api\\\";\\n\\nimport {\\n backendBase,\\n apiRouteMap,\\n apiRouteMapper,\\n // needed for cascadingMiddleware\\n type Override,\\n} from \\\"{{ createImport 'libCore' }}\\\";\\n\\n{{#each routes}}\\nimport {{id}} from \\\"{{ createImport 'api' file }}\\\";\\nimport { validationSchemas as {{id}}_schemas } from \\\"{{ createImport 'libApi' basename 'schemas' }}\\\";\\n{{/each}}\\n\\n{{#each cascadingMiddleware}}\\nimport {{id}}, { type UseT as UseT{{id}} } from \\\"{{ createImport 'api' file }}\\\";\\n{{/each}}\\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 {{#if alias}}\\n ...apiRouteMapper(\\\"/\\\", { ...{{serializeApiRoute .}}, pathPattern: \\\"{{aliasPattern}}\\\" }),\\n path: \\\"{{alias}}\\\",\\n pathPattern: \\\"{{alias}}\\\",\\n {{else}}\\n ...apiRouteMap[\\\"{{name}}\\\"],\\n path: posix.join(backendBase, \\\"{{path}}\\\"),\\n pathPattern: posix.join(backendBase, \\\"{{pathPattern}}\\\"),\\n {{/if}}\\n name: \\\"{{name}}\\\",\\n file: \\\"{{file}}\\\",\\n cascadingMiddleware: [ {{#each cascadingMiddleware}}{{id}}, {{/each}}].flat() as Array<never>,\\n definitionItems: {{id}} as never,\\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 type { IncomingMessage, ServerResponse } from \\\"node:http\\\";\\nimport { parseArgs, styleText } from \\\"node:util\\\";\\n\\nimport { createAdaptorServer, getRequestListener } from \\\"@hono/node-server\\\";\\n\\nimport type { App } from \\\"./app\\\";\\n\\nexport type NodeListener = (req: IncomingMessage, res: ServerResponse) => void;\\n\\n/**\\n * Wrap the app into a node:http request listener.\\n * Used by dist/run.js to mount this folder's API next to other folders;\\n * the standalone server (`serve`) binds the app through the runtime's native adapter instead.\\n * */\\nexport const createListener = <T extends App>(app: T): NodeListener => {\\n return getRequestListener(app.fetch);\\n};\\n\\ntype Handles = {\\n port?: number | undefined;\\n sock?: string | undefined;\\n onListen?: () => Promise<void>;\\n};\\n\\nconst getListenHandles = async (opt?: Handles) => {\\n const { port, sock } = opt\\n ? opt\\n : parseArgs({\\n options: {\\n port: {\\n type: \\\"string\\\",\\n short: \\\"p\\\",\\n },\\n sock: {\\n type: \\\"string\\\",\\n short: \\\"s\\\",\\n },\\n },\\n }).values;\\n\\n if (![port, sock].some(Boolean)) {\\n throw new Error(\\\"Please provide either -p/--port number or -s/--sock path\\\");\\n }\\n\\n if (sock) {\\n await unlink(sock).catch((error) => {\\n if (error.code !== \\\"ENOENT\\\") {\\n throw error;\\n }\\n });\\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 `\\\\n ✨ Server Started ${styleText([\\\"dim\\\"], \\\"[ %s ]\\\")}`,\\n sock ? `sock: ${sock}` : `port: ${port}`,\\n );\\n };\\n\\n return {\\n port: Number(port),\\n sock,\\n onListen: opt?.onListen || onListen,\\n };\\n};\\n\\nexport const serve = async <T extends App>(app: T, opt?: Handles) => {\\n const { port, sock, onListen } = await getListenHandles(opt);\\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//#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/parsers\\\";\\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 { appFactory as default } 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 appFactory, { routes } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\nimport defaultErrorHandler from \\\"./errors\\\";\\n\\nexport default appFactory(routes, ({ app }) => {\\n app.onError(defaultErrorHandler);\\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\\nprocess.on(\\\"unhandledRejection\\\", (reason) => {\\n console.error(\\\"💥 UNHANDLED REJECTION\\\");\\n console.error(\\\"Reason:\\\", reason);\\n process.exit(1);\\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(async (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//#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(\\\"{{route.name}} route starts here - replace this response with real logic.\\\");\\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 UseT = {};\\n\\nexport default [\\n use<UseT>(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/server.ts?raw\nvar server_default = \"import { serve } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\nimport app from \\\"./app\\\";\\n\\nawait serve(app);\\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((sourceFolder) => {\n\tconst { backend } = sourceFolder.config;\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\t...routeRenderHelpers(),\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 }) => `UseT${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(backend?.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 ? posix.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\tbasename: entry.name,\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({ ...backend?.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\tbasename: entry.name,\n\t\t\t\t\tid: `${baseRoute.id}_${crc(url)}`,\n\t\t\t\t\talias: posix.join(\"/\", createHonoPattern(pathTokens)),\n\t\t\t\t\taliasPattern: 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: routesWithAliases,\n\t\t\tcascadingMiddleware\n\t\t});\n\t};\n\treturn {\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/parsers.ts\", parsers_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/listener.ts\", listener_default],\n\t\t\t\t[\"@api/router.ts\", router_default],\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[\"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[\"server.ts\", server_default],\n\t\t\t\t[\"use.ts\", use_default],\n\t\t\t\t[\"env.d.ts\", env_d_default]\n\t\t\t]) await deploySrcFile(createPath.api(file), template, {}, { overwrite });\n\t\t},\n\t\tasync watch(entries, event) {\n\t\t\tawait generateSrcFiles(entries.filter(createWatchedApiRouteEntriesFilter(event, [\"create\"])));\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({\n\tmeta: {\n\t\tname: \"Hono\",\n\t\tslot: \"backend\"\n\t},\n\tdependencies: {\n\t\thono: package_default.devDependencies.hono,\n\t\t\"@hono/node-server\": package_default.devDependencies[\"@hono/node-server\"]\n\t},\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { createPathPattern, createWatchedApiRouteEntriesFilter, defineGenerator, defineGeneratorFactory, pathResolver, pathTokensFactory, renderFactory, sortRoutes } from \"@kosmojs/lib\";\nimport { posix } from \"node:path\";\nimport crc from \"crc/crc32\";\nimport { createTemplateResolver } from \"@kosmojs/core\";\nimport { routeRenderHelpers } from \"@kosmojs/core/generators\";\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/koa-generator\",\n\tversion: \"0.3.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\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: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"crc\": \"^4.3.2\"\n\t},\n\tdevDependencies: {\n\t\t\"@koa/router\": \"^15.7.0\",\n\t\t\"@types/formidable\": \"^3.5.1\",\n\t\t\"@types/koa\": \"^3.0.3\",\n\t\t\"@types/koa-compose\": \"^3.2.9\",\n\t\t\"formidable\": \"^3.5.4\",\n\t\t\"koa\": \"^3.2.1\",\n\t\t\"koa-compose\": \"^4.1.0\",\n\t\t\"light-my-request\": \"^6.6.0\",\n\t\t\"raw-body\": \"^4.0.0\",\n\t\t\"vite\": \"^8.2.2\"\n\t}\n};\n//#endregion\n//#region src/templates/lib/@api/app.ts?raw\nvar app_default$1 = \"import { styleText } from \\\"node:util\\\";\\n\\nimport Router, { type RouterMiddleware } from \\\"@koa/router\\\";\\nimport Koa from \\\"koa\\\";\\n\\nimport type { Route, RouteDebugOption } 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] & { debug?: RouteDebugOption };\\n\\nexport function appFactory(\\n routes: Array<Route<RouterMiddleware>>,\\n options: AppOptions,\\n): App;\\n\\nexport function appFactory(\\n routes: Array<Route<RouterMiddleware>>,\\n fn: (a: { app: App; router: Router<never> }) => void,\\n): App;\\n\\nexport function appFactory(\\n routes: Array<Route<RouterMiddleware>>,\\n options: AppOptions,\\n fn: (a: { app: App; router: Router<never> }) => void,\\n): App;\\n\\nexport function appFactory(\\n routes: Array<Route<RouterMiddleware>>,\\n ...rest: Array<unknown>\\n): App {\\n const [options, fn] = typeof rest[0] === \\\"function\\\" ? [{}, rest[0]] : rest;\\n\\n const { debug = undefined, ...appOptions } = {\\n ...(options ? { ...options } : {}),\\n };\\n\\n const app = new Koa(appOptions);\\n const router = new Router();\\n\\n for (const route of routes) {\\n if (typeof debug === \\\"function\\\") {\\n (debug as Function)(route.debug, route);\\n } else if (debug) {\\n console.log(route.debug[typeof debug === \\\"string\\\" ? debug : \\\"full\\\"]);\\n }\\n router.register(route.path, [route.method], route.middleware, route);\\n }\\n\\n const routesByPath = routes.reduce<\\n Record<string, Array<Route<RouterMiddleware>>>\\n >((map, route) => {\\n if (!map[route.path]) {\\n map[route.path] = [];\\n }\\n map[route.path].push(route);\\n return map;\\n }, {});\\n\\n for (const [path, routes] of Object.entries(routesByPath)) {\\n const methods = routes.map((e) => e.method);\\n\\n if (\\n methods.includes(\\\"GET\\\") &&\\n methods.indexOf(\\\"HEAD\\\") > methods.indexOf(\\\"GET\\\")\\n ) {\\n console.warn(\\\"----\\\");\\n console.warn(\\n `${styleText(\\\"yellow\\\", \\\"WARN\\\")}: HEAD handler for ${styleText(\\\"blue\\\", routes[0].name)} route is unreachable - ${styleText(\\\"magenta\\\", \\\"define HEAD before GET\\\")}`,\\n );\\n console.warn(\\\"----\\\");\\n }\\n\\n router.all(path, (ctx) => {\\n const allowedMethods = new Set([...methods, \\\"OPTIONS\\\"]);\\n\\n if (methods.includes(\\\"GET\\\")) {\\n allowedMethods.add(\\\"HEAD\\\");\\n }\\n\\n ctx.status = ctx.method === \\\"OPTIONS\\\" ? 204 : 405;\\n\\n ctx.set(\\\"Allow\\\", [...allowedMethods].join(\\\", \\\"));\\n });\\n }\\n\\n if (typeof fn === \\\"function\\\") {\\n fn({ app, router });\\n }\\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/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 {\\n DefaultContext,\\n DefaultState,\\n ParameterizedContext,\\n} from \\\"../api\\\";\\n\\ntype ErrorHandler = (\\n ctx: ParameterizedContext<unknown, DefaultState, DefaultContext>,\\n next: Function,\\n) => Promise<void>;\\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/listener.ts?raw\nvar listener_default = \"import { createListener } from \\\"./server\\\";\\n\\nimport app from \\\"{{ createImport 'api' 'app' }}\\\";\\n\\n/**\\n * Entry for the `dist/<folder>/api/listener.js` bundle.\\n * Exposes this folder's API as a plain node:http listener, mounted by `dist/run.js`\\n * next to the other folders. Nothing here listens on a port - `server.ts` does that.\\n * */\\nexport default createListener(app);\\n\";\n//#endregion\n//#region src/templates/lib/@api/parsers.ts?raw\nvar parsers_default = \"import zlib from \\\"node:zlib\\\";\\n\\nimport type { RouterContext } from \\\"@koa/router\\\";\\nimport Formidable, { type Options as FormidableOptions } from \\\"formidable\\\";\\nimport rawParser from \\\"raw-body\\\";\\n\\nimport {\\n parseCookies,\\n parseSearchParams,\\n type RequestBodyTarget,\\n type RequestMetadataTarget,\\n} from \\\"@kosmojs/core\\\";\\n\\nimport type {\\n DefaultContext,\\n DefaultState,\\n ParameterizedContext,\\n} from \\\"../api\\\";\\n\\nexport const metaparsers: {\\n [T in RequestMetadataTarget]: (ctx: RouterContext) => unknown;\\n} = {\\n query(ctx) {\\n return parseSearchParams(ctx.req.url ?? \\\"\\\");\\n },\\n\\n headers(ctx) {\\n return ctx.req.headers;\\n },\\n\\n cookies(ctx) {\\n return parseCookies(ctx.req.headers);\\n },\\n};\\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 === false) {\\n return [k, v];\\n }\\n if (opt === undefined || 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/router.ts?raw\nvar router_default = \"import { command } from \\\"virtual:kosmo/env\\\";\\nimport type { RouterMiddleware } from \\\"@koa/router\\\";\\n\\nimport type {\\n RequestBodyTarget,\\n RequestMetadataTarget,\\n RequestValidationTarget,\\n ValidationErrorEntry,\\n} from \\\"@kosmojs/core\\\";\\nimport {\\n type CreateRouteMiddleware,\\n createRoutes,\\n type HTTPMethod,\\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, metaparsers } from \\\"./parsers\\\";\\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, validationSchemas, normalizeParams, normalizeSearchParams }) => {\\n const validationMiddleware = [\\n /**\\n * Extends Koa context with:\\n *\\n * - `ctx.metaparser[target]()` - lazy, cached meta parsers.\\n * Each parser (query, headers, cookies) runs at most once per request;\\n * subsequent calls return the cached result.\\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\\n Object.defineProperty(ctx, \\\"metaparser\\\", {\\n value: Object.entries(metaparsers).reduce<{\\n [T in RequestMetadataTarget]?: () => unknown;\\n }>((map, entry) => {\\n const [target, parser] = entry as [\\n RequestMetadataTarget,\\n Function,\\n ];\\n map[target] = () => {\\n if (!ctx[StateKey].has(target)) {\\n ctx[StateKey].set(\\n target,\\n target === \\\"query\\\"\\n ? normalizeSearchParams(\\n parser(ctx),\\n ctx.method === \\\"HEAD\\\" ? \\\"GET\\\" : ctx.method,\\n )\\n : parser(ctx),\\n );\\n }\\n return ctx[StateKey].get(target);\\n };\\n return map;\\n }, {}),\\n enumerable: true,\\n });\\n\\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\\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 normalizedParams = normalizeParams(ctx.path);\\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 =\\n validationSchemas.response?.[\\n ctx.method === \\\"HEAD\\\" ? \\\"GET\\\" : ctx.method\\n ] || [];\\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 (command === \\\"build\\\") {\\n // production build - skip if undefined or explicitly set to false\\n if (runtimeValidation === undefined || runtimeValidation === false) {\\n return next();\\n }\\n } else {\\n // dev mode - 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 only 2xx responses\\n if (Math.floor(response.status / 100) !== 2) {\\n return;\\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.metaparser.query(),\\n headers: async (ctx) => ctx.metaparser.headers(),\\n cookies: async (ctx) => ctx.metaparser.cookies(),\\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]?.[\\n ctx.method === \\\"HEAD\\\" ? \\\"GET\\\" : ctx.method\\n ],\\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\";\n//#endregion\n//#region src/templates/lib/@api/routes.hbs?raw\nvar routes_default = \"import { posix } from \\\"node:path\\\";\\n\\nimport type { RouteSource } from \\\"@kosmojs/core/api\\\";\\n\\nimport {\\n backendBase,\\n apiRouteMap,\\n apiRouteMapper,\\n // needed for cascadingMiddleware\\n type Override,\\n} from \\\"{{ createImport 'libCore' }}\\\";\\n\\n{{#each routes}}\\nimport {{id}} from \\\"{{ createImport 'api' file }}\\\";\\nimport { validationSchemas as {{id}}_schemas } from \\\"{{ createImport 'libApi' basename 'schemas' }}\\\";\\n{{/each}}\\n\\n{{#each cascadingMiddleware}}\\nimport {{id}}, { type UseT as UseT{{id}} } from \\\"{{ createImport 'api' file }}\\\";\\n{{/each}}\\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 {{#if alias}}\\n ...apiRouteMapper(\\\"/\\\", { ...{{serializeApiRoute .}}, pathPattern: \\\"{{aliasPattern}}\\\" }),\\n path: \\\"{{alias}}\\\",\\n pathPattern: \\\"{{alias}}\\\",\\n {{else}}\\n ...apiRouteMap[\\\"{{name}}\\\"],\\n path: posix.join(backendBase, \\\"{{path}}\\\"),\\n pathPattern: posix.join(backendBase, \\\"{{pathPattern}}\\\"),\\n {{/if}}\\n name: \\\"{{name}}\\\",\\n file: \\\"{{file}}\\\",\\n cascadingMiddleware: [ {{#each cascadingMiddleware}}{{id}}, {{/each}}].flat() as Array<never>,\\n definitionItems: {{id}} as never,\\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 type { IncomingMessage, ServerResponse } from \\\"node:http\\\";\\nimport { parseArgs, styleText } from \\\"node:util\\\";\\n\\nimport type { App } from \\\"./app\\\";\\n\\nexport type NodeListener = (req: IncomingMessage, res: ServerResponse) => void;\\n\\n/**\\n * Wrap the app into a node:http request listener.\\n * Used by dist/run.js to mount this folder's API next to other folders;\\n * the standalone server (`serve`) calls app.listen() directly instead.\\n * */\\nexport const createListener = <T extends App>(app: T): NodeListener => {\\n return app.callback();\\n};\\n\\ntype Handles = {\\n port?: number | undefined;\\n sock?: string | undefined;\\n onListen?: () => Promise<void>;\\n};\\n\\nconst getListenHandles = async (opt?: Handles): Promise<Handles> => {\\n const { port, sock } = opt\\n ? opt\\n : parseArgs({\\n options: {\\n port: {\\n type: \\\"string\\\",\\n short: \\\"p\\\",\\n },\\n sock: {\\n type: \\\"string\\\",\\n short: \\\"s\\\",\\n },\\n },\\n }).values;\\n\\n if (![port, sock].some(Boolean)) {\\n throw new Error(\\\"Please provide either -p/--port number or -s/--sock path\\\");\\n }\\n\\n if (sock) {\\n await unlink(sock).catch((error) => {\\n if (error.code !== \\\"ENOENT\\\") {\\n throw error;\\n }\\n });\\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 `\\\\n ✨ Server Started ${styleText([\\\"dim\\\"], \\\"[ %s ]\\\")}`,\\n sock ? `sock: ${sock}` : `port: ${port}`,\\n );\\n };\\n\\n return {\\n port: port ? Number(port) : undefined,\\n sock,\\n onListen: opt?.onListen || onListen,\\n };\\n};\\n\\nexport const serve = async <T extends App>(app: T, opt?: Handles) => {\\n const { port, sock, onListen } = await getListenHandles(opt);\\n const server = app.listen(port || sock, onListen);\\n return server as never;\\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/parsers\\\";\\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 { appFactory as default } 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 appFactory, { routes } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\nimport defaultErrorHandler from \\\"./errors\\\";\\n\\nexport default appFactory(routes, ({ app }) => {\\n app.use(defaultErrorHandler);\\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\\nprocess.on(\\\"unhandledRejection\\\", (reason) => {\\n console.error(\\\"💥 UNHANDLED REJECTION\\\");\\n console.error(\\\"Reason:\\\", reason);\\n process.exit(1);\\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(async (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//#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 = \\\"{{route.name}} route starts here - replace this response with real logic.\\\";\\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 UseT = {};\\n\\nexport default [\\n use<UseT>(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/server.ts?raw\nvar server_default = \"import { serve } from \\\"{{ createImport 'lib' 'api:factory' }}\\\";\\nimport app from \\\"./app\\\";\\n\\nawait serve(app);\\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((sourceFolder) => {\n\tconst { backend } = sourceFolder.config;\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\t...routeRenderHelpers(),\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 }) => `UseT${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(backend?.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 ? posix.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\tbasename: entry.name,\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({ ...backend?.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\tbasename: entry.name,\n\t\t\t\t\tid: `${baseRoute.id}_${crc(url)}`,\n\t\t\t\t\talias: posix.join(\"/\", createPathPattern(pathTokens)),\n\t\t\t\t\taliasPattern: 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\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/listener.ts\", listener_default],\n\t\t\t\t[\"@api/parsers.ts\", parsers_default],\n\t\t\t\t[\"@api/router.ts\", router_default],\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[\"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[\"server.ts\", server_default],\n\t\t\t\t[\"use.ts\", use_default],\n\t\t\t\t[\"env.d.ts\", env_d_default]\n\t\t\t]) await deploySrcFile(createPath.api(file), template, {}, { overwrite });\n\t\t},\n\t\tasync watch(entries, event) {\n\t\t\tawait generateSrcFiles(entries.filter(createWatchedApiRouteEntriesFilter(event, [\"create\"])));\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({\n\tmeta: {\n\t\tname: \"Koa\",\n\t\tslot: \"backend\",\n\t\ttypes: [\"@types/koa\"]\n\t},\n\tdependencies: {\n\t\tkoa: package_default.devDependencies.koa,\n\t\t\"@koa/router\": package_default.devDependencies[\"@koa/router\"],\n\t\tformidable: package_default.devDependencies.formidable,\n\t\t\"raw-body\": package_default.devDependencies[\"raw-body\"]\n\t},\n\tdevDependencies: {\n\t\t\"@types/koa\": package_default.devDependencies[\"@types/koa\"],\n\t\t\"@types/formidable\": package_default.devDependencies[\"@types/formidable\"]\n\t},\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","export function deprecate(fn) {\n return fn\n}\n\nexport function equal() {}\n\nexport function ok() {}\n\nexport function unreachable() {}\n","/**\n * @import {Code} from 'micromark-util-types'\n */\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function asciiControl(code) {\n return (\n // Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < 32 || code === 127)\n );\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/);\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEnding(code) {\n return code !== null && code < -2;\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32);\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32;\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodePunctuation = regexCheck(/\\p{P}|\\p{S}/u);\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/);\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * Expression.\n * @returns {(code: Code) => boolean}\n * Check.\n */\nfunction regexCheck(regex) {\n return check;\n\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code\n * Character code.\n * @returns {boolean}\n * Whether the character code matches the bound regex.\n */\n function check(code) {\n return code !== null && code > -1 && regex.test(String.fromCharCode(code));\n }\n}","//\n// format - printf-like string formatting for JavaScript\n// github.com/samsonjs/format\n// @_sjs\n//\n// Copyright 2010 - 2013 Sami Samhuri <sami@samhuri.net>\n//\n// MIT License\n// http://sjs.mit-license.org\n//\n\n;(function() {\n\n //// Export the API\n var namespace;\n\n // CommonJS / Node module\n if (typeof module !== 'undefined') {\n namespace = module.exports = format;\n }\n\n // Browsers and other environments\n else {\n // Get the global object. Works in ES3, ES5, and ES5 strict mode.\n namespace = (function(){ return this || (1,eval)('this') }());\n }\n\n namespace.format = format;\n namespace.vsprintf = vsprintf;\n\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n namespace.printf = printf;\n }\n\n function printf(/* ... */) {\n console.log(format.apply(null, arguments));\n }\n\n function vsprintf(fmt, replacements) {\n return format.apply(null, [fmt].concat(replacements));\n }\n\n function format(fmt) {\n var argIndex = 1 // skip initial format argument\n , args = [].slice.call(arguments)\n , i = 0\n , n = fmt.length\n , result = ''\n , c\n , escaped = false\n , arg\n , tmp\n , leadingZero = false\n , precision\n , nextArg = function() { return args[argIndex++]; }\n , slurpNumber = function() {\n var digits = '';\n while (/\\d/.test(fmt[i])) {\n digits += fmt[i++];\n c = fmt[i];\n }\n return digits.length > 0 ? parseInt(digits) : null;\n }\n ;\n for (; i < n; ++i) {\n c = fmt[i];\n if (escaped) {\n escaped = false;\n if (c == '.') {\n leadingZero = false;\n c = fmt[++i];\n }\n else if (c == '0' && fmt[i + 1] == '.') {\n leadingZero = true;\n i += 2;\n c = fmt[i];\n }\n else {\n leadingZero = true;\n }\n precision = slurpNumber();\n switch (c) {\n case 'b': // number in binary\n result += parseInt(nextArg(), 10).toString(2);\n break;\n case 'c': // character\n arg = nextArg();\n if (typeof arg === 'string' || arg instanceof String)\n result += arg;\n else\n result += String.fromCharCode(parseInt(arg, 10));\n break;\n case 'd': // number in decimal\n result += parseInt(nextArg(), 10);\n break;\n case 'f': // floating point number\n tmp = String(parseFloat(nextArg()).toFixed(precision || 6));\n result += leadingZero ? tmp : tmp.replace(/^0/, '');\n break;\n case 'j': // JSON\n result += JSON.stringify(nextArg());\n break;\n case 'o': // number in octal\n result += '0' + parseInt(nextArg(), 10).toString(8);\n break;\n case 's': // string\n result += nextArg();\n break;\n case 'x': // lowercase hexadecimal\n result += '0x' + parseInt(nextArg(), 10).toString(16);\n break;\n case 'X': // uppercase hexadecimal\n result += '0x' + parseInt(nextArg(), 10).toString(16).toUpperCase();\n break;\n default:\n result += c;\n break;\n }\n } else if (c === '%') {\n escaped = true;\n } else {\n result += c;\n }\n }\n return result;\n }\n\n}());\n","// @ts-expect-error\nimport formatter from 'format'\n\nexport const fault = Object.assign(create(Error), {\n eval: create(EvalError),\n range: create(RangeError),\n reference: create(ReferenceError),\n syntax: create(SyntaxError),\n type: create(TypeError),\n uri: create(URIError)\n})\n\n/**\n * Create a new `EConstructor`, with the formatted `format` as a first argument.\n *\n * @template {Error} Fault\n * @template {new (reason: string) => Fault} Class\n * @param {Class} Constructor\n */\nexport function create(Constructor) {\n /** @type {string} */\n // @ts-expect-error\n FormattedError.displayName = Constructor.displayName || Constructor.name\n\n return FormattedError\n\n /**\n * Create an error with a printf-like formatted message.\n *\n * @param {string|null} [format]\n * Template string.\n * @param {...unknown} values\n * Values to render in `format`.\n * @returns {Fault}\n */\n function FormattedError(format, ...values) {\n /** @type {string} */\n const reason = format ? formatter(format, ...values) : format\n return new Constructor(reason)\n }\n}\n","/**\n * @typedef {'toml' | 'yaml'} Preset\n * Known name of a frontmatter style.\n *\n * @typedef Info\n * Sequence.\n *\n * Depending on how this structure is used, it reflects a marker or a fence.\n * @property {string} close\n * Closing.\n * @property {string} open\n * Opening.\n *\n * @typedef MatterProps\n * Fields describing a kind of matter.\n * @property {string} type\n * Node type to tokenize as.\n * @property {boolean | null | undefined} [anywhere=false]\n * Whether matter can be found anywhere in the document, normally, only matter\n * at the start of the document is recognized.\n *\n * > 👉 **Note**: using this is a terrible idea.\n * > It’s called frontmatter, not matter-in-the-middle or so.\n * > This makes your markdown less portable.\n *\n * @typedef MarkerProps\n * Marker configuration.\n * @property {Info | string} marker\n * Character repeated 3 times, used as complete fences.\n *\n * For example the character `'-'` will result in `'---'` being used as the\n * fence\n * Pass `open` and `close` to specify different characters for opening and\n * closing fences.\n * @property {never} [fence]\n * If `marker` is set, `fence` must not be set.\n *\n * @typedef FenceProps\n * Fence configuration.\n * @property {Info | string} fence\n * Complete fences.\n *\n * This can be used when fences contain different characters or lengths\n * other than 3.\n * Pass `open` and `close` to interface to specify different characters for opening and\n * closing fences.\n * @property {never} [marker]\n * If `fence` is set, `marker` must not be set.\n *\n * @typedef {(MatterProps & FenceProps) | (MatterProps & MarkerProps)} Matter\n * Fields describing a kind of matter.\n *\n * > 👉 **Note**: using `anywhere` is a terrible idea.\n * > It’s called frontmatter, not matter-in-the-middle or so.\n * > This makes your markdown less portable.\n *\n * > 👉 **Note**: `marker` and `fence` are mutually exclusive.\n * > If `marker` is set, `fence` must not be set, and vice versa.\n *\n * @typedef {Matter | Preset | Array<Matter | Preset>} Options\n * Configuration.\n */\n\nimport {fault} from 'fault'\nconst own = {}.hasOwnProperty\nconst markers = {\n yaml: '-',\n toml: '+'\n}\n\n/**\n * Simplify options by normalizing them to an array of matters.\n *\n * @param {Options | null | undefined} [options='yaml']\n * Configuration (default: `'yaml'`).\n * @returns {Array<Matter>}\n * List of matters.\n */\nexport function toMatters(options) {\n /** @type {Array<Matter>} */\n const result = []\n let index = -1\n\n /** @type {Array<Matter | Preset>} */\n const presetsOrMatters = Array.isArray(options)\n ? options\n : options\n ? [options]\n : ['yaml']\n while (++index < presetsOrMatters.length) {\n result[index] = matter(presetsOrMatters[index])\n }\n return result\n}\n\n/**\n * Simplify an option.\n *\n * @param {Matter | Preset} option\n * Configuration.\n * @returns {Matter}\n * Matter.\n */\nfunction matter(option) {\n let result = option\n if (typeof result === 'string') {\n if (!own.call(markers, result)) {\n throw fault('Missing matter definition for `%s`', result)\n }\n result = {\n type: result,\n marker: markers[result]\n }\n } else if (typeof result !== 'object') {\n throw fault('Expected matter to be an object, not `%j`', result)\n }\n if (!own.call(result, 'type')) {\n throw fault('Missing `type` in matter `%j`', result)\n }\n if (!own.call(result, 'fence') && !own.call(result, 'marker')) {\n throw fault('Missing `marker` or `fence` in matter `%j`', result)\n }\n return result\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n *\n * @typedef {import('./to-matters.js').Info} Info\n * @typedef {import('./to-matters.js').Matter} Matter\n * @typedef {import('./to-matters.js').Options} Options\n */\n\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\nimport {toMatters} from './to-matters.js'\n\n/**\n * Create an extension for `micromark` to enable frontmatter syntax.\n *\n * @param {Options | null | undefined} [options='yaml']\n * Configuration (default: `'yaml'`).\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable frontmatter syntax.\n */\nexport function frontmatter(options) {\n const matters = toMatters(options)\n /** @type {ConstructRecord} */\n const flow = {}\n let index = -1\n while (++index < matters.length) {\n const matter = matters[index]\n const code = fence(matter, 'open').charCodeAt(0)\n const construct = createConstruct(matter)\n const existing = flow[code]\n if (Array.isArray(existing)) {\n existing.push(construct)\n } else {\n // Never a single object, always an array.\n flow[code] = [construct]\n }\n }\n return {\n flow\n }\n}\n\n/**\n * @param {Matter} matter\n * @returns {Construct}\n */\nfunction createConstruct(matter) {\n const anywhere = matter.anywhere\n const frontmatterType = /** @type {TokenType} */ matter.type\n const fenceType = /** @type {TokenType} */ frontmatterType + 'Fence'\n const sequenceType = /** @type {TokenType} */ fenceType + 'Sequence'\n const valueType = /** @type {TokenType} */ frontmatterType + 'Value'\n const closingFenceConstruct = {\n tokenize: tokenizeClosingFence,\n partial: true\n }\n\n /**\n * Fence to look for.\n *\n * @type {string}\n */\n let buffer\n let bufferIndex = 0\n return {\n tokenize: tokenizeFrontmatter,\n concrete: true\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeFrontmatter(effects, ok, nok) {\n const self = this\n return start\n\n /**\n * Start of frontmatter.\n *\n * ```markdown\n * > | ---\n * ^\n * | title: \"Venus\"\n * | ---\n * ```\n *\n * @type {State}\n */\n function start(code) {\n const position = self.now()\n if (\n // Indent not allowed.\n position.column === 1 &&\n // Normally, only allowed in first line.\n (position.line === 1 || anywhere)\n ) {\n buffer = fence(matter, 'open')\n bufferIndex = 0\n if (code === buffer.charCodeAt(bufferIndex)) {\n effects.enter(frontmatterType)\n effects.enter(fenceType)\n effects.enter(sequenceType)\n return openSequence(code)\n }\n }\n return nok(code)\n }\n\n /**\n * In open sequence.\n *\n * ```markdown\n * > | ---\n * ^\n * | title: \"Venus\"\n * | ---\n * ```\n *\n * @type {State}\n */\n function openSequence(code) {\n if (bufferIndex === buffer.length) {\n effects.exit(sequenceType)\n if (markdownSpace(code)) {\n effects.enter('whitespace')\n return openSequenceWhitespace(code)\n }\n return openAfter(code)\n }\n if (code === buffer.charCodeAt(bufferIndex++)) {\n effects.consume(code)\n return openSequence\n }\n return nok(code)\n }\n\n /**\n * In whitespace after open sequence.\n *\n * ```markdown\n * > | ---␠\n * ^\n * | title: \"Venus\"\n * | ---\n * ```\n *\n * @type {State}\n */\n function openSequenceWhitespace(code) {\n if (markdownSpace(code)) {\n effects.consume(code)\n return openSequenceWhitespace\n }\n effects.exit('whitespace')\n return openAfter(code)\n }\n\n /**\n * After open sequence.\n *\n * ```markdown\n * > | ---\n * ^\n * | title: \"Venus\"\n * | ---\n * ```\n *\n * @type {State}\n */\n function openAfter(code) {\n if (markdownLineEnding(code)) {\n effects.exit(fenceType)\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n // Get ready for closing fence.\n buffer = fence(matter, 'close')\n bufferIndex = 0\n return effects.attempt(closingFenceConstruct, after, contentStart)\n }\n\n // EOF is not okay.\n return nok(code)\n }\n\n /**\n * Start of content chunk.\n *\n * ```markdown\n * | ---\n * > | title: \"Venus\"\n * ^\n * | ---\n * ```\n *\n * @type {State}\n */\n function contentStart(code) {\n if (code === null || markdownLineEnding(code)) {\n return contentEnd(code)\n }\n effects.enter(valueType)\n return contentInside(code)\n }\n\n /**\n * In content chunk.\n *\n * ```markdown\n * | ---\n * > | title: \"Venus\"\n * ^\n * | ---\n * ```\n *\n * @type {State}\n */\n function contentInside(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(valueType)\n return contentEnd(code)\n }\n effects.consume(code)\n return contentInside\n }\n\n /**\n * End of content chunk.\n *\n * ```markdown\n * | ---\n * > | title: \"Venus\"\n * ^\n * | ---\n * ```\n *\n * @type {State}\n */\n function contentEnd(code) {\n // Require a closing fence.\n if (code === null) {\n return nok(code)\n }\n\n // Can only be an eol.\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return effects.attempt(closingFenceConstruct, after, contentStart)\n }\n\n /**\n * After frontmatter.\n *\n * ```markdown\n * | ---\n * | title: \"Venus\"\n * > | ---\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // `code` must be eol/eof.\n effects.exit(frontmatterType)\n return ok(code)\n }\n }\n\n /** @type {Tokenizer} */\n function tokenizeClosingFence(effects, ok, nok) {\n let bufferIndex = 0\n return closeStart\n\n /**\n * Start of close sequence.\n *\n * ```markdown\n * | ---\n * | title: \"Venus\"\n * > | ---\n * ^\n * ```\n *\n * @type {State}\n */\n function closeStart(code) {\n if (code === buffer.charCodeAt(bufferIndex)) {\n effects.enter(fenceType)\n effects.enter(sequenceType)\n return closeSequence(code)\n }\n return nok(code)\n }\n\n /**\n * In close sequence.\n *\n * ```markdown\n * | ---\n * | title: \"Venus\"\n * > | ---\n * ^\n * ```\n *\n * @type {State}\n */\n function closeSequence(code) {\n if (bufferIndex === buffer.length) {\n effects.exit(sequenceType)\n if (markdownSpace(code)) {\n effects.enter('whitespace')\n return closeSequenceWhitespace(code)\n }\n return closeAfter(code)\n }\n if (code === buffer.charCodeAt(bufferIndex++)) {\n effects.consume(code)\n return closeSequence\n }\n return nok(code)\n }\n\n /**\n * In whitespace after close sequence.\n *\n * ```markdown\n * > | ---\n * | title: \"Venus\"\n * | ---␠\n * ^\n * ```\n *\n * @type {State}\n */\n function closeSequenceWhitespace(code) {\n if (markdownSpace(code)) {\n effects.consume(code)\n return closeSequenceWhitespace\n }\n effects.exit('whitespace')\n return closeAfter(code)\n }\n\n /**\n * After close sequence.\n *\n * ```markdown\n * | ---\n * | title: \"Venus\"\n * > | ---\n * ^\n * ```\n *\n * @type {State}\n */\n function closeAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(fenceType)\n return ok(code)\n }\n return nok(code)\n }\n }\n}\n\n/**\n * @param {Matter} matter\n * @param {'close' | 'open'} prop\n * @returns {string}\n */\nfunction fence(matter, prop) {\n return matter.marker\n ? pick(matter.marker, prop).repeat(3)\n : // @ts-expect-error: They’re mutually exclusive.\n pick(matter.fence, prop)\n}\n\n/**\n * @param {Info | string} schema\n * @param {'close' | 'open'} prop\n * @returns {string}\n */\nfunction pick(schema, prop) {\n return typeof schema === 'string' ? schema : schema[prop]\n}\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @typedef {import('mdast').Literal} Literal\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n *\n * @typedef {import('micromark-extension-frontmatter').Info} Info\n * @typedef {import('micromark-extension-frontmatter').Matter} Matter\n * @typedef {import('micromark-extension-frontmatter').Options} Options\n */\n\nimport {ok as assert} from 'devlop'\nimport {toMatters} from 'micromark-extension-frontmatter'\nimport escapeStringRegexp from 'escape-string-regexp'\n\n/**\n * Create an extension for `mdast-util-from-markdown`.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown`.\n */\nexport function frontmatterFromMarkdown(options) {\n const matters = toMatters(options)\n /** @type {FromMarkdownExtension['enter']} */\n const enter = {}\n /** @type {FromMarkdownExtension['exit']} */\n const exit = {}\n let index = -1\n\n while (++index < matters.length) {\n const matter = matters[index]\n enter[matter.type] = opener(matter)\n exit[matter.type] = close\n exit[matter.type + 'Value'] = value\n }\n\n return {enter, exit}\n}\n\n/**\n * @param {Matter} matter\n * @returns {FromMarkdownHandle} enter\n */\nfunction opener(matter) {\n return open\n\n /**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\n function open(token) {\n // @ts-expect-error: custom.\n this.enter({type: matter.type, value: ''}, token)\n this.buffer()\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction close(token) {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert('value' in node)\n this.exit(token)\n // Remove the initial and final eol.\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction value(token) {\n this.config.enter.data.call(this, token)\n this.config.exit.data.call(this, token)\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown`.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown`.\n */\nexport function frontmatterToMarkdown(options) {\n /** @type {ToMarkdownExtension['unsafe']} */\n const unsafe = []\n /** @type {ToMarkdownExtension['handlers']} */\n const handlers = {}\n const matters = toMatters(options)\n let index = -1\n\n while (++index < matters.length) {\n const matter = matters[index]\n\n // @ts-expect-error: this can add custom frontmatter nodes.\n // Typing those is the responsibility of the end user.\n handlers[matter.type] = handler(matter)\n\n const open = fence(matter, 'open')\n\n unsafe.push({\n atBreak: true,\n character: open.charAt(0),\n after: escapeStringRegexp(open.charAt(1))\n })\n }\n\n return {unsafe, handlers}\n}\n\n/**\n * Create a handle that can serialize a frontmatter node as markdown.\n *\n * @param {Matter} matter\n * Structure.\n * @returns {(node: Literal) => string} enter\n * Handler.\n */\nfunction handler(matter) {\n const open = fence(matter, 'open')\n const close = fence(matter, 'close')\n\n return handle\n\n /**\n * Serialize a frontmatter node as markdown.\n *\n * @param {Literal} node\n * Node to serialize.\n * @returns {string}\n * Serialized node.\n */\n function handle(node) {\n return open + (node.value ? '\\n' + node.value : '') + '\\n' + close\n }\n}\n\n/**\n * Get an `open` or `close` fence.\n *\n * @param {Matter} matter\n * Structure.\n * @param {'close' | 'open'} prop\n * Field to get.\n * @returns {string}\n * Fence.\n */\nfunction fence(matter, prop) {\n return matter.marker\n ? pick(matter.marker, prop).repeat(3)\n : // @ts-expect-error: They’re mutually exclusive.\n pick(matter.fence, prop)\n}\n\n/**\n * Take `open` or `close` fields when schema is an info object, or use the\n * given value when it is a string.\n *\n * @param {Info | string} schema\n * Info object or value.\n * @param {'close' | 'open'} prop\n * Field to get.\n * @returns {string}\n * Thing to use for the opening or closing.\n */\nfunction pick(schema, prop) {\n return typeof schema === 'string' ? schema : schema[prop]\n}\n","/// <reference types=\"remark-parse\" />\n/// <reference types=\"remark-stringify\" />\n\n/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('micromark-extension-frontmatter').Options} Options\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\nimport {\n frontmatterFromMarkdown,\n frontmatterToMarkdown\n} from 'mdast-util-frontmatter'\nimport {frontmatter} from 'micromark-extension-frontmatter'\n\n/** @type {Options} */\nconst emptyOptions = 'yaml'\n\n/**\n * Add support for frontmatter.\n *\n * ###### Notes\n *\n * Doesn’t parse the data inside them: create your own plugin to do that.\n *\n * @param {Options | null | undefined} [options='yaml']\n * Configuration (default: `'yaml'`).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkFrontmatter(options) {\n // @ts-expect-error: TS is wrong about `this`.\n // eslint-disable-next-line unicorn/no-this-assignment\n const self = /** @type {Processor} */ (this)\n const settings = options || emptyOptions\n const data = self.data()\n\n const micromarkExtensions =\n data.micromarkExtensions || (data.micromarkExtensions = [])\n const fromMarkdownExtensions =\n data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n const toMarkdownExtensions =\n data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n micromarkExtensions.push(frontmatter(settings))\n fromMarkdownExtensions.push(frontmatterFromMarkdown(settings))\n toMarkdownExtensions.push(frontmatterToMarkdown(settings))\n}\n","/**\n * Create an ESTree identifier node for a given name.\n *\n * @param name\n * The name of the identifier.\n * @returns\n * The identifier node.\n */\nfunction identifier(name) {\n return { type: 'Identifier', name };\n}\n/**\n * Create an ESTree literal node for a given value.\n *\n * @param value\n * The value for which to create a literal.\n * @returns\n * The literal node.\n */\nfunction literal(value) {\n return { type: 'Literal', value };\n}\n/**\n * Create an ESTree call expression on an object member.\n *\n * @param object\n * The object to call the method on.\n * @param name\n * The name of the method to call.\n * @param args\n * Arguments to pass to the function call\n * @returns\n * The call expression node.\n */\nfunction methodCall(object, name, args) {\n return {\n type: 'CallExpression',\n optional: false,\n callee: {\n type: 'MemberExpression',\n computed: false,\n optional: false,\n object,\n property: identifier(name)\n },\n arguments: args\n };\n}\n/**\n * Turn a number or bigint into an ESTree expression. This handles positive and negative numbers and\n * bigints as well as special numbers.\n *\n * @param number\n * The value to turn into an ESTree expression.\n * @returns\n * An expression that represents the given value.\n */\nfunction processNumber(number) {\n if (number < 0 || Object.is(number, -0)) {\n return {\n type: 'UnaryExpression',\n operator: '-',\n prefix: true,\n argument: processNumber(-number)\n };\n }\n if (typeof number === 'bigint') {\n return { type: 'Literal', bigint: String(number) };\n }\n if (number === Number.POSITIVE_INFINITY || Number.isNaN(number)) {\n return identifier(String(number));\n }\n return literal(number);\n}\n/**\n * Process an array of numbers. This is a shortcut for iterables whose constructor takes an array of\n * numbers as input.\n *\n * @param numbers\n * The numbers to add to the array expression.\n * @returns\n * An ESTree array expression whose elements match the input numbers.\n */\nfunction processNumberArray(numbers) {\n return { type: 'ArrayExpression', elements: Array.from(numbers, processNumber) };\n}\n/**\n * Check whether a value can be constructed from its string representation.\n *\n * @param value\n * The value to check\n * @returns\n * Whether or not the value can be constructed from its string representation.\n */\nfunction isStringReconstructable(value) {\n return value instanceof URL || value instanceof URLSearchParams;\n}\n/**\n * Check whether a value can be constructed from its `valueOf()` result.\n *\n * @param value\n * The value to check\n * @returns\n * Whether or not the value can be constructed from its `valueOf()` result.\n */\nfunction isValueReconstructable(value) {\n return (value instanceof Boolean ||\n value instanceof Date ||\n value instanceof Number ||\n value instanceof String);\n}\nconst wellKnownSymbols = new Map();\nfor (const name of Reflect.ownKeys(Symbol)) {\n const value = Symbol[name];\n if (typeof value === 'symbol') {\n wellKnownSymbols.set(value, name);\n }\n}\n/**\n * Check whether a value is a Temporal value.\n *\n * @param value\n * The value to check\n * @returns\n * Whether or not the value is a Temporal value.\n */\nfunction isTemporal(value) {\n return (typeof Temporal !== 'undefined' &&\n (value instanceof Temporal.Duration ||\n value instanceof Temporal.Instant ||\n value instanceof Temporal.PlainDate ||\n value instanceof Temporal.PlainDateTime ||\n value instanceof Temporal.PlainYearMonth ||\n value instanceof Temporal.PlainMonthDay ||\n value instanceof Temporal.PlainTime ||\n value instanceof Temporal.ZonedDateTime));\n}\n/**\n * Check whether a value is a typed array.\n *\n * @param value\n * The value to check\n * @returns\n * Whether or not the value is a typed array.\n */\nfunction isTypedArray(value) {\n return (value instanceof BigInt64Array ||\n value instanceof BigUint64Array ||\n (typeof Float16Array !== 'undefined' && value instanceof Float16Array) ||\n value instanceof Float32Array ||\n value instanceof Float64Array ||\n value instanceof Int8Array ||\n value instanceof Int16Array ||\n value instanceof Int32Array ||\n value instanceof Uint8Array ||\n value instanceof Uint8ClampedArray ||\n value instanceof Uint16Array ||\n value instanceof Uint32Array);\n}\n/**\n * Compare two value contexts for sorting them based on reference count.\n *\n * @param a\n * The first context to compare.\n * @param b\n * The second context to compare.\n * @returns\n * The count of context a minus the count of context b.\n */\nfunction compareContexts(a, b) {\n const aReferencedByB = a.referencedBy.has(b.value);\n const bReferencedByA = b.referencedBy.has(a.value);\n if (aReferencedByB) {\n if (bReferencedByA) {\n return a.count - b.count;\n }\n return -1;\n }\n if (bReferencedByA) {\n return 1;\n }\n return a.count - b.count;\n}\n/**\n * Replace the assigned right hand expression with the new expression.\n *\n * If there is no assignment expression, the original expression is returned. Otherwise the\n * assignment is modified and returned.\n *\n * @param expression\n * The expression to use for the assignment.\n * @param assignment\n * The existing assignmentexpression\n * @returns\n * The new expression.\n */\nfunction replaceAssignment(expression, assignment) {\n if (!assignment || assignment.type !== 'AssignmentExpression') {\n return expression;\n }\n let node = assignment;\n while (node.right.type === 'AssignmentExpression') {\n node = node.right;\n }\n node.right = expression;\n return assignment;\n}\n/**\n * Create an ESTree epxression to represent a symbol. Global and well-known symbols are supported.\n *\n * @param symbol\n * The symbol to represent.\n * @returns\n * An ESTree expression to represent the symbol.\n */\nfunction symbolToEstree(symbol) {\n const name = wellKnownSymbols.get(symbol);\n if (name) {\n return {\n type: 'MemberExpression',\n computed: false,\n optional: false,\n object: identifier('Symbol'),\n property: identifier(name)\n };\n }\n if (symbol.description && symbol === Symbol.for(symbol.description)) {\n return methodCall(identifier('Symbol'), 'for', [literal(symbol.description)]);\n }\n throw new TypeError(`Only global symbols are supported, got: ${String(symbol)}`, {\n cause: symbol\n });\n}\n/**\n * Create an ESTree property from a key and a value expression.\n *\n * @param key\n * The property key value\n * @param value\n * The property value as an ESTree expression.\n * @returns\n * The ESTree properry node.\n */\nfunction property(key, value) {\n const isString = typeof key === 'string';\n return {\n type: 'Property',\n method: false,\n shorthand: false,\n computed: key === '__proto__' || !isString,\n kind: 'init',\n key: isString ? literal(key) : symbolToEstree(key),\n value\n };\n}\n/**\n * Convert a value to an ESTree node.\n *\n * @param value\n * The value to convert.\n * @param options\n * Additional options to configure the output.\n * @returns\n * The ESTree node.\n */\nexport function valueToEstree(value, options = {}) {\n const stack = [];\n const collectedContexts = new Map();\n const namedContexts = [];\n const customTrees = new Map();\n /**\n * Analyze a value and collect all reference contexts.\n *\n * @param val\n * The value to analyze.\n */\n function analyze(val) {\n if (typeof val !== 'object' && typeof val !== 'function') {\n return;\n }\n if (val == null) {\n return;\n }\n const context = collectedContexts.get(val);\n if (context) {\n if (options.preserveReferences) {\n context.count += 1;\n }\n for (const ancestor of stack) {\n context.referencedBy.add(ancestor);\n }\n if (stack.includes(val)) {\n if (!options.preserveReferences) {\n throw new Error(`Found circular reference: ${val}`, { cause: val });\n }\n const parent = stack.at(-1);\n const parentContext = collectedContexts.get(parent);\n parentContext.recursive = true;\n context.recursive = true;\n }\n return;\n }\n collectedContexts.set(val, {\n count: 1,\n recursive: false,\n referencedBy: new Set(stack),\n value: val\n });\n const estree = options?.replacer?.(val);\n if (estree) {\n customTrees.set(val, estree);\n return;\n }\n if (typeof val === 'function') {\n throw new TypeError(`Unsupported value: ${val}`, { cause: val });\n }\n if (isTypedArray(val)) {\n return;\n }\n if (isStringReconstructable(val)) {\n return;\n }\n if (isValueReconstructable(val)) {\n return;\n }\n if (value instanceof RegExp) {\n return;\n }\n if (isTemporal(value)) {\n return;\n }\n stack.push(val);\n if (val instanceof Map) {\n for (const pair of val) {\n analyze(pair[0]);\n analyze(pair[1]);\n }\n }\n else if (Array.isArray(val) || val instanceof Set) {\n for (const entry of val) {\n analyze(entry);\n }\n }\n else {\n const proto = Object.getPrototypeOf(val);\n if (proto != null && proto !== Object.prototype && !options.instanceAsObject) {\n throw new TypeError(`Unsupported value: ${val}`, { cause: val });\n }\n for (const key of Reflect.ownKeys(val)) {\n analyze(val[key]);\n }\n }\n stack.pop();\n }\n /**\n * Recursively generate the ESTree expression needed to reconstruct the value.\n *\n * @param val\n * The value to process.\n * @param isDeclaration\n * Whether or not this is for a variable declaration.\n * @returns\n * The ESTree expression to reconstruct the value.\n */\n function generate(val, isDeclaration) {\n if (val === undefined) {\n return identifier(String(val));\n }\n if (val == null || typeof val === 'string' || typeof val === 'boolean') {\n return literal(val);\n }\n if (typeof val === 'bigint' || typeof val === 'number') {\n return processNumber(val);\n }\n if (typeof val === 'symbol') {\n return symbolToEstree(val);\n }\n const context = collectedContexts.get(val);\n if (!isDeclaration && context?.name) {\n return identifier(context.name);\n }\n const tree = customTrees.get(val);\n if (tree) {\n return tree;\n }\n if (isValueReconstructable(val)) {\n return {\n type: 'NewExpression',\n callee: identifier(val.constructor.name),\n arguments: [generate(val.valueOf())]\n };\n }\n if (val instanceof RegExp) {\n return {\n type: 'Literal',\n regex: { pattern: val.source, flags: val.flags }\n };\n }\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer(val)) {\n return methodCall(identifier('Buffer'), 'from', [processNumberArray(val)]);\n }\n if (isTypedArray(val)) {\n return {\n type: 'NewExpression',\n callee: identifier(val.constructor.name),\n arguments: [processNumberArray(val)]\n };\n }\n if (isStringReconstructable(val)) {\n return {\n type: 'NewExpression',\n callee: identifier(val.constructor.name),\n arguments: [literal(String(val))]\n };\n }\n if (isTemporal(val)) {\n return methodCall({\n type: 'MemberExpression',\n computed: false,\n optional: false,\n object: identifier('Temporal'),\n property: identifier(val.constructor.name)\n }, 'from', [literal(String(val))]);\n }\n if (Array.isArray(val)) {\n const elements = Array.from({ length: val.length });\n let trimmable;\n for (let index = 0; index < val.length; index += 1) {\n if (!(index in val)) {\n elements[index] = null;\n trimmable = undefined;\n continue;\n }\n const child = val[index];\n const childContext = collectedContexts.get(child);\n if (context &&\n childContext &&\n namedContexts.indexOf(childContext) >= namedContexts.indexOf(context)) {\n elements[index] = null;\n trimmable ||= index;\n childContext.assignment = {\n type: 'AssignmentExpression',\n operator: '=',\n left: {\n type: 'MemberExpression',\n computed: true,\n optional: false,\n object: identifier(context.name),\n property: literal(index)\n },\n right: childContext.assignment || identifier(childContext.name)\n };\n }\n else {\n elements[index] = generate(child);\n trimmable = undefined;\n }\n }\n if (trimmable != null) {\n elements.splice(trimmable);\n }\n return {\n type: 'ArrayExpression',\n elements\n };\n }\n if (val instanceof Set) {\n const elements = [];\n let finalizer;\n for (const child of val) {\n if (finalizer) {\n finalizer = methodCall(finalizer, 'add', [generate(child)]);\n }\n else {\n const childContext = collectedContexts.get(child);\n if (context &&\n childContext &&\n namedContexts.indexOf(childContext) >= namedContexts.indexOf(context)) {\n finalizer = methodCall(identifier(context.name), 'add', [generate(child)]);\n }\n else {\n elements.push(generate(child));\n }\n }\n }\n if (context && finalizer) {\n context.assignment = replaceAssignment(finalizer, context.assignment);\n }\n return {\n type: 'NewExpression',\n callee: identifier('Set'),\n arguments: elements.length ? [{ type: 'ArrayExpression', elements }] : []\n };\n }\n if (val instanceof Map) {\n const elements = [];\n let finalizer;\n for (const [key, item] of val) {\n if (finalizer) {\n finalizer = methodCall(finalizer, 'set', [generate(key), generate(item)]);\n }\n else {\n const keyContext = collectedContexts.get(key);\n const itemContext = collectedContexts.get(item);\n if (context &&\n ((keyContext && namedContexts.indexOf(keyContext) >= namedContexts.indexOf(context)) ||\n (itemContext && namedContexts.indexOf(itemContext) >= namedContexts.indexOf(context)))) {\n finalizer = methodCall(identifier(context.name), 'set', [\n generate(key),\n generate(item)\n ]);\n }\n else {\n elements.push({\n type: 'ArrayExpression',\n elements: [generate(key), generate(item)]\n });\n }\n }\n }\n if (context && finalizer) {\n context.assignment = replaceAssignment(finalizer, context.assignment);\n }\n return {\n type: 'NewExpression',\n callee: identifier('Map'),\n arguments: elements.length ? [{ type: 'ArrayExpression', elements }] : []\n };\n }\n const properties = [];\n if (Object.getPrototypeOf(val) == null) {\n properties.push({\n type: 'Property',\n method: false,\n shorthand: false,\n computed: false,\n kind: 'init',\n key: identifier('__proto__'),\n value: literal(null)\n });\n }\n const object = val;\n const propertyDescriptors = [];\n for (const key of Reflect.ownKeys(val)) {\n // TODO [>=4] Throw an error for getters.\n const child = object[key];\n const { configurable, enumerable, writable } = Object.getOwnPropertyDescriptor(val, key);\n const childContext = collectedContexts.get(child);\n if (!configurable || !enumerable || !writable) {\n const propertyDescriptor = [property('value', generate(child))];\n if (configurable) {\n propertyDescriptor.push(property('configurable', literal(true)));\n }\n if (enumerable) {\n propertyDescriptor.push(property('enumerable', literal(true)));\n }\n if (writable) {\n propertyDescriptor.push(property('writable', literal(true)));\n }\n propertyDescriptors.push([\n key,\n { type: 'ObjectExpression', properties: propertyDescriptor }\n ]);\n }\n else if (context &&\n childContext &&\n namedContexts.indexOf(childContext) >= namedContexts.indexOf(context)) {\n if (key === '__proto__') {\n propertyDescriptors.push([\n key,\n {\n type: 'ObjectExpression',\n properties: [\n property('value', generate(child)),\n property('configurable', literal(true)),\n property('enumerable', literal(true)),\n property('writable', literal(true))\n ]\n }\n ]);\n }\n else {\n childContext.assignment = {\n type: 'AssignmentExpression',\n operator: '=',\n left: {\n type: 'MemberExpression',\n computed: true,\n optional: false,\n object: identifier(context.name),\n property: generate(key)\n },\n right: childContext.assignment || generate(child)\n };\n }\n }\n else {\n properties.push(property(key, generate(child)));\n }\n }\n const objectExpression = {\n type: 'ObjectExpression',\n properties\n };\n if (propertyDescriptors.length) {\n let name;\n let args;\n if (propertyDescriptors.length === 1) {\n const [[key, expression]] = propertyDescriptors;\n name = 'defineProperty';\n args = [typeof key === 'string' ? literal(key) : symbolToEstree(key), expression];\n }\n else {\n name = 'defineProperties';\n args = [\n {\n type: 'ObjectExpression',\n properties: propertyDescriptors.map(([key, expression]) => property(key, expression))\n }\n ];\n }\n if (!context) {\n return methodCall(identifier('Object'), name, [objectExpression, ...args]);\n }\n context.assignment = replaceAssignment(methodCall(identifier('Object'), name, [identifier(context.name), ...args]), context.assignment);\n }\n return objectExpression;\n }\n analyze(value);\n for (const [val, context] of collectedContexts) {\n if (context.recursive || context.count > 1) {\n // Assign reused or recursive references to a variable.\n context.name = `$${namedContexts.length}`;\n namedContexts.push(context);\n }\n else {\n // Otherwise don’t treat it as a reference.\n collectedContexts.delete(val);\n }\n }\n if (!namedContexts.length) {\n return generate(value);\n }\n const params = namedContexts.sort(compareContexts).map((context) => ({\n type: 'AssignmentPattern',\n left: identifier(context.name),\n right: generate(context.value, true)\n }));\n const rootContext = collectedContexts.get(value);\n const finalizers = [];\n for (const context of collectedContexts.values()) {\n if (context !== rootContext && context.assignment) {\n finalizers.push(context.assignment);\n }\n }\n finalizers.push(rootContext ? rootContext.assignment || identifier(rootContext.name) : generate(value));\n return {\n type: 'CallExpression',\n optional: false,\n arguments: [],\n callee: {\n type: 'ArrowFunctionExpression',\n expression: false,\n params,\n body: {\n type: 'SequenceExpression',\n expressions: finalizers\n }\n }\n };\n}\n//# sourceMappingURL=estree-util-value-to-estree.js.map","module.exports = (function() {\n /*\n * Generated by PEG.js 0.8.0.\n *\n * http://pegjs.majda.cz/\n */\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function SyntaxError(message, expected, found, offset, line, column) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.offset = offset;\n this.line = line;\n this.column = column;\n\n this.name = \"SyntaxError\";\n }\n\n peg$subclass(SyntaxError, Error);\n\n function parse(input) {\n var options = arguments.length > 1 ? arguments[1] : {},\n\n peg$FAILED = {},\n\n peg$startRuleFunctions = { start: peg$parsestart },\n peg$startRuleFunction = peg$parsestart,\n\n peg$c0 = [],\n peg$c1 = function() { return nodes },\n peg$c2 = peg$FAILED,\n peg$c3 = \"#\",\n peg$c4 = { type: \"literal\", value: \"#\", description: \"\\\"#\\\"\" },\n peg$c5 = void 0,\n peg$c6 = { type: \"any\", description: \"any character\" },\n peg$c7 = \"[\",\n peg$c8 = { type: \"literal\", value: \"[\", description: \"\\\"[\\\"\" },\n peg$c9 = \"]\",\n peg$c10 = { type: \"literal\", value: \"]\", description: \"\\\"]\\\"\" },\n peg$c11 = function(name) { addNode(node('ObjectPath', name, line, column)) },\n peg$c12 = function(name) { addNode(node('ArrayPath', name, line, column)) },\n peg$c13 = function(parts, name) { return parts.concat(name) },\n peg$c14 = function(name) { return [name] },\n peg$c15 = function(name) { return name },\n peg$c16 = \".\",\n peg$c17 = { type: \"literal\", value: \".\", description: \"\\\".\\\"\" },\n peg$c18 = \"=\",\n peg$c19 = { type: \"literal\", value: \"=\", description: \"\\\"=\\\"\" },\n peg$c20 = function(key, value) { addNode(node('Assign', value, line, column, key)) },\n peg$c21 = function(chars) { return chars.join('') },\n peg$c22 = function(node) { return node.value },\n peg$c23 = \"\\\"\\\"\\\"\",\n peg$c24 = { type: \"literal\", value: \"\\\"\\\"\\\"\", description: \"\\\"\\\\\\\"\\\\\\\"\\\\\\\"\\\"\" },\n peg$c25 = null,\n peg$c26 = function(chars) { return node('String', chars.join(''), line, column) },\n peg$c27 = \"\\\"\",\n peg$c28 = { type: \"literal\", value: \"\\\"\", description: \"\\\"\\\\\\\"\\\"\" },\n peg$c29 = \"'''\",\n peg$c30 = { type: \"literal\", value: \"'''\", description: \"\\\"'''\\\"\" },\n peg$c31 = \"'\",\n peg$c32 = { type: \"literal\", value: \"'\", description: \"\\\"'\\\"\" },\n peg$c33 = function(char) { return char },\n peg$c34 = function(char) { return char},\n peg$c35 = \"\\\\\",\n peg$c36 = { type: \"literal\", value: \"\\\\\", description: \"\\\"\\\\\\\\\\\"\" },\n peg$c37 = function() { return '' },\n peg$c38 = \"e\",\n peg$c39 = { type: \"literal\", value: \"e\", description: \"\\\"e\\\"\" },\n peg$c40 = \"E\",\n peg$c41 = { type: \"literal\", value: \"E\", description: \"\\\"E\\\"\" },\n peg$c42 = function(left, right) { return node('Float', parseFloat(left + 'e' + right), line, column) },\n peg$c43 = function(text) { return node('Float', parseFloat(text), line, column) },\n peg$c44 = \"+\",\n peg$c45 = { type: \"literal\", value: \"+\", description: \"\\\"+\\\"\" },\n peg$c46 = function(digits) { return digits.join('') },\n peg$c47 = \"-\",\n peg$c48 = { type: \"literal\", value: \"-\", description: \"\\\"-\\\"\" },\n peg$c49 = function(digits) { return '-' + digits.join('') },\n peg$c50 = function(text) { return node('Integer', parseInt(text, 10), line, column) },\n peg$c51 = \"true\",\n peg$c52 = { type: \"literal\", value: \"true\", description: \"\\\"true\\\"\" },\n peg$c53 = function() { return node('Boolean', true, line, column) },\n peg$c54 = \"false\",\n peg$c55 = { type: \"literal\", value: \"false\", description: \"\\\"false\\\"\" },\n peg$c56 = function() { return node('Boolean', false, line, column) },\n peg$c57 = function() { return node('Array', [], line, column) },\n peg$c58 = function(value) { return node('Array', value ? [value] : [], line, column) },\n peg$c59 = function(values) { return node('Array', values, line, column) },\n peg$c60 = function(values, value) { return node('Array', values.concat(value), line, column) },\n peg$c61 = function(value) { return value },\n peg$c62 = \",\",\n peg$c63 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n peg$c64 = \"{\",\n peg$c65 = { type: \"literal\", value: \"{\", description: \"\\\"{\\\"\" },\n peg$c66 = \"}\",\n peg$c67 = { type: \"literal\", value: \"}\", description: \"\\\"}\\\"\" },\n peg$c68 = function(values) { return node('InlineTable', values, line, column) },\n peg$c69 = function(key, value) { return node('InlineTableValue', value, line, column, key) },\n peg$c70 = function(digits) { return \".\" + digits },\n peg$c71 = function(date) { return date.join('') },\n peg$c72 = \":\",\n peg$c73 = { type: \"literal\", value: \":\", description: \"\\\":\\\"\" },\n peg$c74 = function(time) { return time.join('') },\n peg$c75 = \"T\",\n peg$c76 = { type: \"literal\", value: \"T\", description: \"\\\"T\\\"\" },\n peg$c77 = \"Z\",\n peg$c78 = { type: \"literal\", value: \"Z\", description: \"\\\"Z\\\"\" },\n peg$c79 = function(date, time) { return node('Date', new Date(date + \"T\" + time + \"Z\"), line, column) },\n peg$c80 = function(date, time) { return node('Date', new Date(date + \"T\" + time), line, column) },\n peg$c81 = /^[ \\t]/,\n peg$c82 = { type: \"class\", value: \"[ \\\\t]\", description: \"[ \\\\t]\" },\n peg$c83 = \"\\n\",\n peg$c84 = { type: \"literal\", value: \"\\n\", description: \"\\\"\\\\n\\\"\" },\n peg$c85 = \"\\r\",\n peg$c86 = { type: \"literal\", value: \"\\r\", description: \"\\\"\\\\r\\\"\" },\n peg$c87 = /^[0-9a-f]/i,\n peg$c88 = { type: \"class\", value: \"[0-9a-f]i\", description: \"[0-9a-f]i\" },\n peg$c89 = /^[0-9]/,\n peg$c90 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n peg$c91 = \"_\",\n peg$c92 = { type: \"literal\", value: \"_\", description: \"\\\"_\\\"\" },\n peg$c93 = function() { return \"\" },\n peg$c94 = /^[A-Za-z0-9_\\-]/,\n peg$c95 = { type: \"class\", value: \"[A-Za-z0-9_\\\\-]\", description: \"[A-Za-z0-9_\\\\-]\" },\n peg$c96 = function(d) { return d.join('') },\n peg$c97 = \"\\\\\\\"\",\n peg$c98 = { type: \"literal\", value: \"\\\\\\\"\", description: \"\\\"\\\\\\\\\\\\\\\"\\\"\" },\n peg$c99 = function() { return '\"' },\n peg$c100 = \"\\\\\\\\\",\n peg$c101 = { type: \"literal\", value: \"\\\\\\\\\", description: \"\\\"\\\\\\\\\\\\\\\\\\\"\" },\n peg$c102 = function() { return '\\\\' },\n peg$c103 = \"\\\\b\",\n peg$c104 = { type: \"literal\", value: \"\\\\b\", description: \"\\\"\\\\\\\\b\\\"\" },\n peg$c105 = function() { return '\\b' },\n peg$c106 = \"\\\\t\",\n peg$c107 = { type: \"literal\", value: \"\\\\t\", description: \"\\\"\\\\\\\\t\\\"\" },\n peg$c108 = function() { return '\\t' },\n peg$c109 = \"\\\\n\",\n peg$c110 = { type: \"literal\", value: \"\\\\n\", description: \"\\\"\\\\\\\\n\\\"\" },\n peg$c111 = function() { return '\\n' },\n peg$c112 = \"\\\\f\",\n peg$c113 = { type: \"literal\", value: \"\\\\f\", description: \"\\\"\\\\\\\\f\\\"\" },\n peg$c114 = function() { return '\\f' },\n peg$c115 = \"\\\\r\",\n peg$c116 = { type: \"literal\", value: \"\\\\r\", description: \"\\\"\\\\\\\\r\\\"\" },\n peg$c117 = function() { return '\\r' },\n peg$c118 = \"\\\\U\",\n peg$c119 = { type: \"literal\", value: \"\\\\U\", description: \"\\\"\\\\\\\\U\\\"\" },\n peg$c120 = function(digits) { return convertCodePoint(digits.join('')) },\n peg$c121 = \"\\\\u\",\n peg$c122 = { type: \"literal\", value: \"\\\\u\", description: \"\\\"\\\\\\\\u\\\"\" },\n\n peg$currPos = 0,\n peg$reportedPos = 0,\n peg$cachedPos = 0,\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$cache = {},\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$reportedPos, peg$currPos);\n }\n\n function offset() {\n return peg$reportedPos;\n }\n\n function line() {\n return peg$computePosDetails(peg$reportedPos).line;\n }\n\n function column() {\n return peg$computePosDetails(peg$reportedPos).column;\n }\n\n function expected(description) {\n throw peg$buildException(\n null,\n [{ type: \"other\", description: description }],\n peg$reportedPos\n );\n }\n\n function error(message) {\n throw peg$buildException(message, null, peg$reportedPos);\n }\n\n function peg$computePosDetails(pos) {\n function advance(details, startPos, endPos) {\n var p, ch;\n\n for (p = startPos; p < endPos; p++) {\n ch = input.charAt(p);\n if (ch === \"\\n\") {\n if (!details.seenCR) { details.line++; }\n details.column = 1;\n details.seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n details.line++;\n details.column = 1;\n details.seenCR = true;\n } else {\n details.column++;\n details.seenCR = false;\n }\n }\n }\n\n if (peg$cachedPos !== pos) {\n if (peg$cachedPos > pos) {\n peg$cachedPos = 0;\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n }\n advance(peg$cachedPosDetails, peg$cachedPos, pos);\n peg$cachedPos = pos;\n }\n\n return peg$cachedPosDetails;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildException(message, expected, pos) {\n function cleanupExpected(expected) {\n var i = 1;\n\n expected.sort(function(a, b) {\n if (a.description < b.description) {\n return -1;\n } else if (a.description > b.description) {\n return 1;\n } else {\n return 0;\n }\n });\n\n while (i < expected.length) {\n if (expected[i - 1] === expected[i]) {\n expected.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n function buildMessage(expected, found) {\n function stringEscape(s) {\n function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\x08/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(ch) { return '\\\\x' + hex(ch); })\n .replace(/[\\u0180-\\u0FFF]/g, function(ch) { return '\\\\u0' + hex(ch); })\n .replace(/[\\u1080-\\uFFFF]/g, function(ch) { return '\\\\u' + hex(ch); });\n }\n\n var expectedDescs = new Array(expected.length),\n expectedDesc, foundDesc, i;\n\n for (i = 0; i < expected.length; i++) {\n expectedDescs[i] = expected[i].description;\n }\n\n expectedDesc = expected.length > 1\n ? expectedDescs.slice(0, -1).join(\", \")\n + \" or \"\n + expectedDescs[expected.length - 1]\n : expectedDescs[0];\n\n foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n }\n\n var posDetails = peg$computePosDetails(pos),\n found = pos < input.length ? input.charAt(pos) : null;\n\n if (expected !== null) {\n cleanupExpected(expected);\n }\n\n return new SyntaxError(\n message !== null ? message : buildMessage(expected, found),\n expected,\n found,\n pos,\n posDetails.line,\n posDetails.column\n );\n }\n\n function peg$parsestart() {\n var s0, s1, s2;\n\n var key = peg$currPos * 49 + 0,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseline();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseline();\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c1();\n }\n s0 = s1;\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseline() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var key = peg$currPos * 49 + 1,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseS();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseS();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseexpression();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseS();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseS();\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsecomment();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsecomment();\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseNL();\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseNL();\n }\n } else {\n s5 = peg$c2;\n }\n if (s5 === peg$FAILED) {\n s5 = peg$parseEOF();\n }\n if (s5 !== peg$FAILED) {\n s1 = [s1, s2, s3, s4, s5];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseS();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseS();\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseNL();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseNL();\n }\n } else {\n s2 = peg$c2;\n }\n if (s2 === peg$FAILED) {\n s2 = peg$parseEOF();\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$parseNL();\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseexpression() {\n var s0;\n\n var key = peg$currPos * 49 + 2,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$parsecomment();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepath();\n if (s0 === peg$FAILED) {\n s0 = peg$parsetablearray();\n if (s0 === peg$FAILED) {\n s0 = peg$parseassignment();\n }\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsecomment() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 49 + 3,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s1 = peg$c3;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c4); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseNL();\n if (s5 === peg$FAILED) {\n s5 = peg$parseEOF();\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = peg$c5;\n } else {\n peg$currPos = s4;\n s4 = peg$c2;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c6); }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$currPos;\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseNL();\n if (s5 === peg$FAILED) {\n s5 = peg$parseEOF();\n }\n peg$silentFails--;\n if (s5 === peg$FAILED) {\n s4 = peg$c5;\n } else {\n peg$currPos = s4;\n s4 = peg$c2;\n }\n if (s4 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c6); }\n }\n if (s5 !== peg$FAILED) {\n s4 = [s4, s5];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsepath() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 49 + 4,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c8); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseS();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseS();\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetable_key();\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parseS();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseS();\n }\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s5 = peg$c9;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c11(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsetablearray() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n var key = peg$currPos * 49 + 5,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c8); }\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 91) {\n s2 = peg$c7;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c8); }\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseS();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseS();\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parsetable_key();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseS();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseS();\n }\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s6 = peg$c9;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s7 = peg$c9;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c12(s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsetable_key() {\n var s0, s1, s2;\n\n var key = peg$currPos * 49 + 6,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsedot_ended_table_key_part();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsedot_ended_table_key_part();\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsetable_key_part();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c13(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsetable_key_part();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c14(s1);\n }\n s0 = s1;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsetable_key_part() {\n var s0, s1, s2, s3, s4;\n\n var key = peg$currPos * 49 + 7,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseS();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseS();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsekey();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseS();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseS();\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c15(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseS();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseS();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsequoted_key();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseS();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseS();\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c15(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsedot_ended_table_key_part() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var key = peg$currPos * 49 + 8,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseS();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseS();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsekey();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseS();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseS();\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c16;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseS();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseS();\n }\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c15(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseS();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseS();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsequoted_key();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseS();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseS();\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c16;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseS();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseS();\n }\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c15(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseassignment() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 49 + 9,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$parsekey();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseS();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseS();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c18;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c19); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parseS();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseS();\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsevalue();\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c20(s1, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsequoted_key();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseS();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseS();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c18;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c19); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parseS();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseS();\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parsevalue();\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c20(s1, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsekey() {\n var s0, s1, s2;\n\n var key = peg$currPos * 49 + 10,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseASCII_BASIC();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseASCII_BASIC();\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c21(s1);\n }\n s0 = s1;\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsequoted_key() {\n var s0, s1;\n\n var key = peg$currPos * 49 + 11,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$parsedouble_quoted_single_line_string();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c22(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsesingle_quoted_single_line_string();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c22(s1);\n }\n s0 = s1;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsevalue() {\n var s0;\n\n var key = peg$currPos * 49 + 12,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$parsestring();\n if (s0 === peg$FAILED) {\n s0 = peg$parsedatetime();\n if (s0 === peg$FAILED) {\n s0 = peg$parsefloat();\n if (s0 === peg$FAILED) {\n s0 = peg$parseinteger();\n if (s0 === peg$FAILED) {\n s0 = peg$parseboolean();\n if (s0 === peg$FAILED) {\n s0 = peg$parsearray();\n if (s0 === peg$FAILED) {\n s0 = peg$parseinline_table();\n }\n }\n }\n }\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsestring() {\n var s0;\n\n var key = peg$currPos * 49 + 13,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$parsedouble_quoted_multiline_string();\n if (s0 === peg$FAILED) {\n s0 = peg$parsedouble_quoted_single_line_string();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesingle_quoted_multiline_string();\n if (s0 === peg$FAILED) {\n s0 = peg$parsesingle_quoted_single_line_string();\n }\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsedouble_quoted_multiline_string() {\n var s0, s1, s2, s3, s4;\n\n var key = peg$currPos * 49 + 14,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c23) {\n s1 = peg$c23;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c24); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNL();\n if (s2 === peg$FAILED) {\n s2 = peg$c25;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsemultiline_string_char();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsemultiline_string_char();\n }\n if (s3 !== peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c23) {\n s4 = peg$c23;\n peg$currPos += 3;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c24); }\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c26(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsedouble_quoted_single_line_string() {\n var s0, s1, s2, s3;\n\n var key = peg$currPos * 49 + 15,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c27;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c28); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsestring_char();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsestring_char();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c27;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c28); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c26(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsesingle_quoted_multiline_string() {\n var s0, s1, s2, s3, s4;\n\n var key = peg$currPos * 49 + 16,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c29) {\n s1 = peg$c29;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c30); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNL();\n if (s2 === peg$FAILED) {\n s2 = peg$c25;\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsemultiline_literal_char();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsemultiline_literal_char();\n }\n if (s3 !== peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c29) {\n s4 = peg$c29;\n peg$currPos += 3;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c30); }\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c26(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsesingle_quoted_single_line_string() {\n var s0, s1, s2, s3;\n\n var key = peg$currPos * 49 + 17,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 39) {\n s1 = peg$c31;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c32); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseliteral_char();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseliteral_char();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 39) {\n s3 = peg$c31;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c32); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c26(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsestring_char() {\n var s0, s1, s2;\n\n var key = peg$currPos * 49 + 18,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$parseESCAPED();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 34) {\n s2 = peg$c27;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c28); }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = peg$c5;\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c6); }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c33(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseliteral_char() {\n var s0, s1, s2;\n\n var key = peg$currPos * 49 + 19,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 39) {\n s2 = peg$c31;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c32); }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = peg$c5;\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c6); }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c33(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsemultiline_string_char() {\n var s0, s1, s2;\n\n var key = peg$currPos * 49 + 20,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$parseESCAPED();\n if (s0 === peg$FAILED) {\n s0 = peg$parsemultiline_string_delim();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.substr(peg$currPos, 3) === peg$c23) {\n s2 = peg$c23;\n peg$currPos += 3;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c24); }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = peg$c5;\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c6); }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c34(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsemultiline_string_delim() {\n var s0, s1, s2, s3, s4;\n\n var key = peg$currPos * 49 + 21,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s1 = peg$c35;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c36); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNL();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseNLS();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseNLS();\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c37();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsemultiline_literal_char() {\n var s0, s1, s2;\n\n var key = peg$currPos * 49 + 22,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n if (input.substr(peg$currPos, 3) === peg$c29) {\n s2 = peg$c29;\n peg$currPos += 3;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c30); }\n }\n peg$silentFails--;\n if (s2 === peg$FAILED) {\n s1 = peg$c5;\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n if (input.length > peg$currPos) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c6); }\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c33(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsefloat() {\n var s0, s1, s2, s3;\n\n var key = peg$currPos * 49 + 23,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$parsefloat_text();\n if (s1 === peg$FAILED) {\n s1 = peg$parseinteger_text();\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 101) {\n s2 = peg$c38;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c39); }\n }\n if (s2 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 69) {\n s2 = peg$c40;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c41); }\n }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseinteger_text();\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c42(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsefloat_text();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c43(s1);\n }\n s0 = s1;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsefloat_text() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 49 + 24,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c45); }\n }\n if (s1 === peg$FAILED) {\n s1 = peg$c25;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parseDIGITS();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c16;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseDIGITS();\n if (s5 !== peg$FAILED) {\n s3 = [s3, s4, s5];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c46(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c47;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c48); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parseDIGITS();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c16;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseDIGITS();\n if (s5 !== peg$FAILED) {\n s3 = [s3, s4, s5];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c49(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseinteger() {\n var s0, s1;\n\n var key = peg$currPos * 49 + 25,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$parseinteger_text();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c50(s1);\n }\n s0 = s1;\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseinteger_text() {\n var s0, s1, s2, s3, s4;\n\n var key = peg$currPos * 49 + 26,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 43) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c45); }\n }\n if (s1 === peg$FAILED) {\n s1 = peg$c25;\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseDIGIT_OR_UNDER();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseDIGIT_OR_UNDER();\n }\n } else {\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c16;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = peg$c5;\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c46(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c47;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c48); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseDIGIT_OR_UNDER();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseDIGIT_OR_UNDER();\n }\n } else {\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 46) {\n s4 = peg$c16;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n peg$silentFails--;\n if (s4 === peg$FAILED) {\n s3 = peg$c5;\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c49(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseboolean() {\n var s0, s1;\n\n var key = peg$currPos * 49 + 27,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 4) === peg$c51) {\n s1 = peg$c51;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c53();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 5) === peg$c54) {\n s1 = peg$c54;\n peg$currPos += 5;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c55); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c56();\n }\n s0 = s1;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsearray() {\n var s0, s1, s2, s3, s4;\n\n var key = peg$currPos * 49 + 28,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c8); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsearray_sep();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsearray_sep();\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c9;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c57();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c8); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsearray_value();\n if (s2 === peg$FAILED) {\n s2 = peg$c25;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c9;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c58(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c8); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsearray_value_list();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsearray_value_list();\n }\n } else {\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c9;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c59(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c8); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parsearray_value_list();\n if (s3 !== peg$FAILED) {\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parsearray_value_list();\n }\n } else {\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsearray_value();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s4 = peg$c9;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c10); }\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c60(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsearray_value() {\n var s0, s1, s2, s3, s4;\n\n var key = peg$currPos * 49 + 29,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsearray_sep();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsearray_sep();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsevalue();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsearray_sep();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsearray_sep();\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c61(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsearray_value_list() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n var key = peg$currPos * 49 + 30,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsearray_sep();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsearray_sep();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsevalue();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parsearray_sep();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parsearray_sep();\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c62;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c63); }\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parsearray_sep();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parsearray_sep();\n }\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c61(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsearray_sep() {\n var s0;\n\n var key = peg$currPos * 49 + 31,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$parseS();\n if (s0 === peg$FAILED) {\n s0 = peg$parseNL();\n if (s0 === peg$FAILED) {\n s0 = peg$parsecomment();\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseinline_table() {\n var s0, s1, s2, s3, s4, s5;\n\n var key = peg$currPos * 49 + 32,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c64;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c65); }\n }\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseS();\n while (s3 !== peg$FAILED) {\n s2.push(s3);\n s3 = peg$parseS();\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseinline_table_assignment();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseinline_table_assignment();\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parseS();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parseS();\n }\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c66;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c67); }\n }\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c68(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseinline_table_assignment() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n var key = peg$currPos * 49 + 33,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseS();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseS();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsekey();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseS();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseS();\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 61) {\n s4 = peg$c18;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c19); }\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseS();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseS();\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsevalue();\n if (s6 !== peg$FAILED) {\n s7 = [];\n s8 = peg$parseS();\n while (s8 !== peg$FAILED) {\n s7.push(s8);\n s8 = peg$parseS();\n }\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s8 = peg$c62;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c63); }\n }\n if (s8 !== peg$FAILED) {\n s9 = [];\n s10 = peg$parseS();\n while (s10 !== peg$FAILED) {\n s9.push(s10);\n s10 = peg$parseS();\n }\n if (s9 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c69(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseS();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseS();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parsekey();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseS();\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseS();\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 61) {\n s4 = peg$c18;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c19); }\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseS();\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseS();\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parsevalue();\n if (s6 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c69(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsesecfragment() {\n var s0, s1, s2;\n\n var key = peg$currPos * 49 + 34,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 46) {\n s1 = peg$c16;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c17); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseDIGITS();\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c70(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsedate() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;\n\n var key = peg$currPos * 49 + 35,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseDIGIT_OR_UNDER();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseDIGIT_OR_UNDER();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseDIGIT_OR_UNDER();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseDIGIT_OR_UNDER();\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s6 = peg$c47;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c48); }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parseDIGIT_OR_UNDER();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseDIGIT_OR_UNDER();\n if (s8 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s9 = peg$c47;\n peg$currPos++;\n } else {\n s9 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c48); }\n }\n if (s9 !== peg$FAILED) {\n s10 = peg$parseDIGIT_OR_UNDER();\n if (s10 !== peg$FAILED) {\n s11 = peg$parseDIGIT_OR_UNDER();\n if (s11 !== peg$FAILED) {\n s2 = [s2, s3, s4, s5, s6, s7, s8, s9, s10, s11];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c71(s1);\n }\n s0 = s1;\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsetime() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n var key = peg$currPos * 49 + 36,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseDIGIT_OR_UNDER();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseDIGIT_OR_UNDER();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s4 = peg$c72;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c73); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseDIGIT_OR_UNDER();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseDIGIT_OR_UNDER();\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s7 = peg$c72;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c73); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parseDIGIT_OR_UNDER();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseDIGIT_OR_UNDER();\n if (s9 !== peg$FAILED) {\n s10 = peg$parsesecfragment();\n if (s10 === peg$FAILED) {\n s10 = peg$c25;\n }\n if (s10 !== peg$FAILED) {\n s2 = [s2, s3, s4, s5, s6, s7, s8, s9, s10];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c74(s1);\n }\n s0 = s1;\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsetime_with_offset() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16;\n\n var key = peg$currPos * 49 + 37,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseDIGIT_OR_UNDER();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseDIGIT_OR_UNDER();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s4 = peg$c72;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c73); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parseDIGIT_OR_UNDER();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseDIGIT_OR_UNDER();\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s7 = peg$c72;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c73); }\n }\n if (s7 !== peg$FAILED) {\n s8 = peg$parseDIGIT_OR_UNDER();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseDIGIT_OR_UNDER();\n if (s9 !== peg$FAILED) {\n s10 = peg$parsesecfragment();\n if (s10 === peg$FAILED) {\n s10 = peg$c25;\n }\n if (s10 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 45) {\n s11 = peg$c47;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c48); }\n }\n if (s11 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 43) {\n s11 = peg$c44;\n peg$currPos++;\n } else {\n s11 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c45); }\n }\n }\n if (s11 !== peg$FAILED) {\n s12 = peg$parseDIGIT_OR_UNDER();\n if (s12 !== peg$FAILED) {\n s13 = peg$parseDIGIT_OR_UNDER();\n if (s13 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s14 = peg$c72;\n peg$currPos++;\n } else {\n s14 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c73); }\n }\n if (s14 !== peg$FAILED) {\n s15 = peg$parseDIGIT_OR_UNDER();\n if (s15 !== peg$FAILED) {\n s16 = peg$parseDIGIT_OR_UNDER();\n if (s16 !== peg$FAILED) {\n s2 = [s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c74(s1);\n }\n s0 = s1;\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parsedatetime() {\n var s0, s1, s2, s3, s4;\n\n var key = peg$currPos * 49 + 38,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = peg$parsedate();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 84) {\n s2 = peg$c75;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c76); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetime();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 90) {\n s4 = peg$c77;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c78); }\n }\n if (s4 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c79(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsedate();\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 84) {\n s2 = peg$c75;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c76); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsetime_with_offset();\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c80(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseS() {\n var s0;\n\n var key = peg$currPos * 49 + 39,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n if (peg$c81.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c82); }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseNL() {\n var s0, s1, s2;\n\n var key = peg$currPos * 49 + 40,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n if (input.charCodeAt(peg$currPos) === 10) {\n s0 = peg$c83;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c84); }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 13) {\n s1 = peg$c85;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c86); }\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 10) {\n s2 = peg$c83;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c84); }\n }\n if (s2 !== peg$FAILED) {\n s1 = [s1, s2];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseNLS() {\n var s0;\n\n var key = peg$currPos * 49 + 41,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$parseNL();\n if (s0 === peg$FAILED) {\n s0 = peg$parseS();\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseEOF() {\n var s0, s1;\n\n var key = peg$currPos * 49 + 42,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n peg$silentFails++;\n if (input.length > peg$currPos) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c6); }\n }\n peg$silentFails--;\n if (s1 === peg$FAILED) {\n s0 = peg$c5;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseHEX() {\n var s0;\n\n var key = peg$currPos * 49 + 43,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n if (peg$c87.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c88); }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseDIGIT_OR_UNDER() {\n var s0, s1;\n\n var key = peg$currPos * 49 + 44,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c90); }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 95) {\n s1 = peg$c91;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c92); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c93();\n }\n s0 = s1;\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseASCII_BASIC() {\n var s0;\n\n var key = peg$currPos * 49 + 45,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n if (peg$c94.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c95); }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseDIGITS() {\n var s0, s1, s2;\n\n var key = peg$currPos * 49 + 46,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseDIGIT_OR_UNDER();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parseDIGIT_OR_UNDER();\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c96(s1);\n }\n s0 = s1;\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseESCAPED() {\n var s0, s1;\n\n var key = peg$currPos * 49 + 47,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c97) {\n s1 = peg$c97;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c98); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c99();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c100) {\n s1 = peg$c100;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c101); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c102();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c103) {\n s1 = peg$c103;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c104); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c105();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c106) {\n s1 = peg$c106;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c107); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c108();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c109) {\n s1 = peg$c109;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c110); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c111();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c112) {\n s1 = peg$c112;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c113); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c114();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c115) {\n s1 = peg$c115;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c116); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c117();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$parseESCAPED_UNICODE();\n }\n }\n }\n }\n }\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n function peg$parseESCAPED_UNICODE() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n var key = peg$currPos * 49 + 48,\n cached = peg$cache[key];\n\n if (cached) {\n peg$currPos = cached.nextPos;\n return cached.result;\n }\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c118) {\n s1 = peg$c118;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c119); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parseHEX();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseHEX();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseHEX();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseHEX();\n if (s6 !== peg$FAILED) {\n s7 = peg$parseHEX();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseHEX();\n if (s8 !== peg$FAILED) {\n s9 = peg$parseHEX();\n if (s9 !== peg$FAILED) {\n s10 = peg$parseHEX();\n if (s10 !== peg$FAILED) {\n s3 = [s3, s4, s5, s6, s7, s8, s9, s10];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c120(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c121) {\n s1 = peg$c121;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c122); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$parseHEX();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseHEX();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseHEX();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseHEX();\n if (s6 !== peg$FAILED) {\n s3 = [s3, s4, s5, s6];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c120(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n\n peg$cache[key] = { nextPos: peg$currPos, result: s0 };\n\n return s0;\n }\n\n\n var nodes = [];\n\n function genError(err, line, col) {\n var ex = new Error(err);\n ex.line = line;\n ex.column = col;\n throw ex;\n }\n\n function addNode(node) {\n nodes.push(node);\n }\n\n function node(type, value, line, column, key) {\n var obj = { type: type, value: value, line: line(), column: column() };\n if (key) obj.key = key;\n return obj;\n }\n\n function convertCodePoint(str, line, col) {\n var num = parseInt(\"0x\" + str);\n\n if (\n !isFinite(num) ||\n Math.floor(num) != num ||\n num < 0 ||\n num > 0x10FFFF ||\n (num > 0xD7FF && num < 0xE000)\n ) {\n genError(\"Invalid Unicode escape code: \" + str, line, col);\n } else {\n return fromCodePoint(num);\n }\n }\n\n function fromCodePoint() {\n var MAX_SIZE = 0x4000;\n var codeUnits = [];\n var highSurrogate;\n var lowSurrogate;\n var index = -1;\n var length = arguments.length;\n if (!length) {\n return '';\n }\n var result = '';\n while (++index < length) {\n var codePoint = Number(arguments[index]);\n if (codePoint <= 0xFFFF) { // BMP code point\n codeUnits.push(codePoint);\n } else { // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000;\n highSurrogate = (codePoint >> 10) + 0xD800;\n lowSurrogate = (codePoint % 0x400) + 0xDC00;\n codeUnits.push(highSurrogate, lowSurrogate);\n }\n if (index + 1 == length || codeUnits.length > MAX_SIZE) {\n result += String.fromCharCode.apply(null, codeUnits);\n codeUnits.length = 0;\n }\n }\n return result;\n }\n\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail({ type: \"end\", description: \"end of input\" });\n }\n\n throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);\n }\n }\n\n return {\n SyntaxError: SyntaxError,\n parse: parse\n };\n})();\n","\"use strict\";\nfunction compile(nodes) {\n var assignedPaths = [];\n var valueAssignments = [];\n var currentPath = \"\";\n var data = Object.create(null);\n var context = data;\n var arrayMode = false;\n\n return reduce(nodes);\n\n function reduce(nodes) {\n var node;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n switch (node.type) {\n case \"Assign\":\n assign(node);\n break;\n case \"ObjectPath\":\n setPath(node);\n break;\n case \"ArrayPath\":\n addTableArray(node);\n break;\n }\n }\n\n return data;\n }\n\n function genError(err, line, col) {\n var ex = new Error(err);\n ex.line = line;\n ex.column = col;\n throw ex;\n }\n\n function assign(node) {\n var key = node.key;\n var value = node.value;\n var line = node.line;\n var column = node.column;\n\n var fullPath;\n if (currentPath) {\n fullPath = currentPath + \".\" + key;\n } else {\n fullPath = key;\n }\n if (typeof context[key] !== \"undefined\") {\n genError(\"Cannot redefine existing key '\" + fullPath + \"'.\", line, column);\n }\n\n context[key] = reduceValueNode(value);\n\n if (!pathAssigned(fullPath)) {\n assignedPaths.push(fullPath);\n valueAssignments.push(fullPath);\n }\n }\n\n\n function pathAssigned(path) {\n return assignedPaths.indexOf(path) !== -1;\n }\n\n function reduceValueNode(node) {\n if (node.type === \"Array\") {\n return reduceArrayWithTypeChecking(node.value);\n } else if (node.type === \"InlineTable\") {\n return reduceInlineTableNode(node.value);\n } else {\n return node.value;\n }\n }\n\n function reduceInlineTableNode(values) {\n var obj = Object.create(null);\n for (var i = 0; i < values.length; i++) {\n var val = values[i];\n if (val.value.type === \"InlineTable\") {\n obj[val.key] = reduceInlineTableNode(val.value.value);\n } else if (val.type === \"InlineTableValue\") {\n obj[val.key] = reduceValueNode(val.value);\n }\n }\n\n return obj;\n }\n\n function setPath(node) {\n var path = node.value;\n var quotedPath = path.map(quoteDottedString).join(\".\");\n var line = node.line;\n var column = node.column;\n\n if (pathAssigned(quotedPath)) {\n genError(\"Cannot redefine existing key '\" + path + \"'.\", line, column);\n }\n assignedPaths.push(quotedPath);\n context = deepRef(data, path, Object.create(null), line, column);\n currentPath = path;\n }\n\n function addTableArray(node) {\n var path = node.value;\n var quotedPath = path.map(quoteDottedString).join(\".\");\n var line = node.line;\n var column = node.column;\n\n if (!pathAssigned(quotedPath)) {\n assignedPaths.push(quotedPath);\n }\n assignedPaths = assignedPaths.filter(function(p) {\n return p.indexOf(quotedPath) !== 0;\n });\n assignedPaths.push(quotedPath);\n context = deepRef(data, path, [], line, column);\n currentPath = quotedPath;\n\n if (context instanceof Array) {\n var newObj = Object.create(null);\n context.push(newObj);\n context = newObj;\n } else {\n genError(\"Cannot redefine existing key '\" + path + \"'.\", line, column);\n }\n }\n\n // Given a path 'a.b.c', create (as necessary) `start.a`,\n // `start.a.b`, and `start.a.b.c`, assigning `value` to `start.a.b.c`.\n // If `a` or `b` are arrays and have items in them, the last item in the\n // array is used as the context for the next sub-path.\n function deepRef(start, keys, value, line, column) {\n var traversed = [];\n var traversedPath = \"\";\n var path = keys.join(\".\");\n var ctx = start;\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n traversed.push(key);\n traversedPath = traversed.join(\".\");\n if (typeof ctx[key] === \"undefined\") {\n if (i === keys.length - 1) {\n ctx[key] = value;\n } else {\n ctx[key] = Object.create(null);\n }\n } else if (i !== keys.length - 1 && valueAssignments.indexOf(traversedPath) > -1) {\n // already a non-object value at key, can't be used as part of a new path\n genError(\"Cannot redefine existing key '\" + traversedPath + \"'.\", line, column);\n }\n\n ctx = ctx[key];\n if (ctx instanceof Array && ctx.length && i < keys.length - 1) {\n ctx = ctx[ctx.length - 1];\n }\n }\n\n return ctx;\n }\n\n function reduceArrayWithTypeChecking(array) {\n // Ensure that all items in the array are of the same type\n var firstType = null;\n for (var i = 0; i < array.length; i++) {\n var node = array[i];\n if (firstType === null) {\n firstType = node.type;\n } else {\n if (node.type !== firstType) {\n genError(\"Cannot add value of type \" + node.type + \" to array of type \" +\n firstType + \".\", node.line, node.column);\n }\n }\n }\n\n // Recursively reduce array of nodes into array of the nodes' values\n return array.map(reduceValueNode);\n }\n\n function quoteDottedString(str) {\n if (str.indexOf(\".\") > -1) {\n return \"\\\"\" + str + \"\\\"\";\n } else {\n return str;\n }\n }\n}\n\nmodule.exports = {\n compile: compile\n};\n","var parser = require('./lib/parser');\nvar compiler = require('./lib/compiler');\n\nmodule.exports = {\n parse: function(input) {\n var nodes = parser.parse(input.toString());\n return compiler.compile(nodes);\n }\n};\n","/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n * Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n * Code point to check.\n * @returns {boolean}\n * Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n * Code point to check.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {boolean}\n * Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n const settings = options || emptyOptions\n const re = settings.jsx ? contReJsx : contRe\n return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n * Identifier to check.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {boolean}\n * Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n const settings = options || emptyOptions\n const re = settings.jsx ? nameReJsx : nameRe\n return re.test(name)\n}\n","/**\n * @import {Node, Pattern} from 'estree'\n * @import {Scope, Visitors} from './types.js'\n */\n\nimport {ok as assert} from 'devlop'\n\n/**\n * Create state to track what’s defined.\n *\n * @returns {Visitors}\n * State.\n */\nexport function createVisitors() {\n /** @type {[topLevel: Scope, ...rest: Array<Scope>]} */\n const scopes = [{block: false, defined: []}]\n\n return {enter, exit, scopes}\n\n /**\n * @param {Node} node\n * Node.\n * @returns {undefined}\n * Nothing.\n */\n function enter(node) {\n // On arrow functions, create scope, add parameters.\n if (node.type === 'ArrowFunctionExpression') {\n scopes.push({block: false, defined: []})\n\n for (const parameter of node.params) {\n definePattern(parameter, false)\n }\n }\n // On block statements, create scope.\n // Not sure why `periscopic` only does `Block`/`For`/`ForIn`/`ForOf`.\n // I added `DoWhile`/`While` here just to be sure.\n else if (\n node.type === 'BlockStatement' ||\n node.type === 'DoWhileStatement' ||\n node.type === 'ForInStatement' ||\n node.type === 'ForOfStatement' ||\n node.type === 'ForStatement' ||\n node.type === 'WhileStatement'\n ) {\n scopes.push({block: true, defined: []})\n }\n\n // On catch clauses, create scope, add param.\n else if (node.type === 'CatchClause') {\n scopes.push({block: true, defined: []})\n if (node.param) definePattern(node.param, true)\n }\n\n // Add identifier of class declaration.\n else if (node.type === 'ClassDeclaration') {\n defineIdentifier(node.id.name, false)\n }\n\n // On function declarations, add name, create scope, add parameters.\n else if (node.type === 'FunctionDeclaration') {\n if (node.id) {\n defineIdentifier(node.id.name, false)\n }\n\n scopes.push({block: false, defined: []})\n\n for (const parameter of node.params) {\n definePattern(parameter, false)\n }\n }\n\n // On function expressions, add name, create scope, add parameters.\n else if (node.type === 'FunctionExpression') {\n if (node.id) defineIdentifier(node.id.name, false)\n scopes.push({block: false, defined: []})\n\n for (const parameter of node.params) {\n definePattern(parameter, false)\n }\n }\n\n // Add specifiers of import declarations.\n else if (node.type === 'ImportDeclaration') {\n for (const specifier of node.specifiers) {\n defineIdentifier(specifier.local.name, false)\n }\n }\n\n // Add patterns of variable declarations.\n else if (node.type === 'VariableDeclaration') {\n for (const declaration of node.declarations) {\n definePattern(declaration.id, node.kind !== 'var')\n }\n }\n }\n\n /**\n * @param {Node} node\n * Node.\n * @returns {undefined}\n * Nothing.\n */\n function exit(node) {\n if (\n node.type === 'ArrowFunctionExpression' ||\n node.type === 'FunctionDeclaration' ||\n node.type === 'FunctionExpression'\n ) {\n const scope = scopes.pop()\n assert(scope, 'expected scope')\n assert(!scope.block, 'expected non-block')\n } else if (\n node.type === 'BlockStatement' ||\n node.type === 'CatchClause' ||\n node.type === 'DoWhileStatement' ||\n node.type === 'ForInStatement' ||\n node.type === 'ForOfStatement' ||\n node.type === 'ForStatement' ||\n node.type === 'WhileStatement'\n ) {\n const scope = scopes.pop()\n assert(scope, 'expected scope')\n assert(scope.block, 'expected block')\n }\n }\n\n /**\n * Define an identifier in a scope.\n *\n * @param {string} id\n * @param {boolean} block\n * @returns {undefined}\n */\n function defineIdentifier(id, block) {\n let index = scopes.length\n /** @type {Scope | undefined} */\n let scope\n\n while (index--) {\n scope = scopes[index]\n\n if (block || !scope.block) {\n break\n }\n }\n\n assert(scope)\n scope.defined.push(id)\n }\n\n /**\n * Define a pattern in a scope.\n *\n * @param {Pattern} pattern\n * @param {boolean} block\n */\n function definePattern(pattern, block) {\n // `[, x]`\n if (pattern.type === 'ArrayPattern') {\n for (const element of pattern.elements) {\n if (element) {\n definePattern(element, block)\n }\n }\n }\n\n // `{x=y}`\n else if (pattern.type === 'AssignmentPattern') {\n definePattern(pattern.left, block)\n }\n\n // `x`\n else if (pattern.type === 'Identifier') {\n defineIdentifier(pattern.name, block)\n }\n\n // `{x}`\n else if (pattern.type === 'ObjectPattern') {\n for (const property of pattern.properties) {\n // `{key}`, `{key = value}`, `{key: value}`\n if (property.type === 'Property') {\n definePattern(property.value, block)\n }\n // `{...x}`\n else {\n assert(property.type === 'RestElement')\n definePattern(property, block)\n }\n }\n }\n\n // `...x`\n else {\n assert(pattern.type === 'RestElement')\n definePattern(pattern.argument, block)\n }\n }\n}\n","/**\n * @typedef { import('estree').Node} Node\n * @typedef {{\n * skip: () => void;\n * remove: () => void;\n * replace: (node: Node) => void;\n * }} WalkerContext\n */\n\nexport class WalkerBase {\n\tconstructor() {\n\t\t/** @type {boolean} */\n\t\tthis.should_skip = false;\n\n\t\t/** @type {boolean} */\n\t\tthis.should_remove = false;\n\n\t\t/** @type {Node | null} */\n\t\tthis.replacement = null;\n\n\t\t/** @type {WalkerContext} */\n\t\tthis.context = {\n\t\t\tskip: () => (this.should_skip = true),\n\t\t\tremove: () => (this.should_remove = true),\n\t\t\treplace: (node) => (this.replacement = node)\n\t\t};\n\t}\n\n\t/**\n\t * @template {Node} Parent\n\t * @param {Parent | null | undefined} parent\n\t * @param {keyof Parent | null | undefined} prop\n\t * @param {number | null | undefined} index\n\t * @param {Node} node\n\t */\n\treplace(parent, prop, index, node) {\n\t\tif (parent && prop) {\n\t\t\tif (index != null) {\n\t\t\t\t/** @type {Array<Node>} */ (parent[prop])[index] = node;\n\t\t\t} else {\n\t\t\t\t/** @type {Node} */ (parent[prop]) = node;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @template {Node} Parent\n\t * @param {Parent | null | undefined} parent\n\t * @param {keyof Parent | null | undefined} prop\n\t * @param {number | null | undefined} index\n\t */\n\tremove(parent, prop, index) {\n\t\tif (parent && prop) {\n\t\t\tif (index !== null && index !== undefined) {\n\t\t\t\t/** @type {Array<Node>} */ (parent[prop]).splice(index, 1);\n\t\t\t} else {\n\t\t\t\tdelete parent[prop];\n\t\t\t}\n\t\t}\n\t}\n}\n","import { WalkerBase } from './walker.js';\n\n/**\n * @typedef { import('estree').Node} Node\n * @typedef { import('./walker.js').WalkerContext} WalkerContext\n * @typedef {(\n * this: WalkerContext,\n * node: Node,\n * parent: Node | null,\n * key: string | number | symbol | null | undefined,\n * index: number | null | undefined\n * ) => void} SyncHandler\n */\n\nexport class SyncWalker extends WalkerBase {\n\t/**\n\t *\n\t * @param {SyncHandler} [enter]\n\t * @param {SyncHandler} [leave]\n\t */\n\tconstructor(enter, leave) {\n\t\tsuper();\n\n\t\t/** @type {boolean} */\n\t\tthis.should_skip = false;\n\n\t\t/** @type {boolean} */\n\t\tthis.should_remove = false;\n\n\t\t/** @type {Node | null} */\n\t\tthis.replacement = null;\n\n\t\t/** @type {WalkerContext} */\n\t\tthis.context = {\n\t\t\tskip: () => (this.should_skip = true),\n\t\t\tremove: () => (this.should_remove = true),\n\t\t\treplace: (node) => (this.replacement = node)\n\t\t};\n\n\t\t/** @type {SyncHandler | undefined} */\n\t\tthis.enter = enter;\n\n\t\t/** @type {SyncHandler | undefined} */\n\t\tthis.leave = leave;\n\t}\n\n\t/**\n\t * @template {Node} Parent\n\t * @param {Node} node\n\t * @param {Parent | null} parent\n\t * @param {keyof Parent} [prop]\n\t * @param {number | null} [index]\n\t * @returns {Node | null}\n\t */\n\tvisit(node, parent, prop, index) {\n\t\tif (node) {\n\t\t\tif (this.enter) {\n\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\tthis.should_skip = false;\n\t\t\t\tthis.should_remove = false;\n\t\t\t\tthis.replacement = null;\n\n\t\t\t\tthis.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\tif (this.replacement) {\n\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t}\n\n\t\t\t\tif (this.should_remove) {\n\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t}\n\n\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\tif (skipped) return node;\n\t\t\t\tif (removed) return null;\n\t\t\t}\n\n\t\t\t/** @type {keyof Node} */\n\t\t\tlet key;\n\n\t\t\tfor (key in node) {\n\t\t\t\t/** @type {unknown} */\n\t\t\t\tconst value = node[key];\n\n\t\t\t\tif (value && typeof value === 'object') {\n\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\tconst nodes = /** @type {Array<unknown>} */ (value);\n\t\t\t\t\t\tfor (let i = 0; i < nodes.length; i += 1) {\n\t\t\t\t\t\t\tconst item = nodes[i];\n\t\t\t\t\t\t\tif (isNode(item)) {\n\t\t\t\t\t\t\t\tif (!this.visit(item, node, key, i)) {\n\t\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (isNode(value)) {\n\t\t\t\t\t\tthis.visit(value, node, key, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.leave) {\n\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\tthis.replacement = null;\n\t\t\t\tthis.should_remove = false;\n\n\t\t\t\tthis.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\tif (this.replacement) {\n\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t}\n\n\t\t\t\tif (this.should_remove) {\n\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t}\n\n\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\tthis.replacement = _replacement;\n\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\tif (removed) return null;\n\t\t\t}\n\t\t}\n\n\t\treturn node;\n\t}\n}\n\n/**\n * Ducktype a node.\n *\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction isNode(value) {\n\treturn (\n\t\tvalue !== null && typeof value === 'object' && 'type' in value && typeof value.type === 'string'\n\t);\n}\n","import { SyncWalker } from './sync.js';\nimport { AsyncWalker } from './async.js';\n\n/**\n * @typedef {import('estree').Node} Node\n * @typedef {import('./sync.js').SyncHandler} SyncHandler\n * @typedef {import('./async.js').AsyncHandler} AsyncHandler\n */\n\n/**\n * @param {Node} ast\n * @param {{\n * enter?: SyncHandler\n * leave?: SyncHandler\n * }} walker\n * @returns {Node | null}\n */\nexport function walk(ast, { enter, leave }) {\n\tconst instance = new SyncWalker(enter, leave);\n\treturn instance.visit(ast, null);\n}\n\n/**\n * @param {Node} ast\n * @param {{\n * enter?: AsyncHandler\n * leave?: AsyncHandler\n * }} walker\n * @returns {Promise<Node | null>}\n */\nexport async function asyncWalk(ast, { enter, leave }) {\n\tconst instance = new AsyncWalker(enter, leave);\n\treturn await instance.visit(ast, null);\n}\n","import { name as isIdentifierName } from 'estree-util-is-identifier-name';\nimport { createVisitors } from 'estree-util-scope';\nimport { walk } from 'estree-walker';\n/**\n * @param program\n * The ESTree program to scan.\n * @param file\n * The {@link VFile} to emit warnings to.\n * @param variables\n * The variables that should be injected.\n * @param options\n * {@link define}.options\n * @returns\n * The position in the body where the export may be injected.\n */\nfunction scan(program, file, variables, options) {\n const visitors = createVisitors();\n const [scope] = visitors.scopes;\n const identifiers = new Map();\n let injectIndex = 0;\n walk(program, {\n enter(node, parent) {\n visitors.enter(node);\n switch (node.type) {\n case 'Identifier':\n if (scope.defined.includes(node.name) && !identifiers.has(node.name)) {\n identifiers.set(node.name, node);\n }\n break;\n case 'ArrowFunctionExpression':\n case 'ClassDeclaration':\n case 'ClassExpression':\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n this.skip();\n break;\n // Don’t insert before directives.\n case 'ExpressionStatement':\n if (parent === program &&\n node.expression.type === 'Literal' &&\n typeof node.expression.value === 'string') {\n injectIndex = program.body.indexOf(node) + 1;\n }\n break;\n default:\n }\n },\n leave: visitors.exit\n });\n for (const name of scope.defined) {\n if (variables.has(name)) {\n if (options?.conflict !== 'skip') {\n const identifier = identifiers.get(name);\n const message = file.message(`Variable name conflict: ${name}`, {\n place: identifier?.loc,\n ruleId: 'conflict',\n source: 'unist-util-mdx-define'\n });\n message.url = 'https://github.com/remcohaszing/unist-util-mdx-define';\n if (options?.conflict !== 'warn') {\n message.fatal = true;\n throw message;\n }\n }\n variables.delete(name);\n }\n }\n return injectIndex;\n}\n/**\n * Generate an export named declaration.\n *\n * @param variables\n * The variables for which to generate an declaration.\n * @param options\n * {@link define} options\n * @param returnStatement\n * The return statement of the program to inject into.\n * @returns\n * The export named declaration.\n */\nfunction generate(variables, options, returnStatement) {\n if (options?.export === 'namespace') {\n const statements = [];\n for (const [name, right] of variables) {\n const isIdentifier = isIdentifierName(name);\n statements.push({\n type: 'ExpressionStatement',\n expression: {\n type: 'AssignmentExpression',\n left: {\n type: 'MemberExpression',\n computed: !isIdentifier,\n object: { type: 'Identifier', name: 'MDXContent' },\n optional: false,\n property: isIdentifier ? { type: 'Identifier', name } : { type: 'Literal', value: name }\n },\n operator: '=',\n right\n }\n });\n }\n return statements;\n }\n const declarations = [];\n for (const [name, init] of variables) {\n declarations.push({\n type: 'VariableDeclaration',\n kind: 'const',\n declarations: [\n {\n type: 'VariableDeclarator',\n id: { type: 'Identifier', name },\n init\n }\n ]\n });\n }\n if (options?.export === false) {\n return declarations;\n }\n if (!returnStatement) {\n return declarations.map((declaration) => ({\n type: 'ExportNamedDeclaration',\n declaration,\n specifiers: []\n }));\n }\n if (returnStatement.argument?.type === 'ObjectExpression') {\n returnStatement.argument.properties.splice(-1, 0, ...Array.from(variables.keys(), (name) => ({\n type: 'Property',\n computed: false,\n kind: 'init',\n method: false,\n shorthand: true,\n key: { type: 'Identifier', name },\n value: { type: 'Identifier', name }\n })));\n }\n return declarations;\n}\n/**\n * Define variables in an MDX related AST.\n *\n * @param ast\n * The AST in which to define an export\n * @param file\n * The {@link VFile} to emit warnings to.\n * @param variables\n * A mapping of variables to define. They keys are the names. The values are the ESTree expression\n * to represent them.\n * @param options\n * Additional options to configure behaviour.\n */\nexport function define(ast, file, variables, options) {\n const map = new Map(Object.entries(variables));\n if (options?.export !== 'namespace') {\n for (const name of map.keys()) {\n if (name === '_createMdxContent' ||\n name === '_Fragment' ||\n name === '_jsx' ||\n name === '_jsxs' ||\n name === '_missingMdxReference' ||\n name === 'MDXContent') {\n const message = file.message(`MDX internal name conflict: ${name}`, {\n ruleId: 'internal',\n source: 'unist-util-mdx-define'\n });\n message.url = 'https://github.com/remcohaszing/unist-util-mdx-define';\n message.fatal = true;\n throw message;\n }\n if (!isIdentifierName(name)) {\n const message = file.message(`Invalid identifier name: ${name}`, {\n ruleId: 'invalid-identifier',\n source: 'unist-util-mdx-define'\n });\n message.url = 'https://github.com/remcohaszing/unist-util-mdx-define';\n message.fatal = true;\n throw message;\n }\n }\n }\n if (ast.type === 'root') {\n for (const child of ast.children) {\n if (child.type !== 'mdxjsEsm') {\n continue;\n }\n const program = child.data?.estree;\n /* c8 ignore start */\n if (!program) {\n continue;\n }\n /* c8 ignore stop */\n scan(program, file, map, options);\n }\n if (map.size) {\n ast.children.unshift({\n type: 'mdxjsEsm',\n value: '',\n data: {\n estree: {\n type: 'Program',\n sourceType: 'module',\n body: generate(map, options)\n }\n }\n });\n }\n }\n else {\n const returnStatement = ast.body.find((node) => node.type === 'ReturnStatement');\n const injectIndex = scan(ast, file, map, options);\n if (map.size) {\n ast.body.splice(injectIndex, 0, ...generate(map, options, returnStatement));\n }\n }\n}\n//# sourceMappingURL=unist-util-mdx-define.js.map","import { valueToEstree } from 'estree-util-value-to-estree';\nimport { parse as parseToml } from 'toml';\nimport { define } from 'unist-util-mdx-define';\nimport { parse as parseYaml } from 'yaml';\n/**\n * A remark plugin to expose frontmatter data as named exports.\n *\n * @param options\n * Optional options to configure the output.\n * @returns\n * A unified transformer.\n */\nconst remarkMdxFrontmatter = ({ name = 'frontmatter', parsers, ...options } = {}) => {\n const allParsers = {\n yaml: parseYaml,\n toml: parseToml,\n ...parsers\n };\n return (ast, file) => {\n let data = options.default;\n const node = ast.children.find((child) => Object.hasOwn(allParsers, child.type));\n if (node) {\n const parser = allParsers[node.type];\n const { value } = node;\n data = parser(value);\n }\n define(ast, file, { [name]: valueToEstree(data, { preserveReferences: true }) }, options);\n };\n};\nexport default remarkMdxFrontmatter;\n//# sourceMappingURL=remark-mdx-frontmatter.js.map","import { createWatchedPageRouteEntriesFilter, defineGenerator, defineGeneratorFactory, pathResolver, renderFactory, sortRoutes, sortRoutesForResolution } from \"@kosmojs/lib\";\nimport { posix } from \"node:path\";\nimport vitePlugin from \"@mdx-js/rollup\";\nimport frontmatterPlugin from \"remark-frontmatter\";\nimport mdxFrontmatterPlugin from \"remark-mdx-frontmatter\";\nimport { createTemplateResolver, defaults } from \"@kosmojs/core\";\nimport { routeRenderHelpers } from \"@kosmojs/core/generators\";\nimport { createFilter } from \"vite\";\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/mdx-generator\",\n\tversion: \"0.3.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\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\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@mdx-js/rollup\": \"^3.1.1\",\n\t\t\"vite\": \"^8.2.2\"\n\t},\n\tdevDependencies: {\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.8\",\n\t\t\"preact-render-to-string\": \"^6.7.0\",\n\t\t\"remark-frontmatter\": \"^5.0.0\",\n\t\t\"remark-mdx-frontmatter\": \"^5.2.0\"\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\"✨ 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/plugins.ts\nvar plugins_default = (sourceFolder, command) => {\n\tconst hmrPlugin = () => {\n\t\tconst hmrFilters = [`${defaults.srcDir}/${sourceFolder.name}/${defaults.entryDir}/client.ts`].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 = [];\n\tif (command === \"serve\") plugins.push(hmrPlugin());\n\treturn plugins;\n};\n//#endregion\n//#region src/templates/lib/app.ts?raw\nvar app_default$1 = \"import type { FunctionComponent } from \\\"preact\\\";\\n\\nexport const AppProvider: FunctionComponent = (props) => {\\n return props.children;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/entry/client.hbs?raw\nvar client_default$1 = \"import { render, hydrate as hydrateOrig } from \\\"preact\\\";\\nimport type { RouterFactoryReturn } from \\\"@kosmojs/core\\\";\\nimport { clientRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { createRoute, type RouteComponent } from \\\"../mdx\\\";\\n\\n{{#each pageRoutes}}\\nconst {{id}} = () => import(\\\"{{ createImport 'pages' file }}\\\");\\n{{/each}}\\n{{#each layouts}}\\nconst {{id}} = () => import(\\\"{{ createImport 'pages' file }}\\\");\\n{{/each}}\\n\\nexport const createRoutes = () => {\\n return [\\n {{#each pageRoutes}}\\n createRoute(\\\"{{name}}\\\", \\\"{{pathPattern}}\\\", {{id}}, [\\n {{#each layouts}}[\\\"{{name}}\\\", {{id}}], {{/each}}\\n ]),\\n {{/each}}\\n ];\\n};\\n\\nexport const hydrate = async (\\n resolver: () => RouterFactoryReturn<Promise<RouteComponent>>,\\n root: HTMLElement,\\n) => {\\n const { component } = await resolver();\\n hydrateOrig(component, root);\\n window.__KOSMO_HYDRATION_DATA__ = undefined;\\n}\\n\\nexport const mount = async (\\n resolver: () => RouterFactoryReturn<Promise<RouteComponent>>,\\n root: HTMLElement,\\n) => {\\n const { component } = await resolver();\\n render(component, root);\\n}\\n\\nexport default clientRenderFactory();\\n\";\n//#endregion\n//#region src/templates/lib/entry/server.hbs?raw\nvar server_default$1 = \"import { renderToString as renderToStringOrig } from \\\"preact-render-to-string\\\";\\n\\nimport type {\\n RenderToStringWrapper,\\n RouterFactoryReturn,\\n SSRRenderWrapper,\\n} from \\\"@kosmojs/core\\\";\\n\\nimport { serverRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { createRoute, type Route, type RouteComponent } 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}}[\\\"{{name}}\\\", async () => {{id}}], {{/each}}\\n ]),\\n {{/each}}\\n ];\\n};\\n\\nconst generateHeaderTags = ({ name, frontmatter, loaderData }: Route) => {\\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 tags.push(\\n `<script>\\n window.__KOSMO_HYDRATION_DATA__ = JSON.parse(\\n ${JSON.stringify(JSON.stringify(loaderData))}\\n );\\n <\\/script>`\\n )\\n\\n return tags\\n};\\n\\nexport const renderWrapper: SSRRenderWrapper = (_context, render) => render();\\n\\nexport const renderToString: RenderToStringWrapper<\\n () => RouterFactoryReturn<Promise<RouteComponent>, { route: Route }>\\n> = async (resolver, { headerTags = [] } = {}) => {\\n const { component, route } = await resolver();\\n const html = renderToStringOrig(component);\\n return {\\n head: [...headerTags, ...generateHeaderTags(route as never)].join(\\\"\\\\n\\\"),\\n html,\\n }\\n}\\n\\nexport default serverRenderFactory<false>();\\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 { parseSearchParams } from \\\"@kosmojs/core\\\";\\n\\nimport { paramNames } from \\\"{{ createImport 'lib' 'params' }}\\\";\\nimport { base } from \\\"{{ createImport 'libCore' }}\\\";\\n\\nexport type RawRoute = {\\n name: string;\\n regexp: RegExp;\\n extractParams: (path: string) => Route[\\\"params\\\"];\\n loader: () => Promise<RouteModule>;\\n layouts: Array<[name: string, source: () => Promise<LayoutModule>]>;\\n};\\n\\ntype Loader = (\\n route: Pick<Route, \\\"name\\\" | \\\"params\\\" | \\\"paramsEntries\\\" | \\\"searchParams\\\">,\\n) => Promise<unknown> | undefined;\\n\\ntype LayoutModule = {\\n default: ComponentType;\\n loader?: Loader;\\n};\\n\\ntype RouteModule = {\\n default: ComponentType;\\n frontmatter: Route[\\\"frontmatter\\\"];\\n loader?: Loader;\\n};\\n\\nexport type RouteComponent = VNode<{ value: Route }>;\\n\\nexport type Route = {\\n name: string;\\n params: Record<string, string | Array<string>>;\\n paramsEntries: [keys: Array<string>, values: Array<unknown>];\\n searchParams: Record<string, unknown>;\\n frontmatter: Record<string, unknown>;\\n loaderData: Record<string, unknown>;\\n};\\n\\nexport const RouterContext = createContext<Route>({\\n name: \\\"\\\",\\n params: {},\\n paramsEntries: [[], []],\\n searchParams: {},\\n frontmatter: {},\\n loaderData: {},\\n});\\n\\nexport const RouterProvider = RouterContext.Provider;\\n\\nexport const createRouter = (\\n routes: Array<RawRoute>,\\n app: ComponentType,\\n opt: { components?: Record<string, ComponentType<never>> },\\n) => {\\n const catchallRoute = createRoute(\\n \\\"NotFound\\\",\\n \\\"\\\",\\n () => import(\\\"{{ createImport 'pages' '404.mdx' }}\\\"),\\n [],\\n );\\n\\n const runLoader = async (key: string, fetcher: () => ReturnType<Loader>) => {\\n if (typeof window === \\\"undefined\\\" || !window.__KOSMO_HYDRATION_DATA__) {\\n return fetcher();\\n }\\n return key in window.__KOSMO_HYDRATION_DATA__\\n ? window.__KOSMO_HYDRATION_DATA__[key]\\n : fetcher();\\n };\\n\\n return {\\n async resolve(url: URL = new URL(window.location.href)) {\\n const searchParams = parseSearchParams(url);\\n\\n // The routes array is generated pre-sorted by specificity\\n // (static beats required beats optional beats splat, token by token),\\n // the same ordering the SSR server registers routes in -\\n // so the first pattern that matches IS the most specific one,\\n // and CSR resolution stays consistent with SSR.\\n // A route with optional parameters matches a range of segment counts,\\n // which is why no segment-count heuristic can disambiguate here.\\n // Lightweight `RegExp.test()` on linear scan - no capture allocation.\\n const matchedRoute =\\n routes.find(({ regexp }) => {\\n return regexp.test(url.pathname);\\n }) || catchallRoute;\\n\\n const params = matchedRoute\\n ? matchedRoute.extractParams(url.pathname)\\n : {};\\n\\n const { name } = matchedRoute;\\n\\n const routeModule = await matchedRoute.loader();\\n\\n const paramsEntries = (\\n Array.isArray(paramNames[name as never])\\n ? [\\n [...paramNames[name as never]],\\n [...paramNames[name as never]].map((key) => params[key]),\\n ]\\n : [\\n // fallback\\n Object.keys(params),\\n Object.values(params),\\n ]\\n ) as never;\\n\\n const { frontmatter = {} } = routeModule;\\n\\n const loaderData: Record<string, unknown> = {};\\n\\n loaderData[name] = await runLoader(name, () => {\\n return routeModule.loader\\n ? routeModule.loader({ name, params, paramsEntries, searchParams })\\n : undefined; // should not survive serialization if no loader defined\\n });\\n\\n const layouts: Array<{\\n name: string;\\n component: LayoutModule[\\\"default\\\"];\\n }> = [];\\n\\n for (const [name, source] of matchedRoute.layouts || []) {\\n const layoutModule = await source();\\n layouts.push({ name, component: layoutModule.default });\\n const key = `${name}/layout`;\\n loaderData[key] = await runLoader(key, () => {\\n return layoutModule.loader\\n ? layoutModule.loader({ name, params, paramsEntries, searchParams })\\n : undefined; // should not survive serialization if no loader defined\\n });\\n }\\n\\n const route: Route = {\\n name,\\n params,\\n paramsEntries,\\n searchParams,\\n frontmatter,\\n loaderData,\\n };\\n\\n const component = [{ name: \\\"\\\", component: app }, ...layouts].reduce(\\n (children, { component }) => {\\n return h(component, { children } as never);\\n },\\n h(routeModule.default, {}),\\n );\\n\\n return {\\n component: h(\\n RouterProvider,\\n { value: route },\\n h(MDXProvider, opt as never, component),\\n ),\\n route,\\n };\\n },\\n };\\n};\\n\\nexport const createRoute = (\\n name: string,\\n pathPattern: string,\\n loader: RawRoute[\\\"loader\\\"],\\n layouts: RawRoute[\\\"layouts\\\"],\\n): RawRoute => {\\n // strip trailing slash (keeping a sole \\\"/\\\") so the base-joined index route\\n // matches both with and without it - \\\"/docs/\\\" as a pattern rejects \\\"/docs\\\"\\n const path = `${base}/${pathPattern}`\\n .replace(/\\\\/+/g, \\\"/\\\")\\n .replace(/(.+)\\\\/$/, \\\"$1\\\");\\n\\n const { regexp } = pathToRegexp(path, { sensitive: true });\\n const matcher = match<Route[\\\"params\\\"]>(path);\\n\\n return {\\n name,\\n regexp,\\n extractParams: (path) => {\\n const match = matcher(path);\\n return match ? match.params : {};\\n },\\n loader,\\n layouts,\\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/params.hbs?raw\nvar params_default = \"export type ParamsMap = {\\n{{#each pageRoutes}}\\\"{{name}}\\\": {{serializeParamsLiteral .}};\\n{{/each}}\\n};\\n\\nexport const paramNames = {\\n{{#each pageRoutes}}\\\"{{name}}\\\": [ {{#each params.schema}}\\\"{{name}}\\\", {{/each}}],\\n{{/each}}\\n} as const;\\n\";\n//#endregion\n//#region src/templates/lib/router.ts?raw\nvar router_default$1 = \"import type { ComponentType } from \\\"preact\\\";\\n\\nimport type { RouterFactoryReturn } from \\\"@kosmojs/core\\\";\\nimport { createRouterFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport {\\n createRouter,\\n type RawRoute,\\n type Route,\\n type RouteComponent,\\n} from \\\"./mdx\\\";\\n\\nexport const createRouters = (\\n routes: Array<RawRoute>,\\n {\\n app,\\n components,\\n }: {\\n app: ComponentType;\\n components: Record<string, ComponentType<never>>;\\n },\\n): {\\n clientRouter: () => RouterFactoryReturn<Promise<RouteComponent>>;\\n serverRouter: (\\n url: URL,\\n ) => RouterFactoryReturn<Promise<RouteComponent>, { route: Route }>;\\n} => {\\n const router = createRouter(routes, app, { components });\\n\\n return {\\n clientRouter() {\\n return router.resolve();\\n },\\n serverRouter(url) {\\n return router.resolve(url);\\n },\\n };\\n};\\n\\nexport default createRouterFactory<\\n RawRoute,\\n Promise<RouteComponent>,\\n { server: { route: Route } }\\n>();\\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, paramNames } from \\\"{{ createImport 'lib' 'params' }}\\\";\\n\\nexport function useRoute() {\\n return structuredClone(useContext(RouterContext));\\n}\\n\\nexport function useParams<T extends keyof ParamsMap>(): ParamsMap[T] {\\n return useRoute().params as ParamsMap[T];\\n}\\n\\ntype SameLengthTuple<T extends readonly unknown[], U> = { [K in keyof T]: U };\\n\\nexport function useParamsEntries<T extends keyof ParamsMap>(): [\\n (typeof paramNames)[T],\\n SameLengthTuple<(typeof paramNames)[T], unknown>,\\n] {\\n return useRoute().paramsEntries as never;\\n}\\n\\nexport function useSearchParams() {\\n return useRoute().searchParams;\\n}\\n\\n/**\\n * Reads loader data for the current page or one of its layouts.\\n * Without a key, returns the page's own data.\\n * For a layout, pass its path-qualified name (e.g. \\\"dashboard/layout\\\") -\\n * a hook can't tell which layout it runs in.\\n * */\\nexport const useLoaderData = <T>(key?: string): T | undefined => {\\n const route = useRoute();\\n return route.loaderData?.[key || route.name] as T;\\n};\\n\\n/**\\n * Reads the current route's frontmatter.\\n * */\\nexport const useFrontmatter = <\\n T extends Record<string, unknown> = Record<string, unknown>,\\n>(): T => {\\n return useRoute().frontmatter as T;\\n};\\n\";\n//#endregion\n//#region src/templates/src/app.mdx?raw\nvar app_default = \"import { AppProvider } from \\\"{{ createImport 'lib' 'app' }}\\\";\\n\\n<AppProvider>{props.children}</AppProvider>\\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]?.path(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 * 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 type { ComponentType } from \\\"preact\\\";\\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} satisfies Record<string, ComponentType<never>>;;\\n\\ndeclare global {\\n type MDXProvidedComponents = typeof components;\\n}\\n\";\n//#endregion\n//#region src/templates/src/entry/client.ts?raw\nvar client_default = \"import renderFactory, {\\n createRoutes,\\n hydrate,\\n mount,\\n} from \\\"{{ createImport 'libEntry' 'client' }}\\\";\\n\\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 hydrate() {\\n return hydrate(() => clientRouter(), root);\\n },\\n mount() {\\n return mount(() => clientRouter(), root);\\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 renderFactory, {\\n createRoutes,\\n renderToString,\\n // no renderToStream on MDX folders\\n} from \\\"{{ createImport 'libEntry' 'server' }}\\\";\\n\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes();\\nconst { serverRouter } = routerFactory(routes);\\n\\nexport default renderFactory(() => {\\n return {\\n renderToString(url, { assets }) {\\n return renderToString(\\n () => serverRouter(url),\\n { headerTags: assets.map(({ tag }) => tag) },\\n );\\n },\\n };\\n});\\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 routerFactory, { createRouters } from \\\"{{ createImport 'lib' 'router' }}\\\";\\n\\nimport app from \\\"./app.mdx\\\";\\nimport { components } from \\\"./components/mdx\\\"\\n\\nexport default routerFactory((routes) => {\\n const { clientRouter, serverRouter } = createRouters(routes, { app, components });\\n return {\\n clientRouter() {\\n return clientRouter()\\n },\\n serverRouter(url) {\\n return serverRouter(url)\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((sourceFolder) => {\n\tconst { frontend } = sourceFolder.config;\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(frontend?.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(posix.join(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(sortRoutesForResolution);\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 [[\"params.ts\", params_default], [\"router.ts\", router_default$1]]) await deployLibFile(createPath.lib(file), template, { pageRoutes });\n\t};\n\treturn {\n\t\tviteConfig({ command }) {\n\t\t\tconst defaultPlugin = () => {\n\t\t\t\treturn vitePlugin({\n\t\t\t\t\tjsxImportSource: \"preact\",\n\t\t\t\t\tproviderImportSource: \"@mdx-js/preact\",\n\t\t\t\t\tremarkPlugins: [frontmatterPlugin, mdxFrontmatterPlugin]\n\t\t\t\t});\n\t\t\t};\n\t\t\tconst { plugin = defaultPlugin() } = typeof sourceFolder.config.frontend?.stack === \"object\" ? sourceFolder.config.frontend.stack : {};\n\t\t\treturn {\n\t\t\t\toxc: { jsx: {\n\t\t\t\t\truntime: \"automatic\",\n\t\t\t\t\timportSource: \"preact\"\n\t\t\t\t} },\n\t\t\t\tplugins: [plugin, ...plugins_default(sourceFolder, command)]\n\t\t\t};\n\t\t},\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[\"app.ts\", app_default$1],\n\t\t\t\t[\"mdx.ts\", mdx_default$1],\n\t\t\t\t[\"use.ts\", use_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.ts\", mdx_default],\n\t\t\t\t[\"app.mdx\", 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\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\tawait generateSrcFiles(entries.filter(createWatchedPageRouteEntriesFilter(event, [\"create\"])));\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({\n\tmeta: {\n\t\tname: \"MDX\",\n\t\tslot: \"frontend\",\n\t\tjsx: \"react-jsx\",\n\t\tjsxImportSource: \"preact\"\n\t},\n\tdependencies: {\n\t\t\"path-to-regexp\": package_default.devDependencies[\"path-to-regexp\"],\n\t\tpreact: package_default.devDependencies.preact,\n\t\t\"preact-render-to-string\": package_default.devDependencies[\"preact-render-to-string\"],\n\t\t\"@mdx-js/preact\": package_default.devDependencies[\"@mdx-js/preact\"],\n\t\t\"remark-frontmatter\": package_default.devDependencies[\"remark-frontmatter\"],\n\t\t\"remark-mdx-frontmatter\": package_default.devDependencies[\"remark-mdx-frontmatter\"]\n\t},\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { defineGenerator, defineGeneratorFactory, pathResolver, renderToFile, sortRoutes } from \"@kosmojs/lib\";\nimport YAML from \"yaml\";\nimport { join } from \"node:path\";\nimport crc from \"crc/crc32\";\nimport { parse } from \"path-to-regexp\";\nimport Type from \"typebox\";\nimport { RequestBodyTargets } from \"@kosmojs/core\";\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 = () => {\n\tconst jsonSchemaBuilder = (typeboxSchema) => {\n\t\tif ([\n\t\t\t\"Buffer\",\n\t\t\t\"ArrayBuffer\",\n\t\t\t\"Blob\"\n\t\t].includes(typeboxSchema)) return {\n\t\t\ttype: \"string\",\n\t\t\tformat: \"binary\"\n\t\t};\n\t\treturn Type.Script(typeboxSchema);\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((prop) => {\n\t\t\treturn new RegExp(`\\\\{${prop.name}\\\\*?\\\\}`).test(openapiPath) ? [{ $ref: generateComponentPath(\"parameters\", route, route.params.id, prop.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?.typeboxSchema) schemas[generateComponentId(route, id)] = jsonSchemaBuilder(resolvedType.typeboxSchema);\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 || []) if (prop?.typeboxSchema) {\n\t\t\t\tconst key = generateComponentId(route, id, prop.name);\n\t\t\t\tschemas[key] = jsonSchemaBuilder(prop.typeboxSchema);\n\t\t\t}\n\t\t} else {\n\t\t\tconst { id, resolvedType } = def.schema;\n\t\t\tif (resolvedType?.typeboxSchema) schemas[generateComponentId(route, id)] = jsonSchemaBuilder(resolvedType.typeboxSchema);\n\t\t}\n\t\tif (route.params.resolvedType) {\n\t\t\tfor (const prop of route.params.resolvedType.properties || []) if (prop?.typeboxSchema) parameters[generateComponentId(route, route.params.id, prop.name)] = {\n\t\t\t\tname: prop.name,\n\t\t\t\tin: \"path\",\n\t\t\t\trequired: true,\n\t\t\t\tschema: jsonSchemaBuilder(prop.typeboxSchema)\n\t\t\t};\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\t/**\n\t\t* Precompute each route's generated path variations once, keyed by name,\n\t\t* so the subsumption check below is a set lookup rather than a re-parse.\n\t\t* */\n\t\tconst variationsByName = /* @__PURE__ */ new Map();\n\t\tfor (const route of routes) variationsByName.set(route.name, generatePathVariations(route));\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\t/**\n\t\t\t* Drop routes that are subsumed by more specific ones.\n\t\t\t*\n\t\t\t* Given this file structure:\n\t\t\t*\n\t\t\t* search/\n\t\t\t* {:type}/\n\t\t\t* {:page}/\n\t\t\t* index.ts\n\t\t\t* index.ts\n\t\t\t*\n\t\t\t* Two routes exist: search/{:type} and search/{:type}/{:page}.\n\t\t\t* Because {:page} is optional, the longer route ALSO emits the `search/{:type}` variation,\n\t\t\t* so the shorter route's paths are a subset and including both would produce duplicate/phantom paths.\n\t\t\t*\n\t\t\t* The test must be on the generated path variations, not the route names:\n\t\t\t* a required-param child like `posts/[id]` emits only `/posts/{id}` (never `/posts`),\n\t\t\t* so the `posts` collection is NOT subsumed and must be kept.\n\t\t\t* A name-prefix check wrongly drops any route whose name is a string prefix of another.\n\t\t\t* */\n\t\t\tconst own = variationsByName.get(route.name) ?? [];\n\t\t\treturn (own.length > 0 ? routes.some((e) => {\n\t\t\t\tif (e.name === route.name) return false;\n\t\t\t\tconst other = variationsByName.get(e.name) ?? [];\n\t\t\t\tconst otherSet = new Set(other);\n\t\t\t\treturn own.every((path) => otherSet.has(path));\n\t\t\t}) : false) ? [] : [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((sourceFolder, options) => {\n\tconst { outfile = \"\", ...baseSpec } = { ...options };\n\tconst { createPath } = pathResolver(sourceFolder);\n\tconst { generateOpenAPISchema } = openapi_default();\n\tconst generateSchemas = async (entries) => {\n\t\tconst apiRoutes = entries.flatMap(({ kind, entry }) => kind === \"apiRoute\" ? [entry] : []);\n\t\tconst { paths, components } = generateOpenAPISchema(apiRoutes);\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\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({\n\tmeta: {\n\t\tname: \"OpenAPI\",\n\t\tresolveTypes: true\n\t},\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { createWatchedPageRouteEntriesFilter, defineGenerator, defineGeneratorFactory, nestedRoutesFactory, pathResolver, renderFactory, sortRoutes } from \"@kosmojs/lib\";\nimport vitePlugin from \"@vitejs/plugin-react\";\nimport { createTemplateResolver, defaults } from \"@kosmojs/core\";\nimport { routeRenderHelpers } from \"@kosmojs/core/generators\";\nimport { styleText } from \"node:util\";\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/react-generator\",\n\tversion: \"0.3.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\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\tdependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@vitejs/plugin-react\": \"^6.1.1\"\n\t},\n\tdevDependencies: {\n\t\t\"@tanstack/react-query\": \"^5.102.8\",\n\t\t\"@types/react\": \"^19.2.18\",\n\t\t\"@types/react-dom\": \"^19.2.7\",\n\t\t\"react\": \"^19.2.8\",\n\t\t\"react-dom\": \"^19.2.8\",\n\t\t\"react-router\": \"^8.3.1\"\n\t}\n};\n//#endregion\n//#region src/base.ts\nvar pathFactory = (pathTokens) => {\n\tconst routeName = pathTokens.map((e) => e.orig).join(\"/\");\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 [token.parts[0].value];\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\" ? part.value : 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\tconst lastToken = pathTokens.at(-1);\n\t\t\tif (hasSplatParam(lastToken)) {\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\"✨ 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/app.tsx?raw\nvar app_default$1 = \"import type { ReactNode } from \\\"react\\\";\\n\\nexport const AppProvider = ({ children }: { children: ReactNode }) => {\\n return children;\\n}\\n\";\n//#endregion\n//#region src/templates/lib/app-tsq.tsx?raw\nvar app_tsq_default = \"import { type QueryClient, QueryClientProvider } from \\\"@tanstack/react-query\\\";\\nimport type { ReactNode } from \\\"react\\\";\\n\\nimport { getQueryClient } from \\\"./query\\\";\\n\\nexport const AppProvider = ({\\n client,\\n children,\\n}: {\\n client?: QueryClient;\\n children: ReactNode;\\n}) => {\\n const queryClient = client ?? getQueryClient();\\n return (\\n <QueryClientProvider client={queryClient}>\\n {children}\\n </QueryClientProvider>\\n );\\n}\\n\";\n//#endregion\n//#region src/templates/lib/entry/client.hbs?raw\nvar client_default$1 = \"import { lazy, type JSX } from \\\"react\\\";\\n\\nimport {\\n createRoot,\\n hydrateRoot,\\n type HydrationOptions,\\n type RootOptions,\\n} from \\\"react-dom/client\\\";\\n\\nimport type { RouterFactoryReturn } from \\\"@kosmojs/core\\\";\\n\\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 const hydrate = async (\\n resolver: () => RouterFactoryReturn<Promise<JSX.Element>>,\\n root: HTMLElement,\\n options?: HydrationOptions,\\n) => {\\n const { component } = await resolver();\\n hydrateRoot(root, component, options);\\n}\\n\\nexport const mount = async (\\n resolver: () => RouterFactoryReturn<Promise<JSX.Element>>,\\n root: HTMLElement,\\n options?: RootOptions,\\n) => {\\n const { component } = await resolver();\\n createRoot(root, options).render(component);\\n}\\n\\nexport default clientRenderFactory();\\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 type { JSX } from \\\"react\\\";\\n\\nimport {\\n renderToString as renderToStringOrig,\\n renderToReadableStream,\\n} from \\\"react-dom/server\\\";\\n\\nimport type { StaticHandlerContext } from \\\"react-router\\\";\\n\\nimport type {\\n RenderToStringWrapper,\\n RenderToStreamWrapper,\\n RouterFactoryReturn,\\n SSRRenderWrapper,\\n} from \\\"@kosmojs/core\\\";\\n\\nimport { 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 const renderWrapper: SSRRenderWrapper = (_context, render) => render();\\n\\nexport const renderToString: RenderToStringWrapper<\\n () => RouterFactoryReturn<Promise<JSX.Element>>,\\n Parameters<typeof renderToStringOrig>[1]\\n> = async (resolver, { headerTags = [], ...options } = {}) => {\\n const { component } = await resolver();\\n return {\\n head: [...headerTags].join(\\\"\\\\n\\\"),\\n html: renderToStringOrig(component, options),\\n };\\n};\\n\\nexport const renderToStream: RenderToStreamWrapper<\\n () => RouterFactoryReturn<Promise<JSX.Element>>,\\n Parameters<typeof renderToReadableStream>[1]\\n> = async (resolver, { headerTags = [], ...options } = {}) => {\\n const { component } = await resolver();\\n return {\\n head: [...headerTags].join(\\\"\\\\n\\\"),\\n html: await renderToReadableStream(component, options),\\n };\\n};\\n\\nexport default serverRenderFactory();\\n\";\n//#endregion\n//#region src/templates/lib/env.d.ts?raw\nvar env_d_default = \"declare module \\\"virtual:kosmo/tsq-client\\\" {\\n import type { QueryClient, QueryClientConfig } from \\\"@tanstack/react-query\\\";\\n export const createQueryClient: (options?: QueryClientConfig) => QueryClient;\\n export const getQueryClient: () => QueryClient;\\n}\\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/query.ts?raw\nvar query_default = \"export * from \\\"virtual:kosmo/tsq-client\\\";\\n\";\n//#endregion\n//#region src/templates/lib/query-csr.js?raw\nvar query_csr_default = \"import { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nlet client = undefined;\\n\\nexport const createQueryClient = (options) => {\\n client = new QueryClient(options);\\n return client;\\n};\\n\\nexport const getQueryClient = () => {\\n if (!client) {\\n client = new QueryClient();\\n }\\n return client;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/query-ssr.js?raw\nvar query_ssr_default = \"import { QueryClient } from \\\"@tanstack/react-query\\\";\\n\\nimport { store } from \\\"{{ createImport 'libCore' 'ssr' }}\\\";\\n\\nexport const createQueryClient = (options) => {\\n const client = new QueryClient(options);\\n const ctx = store?.getStore();\\n if (ctx) {\\n ctx.tsqClient = client;\\n }\\n return client;\\n};\\n\\nexport const getQueryClient = () => {\\n const ctx = store?.getStore();\\n if (!ctx) {\\n throw new Error(\\\"getQueryClient(): called outside an SSR request scope\\\");\\n }\\n if (!ctx.tsqClient) {\\n ctx.tsqClient = new QueryClient();\\n }\\n return ctx.tsqClient;\\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 const component = await componentLoader();\\n // Return null, not undefined, when a route has no loader.\\n // React Router keys hydration data by route id;\\n // an undefined value is dropped by JSON.stringify during serialization,\\n // leaving the id absent, which makes RR re-run the loader on the client and double-render.\\n // null survives serialization, so the id stays present.\\n return typeof component.loader === \\\"function\\\"\\n ? await component.loader(arg)\\n : null;\\n };\\n return opt?.withPreload ? { loader } : {};\\n };\\n};\\n\";\n//#endregion\n//#region src/templates/lib/router.tsx?raw\nvar router_default$1 = \"import type { JSX, ComponentType } from \\\"react\\\";\\n\\nimport {\\n type RouteObject,\\n createBrowserRouter,\\n createStaticHandler,\\n createStaticRouter,\\n RouterProvider,\\n StaticRouterProvider,\\n} from \\\"react-router\\\";\\n\\nimport type { RouterFactoryReturn } from \\\"@kosmojs/core\\\";\\nimport { createRouterFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { base } from \\\"{{ createImport 'libCore' }}\\\";\\n\\nexport const createRouters = (\\n routes: Array<RouteObject>,\\n { app }: { app: ComponentType },\\n): {\\n clientRouter: () => RouterFactoryReturn<Promise<JSX.Element>>;\\n serverRouter: (url: URL) => RouterFactoryReturn<Promise<JSX.Element>>;\\n} => {\\n const routeStack = [\\n {\\n path: \\\"/\\\",\\n Component: app,\\n children: routes,\\n },\\n ];\\n\\n const handler = createStaticHandler(routeStack, { basename: base });\\n\\n const clientRouter = async () => {\\n const router = createBrowserRouter(routeStack, { basename: base });\\n const component = <RouterProvider router={router} />;\\n return { component };\\n }\\n\\n const serverRouter = async (url: URL) => {\\n\\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 const component = <StaticRouterProvider router={router} context={context} />;\\n\\n return { component };\\n }\\n\\n return { clientRouter, serverRouter }\\n}\\n\\nexport default createRouterFactory<RouteObject, Promise<JSX.Element>>();\\n\";\n//#endregion\n//#region src/templates/src/app.tsx?raw\nvar app_default = \"import { Outlet } from \\\"react-router\\\";\\nimport { AppProvider } from \\\"{{ createImport 'lib' 'app' }}\\\";\\n\\nexport default function App() {\\n return (\\n <AppProvider>\\n <Outlet />\\n </AppProvider>\\n );\\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]?.path(params as never, query, { prefix: false });\\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.ts?raw\nvar client_default = \"import renderFactory, {\\n createRoutes,\\n hydrate,\\n mount,\\n} from \\\"{{ createImport 'libEntry' 'client' }}\\\";\\n\\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 hydrate() {\\n return hydrate(() => clientRouter(), root);\\n },\\n mount() {\\n return mount(() => clientRouter(), root);\\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 renderFactory, {\\n createRoutes,\\n renderToStream,\\n renderToString,\\n} from \\\"{{ createImport 'libEntry' 'server' }}\\\";\\n\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes({ withPreload: true });\\nconst { serverRouter } = routerFactory(routes);\\n\\nexport default renderFactory(() => {\\n return {\\n renderToString(url, { assets }) {\\n return renderToString(\\n () => serverRouter(url),\\n { headerTags: assets.map(({ tag }) => tag) },\\n );\\n },\\n renderToStream(url, { assets }) {\\n return renderToStream(\\n () => serverRouter(url),\\n { headerTags: assets.map(({ tag }) => tag) },\\n );\\n },\\n };\\n});\\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.ts?raw\nvar router_default = \"import routerFactory, { createRouters } from \\\"{{ createImport 'lib' 'router' }}\\\";\\n\\nimport app from \\\"./app\\\";\\n\\nexport default routerFactory((routes) => {\\n const { clientRouter, serverRouter } = createRouters(routes, { app });\\n return {\\n clientRouter() {\\n return clientRouter()\\n },\\n serverRouter(url) {\\n return serverRouter(url)\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((sourceFolder) => {\n\tconst { frontend } = sourceFolder.config;\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { render: renderLibTpl, 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(frontend?.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.tsx\"), router_default$1, {\n\t\t\tentries,\n\t\t\tindexRoutes\n\t\t});\n\t};\n\treturn {\n\t\tviteConfig() {\n\t\t\tconst defaultPlugin = () => vitePlugin();\n\t\t\tconst { plugin = defaultPlugin() } = typeof sourceFolder.config.frontend?.stack === \"object\" ? sourceFolder.config.frontend.stack : {};\n\t\t\treturn { plugins: [plugin] };\n\t\t},\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[\"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\t...frontend?.tanstack?.query ? [[\"app.tsx\", app_tsq_default], [\"query.ts\", query_default]] : [[\"app.tsx\", app_default$1], [\"query.ts\", \"/** tanstack query disabled */\"]]\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.ts\", router_default]\n\t\t\t]) await deploySrcFile(createPath.src(file), template, { entryDir: defaults.entryDir }, { overwrite });\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\tawait generateSrcFiles(entries.filter(createWatchedPageRouteEntriesFilter(event, [\"create\"])));\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\tvirtualModules() {\n\t\t\treturn frontend?.tanstack?.query ? [{\n\t\t\t\tspecifier: \"virtual:kosmo/tsq-client\",\n\t\t\t\tcsr: renderLibTpl(query_csr_default, {}),\n\t\t\t\tssr: renderLibTpl(query_ssr_default, {})\n\t\t\t}] : [];\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator({\n\tmeta: {\n\t\tname: \"React\",\n\t\tslot: \"frontend\",\n\t\tjsx: \"preserve\",\n\t\tjsxImportSource: \"react\"\n\t},\n\tdependencies({ frontend }) {\n\t\treturn {\n\t\t\treact: package_default.devDependencies.react,\n\t\t\t\"react-router\": package_default.devDependencies[\"react-router\"],\n\t\t\t...frontend?.tanstack?.query ? { \"@tanstack/react-query\": package_default.devDependencies[\"@tanstack/react-query\"] } : {}\n\t\t};\n\t},\n\tdevDependencies: {\n\t\t\"@types/react\": package_default.devDependencies[\"@types/react\"],\n\t\t\"@types/react-dom\": package_default.devDependencies[\"@types/react-dom\"],\n\t\t\"react-dom\": package_default.devDependencies[\"react-dom\"]\n\t},\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { createWatchedPageRouteEntriesFilter, defineGenerator, defineGeneratorFactory, nestedRoutesFactory, pathResolver, renderFactory, sortRoutes } from \"@kosmojs/lib\";\nimport vitePlugin from \"vite-plugin-solid\";\nimport { createTemplateResolver, defaults } from \"@kosmojs/core\";\nimport { routeRenderHelpers } from \"@kosmojs/core/generators\";\nimport { styleText } from \"node:util\";\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/solid-generator\",\n\tversion: \"0.3.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\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\tdependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"vite-plugin-solid\": \"^2.11.14\"\n\t},\n\tdevDependencies: {\n\t\t\"@solidjs/router\": \"^1.0.0\",\n\t\t\"@tanstack/solid-query\": \"^5.102.8\",\n\t\t\"solid-js\": \"^1.9.15\"\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) => {\n\t\t\t\tif (token.kind !== \"param\") return token;\n\t\t\t\tif (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 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 [token.parts[0].value];\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\" ? part.value : 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\"✨ 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/app.tsx?raw\nvar app_default$1 = \"import type { ParentComponent } from \\\"solid-js\\\";\\n\\nexport const AppProvider: ParentComponent = (props) => {\\n return props.children;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/app-tsq.tsx?raw\nvar app_tsq_default = \"import type { ParentComponent } from \\\"solid-js\\\";\\nimport { type QueryClient, QueryClientProvider } from \\\"@tanstack/solid-query\\\";\\n\\nimport { getQueryClient } from \\\"./query\\\";\\n\\nexport const AppProvider: ParentComponent<{ client?: QueryClient }> = (props) => {\\n return (\\n <QueryClientProvider client={props.client ?? getQueryClient()}>\\n {props.children}\\n </QueryClientProvider>\\n );\\n};\\n\";\n//#endregion\n//#region src/templates/lib/entry/client.hbs?raw\nvar client_default$1 = \"import { lazy, type JSX } from \\\"solid-js\\\";\\nimport { hydrate as hydrateOrig, render } from \\\"solid-js/web\\\";\\nimport type { RouterFactoryReturn } from \\\"@kosmojs/core\\\";\\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 const hydrate = async (\\n resolver: () => RouterFactoryReturn<JSX.Element>,\\n root: HTMLElement,\\n opts?: Parameters<typeof hydrateOrig>[2],\\n) => {\\n hydrateOrig(() => resolver().component, root, opts);\\n}\\n\\nexport const mount = async (\\n resolver: () => RouterFactoryReturn<JSX.Element>,\\n root: HTMLElement,\\n init?: Parameters<typeof render>[2],\\n opts?: Parameters<typeof render>[3],\\n) => {\\n render(() => resolver().component, root, init, opts);\\n}\\n\\nexport default clientRenderFactory();\\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 type { JSX } from \\\"solid-js\\\";\\n\\nimport {\\n generateHydrationScript,\\n renderToStringAsync,\\n renderToStream as renderToStreamOrig,\\n} from \\\"solid-js/web\\\";\\n\\nimport { provideRequestEvent } from \\\"solid-js/web/storage\\\";\\n\\nimport type {\\n RenderToStringWrapper,\\n RenderToStreamWrapper,\\n RouterFactoryReturn,\\n SSRRenderWrapper,\\n} from \\\"@kosmojs/core\\\";\\n\\nimport { 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 const renderWrapper: SSRRenderWrapper = (context, render) => {\\n const event = {\\n request: new Request(context.url ?? \\\"http://ssr.local\\\", {\\n headers: new Headers(context.headers),\\n }),\\n locals: {},\\n };\\n return provideRequestEvent(event as never, render);\\n};\\n\\nexport const renderToString: RenderToStringWrapper<\\n () => RouterFactoryReturn<JSX.Element>,\\n Parameters<typeof renderToStringAsync>[1]\\n> = async (resolver, { headerTags = [], timeoutMs = 30_000, ...options } = {}) => {\\n /**\\n * renderToStringAsync adaptation.\\n * Solid arms its internal timeout before invoking the component,\\n * so a component throwing synchronously leaves that timeout promise orphaned -\\n * its rejection, 30s later, is unhandled and fatal to the process.\\n * renderToStream's thenable resolves with the same html;\\n * deferring the call turns a sync throw into an immediate, catchable rejection carrying the real error,\\n * and the replacement timeout below is pre-observed, so it can never reject unhandled.\\n * */\\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\\n\\n const timeout = new Promise<never>((_, reject) => {\\n timeoutHandle = setTimeout(() => {\\n reject(new Error(\\\"SSR: solid render timed out\\\"));\\n }, timeoutMs);\\n });\\n\\n timeout.catch(() => {});\\n\\n try {\\n return {\\n head: [...headerTags, generateHydrationScript()].join(\\\"\\\\n\\\"),\\n html: await Promise.race([\\n Promise.resolve().then(() => {\\n // typed as a stream handle, but resolving to the full html at runtime.\\n // renderToStringAsync itself races it the same way.\\n return renderToStreamOrig(\\n () => resolver().component,\\n options,\\n ) as unknown as Promise<string>;\\n }),\\n timeout,\\n ]),\\n };\\n } finally {\\n clearTimeout(timeoutHandle);\\n }\\n};\\n\\nexport const renderToStream: RenderToStreamWrapper<\\n () => RouterFactoryReturn<JSX.Element>,\\n Parameters<typeof renderToStreamOrig>[1]\\n> = async (resolver, { headerTags = [], ...options } = {}) => {\\n const stream = renderToStreamOrig(() => resolver().component, options);\\n const { readable, writable } = new TransformStream<string, string>();\\n /**\\n * On failure, pipeTo aborts the writable, which errors the readable side\\n * and surfaces the error to the stream consumer; catching here only keeps\\n * the rejection from escaping as an unhandled one.\\n * */\\n void Promise.resolve(stream.pipeTo(writable)).catch(() => {});\\n return {\\n head: [...headerTags, generateHydrationScript()].join(\\\"\\\\n\\\"),\\n html: readable,\\n };\\n};\\n\\nexport default serverRenderFactory<true>();\\n\";\n//#endregion\n//#region src/templates/lib/env.d.ts?raw\nvar env_d_default = \"declare module \\\"virtual:kosmo/tsq-client\\\" {\\n import type { QueryClient, QueryClientConfig } from \\\"@tanstack/solid-query\\\";\\n export const createQueryClient: (options?: QueryClientConfig) => QueryClient;\\n export const getQueryClient: () => QueryClient;\\n}\\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/query.ts?raw\nvar query_default = \"export * from \\\"virtual:kosmo/tsq-client\\\";\\n\";\n//#endregion\n//#region src/templates/lib/query-csr.js?raw\nvar query_csr_default = \"import { QueryClient } from \\\"@tanstack/solid-query\\\";\\n\\nlet client = undefined;\\n\\nexport const createQueryClient = (options) => {\\n client = new QueryClient(options);\\n return client;\\n};\\n\\nexport const getQueryClient = () => {\\n if (!client) {\\n client = new QueryClient();\\n }\\n return client;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/query-ssr.js?raw\nvar query_ssr_default = \"import { QueryClient } from \\\"@tanstack/solid-query\\\";\\n\\nimport { store } from \\\"{{ createImport 'libCore' 'ssr' }}\\\";\\n\\nexport const createQueryClient = (options) => {\\n const client = new QueryClient(options);\\n const ctx = store?.getStore();\\n if (ctx) {\\n ctx.tsqClient = client;\\n }\\n return client;\\n};\\n\\nexport const getQueryClient = () => {\\n const ctx = store?.getStore();\\n if (!ctx) {\\n throw new Error(\\\"getQueryClient(): called outside an SSR request scope\\\");\\n }\\n if (!ctx.tsqClient) {\\n ctx.tsqClient = new QueryClient();\\n }\\n return ctx.tsqClient;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/router.tsx?raw\nvar router_default$1 = \"import type { JSX, ParentComponent } from \\\"solid-js\\\";\\nimport { Router, type RouteDefinition } from \\\"@solidjs/router\\\";\\nimport type { RouterFactoryReturn } from \\\"@kosmojs/core\\\";\\nimport { createRouterFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { base } from \\\"{{ createImport 'libCore' }}\\\";\\n\\nexport const createRouters = (\\n routes: Array<RouteDefinition>,\\n { app }: { app: ParentComponent },\\n): {\\n clientRouter: () => RouterFactoryReturn<JSX.Element>;\\n serverRouter: (url: URL) => RouterFactoryReturn<JSX.Element>;\\n} => {\\n const clientRouter = () => {\\n const component = (\\n <Router root={app} base={base}>\\n {routes}\\n </Router>\\n );\\n return { component };\\n }\\n\\n const serverRouter = (url: URL) => {\\n const component = (\\n <Router root={app} base={base} url={url.pathname + url.search}>\\n {routes}\\n </Router>\\n );\\n return { component };\\n }\\n\\n return { clientRouter, serverRouter };\\n}\\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 const component = await componentLoader();\\n return typeof component.preload === \\\"function\\\"\\n ? component.preload\\n : undefined;\\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\\\";\\nimport { AppProvider } from \\\"{{ createImport 'lib' 'app' }}\\\";\\n\\nconst App: ParentComponent = (props) => {\\n return <AppProvider>{props.children}</AppProvider>;\\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]?.path(params as never, knownProps.query, { prefix: false });\\n };\\n\\n return <A {...{ ...restProps, href: href() }}>{knownProps.children}</A>;\\n}\\n\";\n//#endregion\n//#region src/templates/src/entry/client.ts?raw\nvar client_default = \"import renderFactory, {\\n createRoutes,\\n hydrate,\\n mount,\\n} from \\\"{{ createImport 'libEntry' 'client' }}\\\";\\n\\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 hydrate() {\\n return hydrate(() => clientRouter(), root);\\n },\\n mount() {\\n return mount(() => clientRouter(), root);\\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 renderFactory, {\\n createRoutes,\\n renderToStream,\\n renderToString,\\n} from \\\"{{ createImport 'libEntry' 'server' }}\\\";\\n\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes({ withPreload: true });\\nconst { serverRouter } = routerFactory(routes);\\n\\nexport default renderFactory(() => {\\n return {\\n renderToString(url, { assets }) {\\n return renderToString(\\n () => serverRouter(url),\\n { headerTags: assets.map(({ tag }) => tag) },\\n );\\n },\\n renderToStream(url, { assets }) {\\n return renderToStream(\\n () => serverRouter(url),\\n { headerTags: assets.map(({ tag }) => tag) },\\n );\\n },\\n };\\n});\\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.ts?raw\nvar router_default = \"import routerFactory, { createRouters } from \\\"{{ createImport 'lib' 'router' }}\\\";\\n\\nimport app from \\\"./app\\\";\\n\\nexport default routerFactory((routes) => {\\n const { clientRouter, serverRouter } = createRouters(routes, { app });\\n return {\\n clientRouter() {\\n return clientRouter()\\n },\\n serverRouter(url) {\\n return serverRouter(url)\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((sourceFolder) => {\n\tconst { frontend } = sourceFolder.config;\n\tconst { generators = [] } = sourceFolder.config;\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { render: renderLibTpl, 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(frontend?.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.tsx\"), router_default$1, {\n\t\t\tentries,\n\t\t\tindexRoutes\n\t\t});\n\t};\n\treturn {\n\t\tviteConfig() {\n\t\t\tconst defaultPlugin = () => {\n\t\t\t\treturn vitePlugin({ ...generators.some((e) => e.meta.slot === \"ssr\") ? {\n\t\t\t\t\tssr: true,\n\t\t\t\t\tsolid: { hydratable: true }\n\t\t\t\t} : {} });\n\t\t\t};\n\t\t\tconst { plugin = defaultPlugin() } = typeof sourceFolder.config.frontend?.stack === \"object\" ? sourceFolder.config.frontend.stack : {};\n\t\t\treturn {\n\t\t\t\toxc: { jsx: { importSource: \"solid-js\" } },\n\t\t\t\tplugins: [plugin]\n\t\t\t};\n\t\t},\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[\"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\t...frontend?.tanstack?.query ? [[\"app.tsx\", app_tsq_default], [\"query.ts\", query_default]] : [[\"app.tsx\", app_default$1], [\"query.ts\", \"/** tanstack query disabled */\"]]\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.ts\", router_default]\n\t\t\t]) await deploySrcFile(createPath.src(file), template, { entryDir: defaults.entryDir }, { overwrite });\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\tawait generateSrcFiles(entries.filter(createWatchedPageRouteEntriesFilter(event, [\"create\"])));\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\tvirtualModules() {\n\t\t\treturn frontend?.tanstack?.query ? [{\n\t\t\t\tspecifier: \"virtual:kosmo/tsq-client\",\n\t\t\t\tcsr: renderLibTpl(query_csr_default, {}),\n\t\t\t\tssr: renderLibTpl(query_ssr_default, {})\n\t\t\t}] : [];\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator({\n\tmeta: {\n\t\tname: \"SolidJS\",\n\t\tslot: \"frontend\",\n\t\tjsx: \"preserve\",\n\t\tjsxImportSource: \"solid-js\"\n\t},\n\tdependencies({ frontend }) {\n\t\treturn {\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...frontend?.tanstack?.query ? { \"@tanstack/solid-query\": package_default.devDependencies[\"@tanstack/solid-query\"] } : {}\n\t\t};\n\t},\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { defineGenerator, defineGeneratorFactory, mergeConfigs, pathExists, pathResolver, renderFactory, sortRoutes, spinnerFactory, vitePlugins } from \"@kosmojs/lib\";\nimport { access, constants, cp, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport { styleText } from \"node:util\";\nimport { build } from \"vite\";\nimport { routeRenderHelpers } from \"@kosmojs/core/generators\";\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\\ntype StaticParams = Array<Array<string | number | Array<string | number>>>;\\n\\n/**\\n * Where a page declares the parameter sets to pre-render:\\n * - a `staticParams` named export - React/Solid page modules,\\n * a plain `<script>` block in Vue, a `<script module>` block in Svelte\\n * - `staticParams` in MDX frontmatter\\n * Each entry is positional, in the route's parameter order.\\n * */\\nconst staticParamsOf = (module: unknown): StaticParams | undefined => {\\n const { staticParams, frontmatter } = (module ?? {}) as {\\n staticParams?: unknown;\\n frontmatter?: { staticParams?: unknown };\\n };\\n const value = staticParams ?? frontmatter?.staticParams;\\n return Array.isArray(value) ? (value as StaticParams) : undefined;\\n};\\n\\nconst paramsMapper = (\\n params: PageRoute[\\\"params\\\"],\\n value: StaticParams[number],\\n) => {\\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, { module, pathPattern, params }]) => {\\n if (!params.schema.length) {\\n // static route\\n return [pathPattern.replace(/^index\\\\/?/, \\\"\\\")];\\n }\\n\\n const staticParams = staticParamsOf(module);\\n\\n // a dynamic route without staticParams has nothing to pre-render\\n if (!staticParams) {\\n return [];\\n }\\n\\n const toPath = compile(pathPattern);\\n\\n return staticParams.flatMap((entry) => {\\n try {\\n return [toPath(paramsMapper(params, entry) as never)];\\n } catch (error) {\\n console.error(`❗SSG: Failed building path for ${name}`);\\n console.error(error);\\n return [];\\n }\\n });\\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\\ntype SSGRoute = {\\n // the page module as imported; the shape differs per framework\\n module: unknown;\\n pathPattern: string;\\n params: PageRoute[\\\"params\\\"];\\n};\\n\\nconst routeMap: Record<string, SSGRoute> = {\\n{{#each pageRoutes}}\\n \\\"{{name}}\\\": {\\n module: {{id}},\\n pathPattern: \\\"{{pathPattern}}\\\",\\n params: {{serializeParams .}},\\n },\\n{{/each}}\\n};\\n\\nexport default routeMap;\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((sourceFolder) => {\n\tconst { config } = 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\tserializeParams(route) {\n\t\t\treturn JSON.stringify(route.params);\n\t\t}\n\t} });\n\tconst generateRoutes = async (entries) => {\n\t\tconst pageRoutes = entries.flatMap(({ kind, entry }) => {\n\t\t\treturn kind === \"pageRoute\" ? [entry] : [];\n\t\t}).sort(sortRoutes);\n\t\tawait deployLibFile(createPath.lib(\"ssg:routes.ts\"), ssg_routes_default, { pageRoutes });\n\t};\n\treturn {\n\t\tasync start() {\n\t\t\tawait deployLibFile(createPath.lib(\"ssg.ts\"), ssg_default, {});\n\t\t},\n\t\tasync watch(entries) {\n\t\t\tawait generateRoutes(entries);\n\t\t},\n\t\tasync build(entries) {\n\t\t\tawait generateRoutes(entries);\n\t\t},\n\t\tasync postBuild() {\n\t\t\tif (!config.frontend) return;\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 { createApp } = await import(ssrServerPath);\n\t\t\tspinner.append(\"bundling routes...\");\n\t\t\tawait build(mergeConfigs(config.frontend.viteConfig, ...config.generators.map(({ factory }) => {\n\t\t\t\treturn factory(sourceFolder).viteConfig?.({\n\t\t\t\t\tkind: \"client\",\n\t\t\t\t\tcommand: \"build\"\n\t\t\t\t});\n\t\t\t}), {\n\t\t\t\troot: createPath.lib(),\n\t\t\t\tappType: \"custom\",\n\t\t\t\tplugins: [\n\t\t\t\t\tvitePlugins.tsconfigPaths(sourceFolder),\n\t\t\t\t\tvitePlugins.nodePrefix(),\n\t\t\t\t\tvitePlugins.virtualModules(sourceFolder, {\n\t\t\t\t\t\tkind: \"csr\",\n\t\t\t\t\t\tcommand: \"build\"\n\t\t\t\t\t})\n\t\t\t\t],\n\t\t\t\tresolve: { conditions: [\"node\"] },\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\tconst pages = /* @__PURE__ */ new Map();\n\t\t\t\tconst app = await createApp((error) => {\n\t\t\t\t\tpages.set(new URL(error.url).pathname, { error: error.message });\n\t\t\t\t});\n\t\t\t\tfor (const [i, route] of routes.entries()) {\n\t\t\t\t\tspinner.append(`[ ${i + 1} of ${routes.length} ] ${route}`);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst html = await fetchRoute(app, route);\n\t\t\t\t\t\tif (!pages.has(route)) pages.set(route, { html });\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (!pages.has(route)) pages.set(route, { error: String(error) });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst failed = [...pages.entries()].flatMap(([route, status]) => {\n\t\t\t\t\treturn \"error\" in status ? [[route, status.error]] : [];\n\t\t\t\t});\n\t\t\t\tif (failed.length) {\n\t\t\t\t\tspinner.failed(\"failed ❗\");\n\t\t\t\t\tthrow new Error([`SSG: failed rendering ${failed.length} route(s):`, ...failed.map(([route, error]) => ` ${route} - ${error}`)].join(\"\\n\"));\n\t\t\t\t}\n\t\t\t\tawait cp(resolve(dir, \"../ssr/assets\"), join(dir, \"assets\"), { recursive: true });\n\t\t\t\tconst publicDir = resolve(dir, \"../ssr/public\");\n\t\t\t\tif (await pathExists(publicDir)) await cp(publicDir, dir, { recursive: true });\n\t\t\t\tfor (const [route, page] of pages) if (\"html\" in page) {\n\t\t\t\t\tconst file = join(dir, relative(config.frontend.base, route), \"index.html\");\n\t\t\t\t\tawait mkdir(dirname(file), { recursive: true });\n\t\t\t\t\tawait writeFile(file, page.html, \"utf8\");\n\t\t\t\t}\n\t\t\t\tspinner.succeed(\"done ✨\");\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 (app, path) => {\n\tconst res = await app.fetch(new Request(`http://localhost${path}`));\n\tif (!res.ok) throw new Error(`app responded with ${res.status}`);\n\treturn res.text();\n};\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator({\n\tmeta: {\n\t\tname: \"SSG\",\n\t\tslot: \"ssg\"\n\t},\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { defineGenerator, defineGeneratorFactory, mergeConfigs, pathExists, pathResolver, renderFactory, sortRoutes, vitePlugins } from \"@kosmojs/lib\";\nimport { cp, rm } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { build } from \"vite\";\nimport { createRouteResolver } from \"@kosmojs/core\";\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/ssr-generator\",\n\tversion: \"0.3.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\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\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"vite\": \"^8.2.2\"\n\t},\n\tdevDependencies: {\n\t\t\"@hono/node-server\": \"^2.1.1\",\n\t\t\"hono\": \"^4.13.7\",\n\t\t\"path-to-regexp\": \"^8.4.2\",\n\t\t\"tinyglobby\": \"^0.2.17\"\n\t}\n};\n//#endregion\n//#region src/templates/lib/@ssr/bundle.ts?raw\nvar bundle_default = \"import { type RequestContext, store } from \\\"{{ createImport 'libCore' 'ssr' }}\\\";\\nimport { renderWrapper } from \\\"{{ createImport 'libEntry' 'server' }}\\\";\\n\\nexport { default as backendApp } from \\\"virtual:kosmo/backend-app\\\";\\n\\nexport { default as ssrApp } from \\\"{{ createImport 'entry' 'server' }}\\\";\\n\\n/**\\n * Wrap a render call, making the given context visible to every component\\n * */\\nexport const withSsrContext = <T>(\\n context: RequestContext,\\n render: () => T,\\n): T => {\\n return store.run(context, () => renderWrapper(context, render));\\n};\\n\\nexport const errorProvider = () => {\\n return store.getStore()?.error;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/@ssr/routes.hbs?raw\nvar routes_default = \"export const routeMap = [\\n{{#each pageRoutes}}\\n { pathPattern: \\\"{{honoPattern}}\\\", renderMode: \\\"{{renderMode}}\\\" },\\n{{/each}}\\n];\\n\";\n//#endregion\n//#region src/templates/lib/ssr.ts?raw\nvar ssr_default = \"import { access, chmod, constants, readFile, unlink } from \\\"node:fs/promises\\\";\\nimport {\\n createServer,\\n type IncomingMessage,\\n type ServerResponse,\\n} from \\\"node:http\\\";\\nimport { extname, join, posix, resolve } from \\\"node:path\\\";\\nimport { fileURLToPath } from \\\"node:url\\\";\\nimport { parseArgs, styleText } from \\\"node:util\\\";\\n\\nimport { getRequestListener } from \\\"@hono/node-server\\\";\\nimport { type Context, Hono } from \\\"hono\\\";\\nimport { HTTPException } from \\\"hono/http-exception\\\";\\nimport { stream } from \\\"hono/streaming\\\";\\nimport { pathToRegexp } from \\\"path-to-regexp\\\";\\nimport { glob } from \\\"tinyglobby\\\";\\n\\nimport {\\n type FetchApp,\\n MIME_TYPES,\\n type NodeApp,\\n type SSRSetup,\\n} from \\\"@kosmojs/core\\\";\\n\\nimport { routeMap } from \\\"{{ createImport 'lib' '@ssr/routes' }}\\\";\\nimport {\\n backendAliasPatterns,\\n backendBase,\\n base,\\n} from \\\"{{ createImport 'libCore' }}\\\";\\nimport { redirectCodes, ssrOrigin } from \\\"{{ createImport 'libCore' 'ssr' }}\\\";\\n\\nconst ROOT = import.meta.dirname;\\nconst HEAD_CLOSE_PATTERN = /<\\\\/head\\\\s*>/i;\\n\\ntype AssetInfo = {\\n file: string;\\n // Raw file contents kept in memory for fast, zero-I/O responses.\\n buffer: Uint8Array;\\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;\\n // Cache-Control header - hashed assets are immutable, public/ files are not.\\n cacheControl: string;\\n};\\n\\nexport const createApp = async (\\n errorHandler?: (error: Error & { url: string }) => void | undefined,\\n) => {\\n // Import the SSR entry produced by Vite's ssr build.\\n const {\\n ssrApp,\\n withSsrContext,\\n errorProvider,\\n }: {\\n ssrApp: SSRSetup;\\n withSsrContext: <T>(\\n context: { headers?: Record<string, string>; url?: string },\\n render: () => T,\\n ) => Promise<T>;\\n errorProvider: () => Error | undefined;\\n } = await import(`${ROOT}/app.js`);\\n\\n // Read the client index.html that includes <!--app-html--> placeholder\\n const template = await readFile(`${ROOT}/index.html`, \\\"utf8\\\");\\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 const { renderToString, renderToStream, onError } = ssrApp;\\n\\n const [htmlStart, htmlEnd = \\\"\\\"] = template.split(/<!--\\\\s*app-html\\\\s*-->/);\\n\\n const assets = await loadAssets(ROOT);\\n\\n const ssrOptions = () => {\\n const cssAssets = [...assets.entries()].flatMap(\\n ([path, { file, buffer, size }]) => {\\n // Vite is naming assets by entry name\\n if (!/^__kosmo_ssr_bundle-.+\\\\.css$/i.test(file)) {\\n return [];\\n }\\n\\n // skip if template contains a file with same hash\\n if (template.includes(file.replace(/^__kosmo_ssr_bundle\\\\b/, \\\"\\\"))) {\\n return [];\\n }\\n\\n return [\\n {\\n kind: \\\"css\\\" as const,\\n tag: `<link rel=\\\"stylesheet\\\" crossorigin href=\\\"${path}\\\" />`,\\n content: new TextDecoder().decode(buffer),\\n size,\\n path,\\n },\\n ];\\n },\\n );\\n\\n const content = \\\"window.__KOSMO_HYDRATION_BOOL__ = true;\\\";\\n\\n return {\\n template,\\n manifest,\\n assets: [\\n ...cssAssets,\\n {\\n kind: \\\"js\\\" as const,\\n tag: `<script>${content}<\\/script>`,\\n content,\\n size: content.length,\\n },\\n ],\\n };\\n };\\n\\n const handleError = (url: string, error: Error, fallback: Function) => {\\n // assign, not spread: message and stack are non-enumerable on Error,\\n // a spread silently drops them\\n Object.assign(error, { url });\\n if (onError) {\\n onError(error as never);\\n } else {\\n fallback();\\n }\\n errorHandler?.(error as never);\\n };\\n\\n const injectHead = (html: string, head: string) => {\\n const error = \\\"WARN: missing </head> - required for SSR head injection\\\";\\n if (HEAD_CLOSE_PATTERN.test(html)) {\\n return html.replace(HEAD_CLOSE_PATTERN, (headEnd) => {\\n return [head, headEnd].join(\\\"\\\\n\\\");\\n });\\n }\\n console.error(error);\\n return `${html}\\\\n<script>console.error(\\\"${error}\\\")<\\/script>`;\\n };\\n\\n const renderPage = async (url: URL, ctx: Context) => {\\n const {\\n head = \\\"\\\",\\n html,\\n error,\\n } = await withSsrContext(\\n {\\n headers: Object.fromEntries(ctx.req.raw.headers),\\n url: ctx.req.url,\\n },\\n async () => {\\n try {\\n /**\\n * Catch a hard SSR render failure and fall back to CSR,\\n * where the client's error boundaries can surface a meaningful error.\\n * Server-side error boundaries behave inconsistently across frameworks,\\n * can not rely on them here.\\n * Instead, the SSR output are discarded and the client shell served verbatim,\\n * letting the client re-render and handle the error uniformly.\\n * This is the render-level counterpart to the transport-level catch in loaders.\\n * */\\n const { head = \\\"\\\", html } = await renderToString(url, ssrOptions());\\n return { head, html, error: errorProvider() };\\n } catch (error) {\\n return { error };\\n }\\n },\\n );\\n\\n if (error) {\\n const errorMessage = \\\"WARN: SSR failed, fallback to CSR\\\";\\n handleError(ctx.req.url, error as never, () => {\\n console.error(errorMessage);\\n console.error(error);\\n console.error();\\n });\\n return [\\n injectHead(\\n htmlStart,\\n `<script>console.error(\\\"${errorMessage}\\\")<\\/script>`,\\n ),\\n htmlEnd,\\n ].join(\\\"\\\");\\n }\\n\\n return [injectHead(htmlStart, head), html ?? \\\"\\\", htmlEnd].join(\\\"\\\");\\n };\\n\\n const app = new Hono({ strict: false });\\n\\n // Static files win over routes, as they do in vite dev and behind a reverse proxy.\\n // This covers hashed assets/ (JS, CSS, images, fonts, .map siblings) and public/ files.\\n app.use(async (ctx, next) => {\\n if (![\\\"GET\\\", \\\"HEAD\\\"].includes(ctx.req.method)) {\\n return next();\\n }\\n\\n const asset = assets.get(ctx.req.path);\\n\\n if (!asset) {\\n return next();\\n }\\n\\n return new Response(\\n ctx.req.method === \\\"HEAD\\\" ? null : (asset.buffer as never),\\n {\\n headers: {\\n \\\"Content-Type\\\": asset.contentType,\\n \\\"Content-Length\\\": String(asset.size),\\n \\\"Cache-Control\\\": asset.cacheControl,\\n },\\n },\\n );\\n });\\n\\n for (const { pathPattern, renderMode } of routeMap) {\\n app.get(join(base, pathPattern), async (ctx) => {\\n try {\\n const url = new URL(ctx.req.url);\\n\\n if (renderMode === \\\"string\\\" && typeof renderToString === \\\"function\\\") {\\n const page = await renderPage(url, ctx);\\n return ctx.html(page);\\n }\\n\\n if (renderMode === \\\"stream\\\" && typeof renderToStream === \\\"function\\\") {\\n ctx.header(\\\"Content-Type\\\", \\\"text/html\\\");\\n return stream(ctx, async (stream) => {\\n let error: Error | undefined;\\n\\n /**\\n * Stream failures surface here, not in a catch upstream:\\n * on solid and vue pipe rejects; react shell errors reject the render promise itself.\\n * The shell may already be on the wire -\\n * reporting is all that is left to do, the response cannot be replaced.\\n * */\\n try {\\n const { head = \\\"\\\", html } = await withSsrContext(\\n {\\n headers: Object.fromEntries(ctx.req.raw.headers),\\n url: ctx.req.url,\\n },\\n () => renderToStream(url, ssrOptions(), stream as never),\\n );\\n await stream.write(injectHead(htmlStart, head));\\n await stream.pipe(html);\\n error = errorProvider();\\n await stream.write(htmlEnd);\\n } catch (e: any) {\\n error = e;\\n }\\n\\n if (error) {\\n handleError(ctx.req.url, error, () => {\\n console.error(\\\"ERROR: SSR stream render failed\\\");\\n console.error(error);\\n console.error();\\n });\\n }\\n });\\n }\\n\\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 || !redirectCodes.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 // render 404 page\\n if (typeof renderToString === \\\"function\\\") {\\n const url = new URL(ctx.req.url);\\n const page = await renderPage(url, ctx);\\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, loading asset content into memory.\\n * The asset graph always includes every built asset URL so the SSR server\\n * can correctly recognize static asset requests.\\n *\\n * Two roots, each directory being its own allowlist - nothing else in the bundle root is served:\\n * - assets/ - emitted by vite with content hashes, served at base/assets/, cacheable forever\\n * - public/ - copied verbatim from the folder's public dir, served at base/, names are stable so clients must revalidate\\n * */\\nconst loadAssets = async (root: string) => {\\n // Resolve HTTP Content-Type from the asset's file extension.\\n const contentTypeResolver = (filePath: string) => {\\n const ext = extname(filePath).toLowerCase();\\n return MIME_TYPES[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 roots = [\\n {\\n folder: \\\"assets\\\",\\n prefix: join(base, \\\"assets\\\"),\\n cacheControl: \\\"public, max-age=31536000, immutable\\\",\\n },\\n {\\n folder: \\\"public\\\",\\n prefix: base,\\n cacheControl: \\\"no-cache\\\",\\n },\\n ];\\n\\n for (const { folder, prefix, cacheControl } of roots) {\\n const cwd = resolve(root, folder);\\n\\n const readable = await access(cwd, constants.F_OK).then(\\n () => true,\\n () => false,\\n );\\n\\n if (!readable) {\\n continue;\\n }\\n\\n const files = await glob(\\\"**\\\", {\\n cwd,\\n onlyFiles: true,\\n absolute: false,\\n });\\n\\n for (const file of files) {\\n const buffer = new Uint8Array(await readFile(resolve(cwd, file)));\\n assetCache.set(join(prefix, file), {\\n file,\\n buffer,\\n contentType: contentTypeResolver(file),\\n size: buffer.length,\\n cacheControl,\\n });\\n }\\n }\\n\\n return assetCache;\\n};\\n\\ntype NodeListener = (req: IncomingMessage, res: ServerResponse) => void;\\n\\nconst createNodeListener = (app: FetchApp | NodeApp): NodeListener => {\\n return typeof (app as FetchApp).fetch === \\\"function\\\"\\n ? getRequestListener((app as FetchApp).fetch)\\n : (app as NodeApp).callback();\\n};\\n\\n/**\\n * The folder's complete request surface as a single node:http listener:\\n * API requests under `backend.base` and ones in `backend.alias` go to the bundled backend,\\n * everything else to the SSR app.\\n * `startServer` binds it to a port/socket; `dist/run.js` mounts it next to other folders.\\n * */\\nexport const createListener = async (): Promise<NodeListener> => {\\n const {\\n backendApp,\\n }: {\\n backendApp: FetchApp | NodeApp;\\n } = await import(`${ROOT}/app.js`);\\n\\n const ssrApp = await createApp();\\n\\n const ssrListener = createNodeListener(ssrApp as never);\\n\\n const backendListener = backendApp\\n ? createNodeListener(backendApp as never)\\n : undefined;\\n\\n const aliasPatterns = backendAliasPatterns.map((alias) => {\\n return pathToRegexp(posix.join(\\\"/\\\", alias)).regexp;\\n });\\n\\n return (req, res) => {\\n if (!backendListener) {\\n return ssrListener(req, res);\\n }\\n const path = new URL(req.url ?? \\\"/\\\", ssrOrigin).pathname;\\n return path === backendBase ||\\n path.startsWith(posix.join(backendBase, \\\"/\\\")) ||\\n aliasPatterns.some((regexp) => regexp.test(path))\\n ? backendListener(req, res)\\n : ssrListener(req, res);\\n };\\n};\\n\\nexport const startServer = 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 `\\\\n ➜ Starting SSR Server ${styleText([\\\"dim\\\"], \\\"[ %s ]\\\")}`,\\n sock ? `sock: ${sock}` : `port: ${port}`,\\n );\\n\\n const server = createServer(await createListener());\\n\\n server.listen(sock || port, 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 return server;\\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 startServer({ sock, port });\\n } catch (error: any) {\\n console.error(styleText(\\\"red\\\", \\\"✗ Failed starting SSR server\\\"));\\n console.error(error);\\n process.exit(1);\\n }\\n}\\n\";\n//#endregion\n//#region src/factory.ts\nvar DEFAULT_RENDER_MODE = [\"string\", \"stream\"][0];\nvar factory_default = defineGeneratorFactory((sourceFolder, options) => {\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { frontend, generators } = sourceFolder.config;\n\tconst { renderToFile: deployLibFile } = renderFactory({ helpers: { ...createImportHelpers({ origin: \"lib\" }) } });\n\treturn {\n\t\tasync build(entries) {\n\t\t\tconst renderModeResolver = options?.renderMode ? typeof options.renderMode === \"string\" ? () => options.renderMode : createRouteResolver(options?.renderMode, \"string\") : () => DEFAULT_RENDER_MODE;\n\t\t\tconst context = {\n\t\t\t\trenderMode: JSON.stringify(options?.renderMode || null),\n\t\t\t\tpageRoutes: entries.flatMap((e) => {\n\t\t\t\t\treturn e.kind === \"pageRoute\" ? [{\n\t\t\t\t\t\t...e.entry,\n\t\t\t\t\t\trenderMode: renderModeResolver(e.entry.name)\n\t\t\t\t\t}] : [];\n\t\t\t\t}).sort(sortRoutes)\n\t\t\t};\n\t\t\tfor (const [file, template] of [\n\t\t\t\t[\"ssr.ts\", ssr_default],\n\t\t\t\t[\"@ssr/__kosmo_ssr_bundle.ts\", bundle_default],\n\t\t\t\t[\"@ssr/routes.ts\", routes_default]\n\t\t\t]) await deployLibFile(createPath.lib(file), template, context);\n\t\t},\n\t\tasync postBuild() {\n\t\t\tif (!frontend) return;\n\t\t\tconst dir = createPath.distDir(\"ssr\");\n\t\t\tconst plugins = [\n\t\t\t\tvitePlugins.tsconfigPaths(sourceFolder),\n\t\t\t\tvitePlugins.nodePrefix(),\n\t\t\t\tvitePlugins.virtualModules(sourceFolder, {\n\t\t\t\t\tkind: \"ssr\",\n\t\t\t\t\tcommand: \"build\"\n\t\t\t\t})\n\t\t\t];\n\t\t\tawait build(mergeConfigs(frontend.viteConfig, ...generators.map(({ factory }) => {\n\t\t\t\treturn factory(sourceFolder).viteConfig?.({\n\t\t\t\t\tkind: \"client\",\n\t\t\t\t\tcommand: \"build\"\n\t\t\t\t});\n\t\t\t}), {\n\t\t\t\troot: createPath.src(),\n\t\t\t\tplugins,\n\t\t\t\tbuild: {\n\t\t\t\t\tssr: createPath.lib(\"@ssr/__kosmo_ssr_bundle\"),\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\tminify: false,\n\t\t\t\t\tcopyPublicDir: false,\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\troot: createPath.lib(),\n\t\t\t\tconfigFile: false,\n\t\t\t\tappType: \"custom\",\n\t\t\t\tplugins,\n\t\t\t\tresolve: { conditions: [\"node\"] },\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\tfor (const entry of [\n\t\t\t\t\".vite\",\n\t\t\t\t\"assets\",\n\t\t\t\t\"index.html\"\n\t\t\t]) await cp(resolve(dir, \"../client\", entry), join(dir, entry), { recursive: true });\n\t\t\tif (![false, \"\"].includes(frontend.viteConfig?.publicDir)) {\n\t\t\t\tconst publicDir = resolve(createPath.src(), frontend.viteConfig?.publicDir || \"public\");\n\t\t\t\tif (await pathExists(publicDir)) await cp(publicDir, join(dir, \"public\"), { recursive: true });\n\t\t\t}\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({\n\tmeta: {\n\t\tname: \"SSR\",\n\t\tslot: \"ssr\"\n\t},\n\tdependencies: {\n\t\ttinyglobby: package_default.devDependencies[\"tinyglobby\"],\n\t\thono: package_default.devDependencies[\"hono\"],\n\t\t\"@hono/node-server\": package_default.devDependencies[\"@hono/node-server\"]\n\t},\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { createWatchedPageRouteEntriesFilter, defineGenerator, defineGeneratorFactory, pathResolver, renderFactory, sortRoutes, sortRoutesForResolution } from \"@kosmojs/lib\";\nimport { posix } from \"node:path\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport { createTemplateResolver, defaults } from \"@kosmojs/core\";\nimport { routeRenderHelpers } from \"@kosmojs/core/generators\";\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/svelte-generator\",\n\tversion: \"0.3.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\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\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^7.3.0\",\n\t\t\"vite\": \"^8.2.2\"\n\t},\n\tdevDependencies: {\n\t\t\"@tanstack/svelte-query\": \"^6.1.48\",\n\t\t\"path-to-regexp\": \"^8.4.2\",\n\t\t\"svelte\": \"^5.57.0\"\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 Svelte page.\",\n\t\t\"🚀 Success! A fresh Svelte page is ready to roll.\",\n\t\t\"🌟 Nice work! Another Svelte page added to your app.\",\n\t\t\"✨ Fantastic! Your new Svelte page is good to go.\",\n\t\t\"🎯 Nailed it! A brand new Svelte page just landed.\",\n\t\t\"💫 Awesome! Another Svelte page joins the party.\",\n\t\t\"⚡ Lightning fast! A new Svelte page created successfully.\"\n\t];\n\treturn messages[Math.floor(Math.random() * messages.length)];\n};\n//#endregion\n//#region src/templates/lib/app/app.svelte?raw\nvar app_default$1 = \"<script lang=\\\"ts\\\">\\n import type { Snippet } from \\\"svelte\\\";\\n\\n let { children }: { children: Snippet } = $props();\\n<\\/script>\\n\\n{@render children()}\\n\";\n//#endregion\n//#region src/templates/lib/app/app-tsq.svelte?raw\nvar app_tsq_default = \"<script lang=\\\"ts\\\">\\n import { type QueryClient, QueryClientProvider } from \\\"@tanstack/svelte-query\\\";\\n import type { Snippet } from \\\"svelte\\\";\\n\\n import { getQueryClient } from \\\"../query\\\";\\n\\n let { client, children }: {\\n client?: QueryClient;\\n children: Snippet;\\n } = $props();\\n\\n const queryClient = $derived(client ?? getQueryClient());\\n<\\/script>\\n\\n<QueryClientProvider client={queryClient}>\\n {@render children()}\\n</QueryClientProvider>\\n\";\n//#endregion\n//#region src/templates/lib/entry/client.hbs?raw\nvar client_default$1 = \"import { hydrate as hydrateOrig, mount as mountOrig } from \\\"svelte\\\";\\nimport type { RouterFactoryReturn } from \\\"@kosmojs/core\\\";\\nimport { clientRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { createRoute, type RouteComponent } from \\\"../svelte\\\";\\n\\n{{#each pageRoutes}}\\nconst {{id}} = () => import(\\\"{{ createImport 'pages' file }}\\\");\\n{{/each}}\\n{{#each layouts}}\\nconst {{id}} = () => import(\\\"{{ createImport 'pages' file }}\\\");\\n{{/each}}\\n\\nexport const createRoutes = () => {\\n return [\\n {{#each pageRoutes}}\\n createRoute(\\\"{{name}}\\\", \\\"{{pathPattern}}\\\", {{id}}, [\\n {{#each layouts}}[\\\"{{name}}\\\", {{id}}], {{/each}}\\n ]),\\n {{/each}}\\n ];\\n};\\n\\nexport const hydrate = async (\\n resolver: () => RouterFactoryReturn<Promise<RouteComponent>>,\\n root: HTMLElement,\\n) => {\\n const { component } = await resolver();\\n hydrateOrig(component.Component, { target: root, props: component.props });\\n window.__KOSMO_HYDRATION_DATA__ = undefined;\\n}\\n\\nexport const mount = async (\\n resolver: () => RouterFactoryReturn<Promise<RouteComponent>>,\\n root: HTMLElement,\\n) => {\\n const { component } = await resolver();\\n mountOrig(component.Component, { target: root, props: component.props });\\n}\\n\\nexport default clientRenderFactory();\\n\";\n//#endregion\n//#region src/templates/lib/entry/server.hbs?raw\nvar server_default$1 = \"import { render as renderOrig } from \\\"svelte/server\\\";\\n\\nimport type {\\n RenderToStringWrapper,\\n RouterFactoryReturn,\\n SSRRenderWrapper,\\n} from \\\"@kosmojs/core\\\";\\n\\nimport { serverRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { createRoute, type Route, type RouteComponent } from \\\"../svelte\\\";\\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}}[\\\"{{name}}\\\", async () => {{id}}], {{/each}}\\n ]),\\n {{/each}}\\n ];\\n};\\n\\nconst createHydrationScript = (loaderData: Route[\\\"loaderData\\\"]) => {\\n return loaderData\\n ? `<script>\\n window.__KOSMO_HYDRATION_DATA__ = JSON.parse(\\n ${JSON.stringify(JSON.stringify(loaderData))}\\n );\\n <\\/script>`\\n : undefined;\\n};\\n\\nexport const renderWrapper: SSRRenderWrapper = (_context, render) => render();\\n\\nexport const renderToString: RenderToStringWrapper<\\n () => RouterFactoryReturn<Promise<RouteComponent>, { route: Route }>\\n> = async (resolver, { headerTags = [] } = {}) => {\\n const { component, route } = await resolver();\\n\\n // svelte/server render() returns `head` - everything the page and its\\n // layouts put in <svelte:head> - plus `body`. That covers what MDX builds\\n // from frontmatter, so there is no generateHeaderTags() counterpart here.\\n const { head, body } = await renderOrig(component.Component, {\\n props: component.props,\\n });\\n\\n const script = createHydrationScript(route.loaderData);\\n\\n return {\\n head: [...headerTags, head, ...(script ? [script] : [])]\\n .filter(Boolean)\\n .join(\\\"\\\\n\\\"),\\n html: body,\\n }\\n}\\n\\n// svelte/server exposes only render() - no web-stream renderer -\\n// so this folder is string-only SSR.\\nexport default serverRenderFactory<false>();\\n\";\n//#endregion\n//#region src/templates/lib/env.d.ts?raw\nvar env_d_default = \"declare module \\\"*.svelte\\\" {\\n import type { Component } from \\\"svelte\\\";\\n const component: Component;\\n export default component;\\n}\\n\\ndeclare module \\\"virtual:kosmo/tsq-client\\\" {\\n import type { QueryClient, QueryClientConfig } from \\\"@tanstack/svelte-query\\\";\\n export const createQueryClient: (options?: QueryClientConfig) => QueryClient;\\n export const getQueryClient: () => QueryClient;\\n}\\n\";\n//#endregion\n//#region src/templates/lib/Layouts.svelte?raw\nvar Layouts_default = \"<script lang=\\\"ts\\\">\\n /**\\n * Folds [app, ...layouts] around the page component.\\n *\\n * MDX does this with `reduce((children, layout) => h(layout, { children }))`.\\n * Svelte has no vnode children to reduce over, so the chain is walked with a\\n * recursive snippet and the page is rendered at the leaf.\\n *\\n * Layouts receive nothing but their `children` snippet - same as MDX, where\\n * a layout gets only `props.children`. Route data is read from context via\\n * useRoute()/useParams()/useLoaderData().\\n * */\\n import { setRouteContext, type LayoutsProps } from \\\"./svelte\\\";\\n\\n let { app, layouts, page, route }: LayoutsProps = $props();\\n\\n setRouteContext(() => route);\\n\\n const chain = $derived([app, ...layouts.toReversed()]);\\n<\\/script>\\n\\n{#snippet layer(index: number)}\\n {#if index < chain.length}\\n {@const Layout = chain[index]}\\n <Layout>\\n {@render layer(index + 1)}\\n </Layout>\\n {:else}\\n {@const Page = page}\\n <Page />\\n {/if}\\n{/snippet}\\n\\n{@render layer(0)}\\n\";\n//#endregion\n//#region src/templates/lib/pageSamples/404.hbs?raw\nvar _404_default$1 = \"<script lang=\\\"ts\\\">\\n import styles from \\\"./styles.module.css\\\";\\n\\n let { headline }: { headline?: string } = $props();\\n<\\/script>\\n\\n<div class={styles.container}>\\n <div class={styles.card}>\\n <h2 class={styles.title}>{headline || \\\"404: Not Found\\\"}</h2>\\n <br />\\n\\n <div class={styles.stepsBox}>\\n <h2 class={styles.stepsTitle}>Something went wrong...</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//#endregion\n//#region src/templates/lib/pageSamples/page.hbs?raw\nvar page_default$1 = \"<script lang=\\\"ts\\\">\\n import styles from \\\"./styles.module.css\\\";\\n\\n let {\\n message,\\n routeName,\\n pathMap,\\n }: {\\n message: string;\\n routeName: string;\\n pathMap: { page: string; pages: string; api: string };\\n } = $props();\\n<\\/script>\\n\\n<div data-page-route={routeName} class={styles.container}>\\n <div class={styles.card}>\\n <h2 class={styles.subtitle}>{message}</h2>\\n <br />\\n\\n <div class={styles.stepsBox}>\\n <ul class={styles.stepsList}>\\n <li>Edit this page at <code>{pathMap.page}</code></li>\\n <li>\\n Create new pages by adding folders in <code>{pathMap.pages}/</code>\\n </li>\\n <li>Add API endpoints in <code>{pathMap.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 KosmoJS Documentation ➜\\n </a>\\n </div>\\n </div>\\n</div>\\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 = \"<script lang=\\\"ts\\\">\\n import styles from \\\"./styles.module.css\\\";\\n<\\/script>\\n\\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 Component-first development with Svelte and Vite\\n </p>\\n </div>\\n\\n <div class={styles.featuresBox}>\\n <h2 class={styles.featuresTitle}>Powered by Svelte and ready to ship</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 Svelte 5 runes and snippets\\n </li>\\n <li class={styles.featureItem}>\\n <span class={styles.featureBullet}>🔹</span>\\n Nested layouts, loaders and <svelte:head>\\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>Edit this page at <code>pages/index/index.svelte</code></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//#endregion\n//#region src/templates/lib/params.hbs?raw\nvar params_default = \"export type ParamsMap = {\\n{{#each pageRoutes}}\\\"{{name}}\\\": {{serializeParamsLiteral .}};\\n{{/each}}\\n};\\n\\nexport const paramNames = {\\n{{#each pageRoutes}}\\\"{{name}}\\\": [ {{#each params.schema}}\\\"{{name}}\\\", {{/each}}],\\n{{/each}}\\n} as const;\\n\";\n//#endregion\n//#region src/templates/lib/query.ts?raw\nvar query_default = \"export * from \\\"virtual:kosmo/tsq-client\\\";\\n\";\n//#endregion\n//#region src/templates/lib/query-csr.js?raw\nvar query_csr_default = \"import { QueryClient } from \\\"@tanstack/svelte-query\\\";\\n\\nlet client = undefined;\\n\\nexport const createQueryClient = (options) => {\\n client = new QueryClient(options);\\n return client;\\n};\\n\\nexport const getQueryClient = () => {\\n if (!client) {\\n client = new QueryClient();\\n }\\n return client;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/query-ssr.js?raw\nvar query_ssr_default = \"import { QueryClient } from \\\"@tanstack/svelte-query\\\";\\n\\nimport { store } from \\\"{{ createImport 'libCore' 'ssr' }}\\\";\\n\\nexport const createQueryClient = (options) => {\\n const client = new QueryClient(options);\\n const ctx = store?.getStore();\\n if (ctx) {\\n ctx.tsqClient = client;\\n }\\n return client;\\n};\\n\\nexport const getQueryClient = () => {\\n const ctx = store?.getStore();\\n if (!ctx) {\\n throw new Error(\\\"getQueryClient(): called outside an SSR request scope\\\");\\n }\\n if (!ctx.tsqClient) {\\n ctx.tsqClient = new QueryClient();\\n }\\n return ctx.tsqClient;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/router.ts?raw\nvar router_default$1 = \"import type { RouterFactoryReturn } from \\\"@kosmojs/core\\\";\\nimport { createRouterFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport Layouts from \\\"./Layouts.svelte\\\";\\nimport {\\n type AnyComponent,\\n createRouter,\\n type RawRoute,\\n type Route,\\n type RouteComponent,\\n} from \\\"./svelte\\\";\\n\\nexport const createRouters = (\\n routes: Array<RawRoute>,\\n { app }: { app: AnyComponent },\\n): {\\n clientRouter: () => RouterFactoryReturn<Promise<RouteComponent>>;\\n serverRouter: (\\n url: URL,\\n ) => RouterFactoryReturn<Promise<RouteComponent>, { route: Route }>;\\n} => {\\n // <Layouts> is injected here rather than imported by ./svelte, so the core\\n // router stays a plain module and there is no .ts <-> .svelte import cycle.\\n const router = createRouter(routes, app, Layouts);\\n\\n return {\\n clientRouter() {\\n return router.resolve();\\n },\\n serverRouter(url) {\\n return router.resolve(url);\\n },\\n };\\n};\\n\\nexport default createRouterFactory<\\n RawRoute,\\n Promise<RouteComponent>,\\n { server: { route: Route } }\\n>();\\n\";\n//#endregion\n//#region src/templates/lib/svelte.ts?raw\nvar svelte_default = \"import { match, pathToRegexp } from \\\"path-to-regexp\\\";\\nimport { type Component, createContext } from \\\"svelte\\\";\\n\\nimport { parseSearchParams } from \\\"@kosmojs/core\\\";\\n\\nimport { paramNames } from \\\"{{ createImport 'lib' 'params' }}\\\";\\nimport { base } from \\\"{{ createImport 'libCore' }}\\\";\\n\\n/**\\n * The loose component type for anything resolved dynamically from a `.svelte`\\n * module's default export.\\n *\\n * It must be `any`-propped, not `never`-propped: a `Component<never>` is a\\n * function accepting `never`, so - by parameter contravariance - no real\\n * component is assignable to it and `<Layout />` fails to typecheck.\\n * */\\nexport type AnyComponent = Component<any, any, any>;\\n\\nexport type RawRoute = {\\n name: string;\\n regexp: RegExp;\\n extractParams: (path: string) => Route[\\\"params\\\"];\\n loader: () => Promise<RouteModule>;\\n layouts: Array<[name: string, source: () => Promise<LayoutModule>]>;\\n};\\n\\ntype Loader = (\\n route: Pick<Route, \\\"name\\\" | \\\"params\\\" | \\\"paramsEntries\\\" | \\\"searchParams\\\">,\\n) => Promise<unknown> | undefined;\\n\\n/**\\n * `.svelte` modules export their component as `default`; an optional data\\n * `loader` comes from a `<script module>` block.\\n * */\\ntype LayoutModule = {\\n default: AnyComponent;\\n loader?: Loader;\\n};\\n\\ntype RouteModule = {\\n default: AnyComponent;\\n loader?: Loader;\\n};\\n\\n/**\\n * Props of <Layouts>, the fixed root component every route renders through.\\n * */\\nexport type LayoutsProps = {\\n app: AnyComponent;\\n layouts: Array<AnyComponent>;\\n page: AnyComponent;\\n route: Route;\\n};\\n\\n/**\\n * Preact can prebuild the whole tree and hand back a VNode; Svelte cannot -\\n * components are constructors, not values. So the resolved \\\"component\\\" is a\\n * (constructor, props) pair and the entry templates feed it to\\n * mount()/hydrate()/render().\\n * */\\nexport type RouteComponent = {\\n Component: Component<LayoutsProps>;\\n props: LayoutsProps;\\n};\\n\\nexport type Route = {\\n name: string;\\n params: Record<string, string | Array<string>>;\\n paramsEntries: [keys: Array<string>, values: Array<unknown>];\\n searchParams: Record<string, unknown>;\\n loaderData: Record<string, unknown>;\\n};\\n\\n/**\\n * Route context, the Svelte counterpart to MDX's Preact RouterContext.\\n *\\n * Holds a getter rather than the value: <Layouts> receives `route` as a prop,\\n * and reading a prop into a non-reactive position at init is exactly what\\n * Svelte's `state_referenced_locally` check flags. The getter also keeps reads\\n * current if the wrapper is ever reused instead of remounted.\\n *\\n * `createContext` returns a typed [get, set] pair and `get` throws when no\\n * parent called `set`, so a page rendered outside <Layouts> fails loudly.\\n * */\\nexport const [getRouteContext, setRouteContext] = createContext<() => Route>();\\n\\nexport const createRouter = (\\n routes: Array<RawRoute>,\\n app: AnyComponent,\\n Layouts: Component<LayoutsProps>,\\n) => {\\n const catchallRoute = createRoute(\\n \\\"NotFound\\\",\\n \\\"\\\",\\n () => import(\\\"{{ createImport 'pages' '404.svelte' }}\\\"),\\n [],\\n );\\n\\n const runLoader = async (key: string, fetcher: () => ReturnType<Loader>) => {\\n if (typeof window === \\\"undefined\\\" || !window.__KOSMO_HYDRATION_DATA__) {\\n return fetcher();\\n }\\n return key in window.__KOSMO_HYDRATION_DATA__\\n ? window.__KOSMO_HYDRATION_DATA__[key]\\n : fetcher();\\n };\\n\\n return {\\n async resolve(url: URL = new URL(window.location.href)) {\\n const searchParams = parseSearchParams(url);\\n\\n // The routes array is generated pre-sorted by specificity\\n // (static beats required beats optional beats splat, token by token),\\n // the same ordering the SSR server registers routes in -\\n // so the first pattern that matches IS the most specific one, and CSR resolution stays consistent with SSR.\\n // A route with optional parameters matches a range of segment counts,\\n // which is why no segment-count heuristic can disambiguate here.\\n // Lightweight `RegExp.test()` on linear scan - no capture allocation.\\n const matchedRoute =\\n routes.find(({ regexp }) => {\\n return regexp.test(url.pathname);\\n }) || catchallRoute;\\n\\n const params = matchedRoute\\n ? matchedRoute.extractParams(url.pathname)\\n : {};\\n\\n const { name } = matchedRoute;\\n\\n const routeModule = await matchedRoute.loader();\\n\\n const paramsEntries = (\\n Array.isArray(paramNames[name as never])\\n ? [\\n [...paramNames[name as never]],\\n [...paramNames[name as never]].map((key) => params[key]),\\n ]\\n : [\\n // fallback\\n Object.keys(params),\\n Object.values(params),\\n ]\\n ) as never;\\n\\n const loaderData: Record<string, unknown> = {};\\n\\n loaderData[name] = await runLoader(name, () => {\\n return routeModule.loader\\n ? routeModule.loader({ name, params, paramsEntries, searchParams })\\n : undefined; // should not survive serialization if no loader defined\\n });\\n\\n const layouts: Array<AnyComponent> = [];\\n\\n for (const [layoutName, source] of matchedRoute.layouts || []) {\\n const layoutModule = await source();\\n layouts.push(layoutModule.default);\\n const key = `${layoutName}/layout`;\\n loaderData[key] = await runLoader(key, () => {\\n return layoutModule.loader\\n ? layoutModule.loader({\\n name: layoutName,\\n params,\\n paramsEntries,\\n searchParams,\\n })\\n : undefined; // should not survive serialization if no loader defined\\n });\\n }\\n\\n const route: Route = {\\n name,\\n params,\\n paramsEntries,\\n searchParams,\\n loaderData,\\n };\\n\\n return {\\n // <Layouts> folds [app, ...layouts] around the page - Svelte has no\\n // vnode children to reduce over the way `h(layout, { children })` does.\\n component: {\\n Component: Layouts,\\n props: { app, layouts, page: routeModule.default, route },\\n } satisfies RouteComponent,\\n route,\\n };\\n },\\n };\\n};\\n\\nexport const createRoute = (\\n name: string,\\n pathPattern: string,\\n loader: RawRoute[\\\"loader\\\"],\\n layouts: RawRoute[\\\"layouts\\\"],\\n): RawRoute => {\\n // strip trailing slash (keeping a sole \\\"/\\\") so the base-joined index route\\n // matches both with and without it - \\\"/docs/\\\" as a pattern rejects \\\"/docs\\\"\\n const path = `${base}/${pathPattern}`\\n .replace(/\\\\/+/g, \\\"/\\\")\\n .replace(/(.+)\\\\/$/, \\\"$1\\\");\\n\\n const { regexp } = pathToRegexp(path, { sensitive: true });\\n const matcher = match<Route[\\\"params\\\"]>(path);\\n\\n return {\\n name,\\n regexp,\\n extractParams: (path) => {\\n const match = matcher(path);\\n return match ? match.params : {};\\n },\\n loader,\\n layouts,\\n };\\n};\\n\";\n//#endregion\n//#region src/templates/lib/use.ts?raw\nvar use_default = \"import { getRouteContext } from \\\"./svelte\\\";\\n\\nimport type { ParamsMap, paramNames } from \\\"{{ createImport 'lib' 'params' }}\\\";\\n\\n/**\\n * These read Svelte context, so - like every getContext() call - they are only\\n * valid during component initialisation: at the top level of a `<script>`,\\n * never inside an event handler or a callback that runs later.\\n * */\\nexport function useRoute() {\\n return getRouteContext()();\\n}\\n\\nexport function useParams<T extends keyof ParamsMap>(): ParamsMap[T] {\\n return useRoute().params as ParamsMap[T];\\n}\\n\\ntype SameLengthTuple<T extends readonly unknown[], U> = { [K in keyof T]: U };\\n\\nexport function useParamsEntries<T extends keyof ParamsMap>(): [\\n (typeof paramNames)[T],\\n SameLengthTuple<(typeof paramNames)[T], unknown>,\\n] {\\n return useRoute().paramsEntries as never;\\n}\\n\\nexport function useSearchParams() {\\n return useRoute().searchParams;\\n}\\n\\n/**\\n * Reads loader data for the current page or one of its layouts.\\n * Without a key, returns the page's own data.\\n * For a layout, pass its path-qualified name (e.g. \\\"dashboard/layout\\\") -\\n * context can't tell which layout it runs in.\\n * */\\nexport const useLoaderData = <T>(key?: string): T | undefined => {\\n const route = useRoute();\\n return route.loaderData?.[key || route.name] as T;\\n};\\n\";\n//#endregion\n//#region src/templates/src/app.svelte?raw\nvar app_default = \"<script lang=\\\"ts\\\">\\n import { AppProvider } from \\\"{{ createImport 'lib' 'app' }}\\\";\\n import type { Snippet } from \\\"svelte\\\";\\n\\n let { children }: { children: Snippet } = $props();\\n<\\/script>\\n\\n<AppProvider>\\n {@render children()}\\n</AppProvider>\\n\";\n//#endregion\n//#region src/templates/src/components/Link.svelte?raw\nvar Link_default = \"<script lang=\\\"ts\\\">\\n import type { Snippet } from \\\"svelte\\\";\\n import type { HTMLAnchorAttributes } from \\\"svelte/elements\\\";\\n\\n import { pageRouteMap, type LinkProps } from \\\"{{ createImport 'libCore' }}\\\";\\n\\n let {\\n to,\\n query,\\n children,\\n ...rest\\n }: Omit<HTMLAnchorAttributes, \\\"href\\\"> & {\\n to: LinkProps;\\n query?: Record<string | number, unknown>;\\n children?: Snippet;\\n } = $props();\\n\\n const href = $derived.by(() => {\\n const [key, ...params] = to;\\n return pageRouteMap[key]?.path(params as never, query);\\n });\\n<\\/script>\\n\\n<a {href} {...rest}>{@render children?.()}</a>\\n\";\n//#endregion\n//#region src/templates/src/entry/client.ts?raw\nvar client_default = \"import renderFactory, {\\n createRoutes,\\n hydrate,\\n mount,\\n} from \\\"{{ createImport 'libEntry' 'client' }}\\\";\\n\\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 hydrate() {\\n return hydrate(() => clientRouter(), root);\\n },\\n mount() {\\n return mount(() => clientRouter(), root);\\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 renderFactory, {\\n createRoutes,\\n renderToString,\\n // no renderToStream on Svelte folders\\n} from \\\"{{ createImport 'libEntry' 'server' }}\\\";\\n\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes();\\nconst { serverRouter } = routerFactory(routes);\\n\\nexport default renderFactory(() => {\\n return {\\n renderToString(url, { assets }) {\\n return renderToString(\\n () => serverRouter(url),\\n { headerTags: assets.map(({ tag }) => tag) },\\n );\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/404.svelte?raw\nvar _404_default = \"<script lang=\\\"ts\\\">\\n import PageSample from \\\"{{ createImport 'lib' 'pageSamples/404.svelte' }}\\\";\\n<\\/script>\\n\\n<PageSample />\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/layout.hbs?raw\nvar layout_default = \"<script lang=\\\"ts\\\">\\n import type { Snippet } from \\\"svelte\\\";\\n\\n let { children }: { children: Snippet } = $props();\\n<\\/script>\\n\\n{@render children()}\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/page.hbs?raw\nvar page_default = \"<script lang=\\\"ts\\\">\\n import PageSample from \\\"{{ createImport 'lib' 'pageSamples/page.svelte' }}\\\";\\n\\n const pathMap = {\\n page: \\\"{{ createImport 'pages' route.file }}\\\",\\n pages: \\\"{{ createImport 'pages' }}\\\",\\n api: \\\"{{ createImport 'api' }}\\\",\\n };\\n<\\/script>\\n\\n<svelte:head>\\n <title>{{title}}</title>\\n</svelte:head>\\n\\n<PageSample\\n message=\\\"{{message}}\\\"\\n routeName={\\\"{{route.name}}\\\"}\\n {pathMap}\\n/>\\n\";\n//#endregion\n//#region src/templates/src/pageSamples/welcome.hbs?raw\nvar welcome_default = \"<script lang=\\\"ts\\\">\\n import WelcomePage from \\\"{{ createImport 'lib' 'pageSamples/welcome.svelte' }}\\\";\\n<\\/script>\\n\\n<svelte:head>\\n <title>Welcome to KosmoJS</title>\\n <meta\\n name=\\\"description\\\"\\n content=\\\"Component-first development with Svelte and Vite\\\"\\n />\\n</svelte:head>\\n\\n<WelcomePage />\\n\";\n//#endregion\n//#region src/templates/src/router.ts?raw\nvar router_default = \"import routerFactory, { createRouters } from \\\"{{ createImport 'lib' 'router' }}\\\";\\n\\nimport app from \\\"./app.svelte\\\";\\n\\nexport default routerFactory((routes) => {\\n const { clientRouter, serverRouter } = createRouters(routes, { app });\\n return {\\n clientRouter() {\\n return clientRouter()\\n },\\n serverRouter(url) {\\n return serverRouter(url)\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((sourceFolder) => {\n\tconst { frontend } = sourceFolder.config;\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { render: renderLibTpl, renderToFile: deployLibFile } = renderFactory({ helpers: {\n\t\t...createImportHelpers({ origin: \"lib\" }),\n\t\t...routeRenderHelpers()\n\t} });\n\tconst { renderToFile: deploySrcFile } = renderFactory({ helpers: createImportHelpers({ origin: \"src\" }) });\n\tconst overwrite = (content) => !content?.trim().length;\n\tconst templateResolver = createTemplateResolver(frontend?.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(posix.join(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(sortRoutesForResolution);\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 [[\"params.ts\", params_default], [\"router.ts\", router_default$1]]) await deployLibFile(createPath.lib(file), template, { pageRoutes });\n\t};\n\treturn {\n\t\tviteConfig() {\n\t\t\tconst defaultPlugin = () => svelte();\n\t\t\tconst { plugin = defaultPlugin() } = typeof sourceFolder.config.frontend?.stack === \"object\" ? sourceFolder.config.frontend.stack : {};\n\t\t\treturn { plugins: [plugin] };\n\t\t},\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[\"svelte.ts\", svelte_default],\n\t\t\t\t[\"Layouts.svelte\", Layouts_default],\n\t\t\t\t[\"use.ts\", use_default],\n\t\t\t\t[\"pageSamples/styles.module.css\", styles_default],\n\t\t\t\t[\"pageSamples/welcome.svelte\", welcome_default$1],\n\t\t\t\t[\"pageSamples/page.svelte\", page_default$1],\n\t\t\t\t[\"pageSamples/404.svelte\", _404_default$1],\n\t\t\t\t...frontend?.tanstack?.query ? [\n\t\t\t\t\t[\"app/app.svelte\", app_default$1],\n\t\t\t\t\t[\"app/app-tsq.svelte\", app_tsq_default],\n\t\t\t\t\t[\"app/index.ts\", `export { default as AppProvider } from \"./app-tsq.svelte\";`],\n\t\t\t\t\t[\"query.ts\", query_default]\n\t\t\t\t] : [\n\t\t\t\t\t[\"app/app.svelte\", app_default$1],\n\t\t\t\t\t[\"app/app-tsq.svelte\", \"/** tanstack query disabled */\"],\n\t\t\t\t\t[\"app/index.ts\", `export { default as AppProvider } from \"./app.svelte\";`],\n\t\t\t\t\t[\"query.ts\", \"/** tanstack query disabled */\"]\n\t\t\t\t]\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.svelte\", _404_default],\n\t\t\t\t[\"components/Link.svelte\", Link_default],\n\t\t\t\t[\"app.svelte\", 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\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\tawait generateSrcFiles(entries.filter(createWatchedPageRouteEntriesFilter(event, [\"create\"])));\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\tvirtualModules() {\n\t\t\treturn frontend?.tanstack?.query ? [{\n\t\t\t\tspecifier: \"virtual:kosmo/tsq-client\",\n\t\t\t\tcsr: renderLibTpl(query_csr_default, {}),\n\t\t\t\tssr: renderLibTpl(query_ssr_default, {})\n\t\t\t}] : [];\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator({\n\tmeta: {\n\t\tname: \"Svelte\",\n\t\tslot: \"frontend\"\n\t},\n\tdependencies({ frontend }) {\n\t\treturn {\n\t\t\tsvelte: package_default.devDependencies.svelte,\n\t\t\t...frontend?.tanstack?.query ? { \"@tanstack/svelte-query\": package_default.devDependencies[\"@tanstack/svelte-query\"] } : {}\n\t\t};\n\t},\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { createWatchedApiRouteEntriesFilter, defineGenerator, defineGeneratorFactory, pathResolver, renderFactory } from \"@kosmojs/lib\";\nimport { RequestValidationTargets, TYPEBOX_MESSAGE_CODES } from \"@kosmojs/core\";\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/typebox-generator\",\n\tversion: \"0.3.0\",\n\tcacheVersion: \"1\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\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/typebox-generator\"\n\t},\n\tdependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"crc\": \"^4.3.2\",\n\t\t\"semver\": \"^7.8.5\"\n\t},\n\tdevDependencies: {\n\t\t\"@kosmojs/core-generator\": \"workspace:^\",\n\t\t\"@kosmojs/koa-generator\": \"workspace:^\",\n\t\t\"typebox\": \"^1.3.30\"\n\t}\n};\n//#endregion\n//#region src/templates/lib/@typebox/custom-types.ts?raw\nvar custom_types_default = \"import Type from \\\"typebox\\\";\\n\\n/**\\n * Custom types for JavaScript constructs that have no JSON Schema\\n * representation (Date, File, Blob, Buffer, ArrayBuffer).\\n *\\n * Each entry is a factory so every use site gets a fresh schema instance,\\n * matching the previous behaviour of `new TDate()` etc.\\n * */\\n\\nconst customType = <T>(\\n check: (value: unknown) => value is T,\\n message: string,\\n) => Type.Refine(Type.Unsafe<T>({}), check, () => message);\\n\\nexport const TDate = () => {\\n return customType(\\n (value): value is Date => value instanceof Date,\\n \\\"must be Date\\\",\\n );\\n};\\n\\nconst isFormidableFile = (value: unknown) => {\\n return value\\n ? typeof value === \\\"object\\\"\\n ? [\\n //\\n \\\"filepath\\\",\\n \\\"originalFilename\\\",\\n \\\"newFilename\\\",\\n \\\"mimetype\\\",\\n ].every((e) => e in value)\\n : false\\n : false;\\n};\\n\\nexport const TFile = () => {\\n return customType(\\n (value): value is File => value instanceof File || isFormidableFile(value),\\n \\\"must be File\\\",\\n );\\n};\\n\\nexport const TBlob = () => {\\n return customType(\\n (value): value is Blob => value instanceof Blob,\\n \\\"must be Blob\\\",\\n );\\n};\\n\\nexport const TBuffer = () => {\\n return customType(\\n (value): value is Buffer =>\\n typeof Buffer !== \\\"undefined\\\" && Buffer.isBuffer(value),\\n \\\"must be Buffer\\\",\\n );\\n};\\n\\nexport const TArrayBuffer = () => {\\n return customType(\\n (value): value is ArrayBuffer => value instanceof ArrayBuffer,\\n \\\"must be ArrayBuffer\\\",\\n );\\n};\\n\\nexport default {\\n Date: TDate(),\\n File: TFile(),\\n Blob: TBlob(),\\n Buffer: TBuffer(),\\n ArrayBuffer: 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 {\\n TYPEBOX_MESSAGE_CODES as MESSAGE_CODES,\\n type TypeboxValidationMessages,\\n type ValidationErrorEntry,\\n} from \\\"@kosmojs/core\\\";\\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 TypeboxValidationMessages, 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 TypeboxValidationMessages, 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 TypeboxValidationMessages;\\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 // 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 TypeboxValidationMessages> = {\\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 * A failed union of literals arrives as one `anyOf` error plus one `const` error per branch,\\n * all at the same instancePath.\\n * Collapse them into a single synthetic `enum` error so the message reflects the whole union.\\n * */\\n function collapseLiteralUnion(\\n fieldErrors: TValidationError[],\\n ): TValidationError[] {\\n const anyOfError = fieldErrors.find((e) => e.keyword === \\\"anyOf\\\");\\n if (!anyOfError) {\\n return fieldErrors;\\n }\\n const branchConsts = fieldErrors.filter((e) => {\\n return e.keyword === \\\"const\\\"\\n ? e.schemaPath.startsWith(`${anyOfError.schemaPath}/anyOf/`)\\n : false;\\n });\\n // bail unless EVERY sibling is a const branch of this anyOf -\\n // mixed unions (literal | object) keep their current behavior\\n if (\\n !branchConsts.length ||\\n fieldErrors.length !== branchConsts.length + 1\\n ) {\\n return fieldErrors;\\n }\\n return [\\n {\\n ...anyOfError,\\n keyword: \\\"enum\\\",\\n params: {\\n allowedValues: branchConsts.map(\\n (e) => (e.params as never)[\\\"allowedValue\\\"],\\n ),\\n },\\n },\\n ];\\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(collapseLiteralUnion(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}}: `{{typeboxSchema}}`,\\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((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, ...entry.validationDefinitions.flatMap((def) => {\n\t\t\t\treturn def.target === \"response\" ? def.variants : [def.schema];\n\t\t\t})].flatMap(({ resolvedType }) => {\n\t\t\t\treturn resolvedType ? [resolvedType] : [];\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\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(entries.filter(createWatchedApiRouteEntriesFilter(event, [\"create\", \"update\"])));\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* 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[TYPEBOX_MESSAGE_CODES.PROPERTY]: \"property\",\n\t[TYPEBOX_MESSAGE_CODES.PROPERTIES]: \"properties\",\n\t[TYPEBOX_MESSAGE_CODES.ALLOWED_VALUES]: \"the allowed values\",\n\t[TYPEBOX_MESSAGE_CODES.FOUND_N_DUPLICATES]: \" (found %d duplicate%s)\",\n\t[TYPEBOX_MESSAGE_CODES.VALIDATION_PASSED]: \"Validation Passed\",\n\t[TYPEBOX_MESSAGE_CODES.VALIDATION_FAILED_PREFIX]: \"\",\n\t[TYPEBOX_MESSAGE_CODES.ERROR_SUMMARY]: \"%d validation error%s found across %d field%s\",\n\t[TYPEBOX_MESSAGE_CODES.PLURAL_SUFFIX]: \"s\",\n\t[TYPEBOX_MESSAGE_CODES.FIRST]: \"first\",\n\t[TYPEBOX_MESSAGE_CODES.SECOND]: \"second\",\n\t[TYPEBOX_MESSAGE_CODES.THIRD]: \"third\",\n\t[TYPEBOX_MESSAGE_CODES.FOURTH]: \"fourth\",\n\t[TYPEBOX_MESSAGE_CODES.FIFTH]: \"fifth\",\n\t[TYPEBOX_MESSAGE_CODES.TYPE_INVALID]: \"must be %s\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_MIN_LENGTH]: \"must be at least %d character%s long\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_MAX_LENGTH]: \"must not exceed %d character%s\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_PATTERN]: \"must match the required pattern\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT]: `must match format \"%s\"`,\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT_EMAIL]: \"must be a valid email address\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT_DATE]: \"must be a valid date\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT_DATETIME]: \"must be a valid date-time\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT_TIME]: \"must be a valid time\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT_URI]: \"must be a valid URI\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT_URL]: \"must be a valid URL\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT_UUID]: \"must be a valid UUID\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT_IPV4]: \"must be a valid IPv4 address\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT_IPV6]: \"must be a valid IPv6 address\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT_HOSTNAME]: \"must be a valid hostname\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT_JSON_POINTER]: \"must be a valid JSON pointer\",\n\t[TYPEBOX_MESSAGE_CODES.STRING_FORMAT_REGEX]: \"must be a valid regular expression\",\n\t[TYPEBOX_MESSAGE_CODES.NUMBER_MINIMUM]: \"must be %s %s\",\n\t[TYPEBOX_MESSAGE_CODES.NUMBER_MAXIMUM]: \"must be %s %s\",\n\t[TYPEBOX_MESSAGE_CODES.NUMBER_EXCLUSIVE_MINIMUM]: \"must be %s %s\",\n\t[TYPEBOX_MESSAGE_CODES.NUMBER_EXCLUSIVE_MAXIMUM]: \"must be %s %s\",\n\t[TYPEBOX_MESSAGE_CODES.NUMBER_MULTIPLE_OF]: \"must be a multiple of %s\",\n\t[TYPEBOX_MESSAGE_CODES.ARRAY_MIN_ITEMS]: \"must have at least %d item%s\",\n\t[TYPEBOX_MESSAGE_CODES.ARRAY_MAX_ITEMS]: \"must not have more than %d item%s\",\n\t[TYPEBOX_MESSAGE_CODES.ARRAY_UNIQUE_ITEMS]: \"must not have duplicate items%s\",\n\t[TYPEBOX_MESSAGE_CODES.ARRAY_CONTAINS]: \"must contain at least %d valid item%s\",\n\t[TYPEBOX_MESSAGE_CODES.ARRAY_MIN_CONTAINS]: \"must contain at least %d item%s matching the criteria\",\n\t[TYPEBOX_MESSAGE_CODES.ARRAY_MAX_CONTAINS]: \"must contain no more than %d item%s matching the criteria\",\n\t[TYPEBOX_MESSAGE_CODES.ARRAY_PREFIX_ITEMS]: \"tuple structure is invalid\",\n\t[TYPEBOX_MESSAGE_CODES.ARRAY_ITEMS]: \"array items are invalid\",\n\t[TYPEBOX_MESSAGE_CODES.ARRAY_UNEVALUATED_ITEMS]: \"should not have unevaluated items\",\n\t[TYPEBOX_MESSAGE_CODES.TUPLE_MIN_ITEMS]: \"tuple must have at least %d element%s\",\n\t[TYPEBOX_MESSAGE_CODES.TUPLE_MAX_ITEMS]: \"tuple must not have more than %d element%s\",\n\t[TYPEBOX_MESSAGE_CODES.OBJECT_REQUIRED]: \"missing required %s: %s\",\n\t[TYPEBOX_MESSAGE_CODES.OBJECT_ADDITIONAL_PROPERTIES]: `should not have additional property \"%s\"`,\n\t[TYPEBOX_MESSAGE_CODES.OBJECT_MIN_PROPERTIES]: \"must have at least %d %s\",\n\t[TYPEBOX_MESSAGE_CODES.OBJECT_MAX_PROPERTIES]: \"must not have more than %d %s\",\n\t[TYPEBOX_MESSAGE_CODES.OBJECT_PROPERTY_NAMES]: `property name \"%s\" is invalid`,\n\t[TYPEBOX_MESSAGE_CODES.OBJECT_DEPENDENCIES]: \"requires %s when present\",\n\t[TYPEBOX_MESSAGE_CODES.OBJECT_UNEVALUATED_PROPERTIES]: `should not have unevaluated property \"%s\"`,\n\t[TYPEBOX_MESSAGE_CODES.ENUM_MISMATCH]: \"must be one of: %s\",\n\t[TYPEBOX_MESSAGE_CODES.CONST_MISMATCH]: \"must be equal to %s\",\n\t[TYPEBOX_MESSAGE_CODES.CONDITIONAL_IF]: \"does not match the conditional schema\",\n\t[TYPEBOX_MESSAGE_CODES.CONDITIONAL_THEN]: `does not satisfy the \"then\" schema condition`,\n\t[TYPEBOX_MESSAGE_CODES.CONDITIONAL_ELSE]: `does not satisfy the \"else\" schema condition`,\n\t[TYPEBOX_MESSAGE_CODES.COMPOSITION_ONE_OF]: \"must match exactly one schema (currently matches %d)\",\n\t[TYPEBOX_MESSAGE_CODES.COMPOSITION_ANY_OF]: \"must match at least one schema\",\n\t[TYPEBOX_MESSAGE_CODES.COMPOSITION_ALL_OF]: \"must match all schemas\",\n\t[TYPEBOX_MESSAGE_CODES.COMPOSITION_NOT]: \"must not match the schema\",\n\t[TYPEBOX_MESSAGE_CODES.CONTENT_DISCRIMINATOR]: `discriminator property \"%s\" has invalid value`,\n\t[TYPEBOX_MESSAGE_CODES.CONTENT_ENCODING]: `content encoding \"%s\" is invalid`,\n\t[TYPEBOX_MESSAGE_CODES.CONTENT_MEDIA_TYPE]: `content media type \"%s\" is invalid`,\n\t[TYPEBOX_MESSAGE_CODES.CUSTOM_RANGE]: \"must be within the range %s to %s\",\n\t[TYPEBOX_MESSAGE_CODES.CUSTOM_EXCLUSIVE_RANGE]: \"must be strictly within the range %s to %s\",\n\t[TYPEBOX_MESSAGE_CODES.CUSTOM_REGEXP]: \"must match the regular expression pattern\",\n\t[TYPEBOX_MESSAGE_CODES.CUSTOM_DYNAMIC_DEFAULTS]: \"failed to apply dynamic default value\",\n\t[TYPEBOX_MESSAGE_CODES.CUSTOM_SELECT]: \"does not match any of the selected cases\",\n\t[TYPEBOX_MESSAGE_CODES.CUSTOM_TRANSFORM]: \"transformation failed\",\n\t[TYPEBOX_MESSAGE_CODES.CUSTOM_UNIQUE_ITEM_PROPERTIES]: \"must have unique values for %s: %s\",\n\t[TYPEBOX_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[TYPEBOX_MESSAGE_CODES.FIRST],\n\t\t\t\t\tmessageMap[TYPEBOX_MESSAGE_CODES.SECOND],\n\t\t\t\t\tmessageMap[TYPEBOX_MESSAGE_CODES.THIRD],\n\t\t\t\t\tmessageMap[TYPEBOX_MESSAGE_CODES.FOURTH],\n\t\t\t\t\tmessageMap[TYPEBOX_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[TYPEBOX_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[TYPEBOX_MESSAGE_CODES.UNKNOWN], keyword);\n\t\tconst defaultError = {\n\t\t\tcode: TYPEBOX_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 \"type\": {\n\t\t\t\tconst p = params;\n\t\t\t\treturn {\n\t\t\t\t\tcode: TYPEBOX_MESSAGE_CODES.TYPE_INVALID,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.STRING_MIN_LENGTH,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.STRING_MAX_LENGTH,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.STRING_PATTERN,\n\t\t\t\tmessage: messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.STRING_FORMAT_EMAIL,\n\t\t\t\t\tdate: TYPEBOX_MESSAGE_CODES.STRING_FORMAT_DATE,\n\t\t\t\t\t\"date-time\": TYPEBOX_MESSAGE_CODES.STRING_FORMAT_DATETIME,\n\t\t\t\t\ttime: TYPEBOX_MESSAGE_CODES.STRING_FORMAT_TIME,\n\t\t\t\t\turi: TYPEBOX_MESSAGE_CODES.STRING_FORMAT_URI,\n\t\t\t\t\turl: TYPEBOX_MESSAGE_CODES.STRING_FORMAT_URL,\n\t\t\t\t\tuuid: TYPEBOX_MESSAGE_CODES.STRING_FORMAT_UUID,\n\t\t\t\t\tipv4: TYPEBOX_MESSAGE_CODES.STRING_FORMAT_IPV4,\n\t\t\t\t\tipv6: TYPEBOX_MESSAGE_CODES.STRING_FORMAT_IPV6,\n\t\t\t\t\thostname: TYPEBOX_MESSAGE_CODES.STRING_FORMAT_HOSTNAME,\n\t\t\t\t\t\"json-pointer\": TYPEBOX_MESSAGE_CODES.STRING_FORMAT_JSON_POINTER,\n\t\t\t\t\tregex: TYPEBOX_MESSAGE_CODES.STRING_FORMAT_REGEX\n\t\t\t\t};\n\t\t\t\tconst code = formatMap[p.format] || TYPEBOX_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[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.NUMBER_MINIMUM,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.NUMBER_MAXIMUM,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.NUMBER_EXCLUSIVE_MINIMUM,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.NUMBER_EXCLUSIVE_MAXIMUM,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.NUMBER_MULTIPLE_OF,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.TUPLE_MIN_ITEMS,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.ARRAY_MIN_ITEMS,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.TUPLE_MAX_ITEMS,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.ARRAY_MAX_ITEMS,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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[TYPEBOX_MESSAGE_CODES.FOUND_N_DUPLICATES], duplicateCount, pluralize(duplicateCount)) : \"\";\n\t\t\t\treturn {\n\t\t\t\t\tcode: TYPEBOX_MESSAGE_CODES.ARRAY_UNIQUE_ITEMS,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.ARRAY_CONTAINS,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.ARRAY_UNEVALUATED_ITEMS,\n\t\t\t\tmessage: messageMap[TYPEBOX_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[TYPEBOX_MESSAGE_CODES.PROPERTY] : messageMap[TYPEBOX_MESSAGE_CODES.PROPERTIES];\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcode: TYPEBOX_MESSAGE_CODES.OBJECT_REQUIRED,\n\t\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.OBJECT_REQUIRED,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_MESSAGE_CODES.OBJECT_REQUIRED], messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.OBJECT_ADDITIONAL_PROPERTIES,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.OBJECT_MIN_PROPERTIES,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_MESSAGE_CODES.OBJECT_MIN_PROPERTIES], p.limit, messageMap[p.limit === 1 ? TYPEBOX_MESSAGE_CODES.PROPERTY : TYPEBOX_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: TYPEBOX_MESSAGE_CODES.OBJECT_MAX_PROPERTIES,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_MESSAGE_CODES.OBJECT_MAX_PROPERTIES], p.limit, messageMap[p.limit === 1 ? TYPEBOX_MESSAGE_CODES.PROPERTY : TYPEBOX_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: TYPEBOX_MESSAGE_CODES.OBJECT_PROPERTY_NAMES,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.OBJECT_DEPENDENCIES,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.OBJECT_UNEVALUATED_PROPERTIES,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.ENUM_MISMATCH,\n\t\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.ENUM_MISMATCH,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_MESSAGE_CODES.ENUM_MISMATCH], messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.CONST_MISMATCH,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.CONDITIONAL_IF,\n\t\t\t\tmessage: messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.COMPOSITION_ONE_OF,\n\t\t\t\t\tmessage: format(messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.COMPOSITION_ANY_OF,\n\t\t\t\tmessage: messageMap[TYPEBOX_MESSAGE_CODES.COMPOSITION_ANY_OF]\n\t\t\t};\n\t\t\tcase \"not\": return {\n\t\t\t\tcode: TYPEBOX_MESSAGE_CODES.COMPOSITION_NOT,\n\t\t\t\tmessage: messageMap[TYPEBOX_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: TYPEBOX_MESSAGE_CODES.ARRAY_ITEMS,\n\t\t\t\t\tmessage: messageMap[TYPEBOX_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* A failed union of literals arrives as one `anyOf` error plus one `const` error per branch,\n\t* all at the same instancePath.\n\t* Collapse them into a single synthetic `enum` error so the message reflects the whole union.\n\t* */\n\tfunction collapseLiteralUnion(fieldErrors) {\n\t\tconst anyOfError = fieldErrors.find((e) => e.keyword === \"anyOf\");\n\t\tif (!anyOfError) return fieldErrors;\n\t\tconst branchConsts = fieldErrors.filter((e) => {\n\t\t\treturn e.keyword === \"const\" ? e.schemaPath.startsWith(`${anyOfError.schemaPath}/anyOf/`) : false;\n\t\t});\n\t\tif (!branchConsts.length || fieldErrors.length !== branchConsts.length + 1) return fieldErrors;\n\t\treturn [{\n\t\t\t...anyOfError,\n\t\t\tkeyword: \"enum\",\n\t\t\tparams: { allowedValues: branchConsts.map((e) => e.params[\"allowedValue\"]) }\n\t\t}];\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(collapseLiteralUnion(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[TYPEBOX_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[TYPEBOX_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[TYPEBOX_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({\n\tmeta: {\n\t\tname: \"TypeBox\",\n\t\tresolveTypes: true\n\t},\n\tdependencies: { typebox: package_default.devDependencies.typebox },\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default, errorHandlerFactory };\n\n//# sourceMappingURL=index.js.map","import { createWatchedPageRouteEntriesFilter, defineGenerator, defineGeneratorFactory, nestedRoutesFactory, pathResolver, renderFactory, sortRoutes } from \"@kosmojs/lib\";\nimport vitePlugin from \"@vitejs/plugin-vue\";\nimport { createTemplateResolver, defaults } from \"@kosmojs/core\";\nimport { routeRenderHelpers } from \"@kosmojs/core/generators\";\nimport { join } from \"node:path\";\nvar package_default = {\n\ttype: \"module\",\n\t\"private\": true,\n\tname: \"@kosmojs/vue-generator\",\n\tversion: \"0.3.0\",\n\tauthor: \"Slee Woo\",\n\tlicense: \"MIT\",\n\tfiles: [\"pkg/*\"],\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\tdependencies: {\n\t\t\"@kosmojs/core\": \"workspace:^\",\n\t\t\"@kosmojs/lib\": \"workspace:^\",\n\t\t\"@vitejs/plugin-vue\": \"^6.0.8\"\n\t},\n\tdevDependencies: {\n\t\t\"@tanstack/vue-query\": \"^5.102.8\",\n\t\t\"vue\": \"^3.5.42\",\n\t\t\"vue-router\": \"^5.3.1\"\n\t}\n};\n//#endregion\n//#region src/base.ts\nvar pathFactory = (pathTokens) => {\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 [token.parts[0].value];\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\" ? part.value : 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\tconst lastToken = pathTokens.at(-1);\n\t\t\tif (hasSplatParam(lastToken)) {\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\"✨ 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/app/app.ts?raw\nvar app_default$1 = \"import type { Plugin } from \\\"vue\\\";\\n\\nexport { default as AppProvider } from \\\"./provider.vue\\\";\\n\\nexport const appProvider: Plugin = {\\n install() {},\\n};\\n\";\n//#endregion\n//#region src/templates/lib/app/app-tsq.ts?raw\nvar app_tsq_default = \"import { VueQueryPlugin } from \\\"@tanstack/vue-query\\\";\\nimport type { Plugin } from \\\"vue\\\";\\n\\nimport { getQueryClient } from \\\"../query\\\";\\n\\nexport { default as AppProvider } from \\\"./provider.vue\\\";\\n\\nexport const appProvider: Plugin = {\\n install(app) {\\n app.use(VueQueryPlugin, { queryClient: getQueryClient() });\\n },\\n};\\n\";\n//#endregion\n//#region src/templates/lib/app/provider.vue?raw\nvar provider_default = \"<template>\\n <slot />\\n</template>\\n\";\n//#endregion\n//#region src/templates/lib/entry/client.hbs?raw\nvar client_default$1 = \"import type { App } from \\\"vue\\\";\\nimport type { RouterFactoryReturn } from \\\"@kosmojs/core\\\";\\nimport { 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 const hydrate = async (\\n resolver: () => RouterFactoryReturn<Promise<App>>,\\n root: HTMLElement,\\n) => {\\n const { component } = await resolver();\\n component.mount(root, true);\\n}\\n\\nexport const mount = async (\\n resolver: () => RouterFactoryReturn<Promise<App>>,\\n root: HTMLElement,\\n) => {\\n const { component } = await resolver();\\n component.mount(root);\\n}\\n\\nexport default clientRenderFactory();\\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 {{#if @root.lazyLoad}}\\n component: {{component}},\\n meta: { module: {{component}} },\\n {{else}}\\n component: {{component}}.default,\\n meta: { module: async () => {{component}} },\\n {{/if}}\\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 type { App } from \\\"vue\\\";\\n\\nimport {\\n renderToString as renderToStringOrig,\\n renderToWebStream,\\n} from \\\"vue/server-renderer\\\";\\n\\nimport type {\\n RenderToStringWrapper,\\n RenderToStreamWrapper,\\n RouterFactoryReturn,\\n SSRRenderWrapper,\\n} from \\\"@kosmojs/core\\\";\\n\\nimport { serverRenderFactory } from \\\"@kosmojs/core/generators\\\";\\n\\n{{#each pageEntries}}\\nimport * as {{id}} from \\\"{{ createImport 'pages' file }}\\\";\\n{{/each}}\\n\\nimport * as 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.default,\\n meta: { module: NotFound },\\n },\\n ];\\n}\\n\\nexport const baseHeaderTags = (): Array<string> => [];\\n\\nconst createHydrationScript = (\\n loaderData: Record<string, unknown>,\\n) => {\\n return loaderData\\n ? `<script>\\n window.__KOSMO_HYDRATION_DATA__ = JSON.parse(\\n ${JSON.stringify(JSON.stringify(loaderData))}\\n );\\n <\\/script>`\\n : undefined;\\n};\\n\\nexport const renderWrapper: SSRRenderWrapper = (_context, render) => render();\\n\\nexport const renderToString: RenderToStringWrapper<\\n () => RouterFactoryReturn<\\n Promise<App>,\\n { loaderData: Record<string, unknown> }\\n >,\\n Parameters<typeof renderToStringOrig>[1]\\n> = async (resolver, { headerTags = [], context = {} } = {}) => {\\n const { component, loaderData } = await resolver();\\n const html = await renderToStringOrig(component, context);\\n const script = createHydrationScript(loaderData);\\n return {\\n head: [...headerTags, ...script ? [script] : []].join(\\\"\\\\n\\\"),\\n html,\\n }\\n}\\n\\nexport const renderToStream: RenderToStreamWrapper<\\n () => RouterFactoryReturn<\\n Promise<App>,\\n { loaderData: Record<string, unknown> }\\n >,\\n Parameters<typeof renderToWebStream>[1]\\n> = async (resolver, { headerTags = [], context = {} } = {}) => {\\n const { component, loaderData } = await resolver();\\n\\n /**\\n * loaderData is fully resolved before streaming starts, so the hydration\\n * script ships in head - same as string mode. Head is written with the shell,\\n * guaranteeing delivery even when the stream errors mid-body.\\n * */\\n const script = createHydrationScript(loaderData);\\n\\n return {\\n head: [...headerTags, ...script ? [script] : []].join(\\\"\\\\n\\\"),\\n html: renderToWebStream(component, context),\\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\\ndeclare module \\\"virtual:kosmo/tsq-client\\\" {\\n import type { QueryClient, QueryClientConfig } from \\\"@tanstack/vue-query\\\";\\n export const createQueryClient: (options?: QueryClientConfig) => QueryClient;\\n export const getQueryClient: () => QueryClient;\\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/query.ts?raw\nvar query_default = \"export * from \\\"virtual:kosmo/tsq-client\\\";\\n\";\n//#endregion\n//#region src/templates/lib/query-csr.js?raw\nvar query_csr_default = \"import { QueryClient } from \\\"@tanstack/vue-query\\\";\\n\\nlet client = undefined\\n\\nexport const createQueryClient = (options) => {\\n client = new QueryClient(options);\\n return client;\\n};\\n\\nexport const getQueryClient = () => {\\n if (!client) {\\n client = new QueryClient();\\n }\\n return client;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/query-ssr.js?raw\nvar query_ssr_default = \"import { QueryClient } from \\\"@tanstack/vue-query\\\";\\n\\nimport { store } from \\\"{{ createImport 'libCore' 'ssr' }}\\\";\\n\\nexport const createQueryClient = (options) => {\\n const client = new QueryClient(options);\\n const ctx = store?.getStore();\\n if (ctx) {\\n ctx.tsqClient = client;\\n }\\n return client;\\n};\\n\\nexport const getQueryClient = () => {\\n const ctx = store?.getStore();\\n if (!ctx) {\\n throw new Error(\\\"getQueryClient(): called outside an SSR request scope\\\");\\n }\\n if (!ctx.tsqClient) {\\n ctx.tsqClient = new QueryClient();\\n }\\n return ctx.tsqClient;\\n};\\n\";\n//#endregion\n//#region src/templates/lib/router.ts?raw\nvar router_default$1 = \"import {\\n type App,\\n type Component,\\n createApp,\\n createSSRApp,\\n type Plugin,\\n} from \\\"vue\\\";\\nimport {\\n createMemoryHistory,\\n createRouter,\\n createWebHistory,\\n type RouteRecordRaw,\\n type Router,\\n} from \\\"vue-router\\\";\\n\\nimport type { RouterFactoryReturn } from \\\"@kosmojs/core\\\";\\nimport { join } from \\\"@kosmojs/core/fetch\\\";\\nimport { createRouterFactory } from \\\"@kosmojs/core/generators\\\";\\n\\nimport { base } from \\\"{{ createImport 'libCore' }}\\\";\\n\\nexport type RouterWithLoaderData = Router & {\\n __loaderData: Record<string, unknown>;\\n};\\n\\nconst runLoader = async (\\n key: string,\\n route: unknown,\\n fetcher: (r: never) => Promise<unknown>,\\n) => {\\n if (typeof window === \\\"undefined\\\" || !window.__KOSMO_HYDRATION_DATA__) {\\n return fetcher(route as never);\\n }\\n return key in window.__KOSMO_HYDRATION_DATA__\\n ? window.__KOSMO_HYDRATION_DATA__[key]\\n : fetcher(route as never);\\n};\\n\\n/**\\n * Installs a beforeResolve guard that runs the matched chain's loaders\\n * (layouts + leaf) before navigation commits, so components read data\\n * synchronously at render time - no onServerPrefetch, no Suspense.\\n * */\\nconst installLoaderGuard = (router: RouterWithLoaderData) => {\\n router.__loaderData = {};\\n\\n router.beforeResolve(async (to) => {\\n const data: RouterWithLoaderData[\\\"__loaderData\\\"] = {};\\n\\n for (const { name, meta } of to.matched) {\\n if (!name || typeof name !== \\\"string\\\" || !meta.module) {\\n continue;\\n }\\n\\n const { loader } =\\n typeof meta.module === \\\"function\\\" //\\n ? await meta.module()\\n : {};\\n\\n if (loader) {\\n await runLoader(name, to, loader as never).then((v) => {\\n // undefined does not survive JSON.stringify, thus null\\n data[name] = v ?? null;\\n });\\n }\\n }\\n\\n router.__loaderData = data;\\n\\n // consumed: clear so client navigations refetch, and click-handlers don't reuse\\n if (typeof window !== \\\"undefined\\\") {\\n window.__KOSMO_HYDRATION_DATA__ = undefined;\\n }\\n });\\n};\\n\\nexport const createRouters = (\\n routes: Array<RouteRecordRaw>,\\n {\\n app,\\n use,\\n }: {\\n app: Component;\\n use?: Array<[plugin: Plugin, options: object | undefined]>;\\n },\\n): {\\n clientRouter: () => RouterFactoryReturn<Promise<App>>;\\n serverRouter: (\\n url: URL,\\n ) => RouterFactoryReturn<\\n Promise<App>,\\n { loaderData: Record<string, unknown> }\\n >;\\n} => {\\n return {\\n async clientRouter() {\\n const component = createApp(app);\\n\\n const router = createRouter({\\n history: createWebHistory(base),\\n routes,\\n strict: true,\\n });\\n\\n installLoaderGuard(router as never);\\n\\n component.use(router);\\n\\n if (Array.isArray(use)) {\\n for (const [plugin, options] of use) {\\n component.use(plugin, options);\\n }\\n }\\n\\n return { component };\\n },\\n\\n async serverRouter(url) {\\n const component = createSSRApp(app);\\n\\n const router = createRouter({\\n history: createMemoryHistory(base),\\n routes,\\n strict: true,\\n }) as RouterWithLoaderData;\\n\\n // must be installed before push - the initial navigation\\n // would otherwise skip the guard\\n installLoaderGuard(router);\\n\\n let { pathname } = url;\\n\\n if ((base as string) !== \\\"/\\\") {\\n // strip the base from pushed paths\\n if (pathname === base) {\\n pathname = \\\"/\\\";\\n } else if (pathname.startsWith(join(base, \\\"/\\\"))) {\\n pathname = pathname.slice(base.length);\\n }\\n }\\n\\n await router.push(pathname + url.search);\\n\\n await router.isReady();\\n\\n component.use(router);\\n\\n if (Array.isArray(use)) {\\n for (const [plugin, options] of use) {\\n component.use(plugin, options);\\n }\\n }\\n\\n return { component, loaderData: router.__loaderData };\\n },\\n };\\n};\\n\\nexport default createRouterFactory<\\n RouteRecordRaw,\\n Promise<App>,\\n { server: { loaderData: Record<string, unknown> } }\\n>();\\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/lib/use.ts?raw\nvar use_default = \"import { useRoute, useRouter } from \\\"vue-router\\\";\\n\\nimport type { RouterWithLoaderData } from \\\"./router\\\";\\n\\n/**\\n * Reads loader data for the current page or one of its layouts.\\n * Without a key, returns the page's own data.\\n * For a layout, pass its path-qualified name (e.g. \\\"dashboard/layout\\\") -\\n * a hook can't tell which layout it runs in.\\n * */\\nexport const useLoaderData = <T>(key?: string): T | undefined => {\\n const router = useRouter() as RouterWithLoaderData;\\n const route = useRoute();\\n return router.__loaderData?.[key || (route.name as string)] as T;\\n};\\n\";\n//#endregion\n//#region src/templates/src/app.vue?raw\nvar app_default = \"<script setup lang=\\\"ts\\\">\\nimport { AppProvider } from \\\"_/app\\\";\\n<\\/script>\\n\\n<template>\\n <AppProvider>\\n <RouterView />\\n </AppProvider>\\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\\ntype 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]?.path(params as never, props.query, { prefix: false });\\n})\\n\\nconst linkProps = computed(() => ({\\n ...(props.replace !== undefined ? { replace: props.replace } : {}),\\n ...(props.activeClass !== undefined ? { activeClass: props.activeClass } : {}),\\n ...(props.exactActiveClass !== undefined ? { exactActiveClass: props.exactActiveClass } : {}),\\n}))\\n<\\/script>\\n\\n<template>\\n <RouterLink :to=\\\"href\\\" v-bind=\\\"linkProps\\\">\\n <slot />\\n </RouterLink>\\n</template>\\n\";\n//#endregion\n//#region src/templates/src/entry/client.ts?raw\nvar client_default = \"import renderFactory, {\\n createRoutes,\\n hydrate,\\n mount,\\n} from \\\"{{ createImport 'libEntry' 'client' }}\\\";\\n\\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 hydrate() {\\n return hydrate(() => clientRouter(), root);\\n },\\n mount() {\\n return mount(() => clientRouter(), root);\\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 renderFactory, {\\n createRoutes,\\n renderToStream,\\n renderToString,\\n} from \\\"{{ createImport 'libEntry' 'server' }}\\\";\\n\\nimport routerFactory from \\\"../router\\\";\\n\\nconst routes = createRoutes();\\nconst { serverRouter } = routerFactory(routes);\\n\\nexport default renderFactory(() => {\\n return {\\n renderToString(url, { assets }) {\\n return renderToString(\\n () => serverRouter(url),\\n { headerTags: assets.map(({ tag }) => tag) },\\n );\\n },\\n renderToStream(url, { assets }) {\\n return renderToStream(\\n () => serverRouter(url),\\n { headerTags: assets.map(({ tag }) => tag) },\\n );\\n },\\n };\\n});\\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 routerFactory, { createRouters } from \\\"{{ createImport 'lib' 'router' }}\\\";\\nimport { appProvider } from \\\"{{ createImport 'lib' 'app' }}\\\";\\n\\nimport app from \\\"./app.vue\\\";\\n\\nexport default routerFactory((routes) => {\\n const { clientRouter, serverRouter } = createRouters(routes, {\\n app,\\n use: [[appProvider, undefined]],\\n });\\n return {\\n clientRouter() {\\n return clientRouter()\\n },\\n serverRouter(url) {\\n return serverRouter(url)\\n },\\n };\\n});\\n\";\n//#endregion\n//#region src/factory.ts\nvar factory_default = defineGeneratorFactory((sourceFolder) => {\n\tconst { frontend } = sourceFolder.config;\n\tconst { createPath, createImportHelpers } = pathResolver(sourceFolder);\n\tconst { render: renderLibTpl, 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(frontend?.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\tlazyLoad: file === \"client.ts\"\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\tviteConfig() {\n\t\t\tconst defaultPlugin = () => vitePlugin();\n\t\t\tconst { plugin = defaultPlugin() } = typeof sourceFolder.config.frontend?.stack === \"object\" ? sourceFolder.config.frontend.stack : {};\n\t\t\treturn { plugins: [plugin] };\n\t\t},\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[\"use.ts\", use_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\t[\"app/provider.vue\", provider_default],\n\t\t\t\t...frontend?.tanstack?.query ? [[\"app/index.ts\", app_tsq_default], [\"query.ts\", query_default]] : [[\"app/index.ts\", app_default$1], [\"query.ts\", \"/** tanstack query disabled */\"]]\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\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\tawait generateSrcFiles(entries.filter(createWatchedPageRouteEntriesFilter(event, [\"create\"])));\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\tvirtualModules() {\n\t\t\treturn frontend?.tanstack?.query ? [{\n\t\t\t\tspecifier: \"virtual:kosmo/tsq-client\",\n\t\t\t\tcsr: renderLibTpl(query_csr_default, {}),\n\t\t\t\tssr: renderLibTpl(query_ssr_default, {})\n\t\t\t}] : [];\n\t\t}\n\t};\n});\n//#endregion\n//#region src/index.ts\nvar src_default = defineGenerator({\n\tmeta: {\n\t\tname: \"Vue\",\n\t\tslot: \"frontend\",\n\t\tjsxImportSource: \"vue\"\n\t},\n\tdependencies({ frontend }) {\n\t\treturn {\n\t\t\tvue: package_default.devDependencies.vue,\n\t\t\t\"vue-router\": package_default.devDependencies[\"vue-router\"],\n\t\t\t...frontend?.tanstack?.query ? { \"@tanstack/vue-query\": package_default.devDependencies[\"@tanstack/vue-query\"] } : {}\n\t\t};\n\t},\n\tfactory: factory_default\n});\n//#endregion\nexport { src_default as default };\n\n//# sourceMappingURL=index.js.map","import { styleText } from \"node:util\";\n\nimport type {\n FolderConfig,\n GeneratorSignature,\n SourceFolder,\n} from \"@kosmojs/core\";\nimport { containsPathTraversalPatterns } from \"@kosmojs/lib\";\n\nimport coreGenerator from \"@kosmojs/core-generator\";\nimport fetchGenerator from \"@kosmojs/fetch-generator\";\nimport h3Generator from \"@kosmojs/h3-generator\";\nimport honoGenerator from \"@kosmojs/hono-generator\";\nimport koaGenerator from \"@kosmojs/koa-generator\";\nimport mdxGenerator from \"@kosmojs/mdx-generator\";\nimport openapiGenerator from \"@kosmojs/openapi-generator\";\nimport reactGenerator from \"@kosmojs/react-generator\";\nimport solidGenerator from \"@kosmojs/solid-generator\";\nimport ssgGenerator from \"@kosmojs/ssg-generator\";\nimport ssrGenerator from \"@kosmojs/ssr-generator\";\nimport svelteGenerator from \"@kosmojs/svelte-generator\";\nimport typeboxGenerator from \"@kosmojs/typebox-generator\";\nimport vueGenerator from \"@kosmojs/vue-generator\";\n\nexport {\n coreGenerator,\n fetchGenerator,\n h3Generator,\n honoGenerator,\n koaGenerator,\n mdxGenerator,\n openapiGenerator,\n reactGenerator,\n solidGenerator,\n ssgGenerator,\n ssrGenerator,\n svelteGenerator,\n typeboxGenerator,\n vueGenerator,\n};\n\nconst frontendGenerators = {\n react: reactGenerator,\n solid: solidGenerator,\n vue: vueGenerator,\n svelte: svelteGenerator,\n mdx: mdxGenerator,\n};\n\nconst backendGenerators = {\n hono: honoGenerator,\n h3: h3Generator,\n koa: koaGenerator,\n};\n\nexport const defineConfig = (\n origConfig: FolderConfig,\n): SourceFolder[\"config\"] => {\n const config = { ...origConfig };\n const { frontend, backend, validation } = config;\n\n for (const key of [\"frontend\", \"backend\"] as const) {\n if (config[key]) {\n const { base } = config[key];\n let error: string | undefined;\n\n if (!base?.trim()) {\n error = `no base or invalid value provided`;\n } else if (!base.startsWith(\"/\")) {\n error = `base should start with a slash`;\n } else if (containsPathTraversalPatterns(base)) {\n error = `base should not contain path traversal patterns`;\n }\n\n if (error) {\n throw new Error(styleText([\"red\"], `Invalid ${key} config - ${error}`));\n }\n\n config[key].base = base.replace(/\\/+/g, \"/\").replace(/(.+)\\/$/, \"$1\");\n }\n }\n\n const generators: Array<GeneratorSignature> = [];\n\n // core generator should run first\n generators.push(coreGenerator());\n\n // then backend-related generators\n if (backend) {\n const stack =\n typeof backend.stack === \"object\" //\n ? backend.stack.name\n : backend.stack;\n\n if (backend.generator) {\n generators.push(backend.generator);\n } else {\n generators.push(backendGenerators[stack](backend as never) as never);\n }\n\n // validation is relevent only if backend enabled\n if (validation) {\n if (validation === true) {\n generators.push(typeboxGenerator());\n } else if (\"generator\" in validation) {\n generators.push(validation.generator);\n } else {\n generators.push(typeboxGenerator(validation as never));\n }\n }\n\n if (backend.openapi) {\n \"generator\" in backend.openapi\n ? generators.push(backend.openapi.generator as never)\n : generators.push(openapiGenerator(backend.openapi as never) as never);\n }\n }\n\n // then frontend-related generators\n if (frontend) {\n const stack =\n typeof frontend.stack === \"object\" //\n ? frontend.stack.name\n : frontend.stack;\n\n // fetch generator should run before frontend\n if (frontend.fetch) {\n if (frontend.fetch === true) {\n generators.push(fetchGenerator());\n } else if (frontend.fetch.generator) {\n generators.push(frontend.fetch.generator);\n }\n }\n\n if (frontend.generator) {\n generators.push(frontend.generator);\n } else {\n generators.push(frontendGenerators[stack](frontend as never) as never);\n }\n\n if (frontend.ssr) {\n if (frontend.ssr === true) {\n generators.push(ssrGenerator());\n } else if (\"generator\" in frontend.ssr) {\n generators.push(frontend.ssr.generator);\n } else {\n generators.push(ssrGenerator(frontend.ssr as never));\n }\n }\n\n if (frontend.ssg) {\n if (frontend.ssg === true) {\n generators.push(ssgGenerator());\n } else if (frontend.ssg.generator) {\n generators.push(frontend.ssg.generator);\n }\n }\n }\n\n return {\n ...config,\n generators,\n };\n};\n"],"x_google_ignoreList":[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24],"mappings":"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"}
|