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