@kosmojs/dev 0.2.6 → 0.2.9

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,4 @@
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 D from"@vitejs/plugin-vue";var O={type:`module`,private:!0,name:`@kosmojs/fetch-generator`,version:`0.2.6`,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`}},k=`{{#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.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}}
2
2
  import {{id}} from "{{ createImport 'libApi' name 'fetch' }}";
3
3
  {{/each}}
4
4
 
@@ -16,13 +16,14 @@ export default {
16
16
  {{/each}}
17
17
  {{/each}}
18
18
  }
19
- `,A=`import fetchFactory, {
19
+ `,k=`import fetchFactory, {
20
20
  join,
21
21
  stringify,
22
22
  payloadResolver,
23
23
  } from "@kosmojs/core/fetch";
24
24
 
25
25
  import { base, apiBase, apiRouteMap } from "{{ createImport 'libCore' }}";
26
+ import { transport } from "{{ createImport 'lib' '@fetch' }}";
26
27
 
27
28
  import {
28
29
  type MaybeWrapped,
@@ -65,12 +66,7 @@ const {
65
66
 
66
67
  const fetchApi = fetchFactory(
67
68
  join(base, apiBase),
68
- {
69
- stringify,
70
- ...KOSMO_SERVERSIDE_FETCH
71
- ? { transport: await import("{{ createImport 'lib' '@ssr/fetch' }}").then((e) => e.transport) }
72
- : {},
73
- },
69
+ { transport, stringify },
74
70
  );
75
71
 
76
72
  {{#each routeMethods}}
@@ -101,7 +97,7 @@ export const {{method}} = (
101
97
  return typeof opt?.unwrap === "function" ? opt.unwrap(data) : unwrap(data);
102
98
  })
103
99
  // validate only on client, skip double validation in SSR mode
104
- if (!KOSMO_SERVERSIDE_FETCH) {
100
+ if (!import.meta.env.SSR) {
105
101
  if (validationSchemas.params) {
106
102
  validationSchemas.params.validate(paramsMapper(params as never));
107
103
  }
@@ -125,9 +121,9 @@ export default {
125
121
  href,
126
122
  validationSchemas,
127
123
  };
128
- `,j=`export type MaybeWrapped<T> = T;
124
+ `,A=`export type MaybeWrapped<T> = T;
129
125
  export const unwrap = <T>(data: T) => data;
130
- `,M=f((e,t)=>{let{createPath:n,createImportHelpers:r}=h(t),{renderToFile:i}=_({helpers:{...r({origin:`lib`}),...b()}}),o=async(e,t)=>{let r=e.flatMap(({kind:e,entry:t})=>e===`apiRoute`?[t]:[]).sort(v);await i(n.lib(`fetch.ts`),k,{routes:r});for(let{kind:e,entry:r}of t)if(e===`apiRoute`){let e=[];for(let t of r.validationDefinitions)if(t.target===`response`)for(let{id:n,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 t=r.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 i(n.libApi(r.name,`fetch.ts`),A,{route:r,validationTypes:e,routeMethods:t,payloadTypes:o,payloadTargets:s,responseTypes:c})}};return{meta:e,async start(){await i(n.lib(`unwrap.ts`),j,{})},async watch(e,t){await o(e,t?e.filter(({kind:e,entry:n})=>t.kind===`update`&&e===`apiRoute`&&n.fileFullpath===t.file):e)},async build(e){await o(e,e)}}}),N=d(()=>{let e={name:`Fetch`,slot:`fetch`,dependencies:{"path-to-regexp":O.devDependencies[`path-to-regexp`]}};return{meta:e,factory:t=>M(e,t)}}),P={type:`module`,private:!0,name:`@kosmojs/hono-generator`,version:`0.2.6`,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.0.12`,hono:`^4.12.32`,"path-to-regexp":`^8.4.2`,vite:`^8.2.0`}},F=`import { Hono } from "hono";
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";
131
127
 
132
128
  import type { AppFactory } from "@kosmojs/core/api";
133
129
 
@@ -148,10 +144,10 @@ export const appFactory: AppFactory<App, AppOptions> = (factory) => {
148
144
  };
149
145
  return factory({ createApp });
150
146
  };
151
- `,I=`import type { DevSetup } from "@kosmojs/core/api";
147
+ `,F=`import type { DevSetup } from "@kosmojs/core/api";
152
148
 
153
149
  export const devSetup = (setup: DevSetup) => setup;
154
- `,L=`import type { Context } from "hono";
150
+ `,I=`import type { Context } from "hono";
155
151
 
156
152
  import type { AppEnv } from "./app";
157
153
 
@@ -165,7 +161,7 @@ export type ErrorHandlerFactory = (handler: ErrorHandler) => ErrorHandler;
165
161
  export const errorHandlerFactory: ErrorHandlerFactory = (handler) => {
166
162
  return handler;
167
163
  };
168
- `,R=`import type { Context } from "hono";
164
+ `,L=`import type { Context } from "hono";
169
165
 
170
166
  import type { RequestBodyTarget, RequestMetadataTarget } from "@kosmojs/core";
171
167
  import { parseCookies, parseQuerystring } from "@kosmojs/core/api";
@@ -210,7 +206,7 @@ export const bodyparsers: {
210
206
  return ctx.req[as]();
211
207
  },
212
208
  };
213
- `,z=`import type { MiddlewareHandler } from "hono";
209
+ `,R=`import type { MiddlewareHandler } from "hono";
214
210
  import type { Router } from "hono/router";
215
211
  import { RegExpRouter } from "hono/router/reg-exp-router";
216
212
  import { SmartRouter } from "hono/router/smart-router";
@@ -610,7 +606,7 @@ export const routerFactory: RouterFactory<Router<never>, never> = (factory) => {
610
606
  };
611
607
  return factory({ createRouter });
612
608
  };
613
- `,B=`import { join } from "node:path";
609
+ `,z=`import { join } from "node:path";
614
610
 
615
611
  import type { RouteSource } from "@kosmojs/core/api";
616
612
 
@@ -657,7 +653,7 @@ export const routeSources: Array<RouteSource<never>> = [
657
653
  },
658
654
  {{/each}}
659
655
  ];
660
- `,V=`import { chmod, unlink } from "node:fs/promises";
656
+ `,B=`import { chmod, unlink } from "node:fs/promises";
661
657
  import { parseArgs, styleText } from "node:util";
662
658
 
663
659
  import { createAdaptorServer } from "@hono/node-server";
@@ -757,7 +753,7 @@ process.on("unhandledRejection", (reason) => {
757
753
  process.exit(1);
758
754
  }
759
755
  });
760
- `,H=`import type { Context, Next } from "hono";
756
+ `,V=`import type { Context, Next } from "hono";
761
757
 
762
758
  import type { ValidationDefmap, ValidationOptmap } from "@kosmojs/core";
763
759
  import {
@@ -940,13 +936,13 @@ export const defineRoute: <
940
936
  use: use as never,
941
937
  });
942
938
  };
943
- `,fe=`export * from "./@api/app";
939
+ `,pe=`export * from "./@api/app";
944
940
  export * from "./@api/dev";
945
941
  export * from "./@api/errors";
946
942
  export * from "./@api/router";
947
943
  export * from "./@api/routes";
948
944
  export * from "./@api/server";
949
- `,pe=`import defaultErrorHandler from "./errors";
945
+ `,me=`import defaultErrorHandler from "./errors";
950
946
  import router from "./router";
951
947
 
952
948
  import { appFactory, routes } from "{{ createImport 'lib' 'api:factory' }}";
@@ -962,7 +958,7 @@ export default appFactory(({ createApp }) => {
962
958
 
963
959
  return app;
964
960
  });
965
- `,me=`import { getRequestListener } from "@hono/node-server";
961
+ `,he=`import { getRequestListener } from "@hono/node-server";
966
962
 
967
963
  import app from "./app";
968
964
 
@@ -976,11 +972,11 @@ export default devSetup({
976
972
  // close db connections, server sockets etc.
977
973
  },
978
974
  });
979
- `,he=`export declare module "{{ createImport 'libApi' }}" {
975
+ `,ge=`export declare module "{{ createImport 'libApi' }}" {
980
976
  interface DefaultVariables {}
981
977
  interface DefaultBindings {}
982
978
  }
983
- `,ge=`import { accepts } from "hono/accepts";
979
+ `,_e=`import { accepts } from "hono/accepts";
984
980
  import { HTTPException } from "hono/http-exception";
985
981
 
986
982
  import { ValidationError, HTTPError } from "@kosmojs/core/errors";
@@ -1014,7 +1010,7 @@ export default errorHandlerFactory(
1014
1010
  : ctx.text(message, status);
1015
1011
  },
1016
1012
  );
1017
- `,_e=`import { defineRoute } from "{{ createImport 'libApi' }}";
1013
+ `,ve=`import { defineRoute } from "{{ createImport 'libApi' }}";
1018
1014
 
1019
1015
  export default defineRoute<"{{route.name}}">(({ GET }) => [
1020
1016
  GET(async (ctx) => {
@@ -1023,7 +1019,7 @@ export default defineRoute<"{{route.name}}">(({ GET }) => [
1023
1019
  return ctx.text("Automatically generated route");
1024
1020
  }),
1025
1021
  ]);
1026
- `,ve=`import { use } from "{{ createImport 'libApi' }}";
1022
+ `,ye=`import { use } from "{{ createImport 'libApi' }}";
1027
1023
 
1028
1024
  export type UseT = {};
1029
1025
 
@@ -1034,20 +1030,20 @@ export default [
1034
1030
  return next();
1035
1031
  }),
1036
1032
  ];
1037
- `,ye=`import { routerFactory } from "{{ createImport 'lib' 'api:factory' }}";
1033
+ `,be=`import { routerFactory } from "{{ createImport 'lib' 'api:factory' }}";
1038
1034
 
1039
1035
  export default routerFactory(({ createRouter }) => {
1040
1036
  const router = createRouter();
1041
1037
  return router;
1042
1038
  });
1043
- `,be=`import app from "./app";
1039
+ `,xe=`import app from "./app";
1044
1040
 
1045
1041
  import { serverFactory } from "{{ createImport 'lib' 'api:factory' }}";
1046
1042
 
1047
1043
  serverFactory(async ({ createServer }) => {
1048
1044
  await createServer(app);
1049
1045
  });
1050
- `,xe=`import { use } from "{{ createImport 'libApi' }}";
1046
+ `,Se=`import { use } from "{{ createImport 'libApi' }}";
1051
1047
 
1052
1048
  /**
1053
1049
  * Define global middleware applied to all routes.
@@ -1058,7 +1054,7 @@ export default [
1058
1054
  return next();
1059
1055
  }),
1060
1056
  ];
1061
- `,Se=f((t,n,r)=>{let{createPath:i,createImportHelpers:a}=h(n),o=e=>e.length===0?`{}`:e.length===1?e[0]:`Override<${e[0]}, ${o(e.slice(1))}>`,{renderToFile:c}=_({helpers:{...a({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 o(e.map(({id:e})=>`UseT${e}`))}}}),{renderToFile:u}=_({helpers:a({origin:`src`})}),d=e=>e?.trim().length===0,f=s(r?.templates,_e),p=async e=>{for(let{kind:t,entry:n}of e)t===`apiRoute`?await u(i.api(n.file),f(n.name,n),{route:n},{overwrite:d}):t===`apiUse`&&await u(i.api(n.file),ve,{},{overwrite:d})},m=async t=>{let n=t.flatMap(({kind:e,entry:t})=>e===`apiUse`?[t]:[]),a=t.flatMap(({kind:t,entry:i})=>{if(t!==`apiRoute`)return[];let a=i.name.split(`/`).reduce((t,n)=>{let r=t[t.length-1];return t.push(r?e(r,n):n),t},[]),o={...i,path:i.honoPattern,cascadingMiddleware:n.flatMap(e=>a.some(t=>e.name===t)?[e]:[])};return[o,...Object.entries({...r?.alias}).flatMap(([e,t])=>{let n=g(e);return t===i.name?[{...o,name:e,id:`${o.id}_${x(e)}`,fullpath:l(n),pathTokens:n}]:[]})]}).sort(v);for(let[e,t]of[[`@api/routes.ts`,B]])await c(i.lib(e),t,{routes:a,cascadingMiddleware:n})};return{meta:t,options:r,config({command:e}){return{define:{KOSMO_PRODUCTION_BUILD:e===`build`?`true`:`false`}}},async start(){for(let[e,t]of[[`api.ts`,H],[`api:factory.ts`,fe],[`@api/app.ts`,F],[`@api/parsers.ts`,R],[`@api/dev.ts`,I],[`@api/errors.ts`,L],[`@api/router.ts`,z],[`@api/server.ts`,V]])await c(i.lib(e),t,{});for(let[e,t]of[[`app.ts`,pe],[`dev.ts`,me],[`errors.ts`,ge],[`router.ts`,ye],[`server.ts`,be],[`use.ts`,xe]])await u(i.api(e),t,{},{overwrite:d});await c(i.api(`env.d.ts`),he,{},{overwrite:d})},async watch(e,t){(!t||t.kind===`create`)&&await p(e),await m(e)},async build(e){await p(e),await m(e)}}}),Ce=d(e=>{let t={name:`Hono`,slot:`api`,dependencies:{hono:P.devDependencies.hono,"@hono/node-server":P.devDependencies[`@hono/node-server`],"path-to-regexp":P.devDependencies[`path-to-regexp`]}};return{meta:t,options:e,factory:n=>Se(t,n,e)}}),U={type:`module`,private:!0,name:`@kosmojs/koa-generator`,version:`0.2.6`,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`}},we=`import Koa from "koa";
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";
1062
1058
 
1063
1059
  import type { AppFactory } from "@kosmojs/core/api";
1064
1060
 
@@ -1076,10 +1072,10 @@ export const appFactory: AppFactory<App, AppOptions> = (factory) => {
1076
1072
  };
1077
1073
  return factory({ createApp });
1078
1074
  };
1079
- `,Te=`import type { DevSetup } from "@kosmojs/core/api";
1075
+ `,Ee=`import type { DevSetup } from "@kosmojs/core/api";
1080
1076
 
1081
1077
  export const devSetup = (setup: DevSetup) => setup;
1082
- `,Ee=`import type { ParameterizedMiddleware } from "../api";
1078
+ `,De=`import type { ParameterizedMiddleware } from "../api";
1083
1079
 
1084
1080
  export type ErrorHandlerFactory = (
1085
1081
  h: ParameterizedMiddleware,
@@ -1088,7 +1084,7 @@ export type ErrorHandlerFactory = (
1088
1084
  export const errorHandlerFactory: ErrorHandlerFactory = (handler) => {
1089
1085
  return handler;
1090
1086
  };
1091
- `,De=`import zlib from "node:zlib";
1087
+ `,Oe=`import zlib from "node:zlib";
1092
1088
 
1093
1089
  import type { RouterContext } from "@koa/router";
1094
1090
  import Formidable, { type Options as FormidableOptions } from "formidable";
@@ -1297,7 +1293,7 @@ export const bodyparsers: {
1297
1293
  return rawParser(stream, rawParserOptions);
1298
1294
  },
1299
1295
  };
1300
- `,Oe=`import KoaRouter, { type RouterMiddleware } from "@koa/router";
1296
+ `,ke=`import KoaRouter, { type RouterMiddleware } from "@koa/router";
1301
1297
  import { match } from "path-to-regexp";
1302
1298
 
1303
1299
  import type {
@@ -1696,7 +1692,7 @@ export const routerFactory: RouterFactory<Router, RouterOptions> = (
1696
1692
  };
1697
1693
  return factory({ createRouter });
1698
1694
  };
1699
- `,ke=`import { join } from "node:path";
1695
+ `,Ae=`import { join } from "node:path";
1700
1696
 
1701
1697
  import type { RouteSource } from "@kosmojs/core/api";
1702
1698
 
@@ -1743,7 +1739,7 @@ export const routeSources: Array<RouteSource<never>> = [
1743
1739
  },
1744
1740
  {{/each}}
1745
1741
  ] as const;
1746
- `,Ae=`import { chmod, unlink } from "node:fs/promises";
1742
+ `,je=`import { chmod, unlink } from "node:fs/promises";
1747
1743
  import { parseArgs, styleText } from "node:util";
1748
1744
 
1749
1745
  import type { ServerFactory } from "@kosmojs/core/api";
@@ -1821,7 +1817,7 @@ process.on("unhandledRejection", (reason) => {
1821
1817
  process.exit(1);
1822
1818
  }
1823
1819
  });
1824
- `,je=`import type { RouterContext } from "@koa/router";
1820
+ `,Me=`import type { RouterContext } from "@koa/router";
1825
1821
  import type { Next } from "koa";
1826
1822
 
1827
1823
  import type { ValidationDefmap, ValidationOptmap } from "@kosmojs/core";
@@ -1983,13 +1979,13 @@ export const defineRoute: <
1983
1979
  use: use as never,
1984
1980
  });
1985
1981
  };
1986
- `,Me=`export * from "./@api/app";
1982
+ `,Ne=`export * from "./@api/app";
1987
1983
  export * from "./@api/dev";
1988
1984
  export * from "./@api/errors";
1989
1985
  export * from "./@api/router";
1990
1986
  export * from "./@api/routes";
1991
1987
  export * from "./@api/server";
1992
- `,Ne=`import router from "./router";
1988
+ `,Pe=`import router from "./router";
1993
1989
 
1994
1990
  import { appFactory } from "{{ createImport 'lib' 'api:factory' }}";
1995
1991
 
@@ -2001,7 +1997,7 @@ export default appFactory(({ createApp }) => {
2001
1997
 
2002
1998
  return app;
2003
1999
  });
2004
- `,Pe=`import app from "./app";
2000
+ `,Fe=`import app from "./app";
2005
2001
 
2006
2002
  import { devSetup } from "{{ createImport 'lib' 'api:factory' }}";
2007
2003
 
@@ -2013,11 +2009,11 @@ export default devSetup({
2013
2009
  // close db connections, server sockets etc.
2014
2010
  },
2015
2011
  });
2016
- `,Fe=`export declare module "{{ createImport 'libApi' }}" {
2012
+ `,Ie=`export declare module "{{ createImport 'libApi' }}" {
2017
2013
  interface DefaultState {}
2018
2014
  interface DefaultContext {}
2019
2015
  }
2020
- `,Ie=`import { HTTPError, ValidationError } from "@kosmojs/core/errors";
2016
+ `,Le=`import { HTTPError, ValidationError } from "@kosmojs/core/errors";
2021
2017
 
2022
2018
  import { errorHandlerFactory } from "{{ createImport 'lib' 'api:factory' }}";
2023
2019
 
@@ -2044,14 +2040,14 @@ export default errorHandlerFactory(
2044
2040
  }
2045
2041
  },
2046
2042
  );
2047
- `,Le=`import { defineRoute } from "{{ createImport 'libApi' }}";
2043
+ `,Re=`import { defineRoute } from "{{ createImport 'libApi' }}";
2048
2044
 
2049
2045
  export default defineRoute<"{{route.name}}">(({ GET }) => [
2050
2046
  GET(async (ctx) => {
2051
2047
  ctx.body = "Automatically generated route";
2052
2048
  }),
2053
2049
  ]);
2054
- `,Re=`import { use } from "{{ createImport 'libApi' }}";
2050
+ `,ze=`import { use } from "{{ createImport 'libApi' }}";
2055
2051
 
2056
2052
  export type UseT = {};
2057
2053
 
@@ -2062,7 +2058,7 @@ export default [
2062
2058
  return next();
2063
2059
  }),
2064
2060
  ];
