@kosmojs/dev 0.2.9 → 0.2.10

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/pkg/index.js CHANGED
@@ -1,4 +1,116 @@
1
- import{join as e,resolve as t}from"node:path";import{styleText as n}from"node:util";import{DEFAULT_APIBASE as r,RequestBodyTargets as i,RequestValidationTargets as a,createRouteResolver as o,createTemplateResolver as s,defaults as c}from"@kosmojs/core";import{createHonoPattern as l,createPathPattern as u,defineGenerator as d,defineGeneratorFactory as f,mergeConfigs as p,nestedRoutesFactory as m,pathResolver as h,pathTokensFactory as g,renderFactory as _,renderToFile as ee,sortRoutes as v,spinnerFactory as te,vitePlugins as y}from"@kosmojs/lib";import{routeRenderHelpers as b}from"@kosmojs/core/generators";import x from"crc/crc32";import ne from"@mdx-js/rollup";import{build as S,createFilter as C}from"vite";import re from"yaml";import{parse as ie}from"path-to-regexp";import ae from"typebox";import oe from"@vitejs/plugin-react";import w from"vite-plugin-solid";import{access as se,constants as ce,cp as T,mkdir as le,rm as E,writeFile as ue}from"node:fs/promises";import{svelte as de}from"@sveltejs/vite-plugin-svelte";import fe from"@vitejs/plugin-vue";var D={type:`module`,private:!0,name:`@kosmojs/fetch-generator`,version:`0.2.9`,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:{"path-to-regexp":`^8.4.2`}},O=`{{#each routes}}
1
+ import{join as e,resolve as t}from"node:path";import{styleText as n}from"node:util";import{DEFAULT_APIBASE as r,RequestBodyTargets as i,RequestValidationTargets as a,createRouteResolver as o,createTemplateResolver as s,defaults as c}from"@kosmojs/core";import{createHonoPattern as l,createPathPattern as u,defineGenerator as d,defineGeneratorFactory as f,mergeConfigs as p,nestedRoutesFactory as m,pathResolver as h,pathTokensFactory as g,renderFactory as _,renderToFile as ee,sortRoutes as v,spinnerFactory as te,vitePlugins as y}from"@kosmojs/lib";import{routeRenderHelpers as b}from"@kosmojs/core/generators";import x from"crc/crc32";import ne from"@mdx-js/rollup";import{build as S,createFilter as C}from"vite";import re from"yaml";import{parse as ie}from"path-to-regexp";import ae from"typebox";import oe from"@vitejs/plugin-react";import w from"vite-plugin-solid";import{access as se,constants as ce,cp as T,mkdir as le,rm as E,writeFile as ue}from"node:fs/promises";import{svelte as de}from"@sveltejs/vite-plugin-svelte";import fe from"@vitejs/plugin-vue";var D={type:`module`,private:!0,name:`@kosmojs/fetch-generator`,version:`0.2.10`,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:{"path-to-regexp":`^8.4.2`}},O=`import { compile } from "path-to-regexp";
2
+
3
+ import type { ApiRouteSerialized, ValidationTarget } from "@kosmojs/core";
4
+ import type { HTTPMethod } from "@kosmojs/core/api";
5
+ import { createHost, type HostOpt, join, stringify } from "@kosmojs/core/fetch";
6
+
7
+ export * from "./transport";
8
+
9
+ export const fetchHelpers = <ParamsT extends readonly unknown[]>(
10
+ basePath: string,
11
+ route: ApiRouteSerialized,
12
+ ) => {
13
+ const toPath = compile(route.pathPattern);
14
+
15
+ const maybeNumber = (val: unknown) => {
16
+ if (val === undefined || val === null) {
17
+ return val;
18
+ }
19
+ const n = Number(val);
20
+ return Number.isFinite(n) ? n : val;
21
+ };
22
+
23
+ const paramsMapper = (params: ParamsT, opt?: { coerceNumbers?: boolean }) => {
24
+ return route.params.reduce<Record<string, unknown>>((map, name, i) => {
25
+ const coerceNumbers = opt?.coerceNumbers
26
+ ? route.numericProperties.params.includes(name)
27
+ : false;
28
+ if (Array.isArray(params[i])) {
29
+ map[name] = coerceNumbers
30
+ ? params[i].map((v) => maybeNumber(v))
31
+ : params[i].map(String);
32
+ } else if (params[i] !== undefined) {
33
+ map[name] = coerceNumbers ? maybeNumber(params[i]) : String(params[i]);
34
+ }
35
+ return map;
36
+ }, {});
37
+ };
38
+
39
+ const parametrize = (params: ParamsT) => {
40
+ try {
41
+ return toPath(paramsMapper(params) as never);
42
+ } catch (error) {
43
+ console.error(\`❗ERROR: Failed building path for \${route.name}\`);
44
+ throw error;
45
+ }
46
+ };
47
+
48
+ const base = (params: ParamsT, query?: Record<string, unknown>) => {
49
+ const path = join("/", parametrize(params));
50
+ return query ? [path, stringify(query)].join("?") : path;
51
+ };
52
+
53
+ const path = (params: ParamsT, query?: Record<string, unknown>) => {
54
+ return join(basePath, base(params, query));
55
+ };
56
+
57
+ const href = (
58
+ host: HostOpt,
59
+ params: ParamsT,
60
+ query?: Record<string, unknown>,
61
+ ) => {
62
+ return createHost(host) + path(params, query);
63
+ };
64
+
65
+ const payloadResolver = <T>(
66
+ payload: Record<ValidationTarget, T> | undefined,
67
+ target: ValidationTarget,
68
+ method: HTTPMethod,
69
+ ) => {
70
+ const data = payload?.[target];
71
+
72
+ if (target === "query") {
73
+ return Object.fromEntries(
74
+ Object.entries({ ...data }).map(([k, v]) => {
75
+ return [
76
+ k,
77
+ route.numericProperties.query[method]?.includes(k)
78
+ ? Array.isArray(v)
79
+ ? v.map((v) => maybeNumber(v))
80
+ : maybeNumber(v)
81
+ : v,
82
+ ];
83
+ }),
84
+ );
85
+ }
86
+
87
+ if (data instanceof FormData) {
88
+ return [...data].reduce<
89
+ Record<string, FormDataEntryValue | Array<FormDataEntryValue>>
90
+ >((map, [key, val]) => {
91
+ if (key in map) {
92
+ map[key] = [map[key]].flat().concat(val);
93
+ } else {
94
+ map[key] = val;
95
+ }
96
+ return map;
97
+ }, {}) as T;
98
+ }
99
+
100
+ return data;
101
+ };
102
+
103
+ return {
104
+ paramsMapper,
105
+ parametrize,
106
+ base,
107
+ path,
108
+ href,
109
+ payloadResolver,
110
+ };
111
+ };
112
+ `,k=`export const transport = undefined;
113
+ `,A=`{{#each routes}}
2
114
  import {{id}} from "{{ createImport 'libApi' name 'fetch' }}";
3
115
  {{/each}}
4
116
 
@@ -16,14 +128,10 @@ export default {
16
128
  {{/each}}
17
129
  {{/each}}
18
130
  }
19
- `,k=`import fetchFactory, {
20
- join,
21
- stringify,
22
- payloadResolver,
23
- } from "@kosmojs/core/fetch";
131
+ `,j=`import fetchFactory, { join, stringify } from "@kosmojs/core/fetch";
24
132
 
25
133
  import { base, apiBase, apiRouteMap } from "{{ createImport 'libCore' }}";
26
- import { transport } from "{{ createImport 'lib' '@fetch' }}";
134
+ import { transport, fetchHelpers } from "{{ createImport 'lib' '@fetch' }}";
27
135
 
28
136
  import {
29
137
  type MaybeWrapped,
@@ -60,9 +168,13 @@ export type ResponseT = {
60
168
  const {
61
169
  paramsMapper,
62
170
  parametrize,
171
+ payloadResolver,
63
172
  path,
64
173
  href,
65
- } = apiRouteMap["{{route.name}}"];
174
+ } = fetchHelpers<[{{serializeParamsTupleElements route}}]>(
175
+ apiBase,
176
+ apiRouteMap["{{route.name}}"],
177
+ );
66
178
 
67
179
  const fetchApi = fetchFactory(
68
180
  join(base, apiBase),
@@ -99,12 +211,14 @@ export const {{method}} = (
99
211
  // validate only on client, skip double validation in SSR mode
100
212
  if (!import.meta.env.SSR) {
101
213
  if (validationSchemas.params) {
102
- validationSchemas.params.validate(paramsMapper(params as never));
214
+ validationSchemas.params.validate(
215
+ paramsMapper(params as never, { coerceNumbers: true }),
216
+ );
103
217
  }
104
218
  {{#each ../payloadTypes}}
105
219
  if (validationSchemas.{{target}}?.{{../method}}) {
106
220
  validationSchemas.{{target}}.{{../method}}.validate(
107
- payloadResolver(payload, "{{target}}")
221
+ payloadResolver(payload, "{{target}}", "{{../method}}"),
108
222
  );
109
223
  }
110
224
  {{/each}}
@@ -121,9 +235,9 @@ export default {
121
235
  href,
122
236
  validationSchemas,
123
237
  };
124
- `,A=`export type MaybeWrapped<T> = T;
238
+ `,M=`export type MaybeWrapped<T> = T;
125
239
  export const unwrap = <T>(data: T) => data;
126
- `,j=f(e=>{let{createPath:t,createImportHelpers:n}=h(e),{renderToFile:r}=_({helpers:{...n({origin:`lib`}),...b()}}),i=async(e,n)=>{let i=e.flatMap(({kind:e,entry:t})=>e===`apiRoute`?[t]:[]).sort(v);await r(t.lib(`fetch.ts`),O,{routes:i});for(let{kind:e,entry:i}of n)if(e===`apiRoute`){let e=[];for(let t of i.validationDefinitions)if(t.target===`response`)for(let{id:n,body:r,resolvedType:i}of t.variants)r&&e.push({id:n,target:t.target,method:t.method,resolvedType:i});else{let{id:n,resolvedType:r}=t.schema;e.push({id:n,target:t.target,method:t.method,resolvedType:r})}let n=i.methods.map(t=>({method:t,responseType:e.find(e=>e.target===`response`&&e.method===t)})),o=Object.entries(e.reduce((e,{id:t,target:n,method:r,resolvedType:i})=>{if([`headers`,`cookies`,`response`].includes(n))return e;let a=`${n.replace(/^./,e=>e.toUpperCase())}T`;return e[a]||(e[a]=[]),e[a].push({id:t,target:n,method:r,resolvedType:i}),e},{})).map(([e,t])=>({name:e,types:t,target:t[0].target})),s=Object.keys(a).map(e=>({target:e,payloadType:o.find(t=>t.target===e)})),c=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 r(t.libApi(i.name,`fetch.ts`),k,{route:i,validationTypes:e,routeMethods:n,payloadTypes:o,payloadTargets:s,responseTypes:c})}};return{async start(){for(let[e,n]of[[`unwrap.ts`,A],[`@fetch.ts`,`export const transport = undefined;`]])await r(t.lib(e),n,{})},async watch(e,t){await i(e,t?e.filter(({kind:e,entry:n})=>t.kind===`update`&&e===`apiRoute`&&n.fileFullpath===t.file):e)},async build(e){await i(e,e)},async ssrBuild(){for(let[e,n]of[[`@fetch.ts`,`export { transport } from "${c.libPrefix}/@ssr/fetch";`]])await r(t.lib(e),n,{})}}}),M=d({meta:{name:`Fetch`,slot:`fetch`},dependencies:{"path-to-regexp":D.devDependencies[`path-to-regexp`]},factory:j}),N={type:`module`,private:!0,name:`@kosmojs/hono-generator`,version:`0.2.9`,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.0`,hono:`^4.13.0`,"path-to-regexp":`^8.4.2`,vite:`^8.2.0`}},P=`import { Hono } from "hono";
240
+ `,N=f(e=>{let{createPath:t,createImportHelpers:n}=h(e),{renderToFile:r}=_({helpers:{...n({origin:`lib`}),...b()}}),i=async(e,n)=>{let i=e.flatMap(({kind:e,entry:t})=>e===`apiRoute`?[t]:[]).sort(v);await r(t.lib(`fetch.ts`),A,{routes:i});for(let{kind:e,entry:i}of n)if(e===`apiRoute`){let e=[];for(let t of i.validationDefinitions)if(t.target===`response`)for(let{id:n,body:r,resolvedType:i}of t.variants)r&&e.push({id:n,target:t.target,method:t.method,resolvedType:i});else{let{id:n,resolvedType:r}=t.schema;e.push({id:n,target:t.target,method:t.method,resolvedType:r})}let n=i.methods.map(t=>({method:t,responseType:e.find(e=>e.target===`response`&&e.method===t)})),o=Object.entries(e.reduce((e,{id:t,target:n,method:r,resolvedType:i})=>{if([`headers`,`cookies`,`response`].includes(n))return e;let a=`${n.replace(/^./,e=>e.toUpperCase())}T`;return e[a]||(e[a]=[]),e[a].push({id:t,target:n,method:r,resolvedType:i}),e},{})).map(([e,t])=>({name:e,types:t,target:t[0].target})),s=Object.keys(a).map(e=>({target:e,payloadType:o.find(t=>t.target===e)})),c=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 r(t.libApi(i.name,`fetch.ts`),j,{route:i,validationTypes:e,routeMethods:n,payloadTypes:o,payloadTargets:s,responseTypes:c})}};return{async start(){for(let[e,n]of[[`unwrap.ts`,M],[`@fetch/transport.ts`,k],[`@fetch/index.ts`,O]])await r(t.lib(e),n,{})},async watch(e,t){await i(e,t?e.filter(({kind:e,entry:n})=>t.kind===`update`&&e===`apiRoute`&&n.fileFullpath===t.file):e)},async build(e){await i(e,e)},async ssrBuild(){for(let[e,n]of[[`@fetch/transport.ts`,`export { transport } from "${c.libPrefix}/@ssr/fetch";`]])await r(t.lib(e),n,{})}}}),P=d({meta:{name:`Fetch`,slot:`fetch`},dependencies:{"path-to-regexp":D.devDependencies[`path-to-regexp`]},factory:N}),F={type:`module`,private:!0,name:`@kosmojs/hono-generator`,version:`0.2.10`,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.0`,hono:`^4.13.1`,"path-to-regexp":`^8.4.2`,vite:`^8.2.1`}},I=`import { Hono } from "hono";
127
241
 
128
242
  import type { AppFactory } from "@kosmojs/core/api";
129
243
 
@@ -144,10 +258,10 @@ export const appFactory: AppFactory<App, AppOptions> = (factory) => {
144
258
  };
145
259
  return factory({ createApp });
146
260
  };
147
- `,F=`import type { DevSetup } from "@kosmojs/core/api";
261
+ `,L=`import type { DevSetup } from "@kosmojs/core/api";
148
262
 
149
263
  export const devSetup = (setup: DevSetup) => setup;
150
- `,I=`import type { Context } from "hono";
264
+ `,R=`import type { Context } from "hono";
151
265
 
152
266
  import type { AppEnv } from "./app";
153
267
 
@@ -161,7 +275,7 @@ export type ErrorHandlerFactory = (handler: ErrorHandler) => ErrorHandler;
161
275
  export const errorHandlerFactory: ErrorHandlerFactory = (handler) => {
162
276
  return handler;
163
277
  };
164
- `,L=`import type { Context } from "hono";
278
+ `,z=`import type { Context } from "hono";
165
279
 
166
280
  import type { RequestBodyTarget, RequestMetadataTarget } from "@kosmojs/core";
167
281
  import { parseCookies, parseQuerystring } from "@kosmojs/core/api";
@@ -206,7 +320,7 @@ export const bodyparsers: {
206
320
  return ctx.req[as]();
207
321
  },
208
322
  };
209
- `,R=`import type { MiddlewareHandler } from "hono";
323
+ `,B=`import type { MiddlewareHandler } from "hono";
210
324
  import type { Router } from "hono/router";
211
325
  import { RegExpRouter } from "hono/router/reg-exp-router";
212
326
  import { SmartRouter } from "hono/router/smart-router";
@@ -239,6 +353,7 @@ import { type BodyparserOptions, bodyparsers, metaparsers } from "./parsers";
239
353
  import { routeSources } from "./routes";
240
354
 
241
355
  import globalMiddleware from "{{ createImport 'api' 'use' }}";
356
+ import { apiRouteMap } from "{{ createImport 'libCore' }}";
242
357
 
243
358
  /**
244
359
  * Create route-level middleware stack that handles:
@@ -255,7 +370,15 @@ import globalMiddleware from "{{ createImport 'api' 'use' }}";
255
370
  * */
256
371
  export const createRouteMiddleware: CreateRouteMiddleware<
257
372
  ParameterizedMiddleware
258
- > = ({ name, pathPattern, params, numericParams, validationSchemas }) => {
373
+ > = ({ name, pathPattern, validationSchemas }) => {
374
+ const route = apiRouteMap[name];
375
+
376
+ if (!route) {
377
+ throw new Error(\`createRouteMiddleware: \${name} route does not exists\`);
378
+ }
379
+
380
+ const { params, numericProperties } = route;
381
+
259
382
  const pathMatcher = match(pathPattern);
260
383
 
261
384
  const matchPath = (path: string) => {
@@ -266,6 +389,14 @@ export const createRouteMiddleware: CreateRouteMiddleware<
266
389
  }
267
390
  };
268
391
 
392
+ const maybeNumber = (val: unknown) => {
393
+ if (val === undefined || val === null) {
394
+ return val;
395
+ }
396
+ const n = Number(val);
397
+ return Number.isFinite(n) ? n : val;
398
+ };
399
+
269
400
  const validationMiddleware = [
270
401
  /**
271
402
  * Extends Hono context with:
@@ -303,7 +434,21 @@ export const createRouteMiddleware: CreateRouteMiddleware<
303
434
  ];
304
435
  map[target] = () => {
305
436
  if (!ctx[StateKey].has(target)) {
306
- ctx[StateKey].set(target, parser(ctx));
437
+ ctx[StateKey].set(
438
+ target,
439
+ target === "query"
440
+ ? Object.fromEntries(
441
+ Object.entries(parser(ctx)).map(([k, v]) => [
442
+ k,
443
+ numericProperties.query[ctx.req.method]?.includes(k)
444
+ ? Array.isArray(v)
445
+ ? v.map((e) => maybeNumber(e))
446
+ : maybeNumber(v)
447
+ : v,
448
+ ]),
449
+ )
450
+ : parser(ctx),
451
+ );
307
452
  }
308
453
  return ctx[StateKey].get(target);
309
454
  };
@@ -358,12 +503,12 @@ export const createRouteMiddleware: CreateRouteMiddleware<
358
503
  (map: Record<string, unknown>, name) => {
359
504
  const value = matched ? matched.params[name] : undefined;
360
505
  if (Array.isArray(value)) {
361
- map[name] = numericParams.includes(name)
362
- ? value.map(Number)
506
+ map[name] = numericProperties.params.includes(name)
507
+ ? value.map((e) => maybeNumber(e))
363
508
  : value;
364
509
  } else if (value) {
365
- map[name] = numericParams.includes(name) //
366
- ? Number(value)
510
+ map[name] = numericProperties.params.includes(name)
511
+ ? maybeNumber(value)
367
512
  : value;
368
513
  }
369
514
  return map;
@@ -606,7 +751,7 @@ export const routerFactory: RouterFactory<Router<never>, never> = (factory) => {
606
751
  };
607
752
  return factory({ createRouter });
608
753
  };
609
- `,z=`import { join } from "node:path";
754
+ `,V=`import { join } from "node:path";
610
755
 
611
756
  import type { RouteSource } from "@kosmojs/core/api";
612
757
 
@@ -647,13 +792,11 @@ export const routeSources: Array<RouteSource<never>> = [
647
792
  file: "{{file}}",
648
793
  cascadingMiddleware: [ {{#each cascadingMiddleware}}{{id}}, {{/each}}].flat() as Array<never>,
649
794
  definitionItems: {{id}} as never,
650
- params: [ {{#each params.schema}}"{{name}}", {{/each}}],
651
- numericParams: [ {{#each numericParams}}"{{.}}", {{/each}}],
652
795
  validationSchemas: {{id}}_schemas,
653
796
  },
654
797
  {{/each}}
655
798
  ];
656
- `,B=`import { chmod, unlink } from "node:fs/promises";
799
+ `,pe=`import { chmod, unlink } from "node:fs/promises";
657
800
  import { parseArgs, styleText } from "node:util";
658
801
 
659
802
  import { createAdaptorServer } from "@hono/node-server";
@@ -753,7 +896,7 @@ process.on("unhandledRejection", (reason) => {
753
896
  process.exit(1);
754
897
  }
755
898
  });
756
- `,V=`import type { Context, Next } from "hono";
899
+ `,me=`import type { Context, Next } from "hono";
757
900
 
758
901
  import type { ValidationDefmap, ValidationOptmap } from "@kosmojs/core";
759
902
  import {
@@ -936,13 +1079,13 @@ export const defineRoute: <
936
1079
  use: use as never,
937
1080
  });
938
1081
  };
939
- `,pe=`export * from "./@api/app";
1082
+ `,he=`export * from "./@api/app";
940
1083
  export * from "./@api/dev";
941
1084
  export * from "./@api/errors";
942
1085
  export * from "./@api/router";
943
1086
  export * from "./@api/routes";
944
1087
  export * from "./@api/server";
945
- `,me=`import defaultErrorHandler from "./errors";
1088
+ `,ge=`import defaultErrorHandler from "./errors";
946
1089
  import router from "./router";
947
1090
 
948
1091
  import { appFactory, routes } from "{{ createImport 'lib' 'api:factory' }}";
@@ -958,7 +1101,7 @@ export default appFactory(({ createApp }) => {
958
1101
 
959
1102
  return app;
960
1103
  });
961
- `,he=`import { getRequestListener } from "@hono/node-server";
1104
+ `,_e=`import { getRequestListener } from "@hono/node-server";
962
1105
 
963
1106
  import app from "./app";
964
1107
 
@@ -972,11 +1115,11 @@ export default devSetup({
972
1115
  // close db connections, server sockets etc.
973
1116
  },
974
1117
  });
975
- `,ge=`export declare module "{{ createImport 'libApi' }}" {
1118
+ `,ve=`export declare module "{{ createImport 'libApi' }}" {
976
1119
  interface DefaultVariables {}
977
1120
  interface DefaultBindings {}
978
1121
  }
979
- `,_e=`import { accepts } from "hono/accepts";
1122
+ `,ye=`import { accepts } from "hono/accepts";
980
1123
  import { HTTPException } from "hono/http-exception";
981
1124
 
982
1125
  import { ValidationError, HTTPError } from "@kosmojs/core/errors";
@@ -1010,7 +1153,7 @@ export default errorHandlerFactory(
1010
1153
  : ctx.text(message, status);
1011
1154
  },
1012
1155
  );
1013
- `,ve=`import { defineRoute } from "{{ createImport 'libApi' }}";
1156
+ `,be=`import { defineRoute } from "{{ createImport 'libApi' }}";
1014
1157
 
1015
1158
  export default defineRoute<"{{route.name}}">(({ GET }) => [
1016
1159
  GET(async (ctx) => {
@@ -1019,7 +1162,7 @@ export default defineRoute<"{{route.name}}">(({ GET }) => [
1019
1162
  return ctx.text("Automatically generated route");
1020
1163
  }),
1021
1164
  ]);
1022
- `,ye=`import { use } from "{{ createImport 'libApi' }}";
1165
+ `,xe=`import { use } from "{{ createImport 'libApi' }}";
1023
1166
 
1024
1167
  export type UseT = {};
1025
1168
 
@@ -1030,20 +1173,20 @@ export default [
1030
1173
  return next();
1031
1174
  }),
1032
1175
  ];
1033
- `,be=`import { routerFactory } from "{{ createImport 'lib' 'api:factory' }}";
1176
+ `,Se=`import { routerFactory } from "{{ createImport 'lib' 'api:factory' }}";
1034
1177
 
1035
1178
  export default routerFactory(({ createRouter }) => {
1036
1179
  const router = createRouter();
1037
1180
  return router;
1038
1181
  });
1039
- `,xe=`import app from "./app";
1182
+ `,Ce=`import app from "./app";
1040
1183
 
1041
1184
  import { serverFactory } from "{{ createImport 'lib' 'api:factory' }}";
1042
1185
 
1043
1186
  serverFactory(async ({ createServer }) => {
1044
1187
  await createServer(app);
1045
1188
  });
1046
- `,Se=`import { use } from "{{ createImport 'libApi' }}";
1189
+ `,we=`import { use } from "{{ createImport 'libApi' }}";
1047
1190
 
1048
1191
  /**
1049
1192
  * Define global middleware applied to all routes.
@@ -1054,7 +1197,7 @@ export default [
1054
1197
  return next();
1055
1198
  }),
1056
1199
  ];
1057
- `,Ce=f((t,n)=>{let{createPath:r,createImportHelpers:i}=h(t),a=e=>e.length===0?`{}`:e.length===1?e[0]:`Override<${e[0]}, ${a(e.slice(1))}>`,{renderToFile:o}=_({helpers:{...i({origin:`lib`}),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 a(e.map(({id:e})=>`UseT${e}`))}}}),{renderToFile:c}=_({helpers:i({origin:`src`})}),u=e=>e?.trim().length===0,d=s(n?.templates,ve),f=async e=>{for(let{kind:t,entry:n}of e)t===`apiRoute`?await c(r.api(n.file),d(n.name,n),{route:n},{overwrite:u}):t===`apiUse`&&await c(r.api(n.file),ye,{},{overwrite:u})},p=async t=>{let i=t.flatMap(({kind:e,entry:t})=>e===`apiUse`?[t]:[]),a=t.flatMap(({kind:t,entry:r})=>{if(t!==`apiRoute`)return[];let a=r.name.split(`/`).reduce((t,n)=>{let r=t[t.length-1];return t.push(r?e(r,n):n),t},[]),o={...r,path:r.honoPattern,cascadingMiddleware:i.flatMap(e=>a.some(t=>e.name===t)?[e]:[])};return[o,...Object.entries({...n?.alias}).flatMap(([e,t])=>{let n=g(e);return t===r.name?[{...o,name:e,id:`${o.id}_${x(e)}`,fullpath:l(n),pathTokens:n}]:[]})]}).sort(v);for(let[e,t]of[[`@api/routes.ts`,z]])await o(r.lib(e),t,{routes:a,cascadingMiddleware:i})};return{config({command:e}){return{define:{KOSMO_PRODUCTION_BUILD:e===`build`?`true`:`false`}}},async start(){for(let[e,t]of[[`api.ts`,V],[`api:factory.ts`,pe],[`@api/app.ts`,P],[`@api/parsers.ts`,L],[`@api/dev.ts`,F],[`@api/errors.ts`,I],[`@api/router.ts`,R],[`@api/server.ts`,B]])await o(r.lib(e),t,{});for(let[e,t]of[[`app.ts`,me],[`dev.ts`,he],[`errors.ts`,_e],[`router.ts`,be],[`server.ts`,xe],[`use.ts`,Se]])await c(r.api(e),t,{},{overwrite:u});await o(r.api(`env.d.ts`),ge,{},{overwrite:u})},async watch(e,t){(!t||t.kind===`create`)&&await f(e),await p(e)},async build(e){await f(e),await p(e)}}}),we=d({meta:{name:`Hono`,slot:`backend`},dependencies:{hono:N.devDependencies.hono,"@hono/node-server":N.devDependencies[`@hono/node-server`],"path-to-regexp":N.devDependencies[`path-to-regexp`]},factory:Ce}),H={type:`module`,private:!0,name:`@kosmojs/koa-generator`,version:`0.2.9`,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`,"path-to-regexp":`^8.4.2`,"raw-body":`^4.0.0`,vite:`^8.2.0`}},Te=`import Koa from "koa";
1200
+ `,Te=f((t,n)=>{let{createPath:r,createImportHelpers:i}=h(t),a=e=>e.length===0?`{}`:e.length===1?e[0]:`Override<${e[0]}, ${a(e.slice(1))}>`,{renderToFile:o}=_({helpers:{...i({origin:`lib`}),...b(),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 a(e.map(({id:e})=>`UseT${e}`))}}}),{renderToFile:c}=_({helpers:i({origin:`src`})}),u=e=>e?.trim().length===0,d=s(n?.templates,be),f=async e=>{for(let{kind:t,entry:n}of e)t===`apiRoute`?await c(r.api(n.file),d(n.name,n),{route:n},{overwrite:u}):t===`apiUse`&&await c(r.api(n.file),xe,{},{overwrite:u})},p=async t=>{let i=t.flatMap(({kind:e,entry:t})=>e===`apiUse`?[t]:[]),a=t.flatMap(({kind:t,entry:r})=>{if(t!==`apiRoute`)return[];let a=r.name.split(`/`).reduce((t,n)=>{let r=t[t.length-1];return t.push(r?e(r,n):n),t},[]),o={...r,path:r.honoPattern,cascadingMiddleware:i.flatMap(e=>a.some(t=>e.name===t)?[e]:[])};return[o,...Object.entries({...n?.alias}).flatMap(([e,t])=>{let n=g(e);return t===r.name?[{...o,name:e,id:`${o.id}_${x(e)}`,fullpath:l(n),pathTokens:n}]:[]})]}).sort(v);for(let[e,t]of[[`@api/routes.ts`,V]])await o(r.lib(e),t,{routes:a,cascadingMiddleware:i})};return{config({command:e}){return{define:{KOSMO_PRODUCTION_BUILD:e===`build`?`true`:`false`}}},async start(){for(let[e,t]of[[`api.ts`,me],[`api:factory.ts`,he],[`@api/app.ts`,I],[`@api/parsers.ts`,z],[`@api/dev.ts`,L],[`@api/errors.ts`,R],[`@api/router.ts`,B],[`@api/server.ts`,pe]])await o(r.lib(e),t,{});for(let[e,t]of[[`app.ts`,ge],[`dev.ts`,_e],[`errors.ts`,ye],[`router.ts`,Se],[`server.ts`,Ce],[`use.ts`,we]])await c(r.api(e),t,{},{overwrite:u});await o(r.api(`env.d.ts`),ve,{},{overwrite:u})},async watch(e,t){(!t||t.kind===`create`)&&await f(e),await p(e)},async build(e){await f(e),await p(e)}}}),Ee=d({meta:{name:`Hono`,slot:`backend`},dependencies:{hono:F.devDependencies.hono,"@hono/node-server":F.devDependencies[`@hono/node-server`],"path-to-regexp":F.devDependencies[`path-to-regexp`]},factory:Te}),H={type:`module`,private:!0,name:`@kosmojs/koa-generator`,version:`0.2.10`,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`,"path-to-regexp":`^8.4.2`,"raw-body":`^4.0.0`,vite:`^8.2.1`}},De=`import Koa from "koa";
1058
1201
 
1059
1202
  import type { AppFactory } from "@kosmojs/core/api";
1060
1203
 
@@ -1072,10 +1215,10 @@ export const appFactory: AppFactory<App, AppOptions> = (factory) => {
1072
1215
  };
1073
1216
  return factory({ createApp });
1074
1217
  };
1075
- `,Ee=`import type { DevSetup } from "@kosmojs/core/api";
1218
+ `,Oe=`import type { DevSetup } from "@kosmojs/core/api";
1076
1219
 
1077
1220
  export const devSetup = (setup: DevSetup) => setup;
1078
- `,De=`import type { ParameterizedMiddleware } from "../api";
1221
+ `,ke=`import type { ParameterizedMiddleware } from "../api";
1079
1222
 
1080
1223
  export type ErrorHandlerFactory = (
1081
1224
  h: ParameterizedMiddleware,
@@ -1084,7 +1227,7 @@ export type ErrorHandlerFactory = (
1084
1227
  export const errorHandlerFactory: ErrorHandlerFactory = (handler) => {
1085
1228
  return handler;
1086
1229
  };
1087
- `,Oe=`import zlib from "node:zlib";
1230
+ `,Ae=`import zlib from "node:zlib";
1088
1231
 
1089
1232
  import type { RouterContext } from "@koa/router";
1090
1233
  import Formidable, { type Options as FormidableOptions } from "formidable";
@@ -1293,7 +1436,7 @@ export const bodyparsers: {
1293
1436
  return rawParser(stream, rawParserOptions);
1294
1437
  },
1295
1438
  };
1296
- `,ke=`import KoaRouter, { type RouterMiddleware } from "@koa/router";
1439
+ `,je=`import KoaRouter, { type RouterMiddleware } from "@koa/router";
1297
1440
  import { match } from "path-to-regexp";
1298
1441
 
1299
1442
  import type {
@@ -1322,6 +1465,7 @@ import { type BodyparserOptions, bodyparsers, metaparsers } from "./parsers";
1322
1465
  import { routeSources } from "./routes";
1323
1466
 
1324
1467
  import globalMiddleware from "{{ createImport 'api' 'use' }}";
1468
+ import { apiRouteMap } from "{{ createImport 'libCore' }}";
1325
1469
 
1326
1470
  export type Router = import("@koa/router").Router<DefaultState, DefaultContext>;
1327
1471
  export type RouterOptions = import("@koa/router").RouterOptions;
@@ -1341,7 +1485,15 @@ export type RouterOptions = import("@koa/router").RouterOptions;
1341
1485
  * */
1342
1486
  export const createRouteMiddleware: CreateRouteMiddleware<
1343
1487
  ParameterizedMiddleware
1344
- > = ({ name, pathPattern, params, numericParams, validationSchemas }) => {
1488
+ > = ({ name, pathPattern, validationSchemas }) => {
1489
+ const route = apiRouteMap[name];
1490
+
1491
+ if (!route) {
1492
+ throw new Error(\`createRouteMiddleware: \${name} route does not exists\`);
1493
+ }
1494
+
1495
+ const { params, numericProperties } = route;
1496
+
1345
1497
  const pathMatcher = match(pathPattern);
1346
1498
 
1347
1499
  const matchPath = (path: string) => {
@@ -1351,6 +1503,15 @@ export const createRouteMiddleware: CreateRouteMiddleware<
1351
1503
  return undefined;
1352
1504
  }
1353
1505
  };
1506
+
1507
+ const maybeNumber = (val: unknown) => {
1508
+ if (val === undefined || val === null) {
1509
+ return val;
1510
+ }
1511
+ const n = Number(val);
1512
+ return Number.isFinite(n) ? n : val;
1513
+ };
1514
+
1354
1515
  const validationMiddleware = [
1355
1516
  /**
1356
1517
  * Extends Koa context with:
@@ -1388,7 +1549,21 @@ export const createRouteMiddleware: CreateRouteMiddleware<
1388
1549
  ];
1389
1550
  map[target] = () => {
1390
1551
  if (!ctx[StateKey].has(target)) {
1391
- ctx[StateKey].set(target, parser(ctx));
1552
+ ctx[StateKey].set(
1553
+ target,
1554
+ target === "query"
1555
+ ? Object.fromEntries(
1556
+ Object.entries(parser(ctx)).map(([k, v]) => [
1557
+ k,
1558
+ numericProperties.query[ctx.method]?.includes(k)
1559
+ ? Array.isArray(v)
1560
+ ? v.map((e) => maybeNumber(e))
1561
+ : maybeNumber(v)
1562
+ : v,
1563
+ ]),
1564
+ )
1565
+ : parser(ctx),
1566
+ );
1392
1567
  }
1393
1568
  return ctx[StateKey].get(target);
1394
1569
  };
@@ -1443,12 +1618,12 @@ export const createRouteMiddleware: CreateRouteMiddleware<
1443
1618
  (map: Record<string, unknown>, name) => {
1444
1619
  const value = matched ? matched.params[name] : undefined;
1445
1620
  if (Array.isArray(value)) {
1446
- map[name] = numericParams.includes(name)
1447
- ? value.map(Number)
1621
+ map[name] = numericProperties.params.includes(name)
1622
+ ? value.map((e) => maybeNumber(e))
1448
1623
  : value;
1449
1624
  } else if (value) {
1450
- map[name] = numericParams.includes(name) //
1451
- ? Number(value)
1625
+ map[name] = numericProperties.params.includes(name)
1626
+ ? maybeNumber(value)
1452
1627
  : value;
1453
1628
  }
1454
1629
  return map;
@@ -1692,7 +1867,7 @@ export const routerFactory: RouterFactory<Router, RouterOptions> = (
1692
1867
  };
1693
1868
  return factory({ createRouter });
1694
1869
  };
1695
- `,Ae=`import { join } from "node:path";
1870
+ `,Me=`import { join } from "node:path";
1696
1871
 
1697
1872
  import type { RouteSource } from "@kosmojs/core/api";
1698
1873
 
@@ -1733,13 +1908,11 @@ export const routeSources: Array<RouteSource<never>> = [
1733
1908
  file: "{{file}}",
1734
1909
  cascadingMiddleware: [ {{#each cascadingMiddleware}}{{id}}, {{/each}}].flat() as Array<never>,
1735
1910
  definitionItems: {{id}} as never,
1736
- params: [ {{#each params.schema}}"{{name}}", {{/each}}],
1737
- numericParams: [ {{#each numericParams}}"{{.}}", {{/each}}],
1738
1911
  validationSchemas: {{id}}_schemas,
1739
1912
  },
1740
1913
  {{/each}}
1741
1914
  ] as const;
1742
- `,je=`import { chmod, unlink } from "node:fs/promises";
1915
+ `,Ne=`import { chmod, unlink } from "node:fs/promises";
1743
1916
  import { parseArgs, styleText } from "node:util";
1744
1917
 
1745
1918
  import type { ServerFactory } from "@kosmojs/core/api";
@@ -1817,7 +1990,7 @@ process.on("unhandledRejection", (reason) => {
1817
1990
  process.exit(1);
1818
1991
  }
1819
1992
  });
1820
- `,Me=`import type { RouterContext } from "@koa/router";
1993
+ `,Pe=`import type { RouterContext } from "@koa/router";
1821
1994
  import type { Next } from "koa";
1822
1995
 
1823
1996
  import type { ValidationDefmap, ValidationOptmap } from "@kosmojs/core";
@@ -1979,13 +2152,13 @@ export const defineRoute: <
1979
2152
  use: use as never,
1980
2153
  });
1981
2154
  };
1982
- `,Ne=`export * from "./@api/app";
2155
+ `,Fe=`export * from "./@api/app";
1983
2156
  export * from "./@api/dev";
1984
2157
  export * from "./@api/errors";
1985
2158
  export * from "./@api/router";
1986
2159
  export * from "./@api/routes";
1987
2160
  export * from "./@api/server";
1988
- `,Pe=`import router from "./router";
2161
+ `,Ie=`import router from "./router";
1989
2162
 
1990
2163
  import { appFactory } from "{{ createImport 'lib' 'api:factory' }}";
1991
2164
 
@@ -1997,7 +2170,7 @@ export default appFactory(({ createApp }) => {
1997
2170
 
1998
2171
  return app;
1999
2172
  });
2000
- `,Fe=`import app from "./app";
2173
+ `,Le=`import app from "./app";
2001
2174
 
2002
2175
  import { devSetup } from "{{ createImport 'lib' 'api:factory' }}";
2003
2176
 
@@ -2009,11 +2182,11 @@ export default devSetup({
2009
2182
  // close db connections, server sockets etc.
2010
2183
  },
2011
2184
  });
2012
- `,Ie=`export declare module "{{ createImport 'libApi' }}" {
2185
+ `,Re=`export declare module "{{ createImport 'libApi' }}" {
2013
2186
  interface DefaultState {}
2014
2187
  interface DefaultContext {}
2015
2188
  }
2016
- `,Le=`import { HTTPError, ValidationError } from "@kosmojs/core/errors";
2189
+ `,ze=`import { HTTPError, ValidationError } from "@kosmojs/core/errors";
2017
2190
 
2018
2191
  import { errorHandlerFactory } from "{{ createImport 'lib' 'api:factory' }}";
2019
2192
 
@@ -2040,14 +2213,14 @@ export default errorHandlerFactory(
2040
2213
  }
2041
2214
  },
2042
2215
  );
2043
- `,Re=`import { defineRoute } from "{{ createImport 'libApi' }}";
2216
+ `,Be=`import { defineRoute } from "{{ createImport 'libApi' }}";
2044
2217
 
2045
2218
  export default defineRoute<"{{route.name}}">(({ GET }) => [
2046
2219
  GET(async (ctx) => {
2047
2220
  ctx.body = "Automatically generated route";
2048
2221
  }),
2049
2222
  ]);
2050
- `,ze=`import { use } from "{{ createImport 'libApi' }}";
2223
+ `,Ve=`import { use } from "{{ createImport 'libApi' }}";
2051
2224
 
2052
2225
  export type UseT = {};
2053
2226
 
@@ -2058,7 +2231,7 @@ export default [
2058
2231
  return next();
2059
2232
  }),
2060
2233
  ];
2061
- `,Be=`import { routerFactory, routes } from "{{ createImport 'lib' 'api:factory' }}";
2234
+ `,He=`import { routerFactory, routes } from "{{ createImport 'lib' 'api:factory' }}";
2062
2235
 
2063
2236
  export default routerFactory(({ createRouter }) => {
2064
2237
  const router = createRouter();
@@ -2069,14 +2242,14 @@ export default routerFactory(({ createRouter }) => {
2069
2242
 
2070
2243
  return router;
2071
2244
  });
2072
- `,Ve=`import app from "./app";
2245
+ `,Ue=`import app from "./app";
2073
2246
 
2074
2247
  import { serverFactory } from "{{ createImport 'lib' 'api:factory' }}";
2075
2248
 
2076
2249
  serverFactory(async ({ createServer }) => {
2077
2250
  await createServer(app);
2078
2251
  });
2079
- `,He=`import defaultErrorHandler from "./errors";
2252
+ `,We=`import defaultErrorHandler from "./errors";
2080
2253
 
2081
2254
  import { use } from "{{ createImport 'libApi' }}";
2082
2255
 
@@ -2087,17 +2260,17 @@ export default [
2087
2260
  * */
2088
2261
  use(defaultErrorHandler, { slot: "errorHandler" }),
2089
2262
  ];
2090
- `,Ue=f((t,n)=>{let{createPath:r,createImportHelpers:i}=h(t),a=e=>e.length===0?`{}`:e.length===1?e[0]:`Override<${e[0]}, ${a(e.slice(1))}>`,{renderToFile:o}=_({helpers:{...i({origin:`lib`}),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 a(e.map(({id:e})=>`UseT${e}`))}}}),{renderToFile:c}=_({helpers:i({origin:`src`})}),l=e=>e?.trim().length===0,d=s(n?.templates,Re),f=async e=>{for(let{kind:t,entry:n}of e)t===`apiRoute`?await c(r.api(n.file),d(n.name,n),{route:n},{overwrite:l}):t===`apiUse`&&await c(r.api(n.file),ze,{},{overwrite:l})},p=async t=>{let i=t.flatMap(({kind:e,entry:t})=>e===`apiUse`?[t]:[]),a=t.flatMap(({kind:t,entry:r})=>{if(t!==`apiRoute`)return[];let a=r.name.split(`/`).reduce((t,n)=>{let r=t[t.length-1];return t.push(r?e(r,n):n),t},[]),o={...r,path:r.pathPattern,cascadingMiddleware:i.flatMap(e=>a.some(t=>e.name===t)?[e]:[])};return[o,...Object.entries({...n?.alias}).flatMap(([e,t])=>{let n=g(e);return t===r.name?[{...o,name:e,id:`${o.id}_${x(e)}`,fullpath:u(n),pathTokens:n}]:[]})]}).sort(v);for(let[e,t]of[[`@api/routes.ts`,Ae]])await o(r.lib(e),t,{routes:a,cascadingMiddleware:i})};return{config({command:e}){return{define:{KOSMO_PRODUCTION_BUILD:e===`build`?`true`:`false`}}},async start(){for(let[e,t]of[[`api.ts`,Me],[`api:factory.ts`,Ne],[`@api/app.ts`,Te],[`@api/dev.ts`,Ee],[`@api/errors.ts`,De],[`@api/parsers.ts`,Oe],[`@api/router.ts`,ke],[`@api/server.ts`,je]])await o(r.lib(e),t,{});for(let[e,t]of[[`app.ts`,Pe],[`dev.ts`,Fe],[`errors.ts`,Le],[`router.ts`,Be],[`server.ts`,Ve],[`use.ts`,He]])await c(r.api(e),t,{},{overwrite:l});await o(r.api(`env.d.ts`),Ie,{},{overwrite:l})},async watch(e,t){(!t||t.kind===`create`)&&await f(e),await p(e)},async build(e){await f(e),await p(e)}}}),We=d({meta:{name:`Koa`,slot:`backend`,types:[`@types/koa`]},dependencies:{koa:H.devDependencies.koa,"@koa/router":H.devDependencies[`@koa/router`],"path-to-regexp":H.devDependencies[`path-to-regexp`],formidable:H.devDependencies.formidable,"raw-body":H.devDependencies[`raw-body`]},devDependencies:{"@types/koa":H.devDependencies[`@types/koa`],"@types/formidable":H.devDependencies[`@types/formidable`]},factory:Ue}),U={type:`module`,private:!0,name:`@kosmojs/mdx-generator`,version:`0.2.9`,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.0`},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`}},Ge=()=>{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)]},Ke=(e,t,n)=>{let{remarkPlugins:r=[],rehypePlugins:i=[]}={...n},a=()=>{let t=[`${c.srcDir}/${e.name}/${c.entryDir}/client.ts`].map(e=>C(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,`
2263
+ `,Ge=f((t,n)=>{let{createPath:r,createImportHelpers:i}=h(t),a=e=>e.length===0?`{}`:e.length===1?e[0]:`Override<${e[0]}, ${a(e.slice(1))}>`,{renderToFile:o}=_({helpers:{...i({origin:`lib`}),...b(),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 a(e.map(({id:e})=>`UseT${e}`))}}}),{renderToFile:c}=_({helpers:i({origin:`src`})}),l=e=>e?.trim().length===0,d=s(n?.templates,Be),f=async e=>{for(let{kind:t,entry:n}of e)t===`apiRoute`?await c(r.api(n.file),d(n.name,n),{route:n},{overwrite:l}):t===`apiUse`&&await c(r.api(n.file),Ve,{},{overwrite:l})},p=async t=>{let i=t.flatMap(({kind:e,entry:t})=>e===`apiUse`?[t]:[]),a=t.flatMap(({kind:t,entry:r})=>{if(t!==`apiRoute`)return[];let a=r.name.split(`/`).reduce((t,n)=>{let r=t[t.length-1];return t.push(r?e(r,n):n),t},[]),o={...r,path:r.pathPattern,cascadingMiddleware:i.flatMap(e=>a.some(t=>e.name===t)?[e]:[])};return[o,...Object.entries({...n?.alias}).flatMap(([e,t])=>{let n=g(e);return t===r.name?[{...o,name:e,id:`${o.id}_${x(e)}`,fullpath:u(n),pathTokens:n}]:[]})]}).sort(v);for(let[e,t]of[[`@api/routes.ts`,Me]])await o(r.lib(e),t,{routes:a,cascadingMiddleware:i})};return{config({command:e}){return{define:{KOSMO_PRODUCTION_BUILD:e===`build`?`true`:`false`}}},async start(){for(let[e,t]of[[`api.ts`,Pe],[`api:factory.ts`,Fe],[`@api/app.ts`,De],[`@api/dev.ts`,Oe],[`@api/errors.ts`,ke],[`@api/parsers.ts`,Ae],[`@api/router.ts`,je],[`@api/server.ts`,Ne]])await o(r.lib(e),t,{});for(let[e,t]of[[`app.ts`,Ie],[`dev.ts`,Le],[`errors.ts`,ze],[`router.ts`,He],[`server.ts`,Ue],[`use.ts`,We]])await c(r.api(e),t,{},{overwrite:l});await o(r.api(`env.d.ts`),Re,{},{overwrite:l})},async watch(e,t){(!t||t.kind===`create`)&&await f(e),await p(e)},async build(e){await f(e),await p(e)}}}),Ke=d({meta:{name:`Koa`,slot:`backend`,types:[`@types/koa`]},dependencies:{koa:H.devDependencies.koa,"@koa/router":H.devDependencies[`@koa/router`],"path-to-regexp":H.devDependencies[`path-to-regexp`],formidable:H.devDependencies.formidable,"raw-body":H.devDependencies[`raw-body`]},devDependencies:{"@types/koa":H.devDependencies[`@types/koa`],"@types/formidable":H.devDependencies[`@types/formidable`]},factory:Ge}),U={type:`module`,private:!0,name:`@kosmojs/mdx-generator`,version:`0.2.10`,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.1`},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`}},qe=()=>{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)]},Je=(e,t,n)=>{let{remarkPlugins:r=[],rehypePlugins:i=[]}={...n},a=()=>{let t=[`${c.srcDir}/${e.name}/${c.entryDir}/client.ts`].map(e=>C(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,`
2091
2264
  if (import.meta.hot) {
2092
2265
  import.meta.hot.accept(() => {});
2093
2266
  }
2094
2267
  `].join(`
2095
- `)}}}},o=[ne({jsxImportSource:`preact`,providerImportSource:`@mdx-js/preact`,remarkPlugins:r,rehypePlugins:i})];return t===`serve`&&o.push(a()),o},qe=`import type { FunctionComponent } from "preact";
2268
+ `)}}}},o=[ne({jsxImportSource:`preact`,providerImportSource:`@mdx-js/preact`,remarkPlugins:r,rehypePlugins:i})];return t===`serve`&&o.push(a()),o},Ye=`import type { FunctionComponent } from "preact";
2096
2269
 
2097
2270
  export const AppProvider: FunctionComponent = (props) => {
2098
2271
  return props.children;
2099
2272
  };
2100
- `,Je=`import { render, hydrate as hydrateOrig } from "preact";
2273
+ `,Xe=`import { render, hydrate as hydrateOrig } from "preact";
2101
2274
  import type { RouterFactoryReturn } from "@kosmojs/core";
2102
2275
  import { clientRenderFactory } from "@kosmojs/core/generators";
2103
2276
 
@@ -2138,7 +2311,7 @@ export const mount = async (
2138
2311
  }
2139
2312
 
2140
2313
  export default clientRenderFactory();
2141
- `,Ye=`import { renderToString as renderToStringOrig } from "preact-render-to-string";
2314
+ `,Ze=`import { renderToString as renderToStringOrig } from "preact-render-to-string";
2142
2315
 
2143
2316
  import type {
2144
2317
  RenderToStringWrapper,
@@ -2212,7 +2385,7 @@ export const renderToString: RenderToStringWrapper<
2212
2385
  }
2213
2386
 
2214
2387
  export default serverRenderFactory<false>();
2215
- `,Xe=`declare module "*.mdx" {
2388
+ `,Qe=`declare module "*.mdx" {
2216
2389
  import type { ComponentType } from "preact";
2217
2390
  export const frontmatter: Record<string, unknown>;
2218
2391
  const component: ComponentType;
@@ -2225,7 +2398,7 @@ declare module "*.md" {
2225
2398
  const component: ComponentType;
2226
2399
  export default component;
2227
2400
  }
2228
- `,Ze=`import { MDXProvider } from "@mdx-js/preact";
2401
+ `,$e=`import { MDXProvider } from "@mdx-js/preact";
2229
2402
  import { match, pathToRegexp } from "path-to-regexp";
2230
2403
  import { type ComponentType, createContext, h, type VNode } from "preact";
2231
2404
 
@@ -2415,7 +2588,7 @@ export const createRoute = (
2415
2588
  layouts,
2416
2589
  };
2417
2590
  };
2418
- `,Qe=`/* @jsxImportSource preact */
2591
+ `,et=`/* @jsxImportSource preact */
2419
2592
 
2420
2593
  import styles from "./styles.module.css";
2421
2594
 
@@ -2456,7 +2629,7 @@ export default function PageSample(props: {
2456
2629
  </div>
2457
2630
  );
2458
2631
  }
2459
- `,$e=`/* @jsxImportSource preact */
2632
+ `,tt=`/* @jsxImportSource preact */
2460
2633
 
2461
2634
  import styles from "./styles.module.css";
2462
2635
 
@@ -2508,7 +2681,7 @@ export default function PageSample(props: {
2508
2681
  </div>
2509
2682
  );
2510
2683
  }
2511
- `,et=`* {
2684
+ `,nt=`* {
2512
2685
  margin: 0;
2513
2686
  padding: 0;
2514
2687
  box-sizing: border-box;
@@ -2643,7 +2816,7 @@ export default function PageSample(props: {
2643
2816
  align-items: center;
2644
2817
  gap: 0.25rem;
2645
2818
  }
2646
- `,tt=`/* @jsxImportSource preact */
2819
+ `,rt=`/* @jsxImportSource preact */
2647
2820
 
2648
2821
  import styles from "./styles.module.css";
2649
2822
 
@@ -2709,7 +2882,7 @@ export default function WelcomePage() {
2709
2882
  </div>
2710
2883
  );
2711
2884
  }
2712
- `,nt=`export type ParamsMap = {
2885
+ `,it=`export type ParamsMap = {
2713
2886
  {{#each pageRoutes}}"{{name}}": {{serializeParamsLiteral .}};
2714
2887
  {{/each}}
2715
2888
  };
@@ -2718,7 +2891,7 @@ export const paramNames = {
2718
2891
  {{#each pageRoutes}}"{{name}}": [ {{#each params.schema}}"{{name}}", {{/each}}],
2719
2892
  {{/each}}
2720
2893
  } as const;
2721
- `,rt=`import type { ComponentType } from "preact";
2894
+ `,at=`import type { ComponentType } from "preact";
2722
2895
 
2723
2896
  import type { RouterFactoryReturn } from "@kosmojs/core";
2724
2897
  import { createRouterFactory } from "@kosmojs/core/generators";
@@ -2762,7 +2935,7 @@ export default createRouterFactory<
2762
2935
  Promise<RouteComponent>,
2763
2936
  { server: { route: Route } }
2764
2937
  >();
2765
- `,it=`import { join } from "node:path";
2938
+ `,ot=`import { join } from "node:path";
2766
2939
 
2767
2940
  import { compile } from "path-to-regexp";
2768
2941
 
@@ -2808,7 +2981,7 @@ export default Object.entries(routes)
2808
2981
  return [];
2809
2982
  })
2810
2983
  .map((path) => join(base, path));
2811
- `,at=`import type { PageRoute } from "@kosmojs/core";
2984
+ `,st=`import type { PageRoute } from "@kosmojs/core";
2812
2985
 
2813
2986
  {{#each pageRoutes}}
2814
2987
  import * as {{id}} from "{{ createImport 'pages' file }}";
@@ -2832,7 +3005,7 @@ const routeMap: Record<
2832
3005
  }
2833
3006
 
2834
3007
  export default routeMap;
2835
- `,ot=`import { useContext } from "preact/hooks";
3008
+ `,ct=`import { useContext } from "preact/hooks";
2836
3009
 
2837
3010
  import { RouterContext } from "./mdx";
2838
3011
 
@@ -2874,10 +3047,10 @@ export const useFrontmatter = <
2874
3047
  >(): T => {
2875
3048
  return useContext(RouterContext).frontmatter as T;
2876
3049
  };
2877
- `,st=`import { AppProvider } from "{{ createImport 'lib' 'app' }}";
3050
+ `,lt=`import { AppProvider } from "{{ createImport 'lib' 'app' }}";
2878
3051
 
2879
3052
  <AppProvider>{props.children}</AppProvider>
2880
- `,ct=`import { h, type JSX } from "preact";
3053
+ `,ut=`import { h, type JSX } from "preact";
2881
3054
 
2882
3055
  import { pageRouteMap, type LinkProps } from "{{ createImport 'libCore' }}";
2883
3056
 
@@ -2894,7 +3067,7 @@ export default function Link(
2894
3067
 
2895
3068
  return h("a", { ...restProps, href }, children);
2896
3069
  }
2897
- `,lt=`/**
3070
+ `,dt=`/**
2898
3071
  * MDX component overrides.
2899
3072
  *
2900
3073
  * Every standard markdown element (headings, links, code blocks, etc.)
@@ -2917,7 +3090,7 @@ export const components = {
2917
3090
  declare global {
2918
3091
  type MDXProvidedComponents = typeof components;
2919
3092
  }
2920
- `,ut=`import renderFactory, {
3093
+ `,ft=`import renderFactory, {
2921
3094
  createRoutes,
2922
3095
  hydrate,
2923
3096
  mount,
@@ -2944,7 +3117,7 @@ if (root) {
2944
3117
  } else {
2945
3118
  console.error("❌ Root element not found!");
2946
3119
  }
2947
- `,dt=`import renderFactory, {
3120
+ `,pt=`import renderFactory, {
2948
3121
  createRoutes,
2949
3122
  renderToString,
2950
3123
  // no renderToStream on MDX folders
@@ -2965,7 +3138,7 @@ export default renderFactory(() => {
2965
3138
  },
2966
3139
  };
2967
3140
  });
2968
- `,ft=`<!doctype html>
3141
+ `,mt=`<!doctype html>
2969
3142
  <html lang="en">
2970
3143
  <head>
2971
3144
  <meta charset="UTF-8" />
@@ -2977,13 +3150,13 @@ export default renderFactory(() => {
2977
3150
  <script type="module" src="/{{ entryDir }}/client.ts"><\/script>
2978
3151
  </body>
2979
3152
  </html>
2980
- `,pt=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
3153
+ `,ht=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
2981
3154
 
2982
3155
  export default function Page() {
2983
3156
  return <PageSample />;
2984
3157
  }
2985
- `,mt=`{props.children}
2986
- `,ht=`---
3158
+ `,gt=`{props.children}
3159
+ `,_t=`---
2987
3160
  title: "{{title}}"
2988
3161
  ---
2989
3162
 
@@ -3000,7 +3173,7 @@ export const pathMap = {
3000
3173
  routeName="{{route.name}}"
3001
3174
  pathMap={pathMap}
3002
3175
  />
3003
- `,gt=`---
3176
+ `,vt=`---
3004
3177
  title: Welcome to KosmoJS
3005
3178
  description: Content-first development with MDX and Vite
3006
3179
  ---
@@ -3008,7 +3181,7 @@ description: Content-first development with MDX and Vite
3008
3181
  import WelcomePage from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}"
3009
3182
 
3010
3183
  <WelcomePage />
3011
- `,_t=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
3184
+ `,yt=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
3012
3185
 
3013
3186
  import app from "./app.mdx";
3014
3187
  import { components } from "./components/mdx"
@@ -3024,12 +3197,12 @@ export default routerFactory((routes) => {
3024
3197
  },
3025
3198
  };
3026
3199
  });
3027
- `,vt=f((e,t)=>{let{createPath:n,createImportHelpers:r}=h(e),{renderToFile:i}=_({helpers:{...r({origin:`lib`}),...b(),serializeParams(e){return JSON.stringify(e.params)}}}),{renderToFile:a}=_({helpers:r({origin:`src`})}),o=e=>!e?.trim().length,l=s(t?.templates,ht),u=async e=>{for(let{kind:t,entry:r}of e)t===`pageRoute`?await a(n.pages(r.file),r.name===`index`?gt:l(r.name,r),{route:r,title:r.name.replace(/\{([^}]+)\}/g,`$1`),message:Ge()},{overwrite:o}):t===`pageLayout`&&await a(n.pages(r.file),mt,{route:r},{overwrite:o})},d=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageLayout`?[t]:[]),r=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(v)}]}return[]}).sort(v);for(let[e,a]of[[`client.ts`,Je],[`server.ts`,Ye]])await i(n.libEntry(e),a,{pageRoutes:r,layouts:t});for(let[e,t]of[[`params.ts`,nt],[`router.ts`,rt],[`ssg:routes.ts`,at]])await i(n.lib(e),t,{pageRoutes:r})};return{config({command:n}){return{oxc:{jsx:{importSource:`preact`}},plugins:Ke(e,n,t)}},async start(){for(let[e,t]of[[`env.d.ts`,Xe],[`app.ts`,qe],[`mdx.ts`,Ze],[`use.ts`,ot],[`ssg.ts`,it],[`pageSamples/styles.module.css`,et],[`pageSamples/welcome.tsx`,tt],[`pageSamples/page.tsx`,$e],[`pageSamples/404.tsx`,Qe]])await i(n.lib(e),t,{});for(let[e,t]of[[`pages/404.mdx`,pt],[`components/Link.tsx`,ct],[`components/mdx.ts`,lt],[`app.mdx`,st],[`router.ts`,_t]])await a(n.src(e),t,{entryDir:c.entryDir},{overwrite:o});await a(n.src(`index.html`),ft,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,ut],[`server.ts`,dt]])await a(n.entry(e),t,{},{overwrite:o})},async watch(e,t){(!t||t.kind===`create`)&&await u(e),await d(e)},async build(e){await u(e),await d(e)}}}),yt=d({meta:{name:`MDX`,jsxImportSource:`preact`},dependencies:{"path-to-regexp":U.devDependencies[`path-to-regexp`]},devDependencies:{preact:U.devDependencies.preact,"preact-render-to-string":U.devDependencies[`preact-render-to-string`],"@mdx-js/preact":U.devDependencies[`@mdx-js/preact`],"remark-frontmatter":U.devDependencies[`remark-frontmatter`],"remark-mdx-frontmatter":U.devDependencies[`remark-mdx-frontmatter`]},factory:vt}),bt={json:`application/json`,form:[`application/x-www-form-urlencoded`,`multipart/form-data`],raw:void 0},xt=()=>{let t=e=>[`Buffer`,`ArrayBuffer`,`Blob`].includes(e)?{type:`string`,format:`binary`}:ae.Script(e),n=(e,t,n)=>{let r=n?`${t}_${n.replace(/[^\w.-]/g,`_`)}${x(n)}`:t;return`${e.id}_${r}`},r=(e,t,r,i)=>[`#`,`components`,e,n(t,r,i)].join(`/`),a=e=>e.split(`/`).reduce((e,t)=>e+ +!t.includes(`{`),0),o=t=>{if(t.name===`index`)return[`/`];let{tokens:n}=ie(t.pathPattern),r=e=>e.flatMap(e=>{switch(e.type){case`param`:return[e.name];case`wildcard`:return[e.name];case`group`:return r(e.tokens);default:return[]}}),i=(e,t)=>{if(!e.length)return[t];let[n,...a]=e;switch(n.type){case`text`:return i(a,{path:`${t.path}${n.value}`,params:t.params});case`param`:return i(a,{path:`${t.path}{${n.name}}`,params:[...t.params,n.name]});case`wildcard`:return i(a,{path:`${t.path}{${n.name}*}`,params:[...t.params,n.name]});case`group`:{let e=i(a,t),o=i([...n.tokens,...a],t),s=r(n.tokens),c=o.filter(e=>s.some(t=>e.params.includes(t)));return[...e,...c]}}},o=i(n,{path:``,params:[]}),s=t.params.schema.reduce((e,{name:t},n)=>(e[n]=t,e),{});return o.reduce((t,n)=>{let r=e(`/`,n.path);return t.includes(r)||n.params.every((e,t)=>e===s[t])&&t.push(r),t},[]).sort((e,t)=>a(t)-a(e))},s=(e,t)=>{let n=e.params.resolvedType?.properties?.flatMap(n=>RegExp(`\\{${n.nameLiteral}\\*?\\}`).test(t)?[{$ref:r(`parameters`,e,e.params.id,n.nameLiteral)}]:[]);return n?.length?n:void 0},c=(e,t)=>{let n=e.validationDefinitions.find(e=>e.method===t&&e.target===`response`);return Array.isArray(n?.variants)?n.variants.reduce((t,{id:n,status:i,contentType:a,body:o})=>(t[i]=St(i,a)||{description:`Success`,content:{[a||`application/json`]:{schema:o?{$ref:r(`schemas`,e,n)}:{type:`object`}}}},t),{}):{200:{description:`Success - TODO: Add response schema`,content:{"text/plain":{schema:{type:`string`}}}}}},l=e=>{let{parameters:r,schemas:i}={parameters:{},schemas:{}};for(let r of e.validationDefinitions)if(r.target===`response`)for(let{id:a,resolvedType:o}of r.variants)o?.typeboxSchema&&(i[n(e,a)]=t(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=n(e,a,r.nameLiteral);i[o]=t(r.typeboxSchema)}}else{let{id:a,resolvedType:o}=r.schema;o?.typeboxSchema&&(i[n(e,a)]=t(o.typeboxSchema))}if(e.params.resolvedType)for(let i of e.params.resolvedType.properties||[])i?.typeboxSchema&&(r[n(e,e.params.id,i.nameLiteral)]={name:i.nameLiteral,in:`path`,required:!0,schema:t(i.typeboxSchema)});return{parameters:r,schemas:i}},u=e=>{let t={},n=e.validationDefinitions.flatMap(e=>e.target===`response`?[]:e.schema.resolvedType?[e]:[]);for(let a of o(e))for(let o of e.methods){let l={responses:c(e,o)},u=s(e,a);u&&(l.parameters=u);let d=n.find(e=>e.method===o&&e.target===`query`);if(d?.schema)for(let t of d.schema.resolvedType?.properties||[])l.parameters||=[],l.parameters.push({name:t.nameLiteral,in:`query`,required:!t.optional,schema:{$ref:r(`schemas`,e,d.schema.id,t.nameLiteral)}});let f=n.filter(e=>e.method===o&&Object.keys(i).includes(e.target));f.length&&(l.requestBody={required:!0,content:f.reduce((t,n)=>{let{contentType:i=bt[n.target]}=n;if(i){let a={$ref:r(`schemas`,e,n.schema.id)};for(let e of[i].flat())t[e]={schema:a}}return t},{})}),t[a]||(t[a]={}),t[a][o.toLowerCase()]=l}return t};return{generateComponentId:n,generateComponentPath:r,generatePathVariations:o,generateOpenAPISchema:e=>{let{components:t,paths:n}=e.sort(v).flatMap(t=>e.some(e=>e.name!==t.name&&e.name.startsWith(t.name))?[]:[t]).reduce((e,t)=>{let n=u(t),{parameters:r,schemas:i}=l(t);return{paths:{...e.paths,...n},components:{parameters:{...e.components.parameters,...r},schemas:{...e.components.schemas,...i}}}},{paths:{},components:{parameters:{},schemas:{}}});return{paths:n,components:t}}}},St=(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]},Ct=f((e,t)=>{let{outfile:n=``,...r}={...t},{createPath:i}=h(e),{generateOpenAPISchema:a}=xt(),o=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`apiRoute`?[t]:[]),{paths:o,components:s}=a(t),c={...JSON.parse(JSON.stringify(r)),paths:o,components:s},l=/ya?ml/.test(n)?re.stringify(c):JSON.stringify(c,null,2);await ee(i.src(n),l,{})};return{async watch(e){await o(e)},async build(e){await o(e)}}}),wt=d({meta:{name:`OpenAPI`,resolveTypes:!0},factory:Ct}),W={type:`module`,private:!0,name:`@kosmojs/react-generator`,version:`0.2.9`,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.0.5`},devDependencies:{"@tanstack/react-query":`^5.101.4`,"@types/react":`^19.2.18`,"@types/react-dom":`^19.2.4`,"path-to-regexp":`^8.4.2`,react:`^19.2.8`,"react-dom":`^19.2.8`,"react-router":`^8.3.0`}},Tt=e=>{let t=e.map(e=>e.orig).join(`/`),r=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`?[r(e.parts[0])]:(/\.\w+$/.test(e.orig)||(console.warn(`❗${n([`red`,`bold`],`WARN`)}: React Router v7 only supports dot-suffix mixed segments (e.g. :param.html).`),console.warn(` ${n([`magenta`],e.orig)} in ${n([`blue`],t)} route won't match as expected.`),console.warn()),[e.parts.map(e=>e.type===`static`?e.value:r(e)).join(``)])).join(`/`)},Et=()=>{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=Tt(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},Dt=()=>{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)]},Ot=`import type { ReactNode } from "react";
3200
+ `,bt=f((e,t)=>{let{createPath:n,createImportHelpers:r}=h(e),{renderToFile:i}=_({helpers:{...r({origin:`lib`}),...b(),serializeParams(e){return JSON.stringify(e.params)}}}),{renderToFile:a}=_({helpers:r({origin:`src`})}),o=e=>!e?.trim().length,l=s(t?.templates,_t),u=async e=>{for(let{kind:t,entry:r}of e)t===`pageRoute`?await a(n.pages(r.file),r.name===`index`?vt:l(r.name,r),{route:r,title:r.name.replace(/\{([^}]+)\}/g,`$1`),message:qe()},{overwrite:o}):t===`pageLayout`&&await a(n.pages(r.file),gt,{route:r},{overwrite:o})},d=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageLayout`?[t]:[]),r=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(v)}]}return[]}).sort(v);for(let[e,a]of[[`client.ts`,Xe],[`server.ts`,Ze]])await i(n.libEntry(e),a,{pageRoutes:r,layouts:t});for(let[e,t]of[[`params.ts`,it],[`router.ts`,at],[`ssg:routes.ts`,st]])await i(n.lib(e),t,{pageRoutes:r})};return{config({command:n}){return{oxc:{jsx:{importSource:`preact`}},plugins:Je(e,n,t)}},async start(){for(let[e,t]of[[`env.d.ts`,Qe],[`app.ts`,Ye],[`mdx.ts`,$e],[`use.ts`,ct],[`ssg.ts`,ot],[`pageSamples/styles.module.css`,nt],[`pageSamples/welcome.tsx`,rt],[`pageSamples/page.tsx`,tt],[`pageSamples/404.tsx`,et]])await i(n.lib(e),t,{});for(let[e,t]of[[`pages/404.mdx`,ht],[`components/Link.tsx`,ut],[`components/mdx.ts`,dt],[`app.mdx`,lt],[`router.ts`,yt]])await a(n.src(e),t,{entryDir:c.entryDir},{overwrite:o});await a(n.src(`index.html`),mt,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,ft],[`server.ts`,pt]])await a(n.entry(e),t,{},{overwrite:o})},async watch(e,t){(!t||t.kind===`create`)&&await u(e),await d(e)},async build(e){await u(e),await d(e)}}}),xt=d({meta:{name:`MDX`,jsxImportSource:`preact`},dependencies:{"path-to-regexp":U.devDependencies[`path-to-regexp`]},devDependencies:{preact:U.devDependencies.preact,"preact-render-to-string":U.devDependencies[`preact-render-to-string`],"@mdx-js/preact":U.devDependencies[`@mdx-js/preact`],"remark-frontmatter":U.devDependencies[`remark-frontmatter`],"remark-mdx-frontmatter":U.devDependencies[`remark-mdx-frontmatter`]},factory:bt}),St={json:`application/json`,form:[`application/x-www-form-urlencoded`,`multipart/form-data`],raw:void 0},Ct=()=>{let t=e=>[`Buffer`,`ArrayBuffer`,`Blob`].includes(e)?{type:`string`,format:`binary`}:ae.Script(e),n=(e,t,n)=>{let r=n?`${t}_${n.replace(/[^\w.-]/g,`_`)}${x(n)}`:t;return`${e.id}_${r}`},r=(e,t,r,i)=>[`#`,`components`,e,n(t,r,i)].join(`/`),a=e=>e.split(`/`).reduce((e,t)=>e+ +!t.includes(`{`),0),o=t=>{if(t.name===`index`)return[`/`];let{tokens:n}=ie(t.pathPattern),r=e=>e.flatMap(e=>{switch(e.type){case`param`:return[e.name];case`wildcard`:return[e.name];case`group`:return r(e.tokens);default:return[]}}),i=(e,t)=>{if(!e.length)return[t];let[n,...a]=e;switch(n.type){case`text`:return i(a,{path:`${t.path}${n.value}`,params:t.params});case`param`:return i(a,{path:`${t.path}{${n.name}}`,params:[...t.params,n.name]});case`wildcard`:return i(a,{path:`${t.path}{${n.name}*}`,params:[...t.params,n.name]});case`group`:{let e=i(a,t),o=i([...n.tokens,...a],t),s=r(n.tokens),c=o.filter(e=>s.some(t=>e.params.includes(t)));return[...e,...c]}}},o=i(n,{path:``,params:[]}),s=t.params.schema.reduce((e,{name:t},n)=>(e[n]=t,e),{});return o.reduce((t,n)=>{let r=e(`/`,n.path);return t.includes(r)||n.params.every((e,t)=>e===s[t])&&t.push(r),t},[]).sort((e,t)=>a(t)-a(e))},s=(e,t)=>{let n=e.params.resolvedType?.properties?.flatMap(n=>RegExp(`\\{${n.name}\\*?\\}`).test(t)?[{$ref:r(`parameters`,e,e.params.id,n.name)}]:[]);return n?.length?n:void 0},c=(e,t)=>{let n=e.validationDefinitions.find(e=>e.method===t&&e.target===`response`);return Array.isArray(n?.variants)?n.variants.reduce((t,{id:n,status:i,contentType:a,body:o})=>(t[i]=wt(i,a)||{description:`Success`,content:{[a||`application/json`]:{schema:o?{$ref:r(`schemas`,e,n)}:{type:`object`}}}},t),{}):{200:{description:`Success - TODO: Add response schema`,content:{"text/plain":{schema:{type:`string`}}}}}},l=e=>{let{parameters:r,schemas:i}={parameters:{},schemas:{}};for(let r of e.validationDefinitions)if(r.target===`response`)for(let{id:a,resolvedType:o}of r.variants)o?.typeboxSchema&&(i[n(e,a)]=t(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=n(e,a,r.name);i[o]=t(r.typeboxSchema)}}else{let{id:a,resolvedType:o}=r.schema;o?.typeboxSchema&&(i[n(e,a)]=t(o.typeboxSchema))}if(e.params.resolvedType)for(let i of e.params.resolvedType.properties||[])i?.typeboxSchema&&(r[n(e,e.params.id,i.name)]={name:i.name,in:`path`,required:!0,schema:t(i.typeboxSchema)});return{parameters:r,schemas:i}},u=e=>{let t={},n=e.validationDefinitions.flatMap(e=>e.target===`response`?[]:e.schema.resolvedType?[e]:[]);for(let a of o(e))for(let o of e.methods){let l={responses:c(e,o)},u=s(e,a);u&&(l.parameters=u);let d=n.find(e=>e.method===o&&e.target===`query`);if(d?.schema)for(let t of d.schema.resolvedType?.properties||[])l.parameters||=[],l.parameters.push({name:t.name,in:`query`,required:!t.optional,schema:{$ref:r(`schemas`,e,d.schema.id,t.name)}});let f=n.filter(e=>e.method===o&&Object.keys(i).includes(e.target));f.length&&(l.requestBody={required:!0,content:f.reduce((t,n)=>{let{contentType:i=St[n.target]}=n;if(i){let a={$ref:r(`schemas`,e,n.schema.id)};for(let e of[i].flat())t[e]={schema:a}}return t},{})}),t[a]||(t[a]={}),t[a][o.toLowerCase()]=l}return t};return{generateComponentId:n,generateComponentPath:r,generatePathVariations:o,generateOpenAPISchema:e=>{let{components:t,paths:n}=e.sort(v).flatMap(t=>e.some(e=>e.name!==t.name&&e.name.startsWith(t.name))?[]:[t]).reduce((e,t)=>{let n=u(t),{parameters:r,schemas:i}=l(t);return{paths:{...e.paths,...n},components:{parameters:{...e.components.parameters,...r},schemas:{...e.components.schemas,...i}}}},{paths:{},components:{parameters:{},schemas:{}}});return{paths:n,components:t}}}},wt=(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]},Tt=f((e,t)=>{let{outfile:n=``,...r}={...t},{createPath:i}=h(e),{generateOpenAPISchema:a}=Ct(),o=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`apiRoute`?[t]:[]),{paths:o,components:s}=a(t),c={...JSON.parse(JSON.stringify(r)),paths:o,components:s},l=/ya?ml/.test(n)?re.stringify(c):JSON.stringify(c,null,2);await ee(i.src(n),l,{})};return{async watch(e){await o(e)},async build(e){await o(e)}}}),Et=d({meta:{name:`OpenAPI`,resolveTypes:!0},factory:Tt}),W={type:`module`,private:!0,name:`@kosmojs/react-generator`,version:`0.2.10`,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.0.5`},devDependencies:{"@tanstack/react-query":`^5.101.4`,"@types/react":`^19.2.18`,"@types/react-dom":`^19.2.4`,"path-to-regexp":`^8.4.2`,react:`^19.2.8`,"react-dom":`^19.2.8`,"react-router":`^8.3.0`}},Dt=e=>{let t=e.map(e=>e.orig).join(`/`),r=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`?[r(e.parts[0])]:(/\.\w+$/.test(e.orig)||(console.warn(`❗${n([`red`,`bold`],`WARN`)}: React Router v7 only supports dot-suffix mixed segments (e.g. :param.html).`),console.warn(` ${n([`magenta`],e.orig)} in ${n([`blue`],t)} route won't match as expected.`),console.warn()),[e.parts.map(e=>e.type===`static`?e.value:r(e)).join(``)])).join(`/`)},Ot=()=>{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=Dt(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},kt=()=>{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)]},At=`import type { ReactNode } from "react";
3028
3201
 
3029
3202
  export const AppProvider = ({ children }: { children: ReactNode }) => {
3030
3203
  return children;
3031
3204
  }
3032
- `,kt=`import { type QueryClient, QueryClientProvider } from "@tanstack/react-query";
3205
+ `,jt=`import { type QueryClient, QueryClientProvider } from "@tanstack/react-query";
3033
3206
  import type { ReactNode } from "react";
3034
3207
 
3035
3208
  import { getQueryClient } from "./query";
@@ -3048,7 +3221,7 @@ export const AppProvider = ({
3048
3221
  </QueryClientProvider>
3049
3222
  );
3050
3223
  }
3051
- `,At=`import { lazy, type JSX } from "react";
3224
+ `,Mt=`import { lazy, type JSX } from "react";
3052
3225
 
3053
3226
  import {
3054
3227
  createRoot,
@@ -3102,7 +3275,7 @@ export const mount = async (
3102
3275
  }
3103
3276
 
3104
3277
  export default clientRenderFactory();
3105
- `,jt=`{
3278
+ `,Nt=`{
3106
3279
  {{#if name}}
3107
3280
  id: "{{name}}",
3108
3281
  {{/if}}
@@ -3120,7 +3293,7 @@ export default clientRenderFactory();
3120
3293
  children: [ {{#each children}}{{> routePartial}}, {{/each}}],
3121
3294
  {{/if}}
3122
3295
  }
3123
- `,Mt=`import type { JSX } from "react";
3296
+ `,Pt=`import type { JSX } from "react";
3124
3297
 
3125
3298
  import {
3126
3299
  renderToString as renderToStringOrig,
@@ -3186,7 +3359,7 @@ export const renderToStream: RenderToStreamWrapper<
3186
3359
  };
3187
3360
 
3188
3361
  export default serverRenderFactory();
3189
- `,Nt=`/* @jsxImportSource react */
3362
+ `,Ft=`/* @jsxImportSource react */
3190
3363
 
3191
3364
  import styles from "./styles.module.css";
3192
3365
 
@@ -3227,7 +3400,7 @@ export default function PageSample(props: {
3227
3400
  </div>
3228
3401
  );
3229
3402
  }
3230
- `,Pt=`/* @jsxImportSource react */
3403
+ `,It=`/* @jsxImportSource react */
3231
3404
 
3232
3405
  import styles from "./styles.module.css";
3233
3406
 
@@ -3279,7 +3452,7 @@ export default function PageSample(props: {
3279
3452
  </div>
3280
3453
  );
3281
3454
  }
3282
- `,Ft=`* {
3455
+ `,Lt=`* {
3283
3456
  margin: 0;
3284
3457
  padding: 0;
3285
3458
  box-sizing: border-box;
@@ -3414,7 +3587,7 @@ export default function PageSample(props: {
3414
3587
  align-items: center;
3415
3588
  gap: 0.25rem;
3416
3589
  }
3417
- `,It=`/* @jsxImportSource react */
3590
+ `,Rt=`/* @jsxImportSource react */
3418
3591
 
3419
3592
  import styles from "./styles.module.css";
3420
3593
 
@@ -3480,7 +3653,7 @@ export default function WelcomePage() {
3480
3653
  </div>
3481
3654
  );
3482
3655
  }
3483
- `,Lt=`import { QueryClient, type QueryClientConfig } from "@tanstack/react-query";
3656
+ `,zt=`import { QueryClient, type QueryClientConfig } from "@tanstack/react-query";
3484
3657
 
3485
3658
  let client: QueryClient | undefined;
3486
3659
 
@@ -3495,7 +3668,7 @@ export const getQueryClient = (): QueryClient => {
3495
3668
  }
3496
3669
  return client;
3497
3670
  };
3498
- `,Rt=`import { QueryClient, type QueryClientConfig } from "@tanstack/react-query";
3671
+ `,Bt=`import { QueryClient, type QueryClientConfig } from "@tanstack/react-query";
3499
3672
 
3500
3673
  import { store } from "{{ createImport 'lib' '@ssr/base' }}";
3501
3674
 
@@ -3518,7 +3691,7 @@ export const getQueryClient = (): QueryClient => {
3518
3691
  }
3519
3692
  return ctx.tsqClient as QueryClient;
3520
3693
  };
3521
- `,zt=`export type ComponentLoader = () => Promise<{
3694
+ `,Vt=`export type ComponentLoader = () => Promise<{
3522
3695
  loader?: (arg: unknown) => Promise<unknown>;
3523
3696
  }>;
3524
3697
 
@@ -3551,7 +3724,7 @@ export const loaderFactory = (opt?: { withPreload?: boolean }) => {
3551
3724
  return opt?.withPreload ? { loader } : {};
3552
3725
  };
3553
3726
  };
3554
- `,Bt=`import type { JSX, ComponentType } from "react";
3727
+ `,Ht=`import type { JSX, ComponentType } from "react";
3555
3728
 
3556
3729
  import {
3557
3730
  type RouteObject,
@@ -3609,7 +3782,7 @@ export const createRouters = (
3609
3782
  }
3610
3783
 
3611
3784
  export default createRouterFactory<RouteObject, Promise<JSX.Element>>();
3612
- `,Vt=`import { Outlet } from "react-router";
3785
+ `,Ut=`import { Outlet } from "react-router";
3613
3786
  import { AppProvider } from "{{ createImport 'lib' 'app' }}";
3614
3787
 
3615
3788
  export default function App() {
@@ -3619,7 +3792,7 @@ export default function App() {
3619
3792
  </AppProvider>
3620
3793
  );
3621
3794
  }
3622
- `,Ht=`import {
3795
+ `,Wt=`import {
3623
3796
  type LinkProps as RouterLinkProps,
3624
3797
  Link as RouterLink,
3625
3798
  } from "react-router";
@@ -3647,7 +3820,7 @@ export default function Link(
3647
3820
  </RouterLink>
3648
3821
  );
3649
3822
  }
3650
- `,Ut=`import renderFactory, {
3823
+ `,Gt=`import renderFactory, {
3651
3824
  createRoutes,
3652
3825
  hydrate,
3653
3826
  mount,
@@ -3674,7 +3847,7 @@ if (root) {
3674
3847
  } else {
3675
3848
  console.error("❌ Root element not found!");
3676
3849
  }
3677
- `,Wt=`import renderFactory, {
3850
+ `,Kt=`import renderFactory, {
3678
3851
  createRoutes,
3679
3852
  renderToStream,
3680
3853
  renderToString,
@@ -3701,7 +3874,7 @@ export default renderFactory(() => {
3701
3874
  },
3702
3875
  };
3703
3876
  });
3704
- `,Gt=`<!doctype html>
3877
+ `,qt=`<!doctype html>
3705
3878
  <html lang="en">
3706
3879
  <head>
3707
3880
  <meta charset="UTF-8" />
@@ -3713,17 +3886,17 @@ export default renderFactory(() => {
3713
3886
  <script type="module" src="/{{ entryDir }}/client.ts"><\/script>
3714
3887
  </body>
3715
3888
  </html>
3716
- `,Kt=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
3889
+ `,Jt=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
3717
3890
 
3718
3891
  export default function Page() {
3719
3892
  return <PageSample />;
3720
3893
  }
3721
- `,qt=`import { Outlet } from "react-router";
3894
+ `,Yt=`import { Outlet } from "react-router";
3722
3895
 
3723
3896
  export default function Layout() {
3724
3897
  return <Outlet />;
3725
3898
  }
3726
- `,Jt=`import PageSample from "{{ createImport 'lib' 'pageSamples/page.tsx' }}";
3899
+ `,Xt=`import PageSample from "{{ createImport 'lib' 'pageSamples/page.tsx' }}";
3727
3900
 
3728
3901
  export default function Page() {
3729
3902
  return PageSample({
@@ -3736,8 +3909,8 @@ export default function Page() {
3736
3909
  },
3737
3910
  });
3738
3911
  }
3739
- `,Yt=`export { default } from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}";
3740
- `,Xt=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
3912
+ `,Zt=`export { default } from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}";
3913
+ `,Qt=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
3741
3914
 
3742
3915
  import app from "./app";
3743
3916
 
@@ -3752,12 +3925,12 @@ export default routerFactory((routes) => {
3752
3925
  },
3753
3926
  };
3754
3927
  });
3755
- `,Zt=f((e,t)=>{let{createPath:n,createImportHelpers:r}=h(e),{renderToFile:i}=_({helpers:{...r({origin:`lib`}),...b()},partials:{routePartial:jt}}),{renderToFile:a}=_({helpers:r({origin:`src`})}),o=Et(),l=e=>!e?.trim().length,u=s(t?.templates,Jt),d=async e=>{for(let{kind:t,entry:r}of e)t===`pageRoute`?await a(n.pages(r.file),r.name===`index`?Yt:u(r.name,r),{route:r,message:Dt()},{overwrite:l}):t===`pageLayout`&&await a(n.pages(r.file),qt,{route:r},{overwrite:l})},f=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(v),r=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`||e===`pageLayout`?[t]:[]),a=o(m(r));for(let[e,t]of[[`client.ts`,At],[`server.ts`,Mt]])await i(n.libEntry(e),t,{pageEntries:r,nestedRoutes:a});await i(n.lib(`router.tsx`),Bt,{entries:e,indexRoutes:t})};return{config(){let{templates:e,...n}={...t};return{plugins:[oe(n)]}},async start(){for(let[e,r]of[[`env.d.ts`,``],[`react.ts`,zt],[`pageSamples/styles.module.css`,Ft],[`pageSamples/welcome.tsx`,It],[`pageSamples/page.tsx`,Pt],[`pageSamples/404.tsx`,Nt],...t?.tanstack?.query?[[`app.tsx`,kt],[`query.ts`,Lt]]:[[`app.tsx`,Ot],[`query.ts`,`/** tanstack query disabled */`]]])await i(n.lib(e),r,{});for(let[e,t]of[[`pages/404.tsx`,Kt],[`components/Link.tsx`,Ht],[`app.tsx`,Vt],[`router.ts`,Xt]])await a(n.src(e),t,{entryDir:c.entryDir},{overwrite:l});await a(n.src(`index.html`),Gt,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,Ut],[`server.ts`,Wt]])await a(n.entry(e),t,{},{overwrite:l})},async watch(e,t){(!t||t.kind===`create`)&&await d(e),await f(e)},async build(e){await d(e),await f(e)},async ssrBuild(){await i(n.lib(`query.ts`),t?.tanstack?.query?Rt:`/** tanstack query disabled */`,{ssrBundle:!0})}}}),Qt=d({meta:{name:`React`,jsx:`preserve`,jsxImportSource:`react`},dependencies(e){return{react:W.devDependencies.react,"react-router":W.devDependencies[`react-router`],"path-to-regexp":W.devDependencies[`path-to-regexp`],...e?.tanstack?.query?{"@tanstack/react-query":W.devDependencies[`@tanstack/react-query`]}:{}}},devDependencies:{"@types/react":W.devDependencies[`@types/react`],"@types/react-dom":W.devDependencies[`@types/react-dom`],"react-dom":W.devDependencies[`react-dom`]},factory:Zt}),G={type:`module`,private:!0,name:`@kosmojs/solid-generator`,version:`0.2.9`,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.101.4`,"path-to-regexp":`^8.4.2`,"solid-js":`^1.9.14`}},$t=()=>{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=K(o.map((e,n)=>e.kind===`param`&&(t(o[n+1])||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=K([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},K=e=>{let t=e.map(e=>e.orig).join(`/`),r=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`?[r(e.parts[0])]:(e.parts.length&&(console.warn(`❗${n([`red`,`bold`],`WARN`)}: At the moment Solid Router does not support mixed path segments.`),console.warn(` ${n([`magenta`],e.orig)} segment in ${n([`blue`],t)} route won't match as expected.`),console.warn()),[e.parts.map(e=>e.type===`static`?e.value:r(e)).join(``)])).join(`/`)},en=()=>{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)]},tn=`import type { ParentComponent } from "solid-js";
3928
+ `,$t=f((e,t)=>{let{createPath:n,createImportHelpers:r}=h(e),{renderToFile:i}=_({helpers:{...r({origin:`lib`}),...b()},partials:{routePartial:Nt}}),{renderToFile:a}=_({helpers:r({origin:`src`})}),o=Ot(),l=e=>!e?.trim().length,u=s(t?.templates,Xt),d=async e=>{for(let{kind:t,entry:r}of e)t===`pageRoute`?await a(n.pages(r.file),r.name===`index`?Zt:u(r.name,r),{route:r,message:kt()},{overwrite:l}):t===`pageLayout`&&await a(n.pages(r.file),Yt,{route:r},{overwrite:l})},f=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(v),r=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`||e===`pageLayout`?[t]:[]),a=o(m(r));for(let[e,t]of[[`client.ts`,Mt],[`server.ts`,Pt]])await i(n.libEntry(e),t,{pageEntries:r,nestedRoutes:a});await i(n.lib(`router.tsx`),Ht,{entries:e,indexRoutes:t})};return{config(){let{templates:e,...n}={...t};return{plugins:[oe(n)]}},async start(){for(let[e,r]of[[`env.d.ts`,``],[`react.ts`,Vt],[`pageSamples/styles.module.css`,Lt],[`pageSamples/welcome.tsx`,Rt],[`pageSamples/page.tsx`,It],[`pageSamples/404.tsx`,Ft],...t?.tanstack?.query?[[`app.tsx`,jt],[`query.ts`,zt]]:[[`app.tsx`,At],[`query.ts`,`/** tanstack query disabled */`]]])await i(n.lib(e),r,{});for(let[e,t]of[[`pages/404.tsx`,Jt],[`components/Link.tsx`,Wt],[`app.tsx`,Ut],[`router.ts`,Qt]])await a(n.src(e),t,{entryDir:c.entryDir},{overwrite:l});await a(n.src(`index.html`),qt,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,Gt],[`server.ts`,Kt]])await a(n.entry(e),t,{},{overwrite:l})},async watch(e,t){(!t||t.kind===`create`)&&await d(e),await f(e)},async build(e){await d(e),await f(e)},async ssrBuild(){await i(n.lib(`query.ts`),t?.tanstack?.query?Bt:`/** tanstack query disabled */`,{ssrBundle:!0})}}}),en=d({meta:{name:`React`,jsx:`preserve`,jsxImportSource:`react`},dependencies(e){return{react:W.devDependencies.react,"react-router":W.devDependencies[`react-router`],"path-to-regexp":W.devDependencies[`path-to-regexp`],...e?.tanstack?.query?{"@tanstack/react-query":W.devDependencies[`@tanstack/react-query`]}:{}}},devDependencies:{"@types/react":W.devDependencies[`@types/react`],"@types/react-dom":W.devDependencies[`@types/react-dom`],"react-dom":W.devDependencies[`react-dom`]},factory:$t}),G={type:`module`,private:!0,name:`@kosmojs/solid-generator`,version:`0.2.10`,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.101.4`,"path-to-regexp":`^8.4.2`,"solid-js":`^1.9.14`}},tn=()=>{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=K(o.map((e,n)=>e.kind===`param`&&(t(o[n+1])||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=K([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},K=e=>{let t=e.map(e=>e.orig).join(`/`),r=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`?[r(e.parts[0])]:(e.parts.length&&(console.warn(`❗${n([`red`,`bold`],`WARN`)}: At the moment Solid Router does not support mixed path segments.`),console.warn(` ${n([`magenta`],e.orig)} segment in ${n([`blue`],t)} route won't match as expected.`),console.warn()),[e.parts.map(e=>e.type===`static`?e.value:r(e)).join(``)])).join(`/`)},nn=()=>{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)]},rn=`import type { ParentComponent } from "solid-js";
3756
3929
 
3757
3930
  export const AppProvider: ParentComponent = (props) => {
3758
3931
  return props.children;
3759
3932
  };
3760
- `,nn=`import type { ParentComponent } from "solid-js";
3933
+ `,an=`import type { ParentComponent } from "solid-js";
3761
3934
  import { type QueryClient, QueryClientProvider } from "@tanstack/solid-query";
3762
3935
 
3763
3936
  import { getQueryClient } from "./query";
@@ -3769,7 +3942,7 @@ export const AppProvider: ParentComponent<{ client?: QueryClient }> = (props) =>
3769
3942
  </QueryClientProvider>
3770
3943
  );
3771
3944
  };
3772
- `,rn=`import { lazy, type JSX } from "solid-js";
3945
+ `,on=`import { lazy, type JSX } from "solid-js";
3773
3946
  import { hydrate as hydrateOrig, render } from "solid-js/web";
3774
3947
  import type { RouterFactoryReturn } from "@kosmojs/core";
3775
3948
  import { clientRenderFactory } from "@kosmojs/core/generators";
@@ -3814,7 +3987,7 @@ export const mount = async (
3814
3987
  }
3815
3988
 
3816
3989
  export default clientRenderFactory();
3817
- `,an=`{
3990
+ `,sn=`{
3818
3991
  path: "{{path}}",
3819
3992
  {{#if component}}
3820
3993
  component: {{component}}_component,
@@ -3824,7 +3997,7 @@ export default clientRenderFactory();
3824
3997
  children: [ {{#each children}}{{> routePartial}}, {{/each}}],
3825
3998
  {{/if}}
3826
3999
  }
3827
- `,on=`import type { JSX } from "solid-js";
4000
+ `,cn=`import type { JSX } from "solid-js";
3828
4001
 
3829
4002
  import {
3830
4003
  generateHydrationScript,
@@ -3900,7 +4073,7 @@ export const renderToStream: RenderToStreamWrapper<
3900
4073
  };
3901
4074
 
3902
4075
  export default serverRenderFactory<true>();
3903
- `,sn=`/* @jsxImportSource solid-js */
4076
+ `,ln=`/* @jsxImportSource solid-js */
3904
4077
 
3905
4078
  import styles from "./styles.module.css";
3906
4079
 
@@ -3941,7 +4114,7 @@ export default function PageSample(props: {
3941
4114
  </div>
3942
4115
  );
3943
4116
  }
3944
- `,cn=`/* @jsxImportSource solid-js */
4117
+ `,un=`/* @jsxImportSource solid-js */
3945
4118
 
3946
4119
  import styles from "./styles.module.css";
3947
4120
 
@@ -3993,7 +4166,7 @@ export default function PageSample(props: {
3993
4166
  </div>
3994
4167
  );
3995
4168
  }
3996
- `,ln=`* {
4169
+ `,dn=`* {
3997
4170
  margin: 0;
3998
4171
  padding: 0;
3999
4172
  box-sizing: border-box;
@@ -4128,7 +4301,7 @@ export default function PageSample(props: {
4128
4301
  align-items: center;
4129
4302
  gap: 0.25rem;
4130
4303
  }
4131
- `,un=`/* @jsxImportSource solid-js */
4304
+ `,fn=`/* @jsxImportSource solid-js */
4132
4305
 
4133
4306
  import styles from "./styles.module.css";
4134
4307
 
@@ -4194,7 +4367,7 @@ export default function WelcomePage() {
4194
4367
  </div>
4195
4368
  );
4196
4369
  }
4197
- `,dn=`import { QueryClient, type QueryClientConfig } from "@tanstack/solid-query";
4370
+ `,pn=`import { QueryClient, type QueryClientConfig } from "@tanstack/solid-query";
4198
4371
 
4199
4372
  let client: QueryClient | undefined;
4200
4373
 
@@ -4209,7 +4382,7 @@ export const getQueryClient = (): QueryClient => {
4209
4382
  }
4210
4383
  return client;
4211
4384
  };
4212
- `,fn=`import { QueryClient, type QueryClientConfig } from "@tanstack/solid-query";
4385
+ `,mn=`import { QueryClient, type QueryClientConfig } from "@tanstack/solid-query";
4213
4386
 
4214
4387
  import { store } from "{{ createImport 'lib' '@ssr/base' }}";
4215
4388
 
@@ -4232,7 +4405,7 @@ export const getQueryClient = (): QueryClient => {
4232
4405
  }
4233
4406
  return ctx.tsqClient as QueryClient;
4234
4407
  };
4235
- `,pn=`import type { JSX, ParentComponent } from "solid-js";
4408
+ `,hn=`import type { JSX, ParentComponent } from "solid-js";
4236
4409
  import { Router, type RouteDefinition } from "@solidjs/router";
4237
4410
  import type { RouterFactoryReturn } from "@kosmojs/core";
4238
4411
  import { createRouterFactory } from "@kosmojs/core/generators";
@@ -4268,7 +4441,7 @@ export const createRouters = (
4268
4441
  }
4269
4442
 
4270
4443
  export default createRouterFactory<RouteDefinition, JSX.Element>();
4271
- `,mn=`export type ComponentLoader = () => Promise<{
4444
+ `,gn=`export type ComponentLoader = () => Promise<{
4272
4445
  preload?: () => Promise<unknown>;
4273
4446
  }>;
4274
4447
 
@@ -4288,10 +4461,10 @@ export const loaderFactory = (opt?: { withPreload?: boolean }) => {
4288
4461
  return opt?.withPreload ? { preload } : {};
4289
4462
  };
4290
4463
  };
4291
- `,hn=`export type MaybeWrapped<T> = import("solid-js/store").Store<T> | T;
4464
+ `,_n=`export type MaybeWrapped<T> = import("solid-js/store").Store<T> | T;
4292
4465
 
4293
4466
  export { unwrap } from "solid-js/store";
4294
- `,gn=`import type { ParentComponent } from "solid-js";
4467
+ `,vn=`import type { ParentComponent } from "solid-js";
4295
4468
  import { AppProvider } from "{{ createImport 'lib' 'app' }}";
4296
4469
 
4297
4470
  const App: ParentComponent = (props) => {
@@ -4299,7 +4472,7 @@ const App: ParentComponent = (props) => {
4299
4472
  };
4300
4473
 
4301
4474
  export default App;
4302
- `,_n=`import { A, type AnchorProps } from "@solidjs/router";
4475
+ `,yn=`import { A, type AnchorProps } from "@solidjs/router";
4303
4476
  import { type JSXElement, splitProps } from "solid-js";
4304
4477
 
4305
4478
  import { pageRouteMap, type LinkProps } from "{{ createImport 'libCore' }}";
@@ -4324,7 +4497,7 @@ export default function Link(
4324
4497
 
4325
4498
  return <A {...{ ...restProps, href: href() }}>{knownProps.children}</A>;
4326
4499
  }
4327
- `,vn=`import renderFactory, {
4500
+ `,bn=`import renderFactory, {
4328
4501
  createRoutes,
4329
4502
  hydrate,
4330
4503
  mount,
@@ -4351,7 +4524,7 @@ if (root) {
4351
4524
  } else {
4352
4525
  console.error("❌ Root element not found!");
4353
4526
  }
4354
- `,yn=`import renderFactory, {
4527
+ `,xn=`import renderFactory, {
4355
4528
  createRoutes,
4356
4529
  renderToStream,
4357
4530
  renderToString,
@@ -4378,7 +4551,7 @@ export default renderFactory(() => {
4378
4551
  },
4379
4552
  };
4380
4553
  });
4381
- `,bn=`<!doctype html>
4554
+ `,Sn=`<!doctype html>
4382
4555
  <html lang="en">
4383
4556
  <head>
4384
4557
  <meta charset="UTF-8" />
@@ -4390,19 +4563,19 @@ export default renderFactory(() => {
4390
4563
  <script type="module" src="/{{ entryDir }}/client.ts"><\/script>
4391
4564
  </body>
4392
4565
  </html>
4393
- `,xn=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
4566
+ `,Cn=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
4394
4567
 
4395
4568
  export default function Page() {
4396
4569
  return <PageSample />;
4397
4570
  }
4398
- `,Sn=`import type { ParentComponent } from "solid-js";
4571
+ `,wn=`import type { ParentComponent } from "solid-js";
4399
4572
 
4400
4573
  const Layout: ParentComponent = (props) => {
4401
4574
  return props.children;
4402
4575
  };
4403
4576
 
4404
4577
  export default Layout;
4405
- `,Cn=`import PageSample from "{{ createImport 'lib' 'pageSamples/page.tsx' }}";
4578
+ `,Tn=`import PageSample from "{{ createImport 'lib' 'pageSamples/page.tsx' }}";
4406
4579
 
4407
4580
  export default function Page() {
4408
4581
  return PageSample({
@@ -4415,8 +4588,8 @@ export default function Page() {
4415
4588
  },
4416
4589
  });
4417
4590
  }
4418
- `,wn=`export { default } from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}";
4419
- `,Tn=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
4591
+ `,En=`export { default } from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}";
4592
+ `,Dn=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
4420
4593
 
4421
4594
  import app from "./app";
4422
4595
 
@@ -4431,12 +4604,12 @@ export default routerFactory((routes) => {
4431
4604
  },
4432
4605
  };
4433
4606
  });
4434
- `,En=f((e,t)=>{let{generators:n=[]}=e.config,{createPath:r,createImportHelpers:i}=h(e),{renderToFile:a}=_({helpers:{...i({origin:`lib`}),...b()},partials:{routePartial:an}}),{renderToFile:o}=_({helpers:i({origin:`src`})}),l=$t(),u=e=>!e?.trim().length,d=s(t?.templates,Cn),f=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await o(r.pages(n.file),n.name===`index`?wn:d(n.name,n),{route:n,message:en()},{overwrite:u}):t===`pageLayout`&&await o(r.pages(n.file),Sn,{route:n},{overwrite:u})},p=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(v),n=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`||e===`pageLayout`?[t]:[]),i=l(m(n));for(let[e,t]of[[`client.ts`,rn],[`server.ts`,on]])await a(r.libEntry(e),t,{pageEntries:n,nestedRoutes:i});await a(r.lib(`router.tsx`),pn,{entries:e,indexRoutes:t})};return{config({command:e}){let{templates:r,...i}={...t};return{oxc:{jsx:{importSource:`solid-js`}},plugins:e===`build`?[w({...i,...n.some(e=>e.meta.slot===`ssr`)?{ssr:!0,solid:{...i?.solid,hydratable:!0}}:{}})]:[w({...i,dev:!0,hot:!0})]}},async start(){for(let[e,n]of[[`env.d.ts`,``],[`solid.ts`,mn],[`unwrap.ts`,hn],[`pageSamples/styles.module.css`,ln],[`pageSamples/welcome.tsx`,un],[`pageSamples/page.tsx`,cn],[`pageSamples/404.tsx`,sn],...t?.tanstack?.query?[[`app.tsx`,nn],[`query.ts`,dn]]:[[`app.tsx`,tn],[`query.ts`,`/** tanstack query disabled */`]]])await a(r.lib(e),n,{});for(let[e,t]of[[`pages/404.tsx`,xn],[`components/Link.tsx`,_n],[`app.tsx`,gn],[`router.ts`,Tn]])await o(r.src(e),t,{entryDir:c.entryDir},{overwrite:u});await o(r.src(`index.html`),bn,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,vn],[`server.ts`,yn]])await o(r.entry(e),t,{},{overwrite:u})},async watch(e,t){(!t||t.kind===`create`)&&await f(e),await p(e)},async build(e){await f(e),await p(e)},async ssrBuild(){await a(r.lib(`query.ts`),t?.tanstack?.query?fn:`/** tanstack query disabled */`,{ssrBundle:!0})}}}),Dn=d({meta:{name:`SolidJS`,jsx:`preserve`,jsxImportSource:`solid-js`},dependencies(e){return{"solid-js":G.devDependencies[`solid-js`],"@solidjs/router":G.devDependencies[`@solidjs/router`],"path-to-regexp":G.devDependencies[`path-to-regexp`],...e?.tanstack?.query?{"@tanstack/solid-query":G.devDependencies[`@tanstack/solid-query`]}:{}}},factory:En}),On=f(r=>{let{generators:i=[],refineTypeName:a,...o}={...r.config},{createPath:s}=h(r);return{async postBuild(){let a=s.distDir(`ssg`),c=t(a,`../ssr/server.js`);if(!await se(c,ce.F_OK).then(()=>!0,()=>!1)){console.error(),console.error(n(`red`,`❗Please enable ssrGenerator in ${r.name}/kosmo.config.ts`)),console.error(` SSG generator can not run without SSR server`),console.error();return}let l=te(`${r.name}: SSG`);l.append(`preparing...`);let{createDisposableServer:u}=await import(c);await T(t(a,`../client/assets`),e(a,`assets`),{recursive:!0}),l.append(`bundling routes...`),await S(p(o,...i.map(({factory:e})=>e(r).config?.({kind:`client`,command:`build`})),{root:s.lib(),appType:`custom`,plugins:[y.tsconfigPaths(r),y.nodePrefix()],resolve:{conditions:[`node`]},build:{ssr:s.lib(`ssg.ts`),target:`esnext`,sourcemap:!1,emptyOutDir:!0,rolldownOptions:{output:{dir:a,entryFileNames:`routes.js`,format:`esm`}}}}));try{let t=await import(e(a,`routes.js`)).then(e=>e.default);u(async n=>{for(let[r,i]of t.entries()){l.append(`[ ${r+1} of ${t.length} ] ${i}`);let o=await kn(n,i);o!==void 0&&(await le(e(a,i),{recursive:!0}),await ue(e(a,e(i,`index.html`)),o,`utf8`))}l.succeed(`done ✨`)})}finally{await E(`${a}/routes.js`)}}}}),kn=async(e,t)=>{try{let n=`http://localhost:${e}${t}`;return await(await fetch(n)).text()}catch(e){console.error(n(`red`,`✗ SSG: Failed generating ${t} route: ${e.message}`));return}},An=d({meta:{name:`SSG`,slot:`ssg`},factory:On}),q={type:`module`,private:!0,name:`@kosmojs/ssr-generator`,version:`0.2.9`,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.0`},devDependencies:{"@hono/node-server":`^2.1.0`,hono:`^4.13.0`,"light-my-request":`^6.6.0`,tinyglobby:`^0.2.17`}},jn=`{{#if apiGenerator}}
4607
+ `,On=f((e,t)=>{let{generators:n=[]}=e.config,{createPath:r,createImportHelpers:i}=h(e),{renderToFile:a}=_({helpers:{...i({origin:`lib`}),...b()},partials:{routePartial:sn}}),{renderToFile:o}=_({helpers:i({origin:`src`})}),l=tn(),u=e=>!e?.trim().length,d=s(t?.templates,Tn),f=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await o(r.pages(n.file),n.name===`index`?En:d(n.name,n),{route:n,message:nn()},{overwrite:u}):t===`pageLayout`&&await o(r.pages(n.file),wn,{route:n},{overwrite:u})},p=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(v),n=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`||e===`pageLayout`?[t]:[]),i=l(m(n));for(let[e,t]of[[`client.ts`,on],[`server.ts`,cn]])await a(r.libEntry(e),t,{pageEntries:n,nestedRoutes:i});await a(r.lib(`router.tsx`),hn,{entries:e,indexRoutes:t})};return{config({command:e}){let{templates:r,...i}={...t};return{oxc:{jsx:{importSource:`solid-js`}},plugins:e===`build`?[w({...i,...n.some(e=>e.meta.slot===`ssr`)?{ssr:!0,solid:{...i?.solid,hydratable:!0}}:{}})]:[w({...i,dev:!0,hot:!0})]}},async start(){for(let[e,n]of[[`env.d.ts`,``],[`solid.ts`,gn],[`unwrap.ts`,_n],[`pageSamples/styles.module.css`,dn],[`pageSamples/welcome.tsx`,fn],[`pageSamples/page.tsx`,un],[`pageSamples/404.tsx`,ln],...t?.tanstack?.query?[[`app.tsx`,an],[`query.ts`,pn]]:[[`app.tsx`,rn],[`query.ts`,`/** tanstack query disabled */`]]])await a(r.lib(e),n,{});for(let[e,t]of[[`pages/404.tsx`,Cn],[`components/Link.tsx`,yn],[`app.tsx`,vn],[`router.ts`,Dn]])await o(r.src(e),t,{entryDir:c.entryDir},{overwrite:u});await o(r.src(`index.html`),Sn,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,bn],[`server.ts`,xn]])await o(r.entry(e),t,{},{overwrite:u})},async watch(e,t){(!t||t.kind===`create`)&&await f(e),await p(e)},async build(e){await f(e),await p(e)},async ssrBuild(){await a(r.lib(`query.ts`),t?.tanstack?.query?mn:`/** tanstack query disabled */`,{ssrBundle:!0})}}}),kn=d({meta:{name:`SolidJS`,jsx:`preserve`,jsxImportSource:`solid-js`},dependencies(e){return{"solid-js":G.devDependencies[`solid-js`],"@solidjs/router":G.devDependencies[`@solidjs/router`],"path-to-regexp":G.devDependencies[`path-to-regexp`],...e?.tanstack?.query?{"@tanstack/solid-query":G.devDependencies[`@tanstack/solid-query`]}:{}}},factory:On}),An=f(r=>{let{generators:i=[],refineTypeName:a,...o}={...r.config},{createPath:s}=h(r);return{async postBuild(){let a=s.distDir(`ssg`),c=t(a,`../ssr/server.js`);if(!await se(c,ce.F_OK).then(()=>!0,()=>!1)){console.error(),console.error(n(`red`,`❗Please enable ssrGenerator in ${r.name}/kosmo.config.ts`)),console.error(` SSG generator can not run without SSR server`),console.error();return}let l=te(`${r.name}: SSG`);l.append(`preparing...`);let{createDisposableServer:u}=await import(c);await T(t(a,`../client/assets`),e(a,`assets`),{recursive:!0}),l.append(`bundling routes...`),await S(p(o,...i.map(({factory:e})=>e(r).config?.({kind:`client`,command:`build`})),{root:s.lib(),appType:`custom`,plugins:[y.tsconfigPaths(r),y.nodePrefix()],resolve:{conditions:[`node`]},build:{ssr:s.lib(`ssg.ts`),target:`esnext`,sourcemap:!1,emptyOutDir:!0,rolldownOptions:{output:{dir:a,entryFileNames:`routes.js`,format:`esm`}}}}));try{let t=await import(e(a,`routes.js`)).then(e=>e.default);u(async n=>{for(let[r,i]of t.entries()){l.append(`[ ${r+1} of ${t.length} ] ${i}`);let o=await jn(n,i);o!==void 0&&(await le(e(a,i),{recursive:!0}),await ue(e(a,e(i,`index.html`)),o,`utf8`))}l.succeed(`done ✨`)})}finally{await E(`${a}/routes.js`)}}}}),jn=async(e,t)=>{try{let n=`http://localhost:${e}${t}`;return await(await fetch(n)).text()}catch(e){console.error(n(`red`,`✗ SSG: Failed generating ${t} route: ${e.message}`));return}},Mn=d({meta:{name:`SSG`,slot:`ssg`},factory:An}),q={type:`module`,private:!0,name:`@kosmojs/ssr-generator`,version:`0.2.10`,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.1`},devDependencies:{"@hono/node-server":`^2.1.0`,hono:`^4.13.1`,"light-my-request":`^6.6.0`,tinyglobby:`^0.2.17`}},Nn=`{{#if apiGenerator}}
4435
4608
  export { default as apiApp } from "{{ createImport 'api' 'app' }}";
4436
4609
  {{else}}
4437
4610
  export const apiApp = undefined;
4438
4611
  {{/if}}
4439
- `,Mn=`import { AsyncLocalStorage } from "node:async_hooks";
4612
+ `,Pn=`import { AsyncLocalStorage } from "node:async_hooks";
4440
4613
 
4441
4614
  export type RequestContext = {
4442
4615
  headers?: HeadersInit;
@@ -4473,7 +4646,7 @@ export const maxRedirects = 5;
4473
4646
  * Server-only module - never reaches browser bundles.
4474
4647
  * */
4475
4648
  export const store = new AsyncLocalStorage<RequestContext>();
4476
- `,Nn=`import { type RequestContext, store } from "./base";
4649
+ `,Fn=`import { type RequestContext, store } from "./base";
4477
4650
 
4478
4651
  import { renderWrapper } from "{{ createImport 'libEntry' 'server' }}";
4479
4652
 
@@ -4491,7 +4664,7 @@ export const withSsrContext = <T>(
4491
4664
  ): T => {
4492
4665
  return store.run(context, () => renderWrapper(context, render));
4493
4666
  };
4494
- `,Pn=`import { inject } from "light-my-request";
4667
+ `,In=`import { inject } from "light-my-request";
4495
4668
 
4496
4669
  import { type FetchApp, isFetchApp, type NodeApp } from "@kosmojs/core";
4497
4670
  import type { Transport } from "@kosmojs/core/fetch";
@@ -4630,12 +4803,12 @@ const createNodeDispatch = (app: NodeApp) => {
4630
4803
  };
4631
4804
 
4632
4805
  export const transport = apiApp ? createTransport(apiApp) : globalThis.fetch;
4633
- `,Fn=`export const routeMap = [
4806
+ `,Ln=`export const routeMap = [
4634
4807
  {{#each pageRoutes}}
4635
4808
  { pathPattern: "{{honoPattern}}", renderMode: "{{renderMode}}" },
4636
4809
  {{/each}}
4637
4810
  ];
4638
- `,In=`import { access, chmod, constants, readFile, unlink } from "node:fs/promises";
4811
+ `,Rn=`import { access, chmod, constants, readFile, unlink } from "node:fs/promises";
4639
4812
  import {
4640
4813
  createServer,
4641
4814
  type IncomingMessage,
@@ -5020,14 +5193,14 @@ if (isMain) {
5020
5193
  process.exit(1);
5021
5194
  }
5022
5195
  }
5023
- `,Ln=`string`,Rn=f((n,r)=>{let{generators:i=[],refineTypeName:a,...s}=n.config,{createPath:c,createImportHelpers:l}=h(n),{renderToFile:u}=_({helpers:{...l({origin:`lib`})}});return{async build(e){let t=r?.renderMode?typeof r.renderMode==`string`?()=>r.renderMode:o(r?.renderMode,`string`):()=>Ln,n={renderMode:JSON.stringify(r?.renderMode||null),pageRoutes:e.flatMap(e=>e.kind===`pageRoute`?[{...e.entry,renderMode:t(e.entry.name)}]:[]).sort(v),apiGenerator:i.some(e=>e.meta.slot===`backend`)};for(let[e,t]of[[`ssr.ts`,In],[`@ssr/api.ts`,jn],[`@ssr/__kosmo_ssr_bundle.ts`,Nn],[`@ssr/base.ts`,Mn],[`@ssr/fetch.ts`,Pn],[`@ssr/routes.ts`,Fn]])await u(c.lib(e),t,n)},async postBuild(){let r=c.distDir(`ssr`),a=[y.tsconfigPaths(n),y.nodePrefix()];for(let e of i)await e.factory(n).ssrBuild?.();await S(p(s,...i.map(({factory:e})=>e(n).config?.({kind:`client`,command:`build`})),{root:c.src(),plugins:a,define:{KOSMO_PRODUCTION_BUILD:`true`},build:{ssr:c.lib(`@ssr/__kosmo_ssr_bundle`),ssrEmitAssets:!0,sourcemap:!0,emptyOutDir:!0,minify:!1,rolldownOptions:{output:{dir:r,entryFileNames:`app.js`,format:`esm`}}}})),await S({root:c.lib(),configFile:!1,appType:`custom`,plugins:a,resolve:{conditions:[`node`]},build:{ssr:c.lib(`ssr.ts`),target:`esnext`,sourcemap:!0,emptyOutDir:!0,rolldownOptions:{output:{dir:e(r,`server`),entryFileNames:`server.js`,format:`esm`}}}}),await T(t(r,`../client`),r,{recursive:!0});for(let e of[`server.js`,`server.js.map`])await T(`${r}/server/${e}`,`${r}/${e}`);await E(`${r}/server`,{recursive:!0,force:!0})}}}),zn=d({meta:{name:`SSR`,slot:`ssr`},dependencies:{tinyglobby:q.devDependencies.tinyglobby,hono:q.devDependencies.hono,"@hono/node-server":q.devDependencies[`@hono/node-server`],"light-my-request":q.devDependencies[`light-my-request`]},factory:Rn}),J={type:`module`,private:!0,name:`@kosmojs/svelte-generator`,version:`0.2.9`,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.2.0`,vite:`^8.2.0`},devDependencies:{"@tanstack/svelte-query":`^6.1.38`,"path-to-regexp":`^8.4.2`,svelte:`^5.56.8`}},Bn=()=>{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)]},Y=`<script lang="ts">
5196
+ `,zn=`string`,Bn=f((n,r)=>{let{generators:i=[],refineTypeName:a,...s}=n.config,{createPath:c,createImportHelpers:l}=h(n),{renderToFile:u}=_({helpers:{...l({origin:`lib`})}});return{async build(e){let t=r?.renderMode?typeof r.renderMode==`string`?()=>r.renderMode:o(r?.renderMode,`string`):()=>zn,n={renderMode:JSON.stringify(r?.renderMode||null),pageRoutes:e.flatMap(e=>e.kind===`pageRoute`?[{...e.entry,renderMode:t(e.entry.name)}]:[]).sort(v),apiGenerator:i.some(e=>e.meta.slot===`backend`)};for(let[e,t]of[[`ssr.ts`,Rn],[`@ssr/api.ts`,Nn],[`@ssr/__kosmo_ssr_bundle.ts`,Fn],[`@ssr/base.ts`,Pn],[`@ssr/fetch.ts`,In],[`@ssr/routes.ts`,Ln]])await u(c.lib(e),t,n)},async postBuild(){let r=c.distDir(`ssr`),a=[y.tsconfigPaths(n),y.nodePrefix()];for(let e of i)await e.factory(n).ssrBuild?.();await S(p(s,...i.map(({factory:e})=>e(n).config?.({kind:`client`,command:`build`})),{root:c.src(),plugins:a,define:{KOSMO_PRODUCTION_BUILD:`true`},build:{ssr:c.lib(`@ssr/__kosmo_ssr_bundle`),ssrEmitAssets:!0,sourcemap:!0,emptyOutDir:!0,minify:!1,rolldownOptions:{output:{dir:r,entryFileNames:`app.js`,format:`esm`}}}})),await S({root:c.lib(),configFile:!1,appType:`custom`,plugins:a,resolve:{conditions:[`node`]},build:{ssr:c.lib(`ssr.ts`),target:`esnext`,sourcemap:!0,emptyOutDir:!0,rolldownOptions:{output:{dir:e(r,`server`),entryFileNames:`server.js`,format:`esm`}}}}),await T(t(r,`../client`),r,{recursive:!0});for(let e of[`server.js`,`server.js.map`])await T(`${r}/server/${e}`,`${r}/${e}`);await E(`${r}/server`,{recursive:!0,force:!0})}}}),Vn=d({meta:{name:`SSR`,slot:`ssr`},dependencies:{tinyglobby:q.devDependencies.tinyglobby,hono:q.devDependencies.hono,"@hono/node-server":q.devDependencies[`@hono/node-server`],"light-my-request":q.devDependencies[`light-my-request`]},factory:Bn}),J={type:`module`,private:!0,name:`@kosmojs/svelte-generator`,version:`0.2.10`,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.2.0`,vite:`^8.2.1`},devDependencies:{"@tanstack/svelte-query":`^6.1.38`,"path-to-regexp":`^8.4.2`,svelte:`^5.56.8`}},Hn=()=>{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)]},Y=`<script lang="ts">
5024
5197
  import type { Snippet } from "svelte";
5025
5198
 
5026
5199
  let { children }: { children: Snippet } = $props();
5027
5200
  <\/script>
5028
5201
 
5029
5202
  {@render children()}
5030
- `,Vn=`<script lang="ts">
5203
+ `,Un=`<script lang="ts">
5031
5204
  import { type QueryClient, QueryClientProvider } from "@tanstack/svelte-query";
5032
5205
  import type { Snippet } from "svelte";
5033
5206
 
@@ -5044,7 +5217,7 @@ if (isMain) {
5044
5217
  <QueryClientProvider client={queryClient}>
5045
5218
  {@render children()}
5046
5219
  </QueryClientProvider>
5047
- `,Hn=`import { hydrate as hydrateOrig, mount as mountOrig } from "svelte";
5220
+ `,Wn=`import { hydrate as hydrateOrig, mount as mountOrig } from "svelte";
5048
5221
  import type { RouterFactoryReturn } from "@kosmojs/core";
5049
5222
  import { clientRenderFactory } from "@kosmojs/core/generators";
5050
5223
 
@@ -5085,7 +5258,7 @@ export const mount = async (
5085
5258
  }
5086
5259
 
5087
5260
  export default clientRenderFactory();
5088
- `,Un=`import { render as renderOrig } from "svelte/server";
5261
+ `,Gn=`import { render as renderOrig } from "svelte/server";
5089
5262
 
5090
5263
  import type {
5091
5264
  RenderToStringWrapper,
@@ -5151,12 +5324,12 @@ export const renderToString: RenderToStringWrapper<
5151
5324
  // svelte/server exposes only render() - no web-stream renderer -
5152
5325
  // so this folder is string-only SSR.
5153
5326
  export default serverRenderFactory<false>();
5154
- `,Wn=`declare module "*.svelte" {
5327
+ `,Kn=`declare module "*.svelte" {
5155
5328
  import type { Component } from "svelte";
5156
5329
  const component: Component;
5157
5330
  export default component;
5158
5331
  }
5159
- `,Gn=`<script lang="ts">
5332
+ `,qn=`<script lang="ts">
5160
5333
  /**
5161
5334
  * Folds [app, ...layouts] around the page component.
5162
5335
  *
@@ -5190,7 +5363,7 @@ export default serverRenderFactory<false>();
5190
5363
  {/snippet}
5191
5364
 
5192
5365
  {@render layer(0)}
5193
- `,Kn=`<script lang="ts">
5366
+ `,Jn=`<script lang="ts">
5194
5367
  import styles from "./styles.module.css";
5195
5368
 
5196
5369
  let { headline }: { headline?: string } = $props();
@@ -5222,7 +5395,7 @@ export default serverRenderFactory<false>();
5222
5395
  </div>
5223
5396
  </div>
5224
5397
  </div>
5225
- `,qn=`<script lang="ts">
5398
+ `,Yn=`<script lang="ts">
5226
5399
  import styles from "./styles.module.css";
5227
5400
 
5228
5401
  let {
@@ -5267,7 +5440,7 @@ export default serverRenderFactory<false>();
5267
5440
  </div>
5268
5441
  </div>
5269
5442
  </div>
5270
- `,Jn=`* {
5443
+ `,Xn=`* {
5271
5444
  margin: 0;
5272
5445
  padding: 0;
5273
5446
  box-sizing: border-box;
@@ -5402,7 +5575,7 @@ export default serverRenderFactory<false>();
5402
5575
  align-items: center;
5403
5576
  gap: 0.25rem;
5404
5577
  }
5405
- `,Yn=`<script lang="ts">
5578
+ `,Zn=`<script lang="ts">
5406
5579
  import styles from "./styles.module.css";
5407
5580
  <\/script>
5408
5581
 
@@ -5460,7 +5633,7 @@ export default serverRenderFactory<false>();
5460
5633
  </div>
5461
5634
  </div>
5462
5635
  </div>
5463
- `,Xn=`export type ParamsMap = {
5636
+ `,Qn=`export type ParamsMap = {
5464
5637
  {{#each pageRoutes}}"{{name}}": {{serializeParamsLiteral .}};
5465
5638
  {{/each}}
5466
5639
  };
@@ -5469,7 +5642,7 @@ export const paramNames = {
5469
5642
  {{#each pageRoutes}}"{{name}}": [ {{#each params.schema}}"{{name}}", {{/each}}],
5470
5643
  {{/each}}
5471
5644
  } as const;
5472
- `,Zn=`import { QueryClient, type QueryClientConfig } from "@tanstack/svelte-query";
5645
+ `,$n=`import { QueryClient, type QueryClientConfig } from "@tanstack/svelte-query";
5473
5646
 
5474
5647
  let client: QueryClient | undefined;
5475
5648
 
@@ -5484,7 +5657,7 @@ export const getQueryClient = (): QueryClient => {
5484
5657
  }
5485
5658
  return client;
5486
5659
  };
5487
- `,Qn=`import { QueryClient, type QueryClientConfig } from "@tanstack/svelte-query";
5660
+ `,er=`import { QueryClient, type QueryClientConfig } from "@tanstack/svelte-query";
5488
5661
 
5489
5662
  import { store } from "{{ createImport 'lib' '@ssr/base' }}";
5490
5663
 
@@ -5507,7 +5680,7 @@ export const getQueryClient = (): QueryClient => {
5507
5680
  }
5508
5681
  return ctx.tsqClient as QueryClient;
5509
5682
  };
5510
- `,$n=`import type { RouterFactoryReturn } from "@kosmojs/core";
5683
+ `,tr=`import type { RouterFactoryReturn } from "@kosmojs/core";
5511
5684
  import { createRouterFactory } from "@kosmojs/core/generators";
5512
5685
 
5513
5686
  import Layouts from "./Layouts.svelte";
@@ -5547,7 +5720,7 @@ export default createRouterFactory<
5547
5720
  Promise<RouteComponent>,
5548
5721
  { server: { route: Route } }
5549
5722
  >();
5550
- `,er=`import { match, pathToRegexp } from "path-to-regexp";
5723
+ `,nr=`import { match, pathToRegexp } from "path-to-regexp";
5551
5724
  import { type Component, createContext } from "svelte";
5552
5725
 
5553
5726
  import { paramNames } from "{{ createImport 'lib' 'params' }}";
@@ -5758,7 +5931,7 @@ export const createRoute = (
5758
5931
  layouts,
5759
5932
  };
5760
5933
  };
5761
- `,tr=`import { getRouteContext } from "./svelte";
5934
+ `,rr=`import { getRouteContext } from "./svelte";
5762
5935
 
5763
5936
  import type { ParamsMap, paramNames } from "{{ createImport 'lib' 'params' }}";
5764
5937
 
@@ -5794,7 +5967,7 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
5794
5967
  const route = useRoute();
5795
5968
  return route.loaderData?.[key || route.name] as T;
5796
5969
  };
5797
- `,nr=`<script lang="ts">
5970
+ `,ir=`<script lang="ts">
5798
5971
  import { AppProvider } from "{{ createImport 'lib' 'app' }}";
5799
5972
  import type { Snippet } from "svelte";
5800
5973
 
@@ -5804,7 +5977,7 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
5804
5977
  <AppProvider>
5805
5978
  {@render children()}
5806
5979
  </AppProvider>
5807
- `,rr=`<script lang="ts">
5980
+ `,ar=`<script lang="ts">
5808
5981
  import type { Snippet } from "svelte";
5809
5982
  import type { HTMLAnchorAttributes } from "svelte/elements";
5810
5983
 
@@ -5828,7 +6001,7 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
5828
6001
  <\/script>
5829
6002
 
5830
6003
  <a {href} {...rest}>{@render children?.()}</a>
5831
- `,ir=`import renderFactory, {
6004
+ `,or=`import renderFactory, {
5832
6005
  createRoutes,
5833
6006
  hydrate,
5834
6007
  mount,
@@ -5855,7 +6028,7 @@ if (root) {
5855
6028
  } else {
5856
6029
  console.error("❌ Root element not found!");
5857
6030
  }
5858
- `,ar=`import renderFactory, {
6031
+ `,sr=`import renderFactory, {
5859
6032
  createRoutes,
5860
6033
  renderToString,
5861
6034
  // no renderToStream on Svelte folders
@@ -5876,7 +6049,7 @@ export default renderFactory(() => {
5876
6049
  },
5877
6050
  };
5878
6051
  });
5879
- `,or=`<!doctype html>
6052
+ `,cr=`<!doctype html>
5880
6053
  <html lang="en">
5881
6054
  <head>
5882
6055
  <meta charset="UTF-8" />
@@ -5888,19 +6061,19 @@ export default renderFactory(() => {
5888
6061
  <script type="module" src="/{{ entryDir }}/client.ts"><\/script>
5889
6062
  </body>
5890
6063
  </html>
5891
- `,sr=`<script lang="ts">
6064
+ `,lr=`<script lang="ts">
5892
6065
  import PageSample from "{{ createImport 'lib' 'pageSamples/404.svelte' }}";
5893
6066
  <\/script>
5894
6067
 
5895
6068
  <PageSample />
5896
- `,cr=`<script lang="ts">
6069
+ `,ur=`<script lang="ts">
5897
6070
  import type { Snippet } from "svelte";
5898
6071
 
5899
6072
  let { children }: { children: Snippet } = $props();
5900
6073
  <\/script>
5901
6074
 
5902
6075
  {@render children()}
5903
- `,lr=`<script lang="ts">
6076
+ `,dr=`<script lang="ts">
5904
6077
  import PageSample from "{{ createImport 'lib' 'pageSamples/page.svelte' }}";
5905
6078
 
5906
6079
  const pathMap = {
@@ -5919,7 +6092,7 @@ export default renderFactory(() => {
5919
6092
  routeName={"{{route.name}}"}
5920
6093
  {pathMap}
5921
6094
  />
5922
- `,ur=`<script lang="ts">
6095
+ `,fr=`<script lang="ts">
5923
6096
  import WelcomePage from "{{ createImport 'lib' 'pageSamples/welcome.svelte' }}";
5924
6097
  <\/script>
5925
6098
 
@@ -5932,7 +6105,7 @@ export default renderFactory(() => {
5932
6105
  </svelte:head>
5933
6106
 
5934
6107
  <WelcomePage />
5935
- `,dr=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
6108
+ `,pr=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
5936
6109
 
5937
6110
  import app from "./app.svelte";
5938
6111
 
@@ -5947,7 +6120,7 @@ export default routerFactory((routes) => {
5947
6120
  },
5948
6121
  };
5949
6122
  });
5950
- `,fr=f((e,t)=>{let{createPath:n,createImportHelpers:r}=h(e),{renderToFile:i}=_({helpers:{...r({origin:`lib`}),...b()}}),{renderToFile:a}=_({helpers:r({origin:`src`})}),o=e=>!e?.trim().length,l=s(t?.templates,lr),u=async e=>{for(let{kind:t,entry:r}of e)t===`pageRoute`?await a(n.pages(r.file),r.name===`index`?ur:l(r.name,r),{route:r,title:r.name.replace(/\{([^}]+)\}/g,`$1`),message:Bn()},{overwrite:o}):t===`pageLayout`&&await a(n.pages(r.file),cr,{route:r},{overwrite:o})},d=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageLayout`?[t]:[]),r=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(v)}]}return[]}).sort(v);for(let[e,a]of[[`client.ts`,Hn],[`server.ts`,Un]])await i(n.libEntry(e),a,{pageRoutes:r,layouts:t});for(let[e,t]of[[`params.ts`,Xn],[`router.ts`,$n]])await i(n.lib(e),t,{pageRoutes:r})};return{config(){let{templates:e,...n}={...t};return{plugins:de(n)}},async start(){for(let[e,r]of[[`env.d.ts`,Wn],[`svelte.ts`,er],[`Layouts.svelte`,Gn],[`use.ts`,tr],[`pageSamples/styles.module.css`,Jn],[`pageSamples/welcome.svelte`,Yn],[`pageSamples/page.svelte`,qn],[`pageSamples/404.svelte`,Kn],...t?.tanstack?.query?[[`app/app.svelte`,Y],[`app/app-tsq.svelte`,Vn],[`app/index.ts`,`export { default as AppProvider } from "./app-tsq.svelte";`],[`query.ts`,Zn]]:[[`app/app.svelte`,Y],[`app/app-tsq.svelte`,`/** tanstack query disabled */`],[`app/index.ts`,`export { default as AppProvider } from "./app.svelte";`],[`query.ts`,`/** tanstack query disabled */`]]])await i(n.lib(e),r,{});for(let[e,t]of[[`pages/404.svelte`,sr],[`components/Link.svelte`,rr],[`app.svelte`,nr],[`router.ts`,dr]])await a(n.src(e),t,{entryDir:c.entryDir},{overwrite:o});await a(n.src(`index.html`),or,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,ir],[`server.ts`,ar]])await a(n.entry(e),t,{},{overwrite:o})},async watch(e,t){(!t||t.kind===`create`)&&await u(e),await d(e)},async build(e){await u(e),await d(e)},async ssrBuild(){await i(n.lib(`query.ts`),t?.tanstack?.query?Qn:`/** tanstack query disabled */`,{ssrBundle:!0})}}}),pr=d({meta:{name:`Svelte`},dependencies(e){return{svelte:J.devDependencies.svelte,"path-to-regexp":J.devDependencies[`path-to-regexp`],...e?.tanstack?.query?{"@tanstack/svelte-query":J.devDependencies[`@tanstack/svelte-query`]}:{}}},factory:fr}),mr={type:`module`,private:!0,name:`@kosmojs/typebox-generator`,version:`0.2.9`,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.10`}},hr=`import Type from "typebox";
6123
+ `,mr=f((e,t)=>{let{createPath:n,createImportHelpers:r}=h(e),{renderToFile:i}=_({helpers:{...r({origin:`lib`}),...b()}}),{renderToFile:a}=_({helpers:r({origin:`src`})}),o=e=>!e?.trim().length,l=s(t?.templates,dr),u=async e=>{for(let{kind:t,entry:r}of e)t===`pageRoute`?await a(n.pages(r.file),r.name===`index`?fr:l(r.name,r),{route:r,title:r.name.replace(/\{([^}]+)\}/g,`$1`),message:Hn()},{overwrite:o}):t===`pageLayout`&&await a(n.pages(r.file),ur,{route:r},{overwrite:o})},d=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageLayout`?[t]:[]),r=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(v)}]}return[]}).sort(v);for(let[e,a]of[[`client.ts`,Wn],[`server.ts`,Gn]])await i(n.libEntry(e),a,{pageRoutes:r,layouts:t});for(let[e,t]of[[`params.ts`,Qn],[`router.ts`,tr]])await i(n.lib(e),t,{pageRoutes:r})};return{config(){let{templates:e,...n}={...t};return{plugins:de(n)}},async start(){for(let[e,r]of[[`env.d.ts`,Kn],[`svelte.ts`,nr],[`Layouts.svelte`,qn],[`use.ts`,rr],[`pageSamples/styles.module.css`,Xn],[`pageSamples/welcome.svelte`,Zn],[`pageSamples/page.svelte`,Yn],[`pageSamples/404.svelte`,Jn],...t?.tanstack?.query?[[`app/app.svelte`,Y],[`app/app-tsq.svelte`,Un],[`app/index.ts`,`export { default as AppProvider } from "./app-tsq.svelte";`],[`query.ts`,$n]]:[[`app/app.svelte`,Y],[`app/app-tsq.svelte`,`/** tanstack query disabled */`],[`app/index.ts`,`export { default as AppProvider } from "./app.svelte";`],[`query.ts`,`/** tanstack query disabled */`]]])await i(n.lib(e),r,{});for(let[e,t]of[[`pages/404.svelte`,lr],[`components/Link.svelte`,ar],[`app.svelte`,ir],[`router.ts`,pr]])await a(n.src(e),t,{entryDir:c.entryDir},{overwrite:o});await a(n.src(`index.html`),cr,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,or],[`server.ts`,sr]])await a(n.entry(e),t,{},{overwrite:o})},async watch(e,t){(!t||t.kind===`create`)&&await u(e),await d(e)},async build(e){await u(e),await d(e)},async ssrBuild(){await i(n.lib(`query.ts`),t?.tanstack?.query?er:`/** tanstack query disabled */`,{ssrBundle:!0})}}}),hr=d({meta:{name:`Svelte`},dependencies(e){return{svelte:J.devDependencies.svelte,"path-to-regexp":J.devDependencies[`path-to-regexp`],...e?.tanstack?.query?{"@tanstack/svelte-query":J.devDependencies[`@tanstack/svelte-query`]}:{}}},factory:mr}),gr={type:`module`,private:!0,name:`@kosmojs/typebox-generator`,version:`0.2.10`,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.11`}},_r=`import Type from "typebox";
5951
6124
 
5952
6125
  /**
5953
6126
  * Custom types for JavaScript constructs that have no JSON Schema
@@ -6019,7 +6192,7 @@ export default {
6019
6192
  Buffer: TBuffer(),
6020
6193
  ArrayBuffer: TArrayBuffer(),
6021
6194
  };
6022
- `,gr=`import type { TValidationError } from "typebox/error";
6195
+ `,vr=`import type { TValidationError } from "typebox/error";
6023
6196
 
6024
6197
  import type { ValidationErrorEntry } from "@kosmojs/core";
6025
6198
 
@@ -7203,7 +7376,7 @@ const format = (fmt: string, ...args: unknown[]): string => {
7203
7376
 
7204
7377
  return str;
7205
7378
  };
7206
- `,_r=`import Type from "typebox";
7379
+ `,yr=`import Type from "typebox";
7207
7380
  import { Compile } from "typebox/compile";
7208
7381
  import Value from "typebox/value";
7209
7382
 
@@ -7255,14 +7428,14 @@ export const validationSchemaFactory = (
7255
7428
  },
7256
7429
  };
7257
7430
  };
7258
- `,vr=`import { Settings } from "typebox/system";
7431
+ `,br=`import { Settings } from "typebox/system";
7259
7432
 
7260
7433
  Settings.Set({{settings}});
7261
7434
 
7262
7435
  export { default as customTypes } from "{{customTypesImport}}";
7263
7436
 
7264
7437
  export const validationMessages = {{validationMessages}};
7265
- `,yr=`import type { ValidationSchemas } from "@kosmojs/core";
7438
+ `,xr=`import type { ValidationSchemas } from "@kosmojs/core";
7266
7439
 
7267
7440
  import { validationSchemaFactory } from "{{ createImport 'lib' '@typebox' }}";
7268
7441
 
@@ -7323,14 +7496,14 @@ export const validationSchemas: ValidationSchemas = {
7323
7496
  {{/each}}
7324
7497
  },
7325
7498
  };
7326
- `,br={exactOptionalPropertyTypes:!0},xr=f((e,t)=>{let{createPath:n,createImport:r,createImportHelpers:i}=h(e),{renderToFile:o}=_({helpers:{...i({origin:`lib`})}}),{validationMessages:s={},customTypesImport:c=r.lib([`@typebox/custom-types`],{origin:`lib`}),settings:l}={...t},u=async e=>{for(let{kind:t,entry:r}of e){if(t!==`apiRoute`)continue;let e=[r.params,...r.validationDefinitions.flatMap(e=>e.target===`response`?e.variants:[e.schema])].flatMap(({resolvedType:e})=>e?[e]:[]),i=[...new Set(r.validationDefinitions.flatMap(({target:e})=>Object.keys(a).includes(e)?[e]:[]))].map(e=>({target:e,methods:r.methods.flatMap(t=>{let n=r.validationDefinitions.find(n=>n.method===t&&n.target===e);return n?[{route:r.name,method:t,target:e,schema:n.schema,...n.runtimeValidation===void 0?{}:{runtimeValidation:JSON.stringify(n.runtimeValidation)},...n.customErrors===void 0?{}:{customErrors:JSON.stringify(n.customErrors)}}]:[]})})),s=r.methods.flatMap(e=>{let t=r.validationDefinitions.find(t=>t.method===e&&t.target===`response`);return t?[{method:e,variants:t.variants.map(e=>({route:r.name,target:`response`,...e,...t.runtimeValidation===void 0?{}:{runtimeValidation:JSON.stringify(t.runtimeValidation)},...t.customErrors===void 0?{}:{customErrors:JSON.stringify(t.customErrors)}}))}]:[]});await o(n.libApi(r.name,`schemas.ts`),yr,{route:r,resolvedTypes:e,requestSchemas:i,responseSchemas:s})}};return{async start(){for(let[e,t]of[[`custom-types.ts`,hr],[`error-handler.ts`,gr],[`index.ts`,_r],[`setup.ts`,vr]])await o(n.lib(`@typebox`,e),t,{validationMessages:JSON.stringify(s),customTypesImport:c,settings:JSON.stringify({...br,...l})})},async watch(e,t){await u(t?e.filter(({kind:e,entry:n})=>t.kind===`update`&&e===`apiRoute`&&n.fileFullpath===t.file):e)},async build(e){await u(e)}}}),X={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`};X.PROPERTY,X.PROPERTIES,X.ALLOWED_VALUES,X.FOUND_N_DUPLICATES,X.VALIDATION_PASSED,X.VALIDATION_FAILED_PREFIX,X.ERROR_SUMMARY,X.PLURAL_SUFFIX,X.FIRST,X.SECOND,X.THIRD,X.FOURTH,X.FIFTH,X.TYPE_INVALID,X.STRING_MIN_LENGTH,X.STRING_MAX_LENGTH,X.STRING_PATTERN,X.STRING_FORMAT,X.STRING_FORMAT_EMAIL,X.STRING_FORMAT_DATE,X.STRING_FORMAT_DATETIME,X.STRING_FORMAT_TIME,X.STRING_FORMAT_URI,X.STRING_FORMAT_URL,X.STRING_FORMAT_UUID,X.STRING_FORMAT_IPV4,X.STRING_FORMAT_IPV6,X.STRING_FORMAT_HOSTNAME,X.STRING_FORMAT_JSON_POINTER,X.STRING_FORMAT_REGEX,X.NUMBER_MINIMUM,X.NUMBER_MAXIMUM,X.NUMBER_EXCLUSIVE_MINIMUM,X.NUMBER_EXCLUSIVE_MAXIMUM,X.NUMBER_MULTIPLE_OF,X.ARRAY_MIN_ITEMS,X.ARRAY_MAX_ITEMS,X.ARRAY_UNIQUE_ITEMS,X.ARRAY_CONTAINS,X.ARRAY_MIN_CONTAINS,X.ARRAY_MAX_CONTAINS,X.ARRAY_PREFIX_ITEMS,X.ARRAY_ITEMS,X.ARRAY_UNEVALUATED_ITEMS,X.TUPLE_MIN_ITEMS,X.TUPLE_MAX_ITEMS,X.OBJECT_REQUIRED,X.OBJECT_ADDITIONAL_PROPERTIES,X.OBJECT_MIN_PROPERTIES,X.OBJECT_MAX_PROPERTIES,X.OBJECT_PROPERTY_NAMES,X.OBJECT_DEPENDENCIES,X.OBJECT_UNEVALUATED_PROPERTIES,X.ENUM_MISMATCH,X.CONST_MISMATCH,X.CONDITIONAL_IF,X.CONDITIONAL_THEN,X.CONDITIONAL_ELSE,X.COMPOSITION_ONE_OF,X.COMPOSITION_ANY_OF,X.COMPOSITION_ALL_OF,X.COMPOSITION_NOT,X.CONTENT_DISCRIMINATOR,X.CONTENT_ENCODING,X.CONTENT_MEDIA_TYPE,X.CUSTOM_RANGE,X.CUSTOM_EXCLUSIVE_RANGE,X.CUSTOM_REGEXP,X.CUSTOM_DYNAMIC_DEFAULTS,X.CUSTOM_SELECT,X.CUSTOM_TRANSFORM,X.CUSTOM_UNIQUE_ITEM_PROPERTIES,X.UNKNOWN;var Sr=d({meta:{name:`TypeBox`,resolveTypes:!0},dependencies:{typebox:mr.devDependencies.typebox},factory:xr}),Z={type:`module`,private:!0,name:`@kosmojs/vue-generator`,version:`0.2.9`,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.101.4`,"path-to-regexp":`^8.4.2`,vue:`^3.5.41`,"vue-router":`^5.2.0`}},Q=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(`/`)},Cr=()=>{let t=e=>e?.kind===`param`&&e.parts[0]?.kind===`splat`,n=(r,i)=>r.flatMap(({index:r,layout:a,children:o})=>{let{name:s,pathTokens:c}={...r,...a};if(!c)return[];let l=`${s}/layout`,u=i?Q(c):e(`/`,Q(c)),d=c.at(-1);return t(d)?r&&a?[{name:l,path:u,component:a.id,children:[{name:s,path:``,component:r.id}]}]:r?[{path:u,children:[{name:s,path:``,component:r.id},...n(o,s)]}]:a?[{name:l,path:u,component:a.id,children:n(o,s)}]:[]:r&&a?[{name:l,path:u,component:a.id,children:[{name:s,path:``,component:r.id},...n(o,s)]}]:r?[{path:u,children:[{name:s,path:``,component:r.id},...n(o,s)]}]:a?[{name:l,path:u,component:a.id,children:n(o,s)}]:[]});return n},wr=()=>{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)]},Tr=`import type { Plugin } from "vue";
7499
+ `,Sr={exactOptionalPropertyTypes:!0},Cr=f((e,t)=>{let{createPath:n,createImport:r,createImportHelpers:i}=h(e),{renderToFile:o}=_({helpers:{...i({origin:`lib`})}}),{validationMessages:s={},customTypesImport:c=r.lib([`@typebox/custom-types`],{origin:`lib`}),settings:l}={...t},u=async e=>{for(let{kind:t,entry:r}of e){if(t!==`apiRoute`)continue;let e=[r.params,...r.validationDefinitions.flatMap(e=>e.target===`response`?e.variants:[e.schema])].flatMap(({resolvedType:e})=>e?[e]:[]),i=[...new Set(r.validationDefinitions.flatMap(({target:e})=>Object.keys(a).includes(e)?[e]:[]))].map(e=>({target:e,methods:r.methods.flatMap(t=>{let n=r.validationDefinitions.find(n=>n.method===t&&n.target===e);return n?[{route:r.name,method:t,target:e,schema:n.schema,...n.runtimeValidation===void 0?{}:{runtimeValidation:JSON.stringify(n.runtimeValidation)},...n.customErrors===void 0?{}:{customErrors:JSON.stringify(n.customErrors)}}]:[]})})),s=r.methods.flatMap(e=>{let t=r.validationDefinitions.find(t=>t.method===e&&t.target===`response`);return t?[{method:e,variants:t.variants.map(e=>({route:r.name,target:`response`,...e,...t.runtimeValidation===void 0?{}:{runtimeValidation:JSON.stringify(t.runtimeValidation)},...t.customErrors===void 0?{}:{customErrors:JSON.stringify(t.customErrors)}}))}]:[]});await o(n.libApi(r.name,`schemas.ts`),xr,{route:r,resolvedTypes:e,requestSchemas:i,responseSchemas:s})}};return{async start(){for(let[e,t]of[[`custom-types.ts`,_r],[`error-handler.ts`,vr],[`index.ts`,yr],[`setup.ts`,br]])await o(n.lib(`@typebox`,e),t,{validationMessages:JSON.stringify(s),customTypesImport:c,settings:JSON.stringify({...Sr,...l})})},async watch(e,t){await u(t?e.filter(({kind:e,entry:n})=>t.kind===`update`&&e===`apiRoute`&&n.fileFullpath===t.file):e)},async build(e){await u(e)}}}),X={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`};X.PROPERTY,X.PROPERTIES,X.ALLOWED_VALUES,X.FOUND_N_DUPLICATES,X.VALIDATION_PASSED,X.VALIDATION_FAILED_PREFIX,X.ERROR_SUMMARY,X.PLURAL_SUFFIX,X.FIRST,X.SECOND,X.THIRD,X.FOURTH,X.FIFTH,X.TYPE_INVALID,X.STRING_MIN_LENGTH,X.STRING_MAX_LENGTH,X.STRING_PATTERN,X.STRING_FORMAT,X.STRING_FORMAT_EMAIL,X.STRING_FORMAT_DATE,X.STRING_FORMAT_DATETIME,X.STRING_FORMAT_TIME,X.STRING_FORMAT_URI,X.STRING_FORMAT_URL,X.STRING_FORMAT_UUID,X.STRING_FORMAT_IPV4,X.STRING_FORMAT_IPV6,X.STRING_FORMAT_HOSTNAME,X.STRING_FORMAT_JSON_POINTER,X.STRING_FORMAT_REGEX,X.NUMBER_MINIMUM,X.NUMBER_MAXIMUM,X.NUMBER_EXCLUSIVE_MINIMUM,X.NUMBER_EXCLUSIVE_MAXIMUM,X.NUMBER_MULTIPLE_OF,X.ARRAY_MIN_ITEMS,X.ARRAY_MAX_ITEMS,X.ARRAY_UNIQUE_ITEMS,X.ARRAY_CONTAINS,X.ARRAY_MIN_CONTAINS,X.ARRAY_MAX_CONTAINS,X.ARRAY_PREFIX_ITEMS,X.ARRAY_ITEMS,X.ARRAY_UNEVALUATED_ITEMS,X.TUPLE_MIN_ITEMS,X.TUPLE_MAX_ITEMS,X.OBJECT_REQUIRED,X.OBJECT_ADDITIONAL_PROPERTIES,X.OBJECT_MIN_PROPERTIES,X.OBJECT_MAX_PROPERTIES,X.OBJECT_PROPERTY_NAMES,X.OBJECT_DEPENDENCIES,X.OBJECT_UNEVALUATED_PROPERTIES,X.ENUM_MISMATCH,X.CONST_MISMATCH,X.CONDITIONAL_IF,X.CONDITIONAL_THEN,X.CONDITIONAL_ELSE,X.COMPOSITION_ONE_OF,X.COMPOSITION_ANY_OF,X.COMPOSITION_ALL_OF,X.COMPOSITION_NOT,X.CONTENT_DISCRIMINATOR,X.CONTENT_ENCODING,X.CONTENT_MEDIA_TYPE,X.CUSTOM_RANGE,X.CUSTOM_EXCLUSIVE_RANGE,X.CUSTOM_REGEXP,X.CUSTOM_DYNAMIC_DEFAULTS,X.CUSTOM_SELECT,X.CUSTOM_TRANSFORM,X.CUSTOM_UNIQUE_ITEM_PROPERTIES,X.UNKNOWN;var wr=d({meta:{name:`TypeBox`,resolveTypes:!0},dependencies:{typebox:gr.devDependencies.typebox},factory:Cr}),Z={type:`module`,private:!0,name:`@kosmojs/vue-generator`,version:`0.2.10`,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.101.4`,"path-to-regexp":`^8.4.2`,vue:`^3.5.41`,"vue-router":`^5.2.0`}},Q=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(`/`)},Tr=()=>{let t=e=>e?.kind===`param`&&e.parts[0]?.kind===`splat`,n=(r,i)=>r.flatMap(({index:r,layout:a,children:o})=>{let{name:s,pathTokens:c}={...r,...a};if(!c)return[];let l=`${s}/layout`,u=i?Q(c):e(`/`,Q(c)),d=c.at(-1);return t(d)?r&&a?[{name:l,path:u,component:a.id,children:[{name:s,path:``,component:r.id}]}]:r?[{path:u,children:[{name:s,path:``,component:r.id},...n(o,s)]}]:a?[{name:l,path:u,component:a.id,children:n(o,s)}]:[]:r&&a?[{name:l,path:u,component:a.id,children:[{name:s,path:``,component:r.id},...n(o,s)]}]:r?[{path:u,children:[{name:s,path:``,component:r.id},...n(o,s)]}]:a?[{name:l,path:u,component:a.id,children:n(o,s)}]:[]});return n},Er=()=>{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)]},Dr=`import type { Plugin } from "vue";
7327
7500
 
7328
7501
  export { default as AppProvider } from "./provider.vue";
7329
7502
 
7330
7503
  export const appProvider: Plugin = {
7331
7504
  install() {},
7332
7505
  };
7333
- `,Er=`import { VueQueryPlugin } from "@tanstack/vue-query";
7506
+ `,Or=`import { VueQueryPlugin } from "@tanstack/vue-query";
7334
7507
  import type { Plugin } from "vue";
7335
7508
 
7336
7509
  import { getQueryClient } from "../query";
@@ -7342,10 +7515,10 @@ export const appProvider: Plugin = {
7342
7515
  app.use(VueQueryPlugin, { queryClient: getQueryClient() });
7343
7516
  },
7344
7517
  };
7345
- `,Dr=`<template>
7518
+ `,kr=`<template>
7346
7519
  <slot />
7347
7520
  </template>
7348
- `,Or=`import type { App } from "vue";
7521
+ `,Ar=`import type { App } from "vue";
7349
7522
  import type { RouterFactoryReturn } from "@kosmojs/core";
7350
7523
  import { clientRenderFactory } from "@kosmojs/core/generators";
7351
7524
 
@@ -7385,7 +7558,7 @@ export const mount = async (
7385
7558
  }
7386
7559
 
7387
7560
  export default clientRenderFactory();
7388
- `,kr=`{
7561
+ `,jr=`{
7389
7562
  path: "{{path}}",
7390
7563
  {{#if name}}
7391
7564
  name: "{{name}}",
@@ -7403,7 +7576,7 @@ export default clientRenderFactory();
7403
7576
  children: [ {{#each children}}{{> routePartial}}, {{/each}}],
7404
7577
  {{/if}}
7405
7578
  }
7406
- `,Ar=`import type { App } from "vue";
7579
+ `,Mr=`import type { App } from "vue";
7407
7580
 
7408
7581
  import {
7409
7582
  renderToString as renderToStringOrig,
@@ -7498,12 +7671,12 @@ export const renderToStream: RenderToStreamWrapper<
7498
7671
  }
7499
7672
 
7500
7673
  export default serverRenderFactory();
7501
- `,jr=`declare module "*.vue" {
7674
+ `,$=`declare module "*.vue" {
7502
7675
  import type { DefineComponent } from "vue";
7503
7676
  const component: DefineComponent<{}, {}, any>;
7504
7677
  export default component;
7505
7678
  }
7506
- `,Mr=`<script setup lang="ts">
7679
+ `,Nr=`<script setup lang="ts">
7507
7680
  import styles from "./styles.module.css";
7508
7681
  defineProps<{
7509
7682
  headline?: string;
@@ -7542,7 +7715,7 @@ defineProps<{
7542
7715
  </div>
7543
7716
  </div>
7544
7717
  </template>
7545
- `,$=`<script setup lang="ts">
7718
+ `,Pr=`<script setup lang="ts">
7546
7719
  import styles from "./styles.module.css";
7547
7720
  defineProps<{
7548
7721
  message: string;
@@ -7591,7 +7764,7 @@ defineProps<{
7591
7764
  </div>
7592
7765
  </div>
7593
7766
  </template>
7594
- `,Nr=`* {
7767
+ `,Fr=`* {
7595
7768
  margin: 0;
7596
7769
  padding: 0;
7597
7770
  box-sizing: border-box;
@@ -7724,7 +7897,7 @@ defineProps<{
7724
7897
  align-items: center;
7725
7898
  gap: 0.25rem;
7726
7899
  }
7727
- `,Pr=`<script setup lang="ts">
7900
+ `,Ir=`<script setup lang="ts">
7728
7901
  import styles from "./styles.module.css";
7729
7902
  <\/script>
7730
7903
 
@@ -7788,7 +7961,7 @@ import styles from "./styles.module.css";
7788
7961
  </div>
7789
7962
  </div>
7790
7963
  </template>
7791
- `,Fr=`import { QueryClient, type QueryClientConfig } from "@tanstack/vue-query";
7964
+ `,Lr=`import { QueryClient, type QueryClientConfig } from "@tanstack/vue-query";
7792
7965
 
7793
7966
  let client: QueryClient | undefined;
7794
7967
 
@@ -7803,7 +7976,7 @@ export const getQueryClient = (): QueryClient => {
7803
7976
  }
7804
7977
  return client;
7805
7978
  };
7806
- `,Ir=`import { QueryClient, type QueryClientConfig } from "@tanstack/vue-query";
7979
+ `,Rr=`import { QueryClient, type QueryClientConfig } from "@tanstack/vue-query";
7807
7980
 
7808
7981
  import { store } from "{{ createImport 'lib' '@ssr/base' }}";
7809
7982
 
@@ -7826,7 +7999,7 @@ export const getQueryClient = (): QueryClient => {
7826
7999
  }
7827
8000
  return ctx.tsqClient as QueryClient;
7828
8001
  };
7829
- `,Lr=`import {
8002
+ `,zr=`import {
7830
8003
  type App,
7831
8004
  type Component,
7832
8005
  createApp,
@@ -7977,14 +8150,14 @@ export default createRouterFactory<
7977
8150
  Promise<App>,
7978
8151
  { server: { loaderData: Record<string, unknown> } }
7979
8152
  >();
7980
- `,Rr=`import { type Ref, unref } from "vue";
8153
+ `,Br=`import { type Ref, unref } from "vue";
7981
8154
 
7982
8155
  export type MaybeWrapped<T> = Ref<T> | T;
7983
8156
 
7984
8157
  export function unwrap<T>(value: MaybeWrapped<T>): T {
7985
8158
  return unref(value);
7986
8159
  }
7987
- `,zr=`import { useRoute, useRouter } from "vue-router";
8160
+ `,Vr=`import { useRoute, useRouter } from "vue-router";
7988
8161
 
7989
8162
  import type { RouterWithLoaderData } from "./router";
7990
8163
 
@@ -7999,7 +8172,7 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
7999
8172
  const route = useRoute();
8000
8173
  return router.__loaderData?.[key || (route.name as string)] as T;
8001
8174
  };
8002
- `,Br=`<script setup lang="ts">
8175
+ `,Hr=`<script setup lang="ts">
8003
8176
  import { AppProvider } from "_/app";
8004
8177
  <\/script>
8005
8178
 
@@ -8008,7 +8181,7 @@ import { AppProvider } from "_/app";
8008
8181
  <RouterView />
8009
8182
  </AppProvider>
8010
8183
  </template>
8011
- `,Vr=`<script setup lang="ts" generic="T extends LinkProps">
8184
+ `,Ur=`<script setup lang="ts" generic="T extends LinkProps">
8012
8185
  import { computed } from "vue";
8013
8186
  import { RouterLink } from "vue-router";
8014
8187
 
@@ -8040,7 +8213,7 @@ const href = computed(() => {
8040
8213
  <slot />
8041
8214
  </RouterLink>
8042
8215
  </template>
8043
- `,Hr=`import renderFactory, {
8216
+ `,Wr=`import renderFactory, {
8044
8217
  createRoutes,
8045
8218
  hydrate,
8046
8219
  mount,
@@ -8067,7 +8240,7 @@ if (root) {
8067
8240
  } else {
8068
8241
  console.error("❌ Root element not found!");
8069
8242
  }
8070
- `,Ur=`import renderFactory, {
8243
+ `,Gr=`import renderFactory, {
8071
8244
  createRoutes,
8072
8245
  renderToStream,
8073
8246
  renderToString,
@@ -8094,7 +8267,7 @@ export default renderFactory(() => {
8094
8267
  },
8095
8268
  };
8096
8269
  });
8097
- `,Wr=`<!doctype html>
8270
+ `,Kr=`<!doctype html>
8098
8271
  <html lang="en">
8099
8272
  <head>
8100
8273
  <meta charset="UTF-8" />
@@ -8106,17 +8279,17 @@ export default renderFactory(() => {
8106
8279
  <script type="module" src="/{{ entryDir }}/client.ts"><\/script>
8107
8280
  </body>
8108
8281
  </html>
8109
- `,Gr=`<script setup lang="ts">
8282
+ `,qr=`<script setup lang="ts">
8110
8283
  import PageSample from "{{ createImport 'lib' 'pageSamples/404.vue' }}";
8111
8284
  <\/script>
8112
8285
 
8113
8286
  <template>
8114
8287
  <PageSample />
8115
8288
  </template>
8116
- `,Kr=`<template>
8289
+ `,Jr=`<template>
8117
8290
  <router-view />
8118
8291
  </template>
8119
- `,qr=`<script setup lang="ts">
8292
+ `,Yr=`<script setup lang="ts">
8120
8293
  import PageSample from "{{ createImport 'lib' 'pageSamples/page.vue' }}";
8121
8294
  <\/script>
8122
8295
 
@@ -8131,14 +8304,14 @@ import PageSample from "{{ createImport 'lib' 'pageSamples/page.vue' }}";
8131
8304
  }"
8132
8305
  />
8133
8306
  </template>
8134
- `,Jr=`<script setup lang="ts">
8307
+ `,Xr=`<script setup lang="ts">
8135
8308
  import WelcomePage from "{{ createImport 'lib' 'pageSamples/welcome.vue' }}";
8136
8309
  <\/script>
8137
8310
 
8138
8311
  <template>
8139
8312
  <WelcomePage />
8140
8313
  </template>
8141
- `,Yr=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
8314
+ `,Zr=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
8142
8315
  import { appProvider } from "{{ createImport 'lib' 'app' }}";
8143
8316
 
8144
8317
  import app from "./app.vue";
@@ -8157,5 +8330,5 @@ export default routerFactory((routes) => {
8157
8330
  },
8158
8331
  };
8159
8332
  });
8160
- `,Xr=f((e,t)=>{let{createPath:n,createImportHelpers:r}=h(e),{renderToFile:i}=_({helpers:{...r({origin:`lib`}),...b()},partials:{routePartial:kr}}),{renderToFile:a}=_({helpers:r({origin:`src`})}),o=Cr(),l=e=>!e?.trim().length,u=s(t?.templates,qr),d=async e=>{for(let{kind:t,entry:r}of e)t===`pageRoute`?await a(n.pages(r.file),r.name===`index`?Jr:u(r.name,r),{route:r,message:wr()},{overwrite:l}):t===`pageLayout`&&await a(n.pages(r.file),Kr,{route:r},{overwrite:l})},f=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(v),r=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`||e===`pageLayout`?[t]:[]),a=o(m(r));for(let[e,t]of[[`client.ts`,Or],[`server.ts`,Ar]])await i(n.libEntry(e),t,{pageEntries:r,nestedRoutes:a,lazyLoad:e===`client.ts`});await i(n.lib(`router.ts`),Lr,{entries:e,indexRoutes:t})};return{config(){let{templates:e,...n}={...t};return{plugins:[fe(n)]}},async start(){for(let[e,r]of[[`env.d.ts`,jr],[`unwrap.ts`,Rr],[`use.ts`,zr],[`pageSamples/styles.module.css`,Nr],[`pageSamples/welcome.vue`,Pr],[`pageSamples/page.vue`,$],[`pageSamples/404.vue`,Mr],[`app/provider.vue`,Dr],...t?.tanstack?.query?[[`app/index.ts`,Er],[`query.ts`,Fr]]:[[`app/index.ts`,Tr],[`query.ts`,`/** tanstack query disabled */`]]])await i(n.lib(e),r,{});for(let[e,t]of[[`pages/404.vue`,Gr],[`components/Link.vue`,Vr],[`app.vue`,Br],[`router.ts`,Yr]])await a(n.src(e),t,{entryDir:c.entryDir},{overwrite:l});await a(n.src(`index.html`),Wr,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,Hr],[`server.ts`,Ur]])await a(n.entry(e),t,{},{overwrite:l})},async watch(e,t){(!t||t.kind===`create`)&&await d(e),await f(e)},async build(e){await d(e),await f(e)},async ssrBuild(){await i(n.lib(`query.ts`),t?.tanstack?.query?Ir:`/** tanstack query disabled */`,{ssrBundle:!0})}}}),Zr=d({meta:{name:`Vue`,jsxImportSource:`vue`},dependencies(e){return{vue:Z.devDependencies.vue,"vue-router":Z.devDependencies[`vue-router`],"path-to-regexp":Z.devDependencies[`path-to-regexp`],...e?.tanstack?.query?{"@tanstack/vue-query":Z.devDependencies[`@tanstack/vue-query`]}:{}}},factory:Xr}),Qr=t=>{let i=process.env.NODE_ENV||`development`,a=typeof t.base==`string`?t.base:t.base[i];if(!a?.trim())throw Error(n([`red`],`ERROR: Invalid Config - no base provided`));return{...t,base:e(`/`,a),apiBase:e(`/`,t.apiBase||r)}};export{Qr as defineConfig,M as fetchGenerator,we as honoGenerator,We as koaGenerator,yt as mdxGenerator,wt as openapiGenerator,Qt as reactGenerator,Dn as solidGenerator,An as ssgGenerator,zn as ssrGenerator,pr as svelteGenerator,Sr as typeboxGenerator,Zr as vueGenerator};
8333
+ `,Qr=f((e,t)=>{let{createPath:n,createImportHelpers:r}=h(e),{renderToFile:i}=_({helpers:{...r({origin:`lib`}),...b()},partials:{routePartial:jr}}),{renderToFile:a}=_({helpers:r({origin:`src`})}),o=Tr(),l=e=>!e?.trim().length,u=s(t?.templates,Yr),d=async e=>{for(let{kind:t,entry:r}of e)t===`pageRoute`?await a(n.pages(r.file),r.name===`index`?Xr:u(r.name,r),{route:r,message:Er()},{overwrite:l}):t===`pageLayout`&&await a(n.pages(r.file),Jr,{route:r},{overwrite:l})},f=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(v),r=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`||e===`pageLayout`?[t]:[]),a=o(m(r));for(let[e,t]of[[`client.ts`,Ar],[`server.ts`,Mr]])await i(n.libEntry(e),t,{pageEntries:r,nestedRoutes:a,lazyLoad:e===`client.ts`});await i(n.lib(`router.ts`),zr,{entries:e,indexRoutes:t})};return{config(){let{templates:e,...n}={...t};return{plugins:[fe(n)]}},async start(){for(let[e,r]of[[`env.d.ts`,$],[`unwrap.ts`,Br],[`use.ts`,Vr],[`pageSamples/styles.module.css`,Fr],[`pageSamples/welcome.vue`,Ir],[`pageSamples/page.vue`,Pr],[`pageSamples/404.vue`,Nr],[`app/provider.vue`,kr],...t?.tanstack?.query?[[`app/index.ts`,Or],[`query.ts`,Lr]]:[[`app/index.ts`,Dr],[`query.ts`,`/** tanstack query disabled */`]]])await i(n.lib(e),r,{});for(let[e,t]of[[`pages/404.vue`,qr],[`components/Link.vue`,Ur],[`app.vue`,Hr],[`router.ts`,Zr]])await a(n.src(e),t,{entryDir:c.entryDir},{overwrite:l});await a(n.src(`index.html`),Kr,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,Wr],[`server.ts`,Gr]])await a(n.entry(e),t,{},{overwrite:l})},async watch(e,t){(!t||t.kind===`create`)&&await d(e),await f(e)},async build(e){await d(e),await f(e)},async ssrBuild(){await i(n.lib(`query.ts`),t?.tanstack?.query?Rr:`/** tanstack query disabled */`,{ssrBundle:!0})}}}),$r=d({meta:{name:`Vue`,jsxImportSource:`vue`},dependencies(e){return{vue:Z.devDependencies.vue,"vue-router":Z.devDependencies[`vue-router`],"path-to-regexp":Z.devDependencies[`path-to-regexp`],...e?.tanstack?.query?{"@tanstack/vue-query":Z.devDependencies[`@tanstack/vue-query`]}:{}}},factory:Qr}),ei=t=>{let i=process.env.NODE_ENV||`development`,a=typeof t.base==`string`?t.base:t.base[i];if(!a?.trim())throw Error(n([`red`],`ERROR: Invalid Config - no base provided`));return{...t,base:e(`/`,a),apiBase:e(`/`,t.apiBase||r)}};export{ei as defineConfig,P as fetchGenerator,Ee as honoGenerator,Ke as koaGenerator,xt as mdxGenerator,Et as openapiGenerator,en as reactGenerator,kn as solidGenerator,Mn as ssgGenerator,Vn as ssrGenerator,hr as svelteGenerator,wr as typeboxGenerator,$r as vueGenerator};
8161
8334
  //# sourceMappingURL=index.js.map