@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/package.json +18 -17
- package/pkg/chassis.js +9 -10
- package/pkg/chassis.js.map +1 -1
- package/pkg/index.js +485 -206
- package/pkg/index.js.map +1 -1
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
|
|
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
|
-
`,
|
|
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 (!
|
|
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
|
-
`,
|
|
124
|
+
`,A=`export type MaybeWrapped<T> = T;
|
|
129
125
|
export const unwrap = <T>(data: T) => data;
|
|
130
|
-
`,
|
|
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
|
-
`,
|
|
147
|
+
`,F=`import type { DevSetup } from "@kosmojs/core/api";
|
|
152
148
|
|
|
153
149
|
export const devSetup = (setup: DevSetup) => setup;
|
|
154
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
975
|
+
`,ge=`export declare module "{{ createImport 'libApi' }}" {
|
|
980
976
|
interface DefaultVariables {}
|
|
981
977
|
interface DefaultBindings {}
|
|
982
978
|
}
|
|
983
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
1075
|
+
`,Ee=`import type { DevSetup } from "@kosmojs/core/api";
|
|
1080
1076
|
|
|
1081
1077
|
export const devSetup = (setup: DevSetup) => setup;
|
|
1082
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
2012
|
+
`,Ie=`export declare module "{{ createImport 'libApi' }}" {
|
|
2017
2013
|
interface DefaultState {}
|
|
2018
2014
|
interface DefaultContext {}
|
|
2019
2015
|
}
|
|
2020
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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},
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
|
|
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
|
-
`,
|
|
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
|
-
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
2877
|
-
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
2983
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
3011
|
+
`,_t=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
3009
3012
|
|
|
3010
|
-
import app from "./
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
3612
|
+
`,Vt=`import { Outlet } from "react-router";
|
|
3613
|
+
import { AppProvider } from "{{ createImport 'lib' 'app' }}";
|
|
3548
3614
|
|
|
3549
3615
|
export default function App() {
|
|
3550
|
-
return
|
|
3616
|
+
return (
|
|
3617
|
+
<AppProvider>
|
|
3618
|
+
<Outlet />
|
|
3619
|
+
</AppProvider>
|
|
3620
|
+
);
|
|
3551
3621
|
}
|
|
3552
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
3721
|
+
`,qt=`import { Outlet } from "react-router";
|
|
3652
3722
|
|
|
3653
3723
|
export default function Layout() {
|
|
3654
3724
|
return <Outlet />;
|
|
3655
3725
|
}
|
|
3656
|
-
`,
|
|
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
|
-
`,
|
|
3670
|
-
`,
|
|
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 "./
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
4291
|
+
`,hn=`export type MaybeWrapped<T> = import("solid-js/store").Store<T> | T;
|
|
4167
4292
|
|
|
4168
4293
|
export { unwrap } from "solid-js/store";
|
|
4169
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
4293
|
-
`,
|
|
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 "./
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
4633
|
+
`,Fn=`export const routeMap = [
|
|
4507
4634
|
{{#each pageRoutes}}
|
|
4508
4635
|
{ pathPattern: "{{honoPattern}}", renderMode: "{{renderMode}}" },
|
|
4509
4636
|
{{/each}}
|
|
4510
4637
|
];
|
|
4511
|
-
`,
|
|
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
|
|
4582
|
-
if (!/^
|
|
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
|
|
4587
|
-
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
|
|
5622
|
-
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
5891
|
+
`,sr=`<script lang="ts">
|
|
5707
5892
|
import PageSample from "{{ createImport 'lib' 'pageSamples/404.svelte' }}";
|
|
5708
5893
|
<\/script>
|
|
5709
5894
|
|
|
5710
5895
|
<PageSample />
|
|
5711
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
5935
|
+
`,dr=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
5751
5936
|
|
|
5752
|
-
import app from "./
|
|
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
|
-
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
|
|
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
|
-
`,
|
|
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
|
-
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
{
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
7734
|
-
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
8116
|
+
`,Kr=`<template>
|
|
7842
8117
|
<router-view />
|
|
7843
8118
|
</template>
|
|
7844
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
8141
|
+
`,Yr=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
8142
|
+
import { appProvider } from "{{ createImport 'lib' 'app' }}";
|
|
7867
8143
|
|
|
7868
|
-
import app from "./
|
|
8144
|
+
import app from "./app.vue";
|
|
7869
8145
|
|
|
7870
8146
|
export default routerFactory((routes) => {
|
|
7871
|
-
const { clientRouter, serverRouter } = createRouters(routes, {
|
|
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
|
-
`,
|
|
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
|