2065
- `,ze=`import { routerFactory, routes } from "{{ createImport 'lib' 'api:factory' }}";
2061
+ `,Be=`import { routerFactory, routes } from "{{ createImport 'lib' 'api:factory' }}";
2066
2062
 
2067
2063
  export default routerFactory(({ createRouter }) => {
2068
2064
  const router = createRouter();
@@ -2073,14 +2069,14 @@ export default routerFactory(({ createRouter }) => {
2073
2069
 
2074
2070
  return router;
2075
2071
  });
2076
- `,Be=`import app from "./app";
2072
+ `,Ve=`import app from "./app";
2077
2073
 
2078
2074
  import { serverFactory } from "{{ createImport 'lib' 'api:factory' }}";
2079
2075
 
2080
2076
  serverFactory(async ({ createServer }) => {
2081
2077
  await createServer(app);
2082
2078
  });
2083
- `,Ve=`import defaultErrorHandler from "./errors";
2079
+ `,He=`import defaultErrorHandler from "./errors";
2084
2080
 
2085
2081
  import { use } from "{{ createImport 'libApi' }}";
2086
2082
 
@@ -2091,12 +2087,17 @@ export default [
2091
2087
  * */
2092
2088
  use(defaultErrorHandler, { slot: "errorHandler" }),
2093
2089
  ];
2094
- `,He=f((t,n,r)=>{let{createPath:i,createImportHelpers:a}=h(n),o=e=>e.length===0?`{}`:e.length===1?e[0]:`Override<${e[0]}, ${o(e.slice(1))}>`,{renderToFile:c}=_({helpers:{...a({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 o(e.map(({id:e})=>`UseT${e}`))}}}),{renderToFile:l}=_({helpers:a({origin:`src`})}),d=e=>e?.trim().length===0,f=s(r?.templates,Le),p=async e=>{for(let{kind:t,entry:n}of e)t===`apiRoute`?await l(i.api(n.file),f(n.name,n),{route:n},{overwrite:d}):t===`apiUse`&&await l(i.api(n.file),Re,{},{overwrite:d})},m=async t=>{let n=t.flatMap(({kind:e,entry:t})=>e===`apiUse`?[t]:[]),a=t.flatMap(({kind:t,entry:i})=>{if(t!==`apiRoute`)return[];let a=i.name.split(`/`).reduce((t,n)=>{let r=t[t.length-1];return t.push(r?e(r,n):n),t},[]),o={...i,path:i.pathPattern,cascadingMiddleware:n.flatMap(e=>a.some(t=>e.name===t)?[e]:[])};return[o,...Object.entries({...r?.alias}).flatMap(([e,t])=>{let n=g(e);return t===i.name?[{...o,name:e,id:`${o.id}_${x(e)}`,fullpath:u(n),pathTokens:n}]:[]})]}).sort(v);for(let[e,t]of[[`@api/routes.ts`,ke]])await c(i.lib(e),t,{routes:a,cascadingMiddleware:n})};return{meta:t,options:r,config({command:e}){return{define:{KOSMO_PRODUCTION_BUILD:e===`build`?`true`:`false`}}},async start(){for(let[e,t]of[[`api.ts`,je],[`api:factory.ts`,Me],[`@api/app.ts`,we],[`@api/dev.ts`,Te],[`@api/errors.ts`,Ee],[`@api/parsers.ts`,De],[`@api/router.ts`,Oe],[`@api/server.ts`,Ae]])await c(i.lib(e),t,{});for(let[e,t]of[[`app.ts`,Ne],[`dev.ts`,Pe],[`errors.ts`,Ie],[`router.ts`,ze],[`server.ts`,Be],[`use.ts`,Ve]])await l(i.api(e),t,{},{overwrite:d});await c(i.api(`env.d.ts`),Fe,{},{overwrite:d})},async watch(e,t){(!t||t.kind===`create`)&&await p(e),await m(e)},async build(e){await p(e),await m(e)}}}),Ue=d(e=>{let t={name:`Koa`,slot:`api`,dependencies:{koa:U.devDependencies.koa,"@koa/router":U.devDependencies[`@koa/router`],"path-to-regexp":U.devDependencies[`path-to-regexp`],formidable:U.devDependencies.formidable,"raw-body":U.devDependencies[`raw-body`]},devDependencies:{"@types/koa":U.devDependencies[`@types/koa`],"@types/formidable":U.devDependencies[`@types/formidable`]},types:[`@types/koa`]};return{meta:t,options:e,factory:n=>He(t,n,e)}}),W={type:`module`,private:!0,name:`@kosmojs/mdx-generator`,version:`0.2.6`,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.7`,"preact-render-to-string":`^6.7.0`,"remark-frontmatter":`^5.0.0`,"remark-mdx-frontmatter":`^5.2.0`}},We=()=>{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)]},Ge=(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,`
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,`
2095
2091
  if (import.meta.hot) {
2096
2092
  import.meta.hot.accept(() => {});
2097
2093
  }
2098
2094
  `].join(`
2099
- `)}}}},o=[ne({jsxImportSource:`preact`,providerImportSource:`@mdx-js/preact`,remarkPlugins:r,rehypePlugins:i})];return t===`serve`&&o.push(a()),o},Ke=`import { render, hydrate as hydrateOrig } from "preact";
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";
2096
+
2097
+ export const AppProvider: FunctionComponent = (props) => {
2098
+ return props.children;
2099
+ };
2100
+ `,Je=`import { render, hydrate as hydrateOrig } from "preact";
2100
2101
  import type { RouterFactoryReturn } from "@kosmojs/core";
2101
2102
  import { clientRenderFactory } from "@kosmojs/core/generators";
2102
2103
 
@@ -2137,7 +2138,7 @@ export const mount = async (
2137
2138
  }
2138
2139
 
2139
2140
  export default clientRenderFactory();
2140
- `,qe=`import { renderToString as renderToStringOrig } from "preact-render-to-string";
2141
+ `,Ye=`import { renderToString as renderToStringOrig } from "preact-render-to-string";
2141
2142
 
2142
2143
  import type {
2143
2144
  RenderToStringWrapper,
@@ -2211,7 +2212,7 @@ export const renderToString: RenderToStringWrapper<
2211
2212
  }
2212
2213
 
2213
2214
  export default serverRenderFactory<false>();
2214
- `,Je=`declare module "*.mdx" {
2215
+ `,Xe=`declare module "*.mdx" {
2215
2216
  import type { ComponentType } from "preact";
2216
2217
  export const frontmatter: Record<string, unknown>;
2217
2218
  const component: ComponentType;
@@ -2224,7 +2225,7 @@ declare module "*.md" {
2224
2225
  const component: ComponentType;
2225
2226
  export default component;
2226
2227
  }
2227
- `,Ye=`import { MDXProvider } from "@mdx-js/preact";
2228
+ `,Ze=`import { MDXProvider } from "@mdx-js/preact";
2228
2229
  import { match, pathToRegexp } from "path-to-regexp";
2229
2230
  import { type ComponentType, createContext, h, type VNode } from "preact";
2230
2231
 
@@ -2414,7 +2415,7 @@ export const createRoute = (
2414
2415
  layouts,
2415
2416
  };
2416
2417
  };
2417
- `,Xe=`/* @jsxImportSource preact */
2418
+ `,Qe=`/* @jsxImportSource preact */
2418
2419
 
2419
2420
  import styles from "./styles.module.css";
2420
2421
 
@@ -2455,7 +2456,7 @@ export default function PageSample(props: {
2455
2456
  </div>
2456
2457
  );
2457
2458
  }
2458
- `,Ze=`/* @jsxImportSource preact */
2459
+ `,$e=`/* @jsxImportSource preact */
2459
2460
 
2460
2461
  import styles from "./styles.module.css";
2461
2462
 
@@ -2507,7 +2508,7 @@ export default function PageSample(props: {
2507
2508
  </div>
2508
2509
  );
2509
2510
  }
2510
- `,Qe=`* {
2511
+ `,et=`* {
2511
2512
  margin: 0;
2512
2513
  padding: 0;
2513
2514
  box-sizing: border-box;
@@ -2642,7 +2643,7 @@ export default function PageSample(props: {
2642
2643
  align-items: center;
2643
2644
  gap: 0.25rem;
2644
2645
  }
2645
- `,$e=`/* @jsxImportSource preact */
2646
+ `,tt=`/* @jsxImportSource preact */
2646
2647
 
2647
2648
  import styles from "./styles.module.css";
2648
2649
 
@@ -2708,7 +2709,7 @@ export default function WelcomePage() {
2708
2709
  </div>
2709
2710
  );
2710
2711
  }
2711
- `,et=`export type ParamsMap = {
2712
+ `,nt=`export type ParamsMap = {
2712
2713
  {{#each pageRoutes}}"{{name}}": {{serializeParamsLiteral .}};
2713
2714
  {{/each}}
2714
2715
  };
@@ -2717,7 +2718,7 @@ export const paramNames = {
2717
2718
  {{#each pageRoutes}}"{{name}}": [ {{#each params.schema}}"{{name}}", {{/each}}],
2718
2719
  {{/each}}
2719
2720
  } as const;
2720
- `,tt=`import type { ComponentType } from "preact";
2721
+ `,rt=`import type { ComponentType } from "preact";
2721
2722
 
2722
2723
  import type { RouterFactoryReturn } from "@kosmojs/core";
2723
2724
  import { createRouterFactory } from "@kosmojs/core/generators";
@@ -2761,7 +2762,7 @@ export default createRouterFactory<
2761
2762
  Promise<RouteComponent>,
2762
2763
  { server: { route: Route } }
2763
2764
  >();
2764
- `,nt=`import { join } from "node:path";
2765
+ `,it=`import { join } from "node:path";
2765
2766
 
2766
2767
  import { compile } from "path-to-regexp";
2767
2768
 
@@ -2807,7 +2808,7 @@ export default Object.entries(routes)
2807
2808
  return [];
2808
2809
  })
2809
2810
  .map((path) => join(base, path));
2810
- `,rt=`import type { PageRoute } from "@kosmojs/core";
2811
+ `,at=`import type { PageRoute } from "@kosmojs/core";
2811
2812
 
2812
2813
  {{#each pageRoutes}}
2813
2814
  import * as {{id}} from "{{ createImport 'pages' file }}";
@@ -2831,7 +2832,7 @@ const routeMap: Record<
2831
2832
  }
2832
2833
 
2833
2834
  export default routeMap;
2834
- `,it=`import { useContext } from "preact/hooks";
2835
+ `,ot=`import { useContext } from "preact/hooks";
2835
2836
 
2836
2837
  import { RouterContext } from "./mdx";
2837
2838
 
@@ -2873,8 +2874,10 @@ export const useFrontmatter = <
2873
2874
  >(): T => {
2874
2875
  return useContext(RouterContext).frontmatter as T;
2875
2876
  };
2876
- `,at=`{props.children}
2877
- `,ot=`import { h, type JSX } from "preact";
2877
+ `,st=`import { AppProvider } from "{{ createImport 'lib' 'app' }}";
2878
+
2879
+ <AppProvider>{props.children}</AppProvider>
2880
+ `,ct=`import { h, type JSX } from "preact";
2878
2881
 
2879
2882
  import { pageRouteMap, type LinkProps } from "{{ createImport 'libCore' }}";
2880
2883
 
@@ -2891,7 +2894,7 @@ export default function Link(
2891
2894
 
2892
2895
  return h("a", { ...restProps, href }, children);
2893
2896
  }
2894
- `,st=`/**
2897
+ `,lt=`/**
2895
2898
  * MDX component overrides.
2896
2899
  *
2897
2900
  * Every standard markdown element (headings, links, code blocks, etc.)
@@ -2914,7 +2917,7 @@ export const components = {
2914
2917
  declare global {
2915
2918
  type MDXProvidedComponents = typeof components;
2916
2919
  }
2917
- `,ct=`import renderFactory, {
2920
+ `,ut=`import renderFactory, {
2918
2921
  createRoutes,
2919
2922
  hydrate,
2920
2923
  mount,
@@ -2941,7 +2944,7 @@ if (root) {
2941
2944
  } else {
2942
2945
  console.error("❌ Root element not found!");
2943
2946
  }
2944
- `,lt=`import renderFactory, {
2947
+ `,dt=`import renderFactory, {
2945
2948
  createRoutes,
2946
2949
  renderToString,
2947
2950
  // no renderToStream on MDX folders
@@ -2962,7 +2965,7 @@ export default renderFactory(() => {
2962
2965
  },
2963
2966
  };
2964
2967
  });
2965
- `,ut=`<!doctype html>
2968
+ `,ft=`<!doctype html>
2966
2969
  <html lang="en">
2967
2970
  <head>
2968
2971
  <meta charset="UTF-8" />
@@ -2974,13 +2977,13 @@ export default renderFactory(() => {
2974
2977
  <script type="module" src="/{{ entryDir }}/client.ts"><\/script>
2975
2978
  </body>
2976
2979
  </html>
2977
- `,dt=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
2980
+ `,pt=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
2978
2981
 
2979
2982
  export default function Page() {
2980
2983
  return <PageSample />;
2981
2984
  }
2982
- `,ft=`{props.children}
2983
- `,pt=`---
2985
+ `,mt=`{props.children}
2986
+ `,ht=`---
2984
2987
  title: "{{title}}"
2985
2988
  ---
2986
2989
 
@@ -2997,7 +3000,7 @@ export const pathMap = {
2997
3000
  routeName="{{route.name}}"
2998
3001
  pathMap={pathMap}
2999
3002
  />
3000
- `,mt=`---
3003
+ `,gt=`---
3001
3004
  title: Welcome to KosmoJS
3002
3005
  description: Content-first development with MDX and Vite
3003
3006
  ---
@@ -3005,9 +3008,9 @@ description: Content-first development with MDX and Vite
3005
3008
  import WelcomePage from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}"
3006
3009
 
3007
3010
  <WelcomePage />
3008
- `,ht=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
3011
+ `,_t=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
3009
3012
 
3010
- import app from "./App.mdx";
3013
+ import app from "./app.mdx";
3011
3014
  import { components } from "./components/mdx"
3012
3015
 
3013
3016
  export default routerFactory((routes) => {
@@ -3021,7 +3024,31 @@ export default routerFactory((routes) => {
3021
3024
  },
3022
3025
  };
3023
3026
  });
3024
- `,gt=f((e,t,n)=>{let{createPath:r,createImportHelpers:i}=h(t),{renderToFile:a}=_({helpers:{...i({origin:`lib`}),...b(),serializeParams(e){return JSON.stringify(e.params)}}}),{renderToFile:o}=_({helpers:i({origin:`src`})}),l=e=>!e?.trim().length,u=s(n?.templates,pt),d=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await o(r.pages(n.file),n.name===`index`?mt:u(n.name,n),{route:n,title:n.name.replace(/\{([^}]+)\}/g,`$1`),message:We()},{overwrite:l}):t===`pageLayout`&&await o(r.pages(n.file),ft,{route:n},{overwrite:l})},f=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageLayout`?[t]:[]),n=e.flatMap(({kind:e,entry:n})=>{if(e===`pageRoute`){let{name:e,file:r}=n;return[{...n,layouts:t.flatMap(t=>t.name===e||r.startsWith(`${t.name}/`)?[t]:[]).sort(v)}]}return[]}).sort(v);for(let[e,i]of[[`client.ts`,Ke],[`server.ts`,qe]])await a(r.libEntry(e),i,{pageRoutes:n,layouts:t});for(let[e,t]of[[`params.ts`,et],[`router.ts`,tt],[`ssg:routes.ts`,rt]])await a(r.lib(e),t,{pageRoutes:n})};return{meta:e,options:n,config({command:e}){return{oxc:{jsx:{importSource:`preact`}},plugins:Ge(t,e,n)}},async start(){for(let[e,t]of[[`env.d.ts`,Je],[`mdx.ts`,Ye],[`use.ts`,it],[`ssg.ts`,nt],[`pageSamples/styles.module.css`,Qe],[`pageSamples/welcome.tsx`,$e],[`pageSamples/page.tsx`,Ze],[`pageSamples/404.tsx`,Xe]])await a(r.lib(e),t,{});for(let[e,t]of[[`pages/404.mdx`,dt],[`components/Link.tsx`,ot],[`components/mdx.ts`,st],[`App.mdx`,at],[`router.ts`,ht]])await o(r.src(e),t,{entryDir:c.entryDir},{overwrite:l});await o(r.src(`index.html`),ut,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,ct],[`server.ts`,lt]])await o(r.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)}}}),_t=d(e=>{let t={name:`MDX`,dependencies:{"path-to-regexp":W.devDependencies[`path-to-regexp`]},devDependencies:{preact:W.devDependencies.preact,"preact-render-to-string":W.devDependencies[`preact-render-to-string`],"@mdx-js/preact":W.devDependencies[`@mdx-js/preact`],"remark-frontmatter":W.devDependencies[`remark-frontmatter`],"remark-mdx-frontmatter":W.devDependencies[`remark-mdx-frontmatter`]},jsxImportSource:`preact`};return{meta:t,options:e,factory:n=>gt(t,n,e)}}),vt={json:`application/json`,form:[`application/x-www-form-urlencoded`,`multipart/form-data`],raw:void 0},yt=()=>{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]=bt(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=vt[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}}}},bt=(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]},xt=f((e,t,n)=>{let{outfile:r,...i}={...n},{createPath:a}=h(t),{generateOpenAPISchema:o}=yt(),s=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`apiRoute`?[t]:[]),{paths:n,components:s}=o(t),c={...JSON.parse(JSON.stringify(i)),paths:n,components:s},l=/ya?ml/.test(r)?re.stringify(c):JSON.stringify(c,null,2);await ee(a.src(r),l,{})};return{meta:e,options:n,async watch(e){await s(e)},async build(e){await s(e)}}}),St=d(e=>{let t={name:`OpenAPI`,resolveTypes:!0};return{meta:t,options:e,factory:n=>xt(t,n,e)}}),G={type:`module`,private:!0,name:`@kosmojs/react-generator`,version:`0.2.6`,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:{"@types/react":`^19.2.17`,"@types/react-dom":`^19.2.3`,"path-to-regexp":`^8.4.2`,react:`^19.2.8`,"react-dom":`^19.2.8`,"react-router":`^8.3.0`}},Ct=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(`/`)},wt=()=>{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=Ct(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},Tt=()=>{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)]},Et=`import { lazy, type JSX } from "react";
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";
3028
+
3029
+ export const AppProvider = ({ children }: { children: ReactNode }) => {
3030
+ return children;
3031
+ }
3032
+ `,kt=`import { type QueryClient, QueryClientProvider } from "@tanstack/react-query";
3033
+ import type { ReactNode } from "react";
3034
+
3035
+ import { getQueryClient } from "./query";
3036
+
3037
+ export const AppProvider = ({
3038
+ client,
3039
+ children,
3040
+ }: {
3041
+ client?: QueryClient;
3042
+ children: ReactNode;
3043
+ }) => {
3044
+ const queryClient = client ?? getQueryClient();
3045
+ return (
3046
+ <QueryClientProvider client={queryClient}>
3047
+ {children}
3048
+ </QueryClientProvider>
3049
+ );
3050
+ }
3051
+ `,At=`import { lazy, type JSX } from "react";
3025
3052
 
3026
3053
  import {
3027
3054
  createRoot,
@@ -3075,7 +3102,7 @@ export const mount = async (
3075
3102
  }
3076
3103
 
3077
3104
  export default clientRenderFactory();
3078
- `,Dt=`{
3105
+ `,jt=`{
3079
3106
  {{#if name}}
3080
3107
  id: "{{name}}",
3081
3108
  {{/if}}
@@ -3093,7 +3120,7 @@ export default clientRenderFactory();
3093
3120
  children: [ {{#each children}}{{> routePartial}}, {{/each}}],
3094
3121
  {{/if}}
3095
3122
  }
3096
- `,Ot=`import type { JSX } from "react";
3123
+ `,Mt=`import type { JSX } from "react";
3097
3124
 
3098
3125
  import {
3099
3126
  renderToString as renderToStringOrig,
@@ -3159,7 +3186,7 @@ export const renderToStream: RenderToStreamWrapper<
3159
3186
  };
3160
3187
 
3161
3188
  export default serverRenderFactory();
3162
- `,kt=`/* @jsxImportSource react */
3189
+ `,Nt=`/* @jsxImportSource react */
3163
3190
 
3164
3191
  import styles from "./styles.module.css";
3165
3192
 
@@ -3200,7 +3227,7 @@ export default function PageSample(props: {
3200
3227
  </div>
3201
3228
  );
3202
3229
  }
3203
- `,At=`/* @jsxImportSource react */
3230
+ `,Pt=`/* @jsxImportSource react */
3204
3231
 
3205
3232
  import styles from "./styles.module.css";
3206
3233
 
@@ -3252,7 +3279,7 @@ export default function PageSample(props: {
3252
3279
  </div>
3253
3280
  );
3254
3281
  }
3255
- `,jt=`* {
3282
+ `,Ft=`* {
3256
3283
  margin: 0;
3257
3284
  padding: 0;
3258
3285
  box-sizing: border-box;
@@ -3387,7 +3414,7 @@ export default function PageSample(props: {
3387
3414
  align-items: center;
3388
3415
  gap: 0.25rem;
3389
3416
  }
3390
- `,Mt=`/* @jsxImportSource react */
3417
+ `,It=`/* @jsxImportSource react */
3391
3418
 
3392
3419
  import styles from "./styles.module.css";
3393
3420
 
@@ -3453,7 +3480,45 @@ export default function WelcomePage() {
3453
3480
  </div>
3454
3481
  );
3455
3482
  }
3456
- `,Nt=`export type ComponentLoader = () => Promise<{
3483
+ `,Lt=`import { QueryClient, type QueryClientConfig } from "@tanstack/react-query";
3484
+
3485
+ let client: QueryClient | undefined;
3486
+
3487
+ export const createQueryClient = (options?: QueryClientConfig): QueryClient => {
3488
+ client = new QueryClient(options);
3489
+ return client;
3490
+ };
3491
+
3492
+ export const getQueryClient = (): QueryClient => {
3493
+ if (!client) {
3494
+ client = new QueryClient();
3495
+ }
3496
+ return client;
3497
+ };
3498
+ `,Rt=`import { QueryClient, type QueryClientConfig } from "@tanstack/react-query";
3499
+
3500
+ import { store } from "{{ createImport 'lib' '@ssr/base' }}";
3501
+
3502
+ export const createQueryClient = (options?: QueryClientConfig): QueryClient => {
3503
+ const client = new QueryClient(options);
3504
+ const ctx = store?.getStore();
3505
+ if (ctx) {
3506
+ ctx.tsqClient = client;
3507
+ }
3508
+ return client;
3509
+ };
3510
+
3511
+ export const getQueryClient = (): QueryClient => {
3512
+ const ctx = store?.getStore();
3513
+ if (!ctx) {
3514
+ throw new Error("getQueryClient(): called outside an SSR request scope");
3515
+ }
3516
+ if (!ctx.tsqClient) {
3517
+ ctx.tsqClient = new QueryClient();
3518
+ }
3519
+ return ctx.tsqClient as QueryClient;
3520
+ };
3521
+ `,zt=`export type ComponentLoader = () => Promise<{
3457
3522
  loader?: (arg: unknown) => Promise<unknown>;
3458
3523
  }>;
3459
3524
 
@@ -3486,7 +3551,7 @@ export const loaderFactory = (opt?: { withPreload?: boolean }) => {
3486
3551
  return opt?.withPreload ? { loader } : {};
3487
3552
  };
3488
3553
  };
3489
- `,Pt=`import type { JSX, ComponentType } from "react";
3554
+ `,Bt=`import type { JSX, ComponentType } from "react";
3490
3555
 
3491
3556
  import {
3492
3557
  type RouteObject,
@@ -3544,12 +3609,17 @@ export const createRouters = (
3544
3609
  }
3545
3610
 
3546
3611
  export default createRouterFactory<RouteObject, Promise<JSX.Element>>();
3547
- `,Ft=`import { Outlet } from "react-router";
3612
+ `,Vt=`import { Outlet } from "react-router";
3613
+ import { AppProvider } from "{{ createImport 'lib' 'app' }}";
3548
3614
 
3549
3615
  export default function App() {
3550
- return <Outlet />;
3616
+ return (
3617
+ <AppProvider>
3618
+ <Outlet />
3619
+ </AppProvider>
3620
+ );
3551
3621
  }
3552
- `,It=`import {
3622
+ `,Ht=`import {
3553
3623
  type LinkProps as RouterLinkProps,
3554
3624
  Link as RouterLink,
3555
3625
  } from "react-router";
@@ -3577,7 +3647,7 @@ export default function Link(
3577
3647
  </RouterLink>
3578
3648
  );
3579
3649
  }
3580
- `,Lt=`import renderFactory, {
3650
+ `,Ut=`import renderFactory, {
3581
3651
  createRoutes,
3582
3652
  hydrate,
3583
3653
  mount,
@@ -3604,7 +3674,7 @@ if (root) {
3604
3674
  } else {
3605
3675
  console.error("❌ Root element not found!");
3606
3676
  }
3607
- `,Rt=`import renderFactory, {
3677
+ `,Wt=`import renderFactory, {
3608
3678
  createRoutes,
3609
3679
  renderToStream,
3610
3680
  renderToString,
@@ -3631,7 +3701,7 @@ export default renderFactory(() => {
3631
3701
  },
3632
3702
  };
3633
3703
  });
3634
- `,zt=`<!doctype html>
3704
+ `,Gt=`<!doctype html>
3635
3705
  <html lang="en">
3636
3706
  <head>
3637
3707
  <meta charset="UTF-8" />
@@ -3643,17 +3713,17 @@ export default renderFactory(() => {
3643
3713
  <script type="module" src="/{{ entryDir }}/client.ts"><\/script>
3644
3714
  </body>
3645
3715
  </html>
3646
- `,Bt=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
3716
+ `,Kt=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
3647
3717
 
3648
3718
  export default function Page() {
3649
3719
  return <PageSample />;
3650
3720
  }
3651
- `,Vt=`import { Outlet } from "react-router";
3721
+ `,qt=`import { Outlet } from "react-router";
3652
3722
 
3653
3723
  export default function Layout() {
3654
3724
  return <Outlet />;
3655
3725
  }
3656
- `,Ht=`import PageSample from "{{ createImport 'lib' 'pageSamples/page.tsx' }}";
3726
+ `,Jt=`import PageSample from "{{ createImport 'lib' 'pageSamples/page.tsx' }}";
3657
3727
 
3658
3728
  export default function Page() {
3659
3729
  return PageSample({
@@ -3666,10 +3736,10 @@ export default function Page() {
3666
3736
  },
3667
3737
  });
3668
3738
  }
3669
- `,Ut=`export { default } from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}";
3670
- `,Wt=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
3739
+ `,Yt=`export { default } from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}";
3740
+ `,Xt=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
3671
3741
 
3672
- import app from "./App";
3742
+ import app from "./app";
3673
3743
 
3674
3744
  export default routerFactory((routes) => {
3675
3745
  const { clientRouter, serverRouter } = createRouters(routes, { app });
@@ -3682,7 +3752,24 @@ export default routerFactory((routes) => {
3682
3752
  },
3683
3753
  };
3684
3754
  });
3685
- `,Gt=f((e,t,n)=>{let{createPath:r,createImportHelpers:i}=h(t),{renderToFile:a}=_({helpers:{...i({origin:`lib`}),...b()},partials:{routePartial:Dt}}),{renderToFile:o}=_({helpers:i({origin:`src`})}),l=wt(),u=e=>!e?.trim().length,d=s(n?.templates,Ht),f=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await o(r.pages(n.file),n.name===`index`?Ut:d(n.name,n),{route:n,message:Tt()},{overwrite:u}):t===`pageLayout`&&await o(r.pages(n.file),Vt,{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`,Et],[`server.ts`,Ot]])await a(r.libEntry(e),t,{pageEntries:n,nestedRoutes:i});await a(r.lib(`router.tsx`),Pt,{entries:e,indexRoutes:t})};return{meta:e,options:n,config(){let{templates:e,...t}={...n};return{plugins:[oe(t)]}},async start(){for(let[e,t]of[[`env.d.ts`,``],[`react.ts`,Nt],[`pageSamples/styles.module.css`,jt],[`pageSamples/welcome.tsx`,Mt],[`pageSamples/page.tsx`,At],[`pageSamples/404.tsx`,kt]])await a(r.lib(e),t,{});for(let[e,t]of[[`pages/404.tsx`,Bt],[`components/Link.tsx`,It],[`App.tsx`,Ft],[`router.ts`,Wt]])await o(r.src(e),t,{entryDir:c.entryDir},{overwrite:u});await o(r.src(`index.html`),zt,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,Lt],[`server.ts`,Rt]])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)}}}),Kt=d(e=>{let t={name:`React`,dependencies:{react:G.devDependencies.react,"react-router":G.devDependencies[`react-router`],"path-to-regexp":G.devDependencies[`path-to-regexp`]},devDependencies:{"@types/react":G.devDependencies[`@types/react`],"@types/react-dom":G.devDependencies[`@types/react-dom`],"react-dom":G.devDependencies[`react-dom`]},jsxImportSource:`react`};return{meta:t,options:e,factory:n=>Gt(t,n,e)}}),K={type:`module`,private:!0,name:`@kosmojs/solid-generator`,version:`0.2.6`,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`,"path-to-regexp":`^8.4.2`,"solid-js":`^1.9.14`}},qt=()=>{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=q(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=q([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},q=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(`/`)},Jt=()=>{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)]},Yt=`import { lazy, type JSX } from "solid-js";
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";
3756
+
3757
+ export const AppProvider: ParentComponent = (props) => {
3758
+ return props.children;
3759
+ };
3760
+ `,nn=`import type { ParentComponent } from "solid-js";
3761
+ import { type QueryClient, QueryClientProvider } from "@tanstack/solid-query";
3762
+
3763
+ import { getQueryClient } from "./query";
3764
+
3765
+ export const AppProvider: ParentComponent<{ client?: QueryClient }> = (props) => {
3766
+ return (
3767
+ <QueryClientProvider client={props.client ?? getQueryClient()}>
3768
+ {props.children}
3769
+ </QueryClientProvider>
3770
+ );
3771
+ };
3772
+ `,rn=`import { lazy, type JSX } from "solid-js";
3686
3773
  import { hydrate as hydrateOrig, render } from "solid-js/web";
3687
3774
  import type { RouterFactoryReturn } from "@kosmojs/core";
3688
3775
  import { clientRenderFactory } from "@kosmojs/core/generators";
@@ -3727,7 +3814,7 @@ export const mount = async (
3727
3814
  }
3728
3815
 
3729
3816
  export default clientRenderFactory();
3730
- `,Xt=`{
3817
+ `,an=`{
3731
3818
  path: "{{path}}",
3732
3819
  {{#if component}}
3733
3820
  component: {{component}}_component,
@@ -3737,7 +3824,7 @@ export default clientRenderFactory();
3737
3824
  children: [ {{#each children}}{{> routePartial}}, {{/each}}],
3738
3825
  {{/if}}
3739
3826
  }
3740
- `,Zt=`import type { JSX } from "solid-js";
3827
+ `,on=`import type { JSX } from "solid-js";
3741
3828
 
3742
3829
  import {
3743
3830
  generateHydrationScript,
@@ -3813,7 +3900,7 @@ export const renderToStream: RenderToStreamWrapper<
3813
3900
  };
3814
3901
 
3815
3902
  export default serverRenderFactory<true>();
3816
- `,Qt=`/* @jsxImportSource solid-js */
3903
+ `,sn=`/* @jsxImportSource solid-js */
3817
3904
 
3818
3905
  import styles from "./styles.module.css";
3819
3906
 
@@ -3854,7 +3941,7 @@ export default function PageSample(props: {
3854
3941
  </div>
3855
3942
  );
3856
3943
  }
3857
- `,$t=`/* @jsxImportSource solid-js */
3944
+ `,cn=`/* @jsxImportSource solid-js */
3858
3945
 
3859
3946
  import styles from "./styles.module.css";
3860
3947
 
@@ -3906,7 +3993,7 @@ export default function PageSample(props: {
3906
3993
  </div>
3907
3994
  );
3908
3995
  }
3909
- `,en=`* {
3996
+ `,ln=`* {
3910
3997
  margin: 0;
3911
3998
  padding: 0;
3912
3999
  box-sizing: border-box;
@@ -4041,7 +4128,7 @@ export default function PageSample(props: {
4041
4128
  align-items: center;
4042
4129
  gap: 0.25rem;
4043
4130
  }
4044
- `,tn=`/* @jsxImportSource solid-js */
4131
+ `,un=`/* @jsxImportSource solid-js */
4045
4132
 
4046
4133
  import styles from "./styles.module.css";
4047
4134
 
@@ -4107,7 +4194,45 @@ export default function WelcomePage() {
4107
4194
  </div>
4108
4195
  );
4109
4196
  }
4110
- `,nn=`import type { JSX, ParentComponent } from "solid-js";
4197
+ `,dn=`import { QueryClient, type QueryClientConfig } from "@tanstack/solid-query";
4198
+
4199
+ let client: QueryClient | undefined;
4200
+
4201
+ export const createQueryClient = (options?: QueryClientConfig): QueryClient => {
4202
+ client = new QueryClient(options);
4203
+ return client;
4204
+ };
4205
+
4206
+ export const getQueryClient = (): QueryClient => {
4207
+ if (!client) {
4208
+ client = new QueryClient();
4209
+ }
4210
+ return client;
4211
+ };
4212
+ `,fn=`import { QueryClient, type QueryClientConfig } from "@tanstack/solid-query";
4213
+
4214
+ import { store } from "{{ createImport 'lib' '@ssr/base' }}";
4215
+
4216
+ export const createQueryClient = (options?: QueryClientConfig): QueryClient => {
4217
+ const client = new QueryClient(options);
4218
+ const ctx = store?.getStore();
4219
+ if (ctx) {
4220
+ ctx.tsqClient = client;
4221
+ }
4222
+ return client;
4223
+ };
4224
+
4225
+ export const getQueryClient = (): QueryClient => {
4226
+ const ctx = store?.getStore();
4227
+ if (!ctx) {
4228
+ throw new Error("getQueryClient(): called outside an SSR request scope");
4229
+ }
4230
+ if (!ctx.tsqClient) {
4231
+ ctx.tsqClient = new QueryClient();
4232
+ }
4233
+ return ctx.tsqClient as QueryClient;
4234
+ };
4235
+ `,pn=`import type { JSX, ParentComponent } from "solid-js";
4111
4236
  import { Router, type RouteDefinition } from "@solidjs/router";
4112
4237
  import type { RouterFactoryReturn } from "@kosmojs/core";
4113
4238
  import { createRouterFactory } from "@kosmojs/core/generators";
@@ -4143,7 +4268,7 @@ export const createRouters = (
4143
4268
  }
4144
4269
 
4145
4270
  export default createRouterFactory<RouteDefinition, JSX.Element>();
4146
- `,rn=`export type ComponentLoader = () => Promise<{
4271
+ `,mn=`export type ComponentLoader = () => Promise<{
4147
4272
  preload?: () => Promise<unknown>;
4148
4273
  }>;
4149
4274
 
@@ -4163,17 +4288,18 @@ export const loaderFactory = (opt?: { withPreload?: boolean }) => {
4163
4288
  return opt?.withPreload ? { preload } : {};
4164
4289
  };
4165
4290
  };
4166
- `,an=`export type MaybeWrapped<T> = import("solid-js/store").Store<T> | T;
4291
+ `,hn=`export type MaybeWrapped<T> = import("solid-js/store").Store<T> | T;
4167
4292
 
4168
4293
  export { unwrap } from "solid-js/store";
4169
- `,on=`import type { ParentComponent } from "solid-js";
4294
+ `,gn=`import type { ParentComponent } from "solid-js";
4295
+ import { AppProvider } from "{{ createImport 'lib' 'app' }}";
4170
4296
 
4171
4297
  const App: ParentComponent = (props) => {
4172
- return props.children;
4298
+ return <AppProvider>{props.children}</AppProvider>;
4173
4299
  };
4174
4300
 
4175
4301
  export default App;
4176
- `,sn=`import { A, type AnchorProps } from "@solidjs/router";
4302
+ `,_n=`import { A, type AnchorProps } from "@solidjs/router";
4177
4303
  import { type JSXElement, splitProps } from "solid-js";
4178
4304
 
4179
4305
  import { pageRouteMap, type LinkProps } from "{{ createImport 'libCore' }}";
@@ -4198,7 +4324,7 @@ export default function Link(
4198
4324
 
4199
4325
  return <A {...{ ...restProps, href: href() }}>{knownProps.children}</A>;
4200
4326
  }
4201
- `,cn=`import renderFactory, {
4327
+ `,vn=`import renderFactory, {
4202
4328
  createRoutes,
4203
4329
  hydrate,
4204
4330
  mount,
@@ -4225,7 +4351,7 @@ if (root) {
4225
4351
  } else {
4226
4352
  console.error("❌ Root element not found!");
4227
4353
  }
4228
- `,ln=`import renderFactory, {
4354
+ `,yn=`import renderFactory, {
4229
4355
  createRoutes,
4230
4356
  renderToStream,
4231
4357
  renderToString,
@@ -4252,7 +4378,7 @@ export default renderFactory(() => {
4252
4378
  },
4253
4379
  };
4254
4380
  });
4255
- `,un=`<!doctype html>
4381
+ `,bn=`<!doctype html>
4256
4382
  <html lang="en">
4257
4383
  <head>
4258
4384
  <meta charset="UTF-8" />
@@ -4264,19 +4390,19 @@ export default renderFactory(() => {
4264
4390
  <script type="module" src="/{{ entryDir }}/client.ts"><\/script>
4265
4391
  </body>
4266
4392
  </html>
4267
- `,dn=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
4393
+ `,xn=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
4268
4394
 
4269
4395
  export default function Page() {
4270
4396
  return <PageSample />;
4271
4397
  }
4272
- `,fn=`import type { ParentComponent } from "solid-js";
4398
+ `,Sn=`import type { ParentComponent } from "solid-js";
4273
4399
 
4274
4400
  const Layout: ParentComponent = (props) => {
4275
4401
  return props.children;
4276
4402
  };
4277
4403
 
4278
4404
  export default Layout;
4279
- `,pn=`import PageSample from "{{ createImport 'lib' 'pageSamples/page.tsx' }}";
4405
+ `,Cn=`import PageSample from "{{ createImport 'lib' 'pageSamples/page.tsx' }}";
4280
4406
 
4281
4407
  export default function Page() {
4282
4408
  return PageSample({
@@ -4289,10 +4415,10 @@ export default function Page() {
4289
4415
  },
4290
4416
  });
4291
4417
  }
4292
- `,mn=`export { default } from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}";
4293
- `,hn=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
4418
+ `,wn=`export { default } from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}";
4419
+ `,Tn=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
4294
4420
 
4295
- import app from "./App";
4421
+ import app from "./app";
4296
4422
 
4297
4423
  export default routerFactory((routes) => {
4298
4424
  const { clientRouter, serverRouter } = createRouters(routes, { app });
@@ -4305,33 +4431,16 @@ export default routerFactory((routes) => {
4305
4431
  },
4306
4432
  };
4307
4433
  });
4308
- `,gn=f((e,t,n)=>{let{generators:r=[]}=t.config,{createPath:i,createImportHelpers:a}=h(t),{renderToFile:o}=_({helpers:{...a({origin:`lib`}),...b()},partials:{routePartial:Xt}}),{renderToFile:l}=_({helpers:a({origin:`src`})}),u=qt(),d=e=>!e?.trim().length,f=s(n?.templates,pn),p=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await l(i.pages(n.file),n.name===`index`?mn:f(n.name,n),{route:n,message:Jt()},{overwrite:d}):t===`pageLayout`&&await l(i.pages(n.file),fn,{route:n},{overwrite:d})},g=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]:[]),r=u(m(n));for(let[e,t]of[[`client.ts`,Yt],[`server.ts`,Zt]])await o(i.libEntry(e),t,{pageEntries:n,nestedRoutes:r});await o(i.lib(`router.tsx`),nn,{entries:e,indexRoutes:t})};return{meta:e,options:n,config({command:e}){let{templates:t,...i}={...n};return{oxc:{jsx:{importSource:`solid-js`}},plugins:e===`build`?[w({...i,...r.some(e=>e.meta.slot===`ssr`)?{ssr:!0,solid:{...i?.solid,hydratable:!0}}:{}})]:[w({...i,dev:!0,hot:!0})]}},async start(){for(let[e,t]of[[`env.d.ts`,``],[`solid.ts`,rn],[`unwrap.ts`,an],[`pageSamples/styles.module.css`,en],[`pageSamples/welcome.tsx`,tn],[`pageSamples/page.tsx`,$t],[`pageSamples/404.tsx`,Qt]])await o(i.lib(e),t,{});for(let[e,t]of[[`pages/404.tsx`,dn],[`components/Link.tsx`,sn],[`App.tsx`,on],[`router.ts`,hn]])await l(i.src(e),t,{entryDir:c.entryDir},{overwrite:d});await l(i.src(`index.html`),un,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,cn],[`server.ts`,ln]])await l(i.entry(e),t,{},{overwrite:d})},async watch(e,t){(!t||t.kind===`create`)&&await p(e),await g(e)},async build(e){await p(e),await g(e)}}}),_n=d(e=>{let t={name:`SolidJS`,dependencies:{"solid-js":K.devDependencies[`solid-js`],"@solidjs/router":K.devDependencies[`@solidjs/router`],"path-to-regexp":K.devDependencies[`path-to-regexp`]},jsxImportSource:`solid-js`};return{meta:t,options:e,factory:n=>gn(t,n,e)}}),vn=f((r,i)=>{let{generators:a=[],refineTypeName:o,...s}={...i.config},{createPath:c}=h(i);return{meta:r,async postBuild(){let r=c.distDir(`ssg`),o=t(r,`../ssr/server.js`);if(!await se(o,ce.F_OK).then(()=>!0,()=>!1)){console.error(),console.error(n(`red`,`❗Please enable ssrGenerator in ${i.name}/kosmo.config.ts`)),console.error(` SSG generator can not run without SSR server`),console.error();return}let l=te(`${i.name}: SSG`);l.append(`preparing...`);let{createDisposableServer:u}=await import(o);await T(t(r,`../client/assets`),e(r,`assets`),{recursive:!0}),l.append(`bundling routes...`),await S(p(s,...a.map(({factory:e})=>e(i).config?.({kind:`client`,command:`build`})),{root:c.lib(),appType:`custom`,plugins:[y.tsconfigPaths(i),y.nodePrefix()],resolve:{conditions:[`node`]},build:{ssr:c.lib(`ssg.ts`),target:`esnext`,sourcemap:!1,emptyOutDir:!0,rolldownOptions:{output:{dir:r,entryFileNames:`routes.js`,format:`esm`}}}}));try{let t=await import(e(r,`routes.js`)).then(e=>e.default);u(async n=>{for(let[i,a]of t.entries()){l.append(`[ ${i+1} of ${t.length} ] ${a}`);let o=await yn(n,a);o!==void 0&&(await le(e(r,a),{recursive:!0}),await ue(e(r,e(a,`index.html`)),o,`utf8`))}l.succeed(`done ✨`)})}finally{await E(`${r}/routes.js`)}}}}),yn=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}},bn=d(()=>{let e={name:`SSG`,slot:`ssg`};return{meta:e,factory:t=>vn(e,t)}}),J={type:`module`,private:!0,name:`@kosmojs/ssr-generator`,version:`0.2.6`,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.0.12`,hono:`^4.12.32`,"light-my-request":`^6.6.0`,tinyglobby:`^0.2.17`}},xn=`{{#if apiGenerator}}
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}}
4309
4435
  export { default as apiApp } from "{{ createImport 'api' 'app' }}";
4310
4436
  {{else}}
4311
4437
  export const apiApp = undefined;
4312
4438
  {{/if}}
4313
- `,Sn=`import { type RequestContext, store } from "./base";
4314
-
4315
- import { renderWrapper } from "{{ createImport 'libEntry' 'server' }}";
4316
-
4317
- export { default as ssrApp } from "{{ createImport 'entry' 'server' }}";
4318
- export { apiApp } from "{{ createImport 'lib' '@ssr/api' }}";
4319
-
4320
- /**
4321
- * Wraps a render call, making the given context visible to every
4322
- * fetch dispatch that happens during it - across await points,
4323
- * stream chunks and parallel component data loads.
4324
- * */
4325
- export const withSsrContext = <T>(
4326
- context: RequestContext,
4327
- render: () => T,
4328
- ): T => {
4329
- return store.run(context, () => renderWrapper(context, render));
4330
- };
4331
- `,Cn=`import { AsyncLocalStorage } from "node:async_hooks";
4439
+ `,Mn=`import { AsyncLocalStorage } from "node:async_hooks";
4332
4440
 
4333
4441
  export type RequestContext = {
4334
4442
  headers?: HeadersInit;
4443
+ tsqClient?: unknown;
4335
4444
  };
4336
4445
 
4337
4446
  export const redirectCodes = [
@@ -4364,7 +4473,25 @@ export const maxRedirects = 5;
4364
4473
  * Server-only module - never reaches browser bundles.
4365
4474
  * */
4366
4475
  export const store = new AsyncLocalStorage<RequestContext>();
4367
- `,wn=`import { inject } from "light-my-request";
4476
+ `,Nn=`import { type RequestContext, store } from "./base";
4477
+
4478
+ import { renderWrapper } from "{{ createImport 'libEntry' 'server' }}";
4479
+
4480
+ export { default as ssrApp } from "{{ createImport 'entry' 'server' }}";
4481
+ export { apiApp } from "{{ createImport 'lib' '@ssr/api' }}";
4482
+
4483
+ /**
4484
+ * Wraps a render call, making the given context visible to every
4485
+ * fetch dispatch that happens during it - across await points,
4486
+ * stream chunks and parallel component data loads.
4487
+ * */
4488
+ export const withSsrContext = <T>(
4489
+ context: RequestContext,
4490
+ render: () => T,
4491
+ ): T => {
4492
+ return store.run(context, () => renderWrapper(context, render));
4493
+ };
4494
+ `,Pn=`import { inject } from "light-my-request";
4368
4495
 
4369
4496
  import { type FetchApp, isFetchApp, type NodeApp } from "@kosmojs/core";
4370
4497
  import type { Transport } from "@kosmojs/core/fetch";
@@ -4503,12 +4630,12 @@ const createNodeDispatch = (app: NodeApp) => {
4503
4630
  };
4504
4631
 
4505
4632
  export const transport = apiApp ? createTransport(apiApp) : globalThis.fetch;
4506
- `,Tn=`export const routeMap = [
4633
+ `,Fn=`export const routeMap = [
4507
4634
  {{#each pageRoutes}}
4508
4635
  { pathPattern: "{{honoPattern}}", renderMode: "{{renderMode}}" },
4509
4636
  {{/each}}
4510
4637
  ];
4511
- `,En=`import { access, chmod, constants, readFile, unlink } from "node:fs/promises";
4638
+ `,In=`import { access, chmod, constants, readFile, unlink } from "node:fs/promises";
4512
4639
  import {
4513
4640
  createServer,
4514
4641
  type IncomingMessage,
@@ -4578,16 +4705,13 @@ export const createApp = async () => {
4578
4705
  const ssrOptions = () => {
4579
4706
  const cssAssets = [...assets.entries()].flatMap(
4580
4707
  ([path, { file, buffer, size }]) => {
4581
- // Vite is naming assets by entry name, ssr:base becomes ssr_base
4582
- if (!/^ssr_base-.+\\.css$/i.test(file)) {
4708
+ // Vite is naming assets by entry name
4709
+ if (!/^__kosmo_ssr_bundle-.+\\.css$/i.test(file)) {
4583
4710
  return [];
4584
4711
  }
4585
4712
 
4586
- if (template.includes(file.replace(/^ssr_base\\b/, ""))) {
4587
- // skip if template contains a file with same hash;
4588
- // Vite use same hash for client and server assets:
4589
- // client asset: index-D-m1j8Sq.css
4590
- // server asset: ssr_base-D-m1j8Sq.css
4713
+ // skip if template contains a file with same hash
4714
+ if (template.includes(file.replace(/^__kosmo_ssr_bundle\\b/, ""))) {
4591
4715
  return [];
4592
4716
  }
4593
4717
 
@@ -4655,7 +4779,7 @@ export const createApp = async () => {
4655
4779
  headers: Object.fromEntries(ctx.req.raw.headers),
4656
4780
  url: ctx.req.url,
4657
4781
  },
4658
- () => renderToStream(url, ssrOptions(), stream),
4782
+ () => renderToStream(url, ssrOptions(), stream as never),
4659
4783
  );
4660
4784
  await stream.write(htmlStart.replace("<!--app-head-->", head));
4661
4785
  await stream.pipe(html);
@@ -4896,7 +5020,31 @@ if (isMain) {
4896
5020
  process.exit(1);
4897
5021
  }
4898
5022
  }
4899
- `,Dn=`string`,On=f((n,r,i)=>{let{generators:a=[],refineTypeName:s,...c}=r.config,{createPath:l,createImportHelpers:u}=h(r),{renderToFile:d}=_({helpers:{...u({origin:`lib`})}});return{meta:n,options:i,async build(e){let t=i?.renderMode?typeof i.renderMode==`string`?()=>i.renderMode:o(i?.renderMode,`string`):()=>Dn,n={renderMode:JSON.stringify(i?.renderMode||null),pageRoutes:e.flatMap(e=>e.kind===`pageRoute`?[{...e.entry,renderMode:t(e.entry.name)}]:[]).sort(v),apiGenerator:a.some(e=>e.meta.slot===`api`)};for(let[e,t]of[[`ssr.ts`,En],[`@ssr/api.ts`,xn],[`@ssr/app.ts`,Sn],[`@ssr/base.ts`,Cn],[`@ssr/fetch.ts`,wn],[`@ssr/routes.ts`,Tn]])await d(l.lib(e),t,n)},async postBuild(){let n=l.distDir(`ssr`),i=[y.tsconfigPaths(r),y.nodePrefix()];await S(p(c,...a.map(({factory:e})=>e(r).config?.({kind:`client`,command:`build`})),{root:l.src(),plugins:i,define:{KOSMO_PRODUCTION_BUILD:`true`,KOSMO_SERVERSIDE_FETCH:`true`},build:{ssr:l.lib(`@ssr/app`),ssrEmitAssets:!0,sourcemap:!0,emptyOutDir:!0,minify:!1,rolldownOptions:{output:{dir:n,entryFileNames:`app.js`,format:`esm`}}}})),await S({root:l.lib(),configFile:!1,appType:`custom`,plugins:i,resolve:{conditions:[`node`]},build:{ssr:l.lib(`ssr.ts`),target:`esnext`,sourcemap:!0,emptyOutDir:!0,rolldownOptions:{output:{dir:e(n,`server`),entryFileNames:`server.js`,format:`esm`}}}}),await T(t(n,`../client`),n,{recursive:!0});for(let e of[`server.js`,`server.js.map`])await T(`${n}/server/${e}`,`${n}/${e}`);await E(`${n}/server`,{recursive:!0,force:!0})}}}),kn=d(e=>{let t={name:`SSR`,slot:`ssr`,dependencies:{tinyglobby:J.devDependencies.tinyglobby,hono:J.devDependencies.hono,"@hono/node-server":J.devDependencies[`@hono/node-server`],"light-my-request":J.devDependencies[`light-my-request`]}};return{meta:t,options:e,factory:n=>On(t,n,e)}}),Y={type:`module`,private:!0,name:`@kosmojs/svelte-generator`,version:`0.2.6`,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:{"path-to-regexp":`^8.4.2`,svelte:`^5.56.8`}},An=()=>{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)]},jn=`import { hydrate as hydrateOrig, mount as mountOrig } from "svelte";
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">
5024
+ import type { Snippet } from "svelte";
5025
+
5026
+ let { children }: { children: Snippet } = $props();
5027
+ <\/script>
5028
+
5029
+ {@render children()}
5030
+ `,Vn=`<script lang="ts">
5031
+ import { type QueryClient, QueryClientProvider } from "@tanstack/svelte-query";
5032
+ import type { Snippet } from "svelte";
5033
+
5034
+ import { getQueryClient } from "../query";
5035
+
5036
+ let { client, children }: {
5037
+ client?: QueryClient;
5038
+ children: Snippet;
5039
+ } = $props();
5040
+
5041
+ const queryClient = $derived(client ?? getQueryClient());
5042
+ <\/script>
5043
+
5044
+ <QueryClientProvider client={queryClient}>
5045
+ {@render children()}
5046
+ </QueryClientProvider>
5047
+ `,Hn=`import { hydrate as hydrateOrig, mount as mountOrig } from "svelte";
4900
5048
  import type { RouterFactoryReturn } from "@kosmojs/core";
4901
5049
  import { clientRenderFactory } from "@kosmojs/core/generators";
4902
5050
 
@@ -4937,7 +5085,7 @@ export const mount = async (
4937
5085
  }
4938
5086
 
4939
5087
  export default clientRenderFactory();
4940
- `,Mn=`import { render as renderOrig } from "svelte/server";
5088
+ `,Un=`import { render as renderOrig } from "svelte/server";
4941
5089
 
4942
5090
  import type {
4943
5091
  RenderToStringWrapper,
@@ -5003,12 +5151,12 @@ export const renderToString: RenderToStringWrapper<
5003
5151
  // svelte/server exposes only render() - no web-stream renderer -
5004
5152
  // so this folder is string-only SSR.
5005
5153
  export default serverRenderFactory<false>();
5006
- `,Nn=`declare module "*.svelte" {
5154
+ `,Wn=`declare module "*.svelte" {
5007
5155
  import type { Component } from "svelte";
5008
5156
  const component: Component;
5009
5157
  export default component;
5010
5158
  }
5011
- `,Pn=`<script lang="ts">
5159
+ `,Gn=`<script lang="ts">
5012
5160
  /**
5013
5161
  * Folds [app, ...layouts] around the page component.
5014
5162
  *
@@ -5026,7 +5174,7 @@ export default serverRenderFactory<false>();
5026
5174
 
5027
5175
  setRouteContext(() => route);
5028
5176
 
5029
- const chain = $derived([...layouts].reverse().concat(app));
5177
+ const chain = $derived([app, ...layouts.toReversed()]);
5030
5178
  <\/script>
5031
5179
 
5032
5180
  {#snippet layer(index: number)}
@@ -5042,7 +5190,7 @@ export default serverRenderFactory<false>();
5042
5190
  {/snippet}
5043
5191
 
5044
5192
  {@render layer(0)}
5045
- `,Fn=`<script lang="ts">
5193
+ `,Kn=`<script lang="ts">
5046
5194
  import styles from "./styles.module.css";
5047
5195
 
5048
5196
  let { headline }: { headline?: string } = $props();
@@ -5074,7 +5222,7 @@ export default serverRenderFactory<false>();
5074
5222
  </div>
5075
5223
  </div>
5076
5224
  </div>
5077
- `,In=`<script lang="ts">
5225
+ `,qn=`<script lang="ts">
5078
5226
  import styles from "./styles.module.css";
5079
5227
 
5080
5228
  let {
@@ -5119,7 +5267,7 @@ export default serverRenderFactory<false>();
5119
5267
  </div>
5120
5268
  </div>
5121
5269
  </div>
5122
- `,Ln=`* {
5270
+ `,Jn=`* {
5123
5271
  margin: 0;
5124
5272
  padding: 0;
5125
5273
  box-sizing: border-box;
@@ -5254,7 +5402,7 @@ export default serverRenderFactory<false>();
5254
5402
  align-items: center;
5255
5403
  gap: 0.25rem;
5256
5404
  }
5257
- `,Rn=`<script lang="ts">
5405
+ `,Yn=`<script lang="ts">
5258
5406
  import styles from "./styles.module.css";
5259
5407
  <\/script>
5260
5408
 
@@ -5312,7 +5460,7 @@ export default serverRenderFactory<false>();
5312
5460
  </div>
5313
5461
  </div>
5314
5462
  </div>
5315
- `,zn=`export type ParamsMap = {
5463
+ `,Xn=`export type ParamsMap = {
5316
5464
  {{#each pageRoutes}}"{{name}}": {{serializeParamsLiteral .}};
5317
5465
  {{/each}}
5318
5466
  };
@@ -5321,7 +5469,45 @@ export const paramNames = {
5321
5469
  {{#each pageRoutes}}"{{name}}": [ {{#each params.schema}}"{{name}}", {{/each}}],
5322
5470
  {{/each}}
5323
5471
  } as const;
5324
- `,Bn=`import type { RouterFactoryReturn } from "@kosmojs/core";
5472
+ `,Zn=`import { QueryClient, type QueryClientConfig } from "@tanstack/svelte-query";
5473
+
5474
+ let client: QueryClient | undefined;
5475
+
5476
+ export const createQueryClient = (options?: QueryClientConfig): QueryClient => {
5477
+ client = new QueryClient(options);
5478
+ return client;
5479
+ };
5480
+
5481
+ export const getQueryClient = (): QueryClient => {
5482
+ if (!client) {
5483
+ client = new QueryClient();
5484
+ }
5485
+ return client;
5486
+ };
5487
+ `,Qn=`import { QueryClient, type QueryClientConfig } from "@tanstack/svelte-query";
5488
+
5489
+ import { store } from "{{ createImport 'lib' '@ssr/base' }}";
5490
+
5491
+ export const createQueryClient = (options?: QueryClientConfig): QueryClient => {
5492
+ const client = new QueryClient(options);
5493
+ const ctx = store?.getStore();
5494
+ if (ctx) {
5495
+ ctx.tsqClient = client;
5496
+ }
5497
+ return client;
5498
+ };
5499
+
5500
+ export const getQueryClient = (): QueryClient => {
5501
+ const ctx = store?.getStore();
5502
+ if (!ctx) {
5503
+ throw new Error("getQueryClient(): called outside an SSR request scope");
5504
+ }
5505
+ if (!ctx.tsqClient) {
5506
+ ctx.tsqClient = new QueryClient();
5507
+ }
5508
+ return ctx.tsqClient as QueryClient;
5509
+ };
5510
+ `,$n=`import type { RouterFactoryReturn } from "@kosmojs/core";
5325
5511
  import { createRouterFactory } from "@kosmojs/core/generators";
5326
5512
 
5327
5513
  import Layouts from "./Layouts.svelte";
@@ -5361,7 +5547,7 @@ export default createRouterFactory<
5361
5547
  Promise<RouteComponent>,
5362
5548
  { server: { route: Route } }
5363
5549
  >();
5364
- `,Vn=`import { match, pathToRegexp } from "path-to-regexp";
5550
+ `,er=`import { match, pathToRegexp } from "path-to-regexp";
5365
5551
  import { type Component, createContext } from "svelte";
5366
5552
 
5367
5553
  import { paramNames } from "{{ createImport 'lib' 'params' }}";
@@ -5572,7 +5758,7 @@ export const createRoute = (
5572
5758
  layouts,
5573
5759
  };
5574
5760
  };
5575
- `,Hn=`import { getRouteContext } from "./svelte";
5761
+ `,tr=`import { getRouteContext } from "./svelte";
5576
5762
 
5577
5763
  import type { ParamsMap, paramNames } from "{{ createImport 'lib' 'params' }}";
5578
5764
 
@@ -5608,18 +5794,17 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
5608
5794
  const route = useRoute();
5609
5795
  return route.loaderData?.[key || route.name] as T;
5610
5796
  };
5611
- `,Un=`<script lang="ts">
5612
- /**
5613
- * Root wrapper rendered around every page - the App layer of
5614
- * [App, ...layouts]. Receives the rest of the chain as \`children\`.
5615
- * */
5797
+ `,nr=`<script lang="ts">
5798
+ import { AppProvider } from "{{ createImport 'lib' 'app' }}";
5616
5799
  import type { Snippet } from "svelte";
5617
5800
 
5618
5801
  let { children }: { children: Snippet } = $props();
5619
5802
  <\/script>
5620
5803
 
5621
- {@render children()}
5622
- `,Wn=`<script lang="ts">
5804
+ <AppProvider>
5805
+ {@render children()}
5806
+ </AppProvider>
5807
+ `,rr=`<script lang="ts">
5623
5808
  import type { Snippet } from "svelte";
5624
5809
  import type { HTMLAnchorAttributes } from "svelte/elements";
5625
5810
 
@@ -5643,7 +5828,7 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
5643
5828
  <\/script>
5644
5829
 
5645
5830
  <a {href} {...rest}>{@render children?.()}</a>
5646
- `,Gn=`import renderFactory, {
5831
+ `,ir=`import renderFactory, {
5647
5832
  createRoutes,
5648
5833
  hydrate,
5649
5834
  mount,
@@ -5670,7 +5855,7 @@ if (root) {
5670
5855
  } else {
5671
5856
  console.error("❌ Root element not found!");
5672
5857
  }
5673
- `,Kn=`import renderFactory, {
5858
+ `,ar=`import renderFactory, {
5674
5859
  createRoutes,
5675
5860
  renderToString,
5676
5861
  // no renderToStream on Svelte folders
@@ -5691,7 +5876,7 @@ export default renderFactory(() => {
5691
5876
  },
5692
5877
  };
5693
5878
  });
5694
- `,qn=`<!doctype html>
5879
+ `,or=`<!doctype html>
5695
5880
  <html lang="en">
5696
5881
  <head>
5697
5882
  <meta charset="UTF-8" />
@@ -5703,19 +5888,19 @@ export default renderFactory(() => {
5703
5888
  <script type="module" src="/{{ entryDir }}/client.ts"><\/script>
5704
5889
  </body>
5705
5890
  </html>
5706
- `,Jn=`<script lang="ts">
5891
+ `,sr=`<script lang="ts">
5707
5892
  import PageSample from "{{ createImport 'lib' 'pageSamples/404.svelte' }}";
5708
5893
  <\/script>
5709
5894
 
5710
5895
  <PageSample />
5711
- `,Yn=`<script lang="ts">
5896
+ `,cr=`<script lang="ts">
5712
5897
  import type { Snippet } from "svelte";
5713
5898
 
5714
5899
  let { children }: { children: Snippet } = $props();
5715
5900
  <\/script>
5716
5901
 
5717
5902
  {@render children()}
5718
- `,Xn=`<script lang="ts">
5903
+ `,lr=`<script lang="ts">
5719
5904
  import PageSample from "{{ createImport 'lib' 'pageSamples/page.svelte' }}";
5720
5905
 
5721
5906
  const pathMap = {
@@ -5734,7 +5919,7 @@ export default renderFactory(() => {
5734
5919
  routeName={"{{route.name}}"}
5735
5920
  {pathMap}
5736
5921
  />
5737
- `,Zn=`<script lang="ts">
5922
+ `,ur=`<script lang="ts">
5738
5923
  import WelcomePage from "{{ createImport 'lib' 'pageSamples/welcome.svelte' }}";
5739
5924
  <\/script>
5740
5925
 
@@ -5747,9 +5932,9 @@ export default renderFactory(() => {
5747
5932
  </svelte:head>
5748
5933
 
5749
5934
  <WelcomePage />
5750
- `,Qn=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
5935
+ `,dr=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
5751
5936
 
5752
- import app from "./App.svelte";
5937
+ import app from "./app.svelte";
5753
5938
 
5754
5939
  export default routerFactory((routes) => {
5755
5940
  const { clientRouter, serverRouter } = createRouters(routes, { app });
@@ -5762,7 +5947,7 @@ export default routerFactory((routes) => {
5762
5947
  },
5763
5948
  };
5764
5949
  });
5765
- `,$n=f((e,t,n)=>{let{createPath:r,createImportHelpers:i}=h(t),{renderToFile:a}=_({helpers:{...i({origin:`lib`}),...b()}}),{renderToFile:o}=_({helpers:i({origin:`src`})}),l=e=>!e?.trim().length,u=s(n?.templates,Xn),d=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await o(r.pages(n.file),n.name===`index`?Zn:u(n.name,n),{route:n,title:n.name.replace(/\{([^}]+)\}/g,`$1`),message:An()},{overwrite:l}):t===`pageLayout`&&await o(r.pages(n.file),Yn,{route:n},{overwrite:l})},f=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageLayout`?[t]:[]),n=e.flatMap(({kind:e,entry:n})=>{if(e===`pageRoute`){let{name:e,file:r}=n;return[{...n,layouts:t.flatMap(t=>t.name===e||r.startsWith(`${t.name}/`)?[t]:[]).sort(v)}]}return[]}).sort(v);for(let[e,i]of[[`client.ts`,jn],[`server.ts`,Mn]])await a(r.libEntry(e),i,{pageRoutes:n,layouts:t});for(let[e,t]of[[`params.ts`,zn],[`router.ts`,Bn]])await a(r.lib(e),t,{pageRoutes:n})};return{meta:e,options:n,config(){let{templates:e,...t}={...n};return{plugins:de(t)}},async start(){for(let[e,t]of[[`env.d.ts`,Nn],[`svelte.ts`,Vn],[`Layouts.svelte`,Pn],[`use.ts`,Hn],[`pageSamples/styles.module.css`,Ln],[`pageSamples/welcome.svelte`,Rn],[`pageSamples/page.svelte`,In],[`pageSamples/404.svelte`,Fn]])await a(r.lib(e),t,{});for(let[e,t]of[[`pages/404.svelte`,Jn],[`components/Link.svelte`,Wn],[`App.svelte`,Un],[`router.ts`,Qn]])await o(r.src(e),t,{entryDir:c.entryDir},{overwrite:l});await o(r.src(`index.html`),qn,{entryDir:c.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,Gn],[`server.ts`,Kn]])await o(r.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)}}}),er=d(e=>{let t={name:`Svelte`,dependencies:{"path-to-regexp":Y.devDependencies[`path-to-regexp`]},devDependencies:{svelte:Y.devDependencies.svelte}};return{meta:t,options:e,factory:n=>$n(t,n,e)}}),tr={type:`module`,private:!0,name:`@kosmojs/typebox-generator`,version:`0.2.6`,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`},devDependencies:{"@kosmojs/core-generator":`workspace:^`,"@kosmojs/koa-generator":`workspace:^`,typebox:`^1.3.8`}},nr=`import Type from "typebox";
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";
5766
5951
 
5767
5952
  /**
5768
5953
  * Custom types for JavaScript constructs that have no JSON Schema
@@ -5834,7 +6019,7 @@ export default {
5834
6019
  Buffer: TBuffer(),
5835
6020
  ArrayBuffer: TArrayBuffer(),
5836
6021
  };
5837
- `,rr=`import type { TValidationError } from "typebox/error";
6022
+ `,gr=`import type { TValidationError } from "typebox/error";
5838
6023
 
5839
6024
  import type { ValidationErrorEntry } from "@kosmojs/core";
5840
6025
 
@@ -7018,7 +7203,7 @@ const format = (fmt: string, ...args: unknown[]): string => {
7018
7203
 
7019
7204
  return str;
7020
7205
  };
7021
- `,ir=`import Type from "typebox";
7206
+ `,_r=`import Type from "typebox";
7022
7207
  import { Compile } from "typebox/compile";
7023
7208
  import Value from "typebox/value";
7024
7209
 
@@ -7070,14 +7255,14 @@ export const validationSchemaFactory = (
7070
7255
  },
7071
7256
  };
7072
7257
  };
7073
- `,ar=`import { Settings } from "typebox/system";
7258
+ `,vr=`import { Settings } from "typebox/system";
7074
7259
 
7075
7260
  Settings.Set({{settings}});
7076
7261
 
7077
7262
  export { default as customTypes } from "{{customTypesImport}}";
7078
7263
 
7079
7264
  export const validationMessages = {{validationMessages}};
7080
- `,or=`import type { ValidationSchemas } from "@kosmojs/core";
7265
+ `,yr=`import type { ValidationSchemas } from "@kosmojs/core";
7081
7266
 
7082
7267
  import { validationSchemaFactory } from "{{ createImport 'lib' '@typebox' }}";
7083
7268
 
@@ -7138,7 +7323,29 @@ export const validationSchemas: ValidationSchemas = {
7138
7323
  {{/each}}
7139
7324
  },
7140
7325
  };
7141
- `,sr={exactOptionalPropertyTypes:!0},cr=f((e,t,n)=>{let{createPath:r,createImport:i,createImportHelpers:o}=h(t),{renderToFile:s}=_({helpers:{...o({origin:`lib`})}}),{validationMessages:c={},customTypesImport:l=i.lib([`@typebox/custom-types`],{origin:`lib`}),settings:u}={...n},d=async e=>{for(let{kind:t,entry:n}of e){if(t!==`apiRoute`)continue;let e=[n.params,...n.validationDefinitions.flatMap(e=>e.target===`response`?e.variants:[e.schema])].flatMap(({resolvedType:e})=>e?[e]:[]),i=[...new Set(n.validationDefinitions.flatMap(({target:e})=>Object.keys(a).includes(e)?[e]:[]))].map(e=>({target:e,methods:n.methods.flatMap(t=>{let r=n.validationDefinitions.find(n=>n.method===t&&n.target===e);return r?[{route:n.name,method:t,target:e,schema:r.schema,...r.runtimeValidation===void 0?{}:{runtimeValidation:JSON.stringify(r.runtimeValidation)},...r.customErrors===void 0?{}:{customErrors:JSON.stringify(r.customErrors)}}]:[]})})),o=n.methods.flatMap(e=>{let t=n.validationDefinitions.find(t=>t.method===e&&t.target===`response`);return t?[{method:e,variants:t.variants.map(e=>({route:n.name,target:`response`,...e,...t.runtimeValidation===void 0?{}:{runtimeValidation:JSON.stringify(t.runtimeValidation)},...t.customErrors===void 0?{}:{customErrors:JSON.stringify(t.customErrors)}}))}]:[]});await s(r.libApi(n.name,`schemas.ts`),or,{route:n,resolvedTypes:e,requestSchemas:i,responseSchemas:o})}};return{meta:e,options:n,async start(){for(let[e,t]of[[`custom-types.ts`,nr],[`error-handler.ts`,rr],[`index.ts`,ir],[`setup.ts`,ar]])await s(r.lib(`@typebox`,e),t,{validationMessages:JSON.stringify(c),customTypesImport:l,settings:JSON.stringify({...sr,...u})})},async watch(e,t){await d(t?e.filter(({kind:e,entry:n})=>t.kind===`update`&&e===`apiRoute`&&n.fileFullpath===t.file):e)},async build(e){await d(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 lr=d(e=>{let t={name:`TypeBox`,resolveTypes:!0,dependencies:{typebox:tr.devDependencies.typebox}};return{meta:t,options:e,factory:n=>cr(t,n,e)}}),Z={type:`module`,private:!0,name:`@kosmojs/vue-generator`,version:`0.2.6`,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:{"path-to-regexp":`^8.4.2`,vue:`^3.5.40`,"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(`/`)},ur=()=>{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},dr=()=>{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)]},fr=`import type { App } from "vue";
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";
7327
+
7328
+ export { default as AppProvider } from "./provider.vue";
7329
+
7330
+ export const appProvider: Plugin = {
7331
+ install() {},
7332
+ };
7333
+ `,Er=`import { VueQueryPlugin } from "@tanstack/vue-query";
7334
+ import type { Plugin } from "vue";
7335
+
7336
+ import { getQueryClient } from "../query";
7337
+
7338
+ export { default as AppProvider } from "./provider.vue";
7339
+
7340
+ export const appProvider: Plugin = {
7341
+ install(app) {
7342
+ app.use(VueQueryPlugin, { queryClient: getQueryClient() });
7343
+ },
7344
+ };
7345
+ `,Dr=`<template>
7346
+ <slot />
7347
+ </template>
7348
+ `,Or=`import type { App } from "vue";
7142
7349
  import type { RouterFactoryReturn } from "@kosmojs/core";
7143
7350
  import { clientRenderFactory } from "@kosmojs/core/generators";
7144
7351
 
@@ -7178,7 +7385,7 @@ export const mount = async (
7178
7385
  }
7179
7386
 
7180
7387
  export default clientRenderFactory();
7181
- `,pr=`{
7388
+ `,kr=`{
7182
7389
  path: "{{path}}",
7183
7390
  {{#if name}}
7184
7391
  name: "{{name}}",
@@ -7196,7 +7403,7 @@ export default clientRenderFactory();
7196
7403
  children: [ {{#each children}}{{> routePartial}}, {{/each}}],
7197
7404
  {{/if}}
7198
7405
  }
7199
- `,mr=`import type { App } from "vue";
7406
+ `,Ar=`import type { App } from "vue";
7200
7407
 
7201
7408
  import {
7202
7409
  renderToString as renderToStringOrig,
@@ -7291,12 +7498,12 @@ export const renderToStream: RenderToStreamWrapper<
7291
7498
  }
7292
7499
 
7293
7500
  export default serverRenderFactory();
7294
- `,$=`declare module "*.vue" {
7501
+ `,jr=`declare module "*.vue" {
7295
7502
  import type { DefineComponent } from "vue";
7296
7503
  const component: DefineComponent<{}, {}, any>;
7297
7504
  export default component;
7298
7505
  }
7299
- `,hr=`<script setup lang="ts">
7506
+ `,Mr=`<script setup lang="ts">
7300
7507
  import styles from "./styles.module.css";
7301
7508
  defineProps<{
7302
7509
  headline?: string;
@@ -7335,7 +7542,7 @@ defineProps<{
7335
7542
  </div>
7336
7543
  </div>
7337
7544
  </template>
7338
- `,gr=`<script setup lang="ts">
7545
+ `,$=`<script setup lang="ts">
7339
7546
  import styles from "./styles.module.css";
7340
7547
  defineProps<{
7341
7548
  message: string;
@@ -7384,7 +7591,7 @@ defineProps<{
7384
7591
  </div>
7385
7592
  </div>
7386
7593
  </template>
7387
- `,_r=`* {
7594
+ `,Nr=`* {
7388
7595
  margin: 0;
7389
7596
  padding: 0;
7390
7597
  box-sizing: border-box;
@@ -7517,7 +7724,7 @@ defineProps<{
7517
7724
  align-items: center;
7518
7725
  gap: 0.25rem;
7519
7726
  }
7520
- `,vr=`<script setup lang="ts">
7727
+ `,Pr=`<script setup lang="ts">
7521
7728
  import styles from "./styles.module.css";
7522
7729
  <\/script>
7523
7730
 
@@ -7581,7 +7788,51 @@ import styles from "./styles.module.css";
7581
7788
  </div>
7582
7789
  </div>
7583
7790
  </template>
7584
- `,yr=`import { type App, type Component, createApp, createSSRApp } from "vue";
7791
+ `,Fr=`import { QueryClient, type QueryClientConfig } from "@tanstack/vue-query";
7792
+
7793
+ let client: QueryClient | undefined;
7794
+
7795
+ export const createQueryClient = (options?: QueryClientConfig): QueryClient => {
7796
+ client = new QueryClient(options);
7797
+ return client;
7798
+ };
7799
+
7800
+ export const getQueryClient = (): QueryClient => {
7801
+ if (!client) {
7802
+ client = new QueryClient();
7803
+ }
7804
+ return client;
7805
+ };
7806
+ `,Ir=`import { QueryClient, type QueryClientConfig } from "@tanstack/vue-query";
7807
+
7808
+ import { store } from "{{ createImport 'lib' '@ssr/base' }}";
7809
+
7810
+ export const createQueryClient = (options?: QueryClientConfig): QueryClient => {
7811
+ const client = new QueryClient(options);
7812
+ const ctx = store?.getStore();
7813
+ if (ctx) {
7814
+ ctx.tsqClient = client;
7815
+ }
7816
+ return client;
7817
+ };
7818
+
7819
+ export const getQueryClient = (): QueryClient => {
7820
+ const ctx = store?.getStore();
7821
+ if (!ctx) {
7822
+ throw new Error("getQueryClient(): called outside an SSR request scope");
7823
+ }
7824
+ if (!ctx.tsqClient) {
7825
+ ctx.tsqClient = new QueryClient();
7826
+ }
7827
+ return ctx.tsqClient as QueryClient;
7828
+ };
7829
+ `,Lr=`import {
7830
+ type App,
7831
+ type Component,
7832
+ createApp,
7833
+ createSSRApp,
7834
+ type Plugin,
7835
+ } from "vue";
7585
7836
  import {
7586
7837
  createMemoryHistory,
7587
7838
  createRouter,
@@ -7652,7 +7903,13 @@ const installLoaderGuard = (router: RouterWithLoaderData) => {
7652
7903
 
7653
7904
  export const createRouters = (
7654
7905
  routes: Array<RouteRecordRaw>,
7655
- { app }: { app: Component },
7906
+ {
7907
+ app,
7908
+ use,
7909
+ }: {
7910
+ app: Component;
7911
+ use?: Array<[plugin: Plugin, options: object | undefined]>;
7912
+ },
7656
7913
  ): {
7657
7914
  clientRouter: () => RouterFactoryReturn<Promise<App>>;
7658
7915
  serverRouter: (
@@ -7676,6 +7933,12 @@ export const createRouters = (
7676
7933
 
7677
7934
  component.use(router);
7678
7935
 
7936
+ if (Array.isArray(use)) {
7937
+ for (const [plugin, options] of use) {
7938
+ component.use(plugin, options);
7939
+ }
7940
+ }
7941
+
7679
7942
  return { component };
7680
7943
  },
7681
7944
 
@@ -7698,6 +7961,12 @@ export const createRouters = (
7698
7961
 
7699
7962
  component.use(router);
7700
7963
 
7964
+ if (Array.isArray(use)) {
7965
+ for (const [plugin, options] of use) {
7966
+ component.use(plugin, options);
7967
+ }
7968
+ }
7969
+
7701
7970
  return { component, loaderData: router.__loaderData };
7702
7971
  },
7703
7972
  };
@@ -7708,14 +7977,14 @@ export default createRouterFactory<
7708
7977
  Promise<App>,
7709
7978
  { server: { loaderData: Record<string, unknown> } }
7710
7979
  >();
7711
- `,br=`import { type Ref, unref } from "vue";
7980
+ `,Rr=`import { type Ref, unref } from "vue";
7712
7981
 
7713
7982
  export type MaybeWrapped<T> = Ref<T> | T;
7714
7983
 
7715
7984
  export function unwrap<T>(value: MaybeWrapped<T>): T {
7716
7985
  return unref(value);
7717
7986
  }
7718
- `,xr=`import { useRoute, useRouter } from "vue-router";
7987
+ `,zr=`import { useRoute, useRouter } from "vue-router";
7719
7988
 
7720
7989
  import type { RouterWithLoaderData } from "./router";
7721
7990
 
@@ -7730,10 +7999,16 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
7730
7999
  const route = useRoute();
7731
8000
  return router.__loaderData?.[key || (route.name as string)] as T;
7732
8001
  };
7733
- `,Sr=`<template>
7734
- <RouterView />
8002
+ `,Br=`<script setup lang="ts">
8003
+ import { AppProvider } from "_/app";
8004
+ <\/script>
8005
+
8006
+ <template>
8007
+ <AppProvider>
8008
+ <RouterView />
8009
+ </AppProvider>
7735
8010
  </template>
7736
- `,Cr=`<script setup lang="ts" generic="T extends LinkProps">
8011
+ `,Vr=`<script setup lang="ts" generic="T extends LinkProps">
7737
8012
  import { computed } from "vue";
7738
8013
  import { RouterLink } from "vue-router";
7739
8014
 
@@ -7765,7 +8040,7 @@ const href = computed(() => {
7765
8040
  <slot />
7766
8041
  </RouterLink>
7767
8042
  </template>
7768
- `,wr=`import renderFactory, {
8043
+ `,Hr=`import renderFactory, {
7769
8044
  createRoutes,
7770
8045
  hydrate,
7771
8046
  mount,
@@ -7792,7 +8067,7 @@ if (root) {
7792
8067
  } else {
7793
8068
  console.error("❌ Root element not found!");
7794
8069
  }
7795
- `,Tr=`import renderFactory, {
8070
+ `,Ur=`import renderFactory, {
7796
8071
  createRoutes,
7797
8072
  renderToStream,
7798
8073
  renderToString,
@@ -7819,7 +8094,7 @@ export default renderFactory(() => {
7819
8094
  },
7820
8095
  };
7821
8096
  });
7822
- `,Er=`<!doctype html>
8097
+ `,Wr=`<!doctype html>
7823
8098
  <html lang="en">
7824
8099
  <head>
7825
8100
  <meta charset="UTF-8" />
@@ -7831,17 +8106,17 @@ export default renderFactory(() => {
7831
8106
  <script type="module" src="/{{ entryDir }}/client.ts"><\/script>
7832
8107
  </body>
7833
8108
  </html>
7834
- `,Dr=`<script setup lang="ts">
8109
+ `,Gr=`<script setup lang="ts">
7835
8110
  import PageSample from "{{ createImport 'lib' 'pageSamples/404.vue' }}";
7836
8111
  <\/script>
7837
8112
 
7838
8113
  <template>
7839
8114
  <PageSample />
7840
8115
  </template>
7841
- `,Or=`<template>
8116
+ `,Kr=`<template>
7842
8117
  <router-view />
7843
8118
  </template>
7844
- `,kr=`<script setup lang="ts">
8119
+ `,qr=`<script setup lang="ts">
7845
8120
  import PageSample from "{{ createImport 'lib' 'pageSamples/page.vue' }}";
7846
8121
  <\/script>
7847
8122
 
@@ -7856,19 +8131,23 @@ import PageSample from "{{ createImport 'lib' 'pageSamples/page.vue' }}";
7856
8131
  }"
7857
8132
  />
7858
8133
  </template>
7859
- `,Ar=`<script setup lang="ts">
8134
+ `,Jr=`<script setup lang="ts">
7860
8135
  import WelcomePage from "{{ createImport 'lib' 'pageSamples/welcome.vue' }}";
7861
8136
  <\/script>
7862
8137
 
7863
8138
  <template>
7864
8139
  <WelcomePage />
7865
8140
  </template>
7866
- `,jr=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
8141
+ `,Yr=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
8142
+ import { appProvider } from "{{ createImport 'lib' 'app' }}";
7867
8143
 
7868
- import app from "./App.vue";
8144
+ import app from "./app.vue";
7869
8145
 
7870
8146
  export default routerFactory((routes) => {
7871
- const { clientRouter, serverRouter } = createRouters(routes, { app });
8147
+ const { clientRouter, serverRouter } = createRouters(routes, {
8148
+ app,
8149
+ use: [[appProvider, undefined]],
8150
+ });
7872
8151
  return {
7873
8152
  clientRouter() {
7874
8153
  return clientRouter()
@@ -7878,5 +8157,5 @@ export default routerFactory((routes) => {
7878
8157
  },
7879
8158
  };
7880
8159
  });
7881
- `,Mr=f((e,t,n)=>{let{createPath:r,createImportHelpers:i}=h(t),{renderToFile:a}=_({helpers:{...i({origin:`lib`}),...b()},partials:{routePartial:pr}}),{renderToFile:o}=_({helpers:i({origin:`src`})}),l=ur(),u=e=>!e?.trim().length,d=s(n?.templates,kr),f=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await o(r.pages(n.file),n.name===`index`?Ar:d(n.name,n),{route:n,message:dr()},{overwrite:u}):t===`pageLayout`&&await o(r.pages(n.file),Or,{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`,fr],[`server.ts`,mr]])await a(r.libEntry(e),t,{pageEntries:n,nestedRoutes:i,lazyLoad:e===`client.ts`});await a(r.lib(`router.ts`),yr,{entries:e,indexRoutes:t})};return{meta:e,options:n,config(){let{templates:e,...t}={...n};return{plugins:[D(t)]}},async start(){for(let[e,t]of[[`env.d.ts`,$],[`unwrap.ts`,br],[`use.ts`,xr],[`pageSamples/styles.module.css`,_r],[`pageSamples/welcome.vue`,vr],[`pageSamples/page.vue`,gr],[`pageSamples/404.vue`,hr]])await a(r.lib(e),t,{});for(let[e,t]of[[`pages/404.vue`,Dr],[`components/Link.vue`,Cr],[`App.vue`,Sr],[`router.ts`,jr]])await o(r.src(e),t,{entryDir:c.entryDir},{overwrite:u});await o(r.src(`index.html`),Er,{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`,Tr]])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)}}}),Nr=d(e=>{let t={name:`Vue`,dependencies:{vue:Z.devDependencies.vue,"vue-router":Z.devDependencies[`vue-router`],"path-to-regexp":Z.devDependencies[`path-to-regexp`]},jsxImportSource:`vue`};return{meta:t,options:e,factory:n=>Mr(t,n,e)}}),Pr=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{Pr as defineConfig,N as fetchGenerator,Ce as honoGenerator,Ue as koaGenerator,_t as mdxGenerator,St as openapiGenerator,Kt as reactGenerator,_n as solidGenerator,bn as ssgGenerator,kn as ssrGenerator,er as svelteGenerator,lr as typeboxGenerator,Nr as vueGenerator};
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};
7882
8161
  //# sourceMappingURL=index.js.map