@kosmojs/dev 0.2.3 β†’ 0.2.5

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.3`,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 D from"@vitejs/plugin-vue";var O={type:`module`,private:!0,name:`@kosmojs/fetch-generator`,version:`0.2.5`,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}}
2
2
  import {{id}} from "{{ createImport 'libApi' name 'fetch' }}";
3
3
  {{/each}}
4
4
 
@@ -127,7 +127,7 @@ export default {
127
127
  };
128
128
  `,j=`export type MaybeWrapped<T> = T;
129
129
  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.3`,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";
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.5`,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";
131
131
 
132
132
  import type { AppFactory } from "@kosmojs/core/api";
133
133
 
@@ -1058,7 +1058,7 @@ export default [
1058
1058
  return next();
1059
1059
  }),
1060
1060
  ];
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.3`,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";
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.5`,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";
1062
1062
 
1063
1063
  import type { AppFactory } from "@kosmojs/core/api";
1064
1064
 
@@ -2091,7 +2091,7 @@ export default [
2091
2091
  * */
2092
2092
  use(defaultErrorHandler, { slot: "errorHandler" }),
2093
2093
  ];
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.3`,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,`
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.5`,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,`
2095
2095
  if (import.meta.hot) {
2096
2096
  import.meta.hot.accept(() => {});
2097
2097
  }
@@ -3021,7 +3021,7 @@ export default routerFactory((routes) => {
3021
3021
  },
3022
3022
  };
3023
3023
  });
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.3`,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";
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.5`,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";
3025
3025
 
3026
3026
  import {
3027
3027
  createRoot,
@@ -3682,7 +3682,7 @@ export default routerFactory((routes) => {
3682
3682
  },
3683
3683
  };
3684
3684
  });
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.3`,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";
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.5`,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";
3686
3686
  import { hydrate as hydrateOrig, render } from "solid-js/web";
3687
3687
  import type { RouterFactoryReturn } from "@kosmojs/core";
3688
3688
  import { clientRenderFactory } from "@kosmojs/core/generators";
@@ -4305,7 +4305,7 @@ export default routerFactory((routes) => {
4305
4305
  },
4306
4306
  };
4307
4307
  });
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.3`,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}}
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.5`,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}}
4309
4309
  export { default as apiApp } from "{{ createImport 'api' 'app' }}";
4310
4310
  {{else}}
4311
4311
  export const apiApp = undefined;
@@ -4896,7 +4896,7 @@ if (isMain) {
4896
4896
  process.exit(1);
4897
4897
  }
4898
4898
  }
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.3`,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";
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.5`,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";
4900
4900
  import type { RouterFactoryReturn } from "@kosmojs/core";
4901
4901
  import { clientRenderFactory } from "@kosmojs/core/generators";
4902
4902
 
@@ -5762,7 +5762,7 @@ export default routerFactory((routes) => {
5762
5762
  },
5763
5763
  };
5764
5764
  });
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.3`,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";
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.5`,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";
5766
5766
 
5767
5767
  /**
5768
5768
  * Custom types for JavaScript constructs that have no JSON Schema
@@ -7138,7 +7138,7 @@ export const validationSchemas: ValidationSchemas = {
7138
7138
  {{/each}}
7139
7139
  },
7140
7140
  };
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.3`,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";
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.5`,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";
7142
7142
  import type { RouterFactoryReturn } from "@kosmojs/core";
7143
7143
  import { clientRenderFactory } from "@kosmojs/core/generators";
7144
7144