@kosmojs/dev 0.4.0 → 0.4.1
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 +5 -5
- package/pkg/assets/{pkg-DU-tTiIp.js → pkg-BhfEyKpY.js} +64 -39
- package/pkg/assets/pkg-BhfEyKpY.js.map +1 -0
- package/pkg/chassis.js +1 -1
- package/pkg/chassis.js.map +1 -1
- package/pkg/index.js +278 -221
- package/pkg/index.js.map +1 -1
- package/pkg/assets/pkg-DU-tTiIp.js.map +0 -1
package/pkg/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{t as e}from"./assets/pkg-
|
|
2
|
-
`,
|
|
3
|
-
`,
|
|
1
|
+
import{t as e}from"./assets/pkg-BhfEyKpY.js";import{join as t,resolve as n}from"node:path";import{styleText as r}from"node:util";import{DEFAULT_APIBASE as i,RequestBodyTargets as a,RequestValidationTargets as o,createRouteResolver as s,createTemplateResolver as c,defaults as l}from"@kosmojs/core";import{createH3Pattern as u,createHonoPattern as d,createPathPattern as f,createWatchedApiRouteEntriesFilter as p,createWatchedPageRouteEntriesFilter as m,defineGenerator as h,defineGeneratorFactory as g,mergeConfigs as _,nestedRoutesFactory as v,pathResolver as y,pathTokensFactory as b,renderFactory as x,renderToFile as ee,sortRoutes as S,spinnerFactory as te,vitePlugins as C}from"@kosmojs/lib";import{routeRenderHelpers as w}from"@kosmojs/core/generators";import T from"crc/crc32";import ne from"@mdx-js/rollup";import{build as E,createFilter as re}from"vite";import ie from"yaml";import{parse as ae}from"path-to-regexp";import oe from"typebox";import se from"@vitejs/plugin-react";import D from"vite-plugin-solid";import{access as ce,constants as le,cp as O,mkdir as ue,rm as k,writeFile as de}from"node:fs/promises";import{svelte as fe}from"@sveltejs/vite-plugin-svelte";import pe from"@vitejs/plugin-vue";var A=`export * from "./transport";
|
|
2
|
+
`,j=`export const transport = undefined;
|
|
3
|
+
`,M=`{{#each routes}}
|
|
4
4
|
import {{id}} from "{{ createImport 'libApi' name 'fetch' }}";
|
|
5
5
|
{{/each}}
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ export default {
|
|
|
18
18
|
{{/each}}
|
|
19
19
|
{{/each}}
|
|
20
20
|
}
|
|
21
|
-
`,
|
|
21
|
+
`,N=`import fetchFactory, { join } from "@kosmojs/core/fetch";
|
|
22
22
|
|
|
23
23
|
import { base, apiBase, apiRouteMap } from "{{ createImport 'libCore' }}";
|
|
24
24
|
import { transport } from "{{ createImport 'lib' '@fetch' }}";
|
|
@@ -118,9 +118,9 @@ export default {
|
|
|
118
118
|
href,
|
|
119
119
|
validationSchemas,
|
|
120
120
|
};
|
|
121
|
-
`,
|
|
121
|
+
`,P=`export type MaybeWrapped<T> = T;
|
|
122
122
|
export const unwrap = <T>(data: T) => data;
|
|
123
|
-
`,
|
|
123
|
+
`,F=g(e=>{let{createPath:t,createImportHelpers:n}=y(e),{renderToFile:r}=x({helpers:{...n({origin:`lib`}),...w()}}),i=async(e,n)=>{let i=e.flatMap(({kind:e,entry:t})=>e===`apiRoute`?[t]:[]).sort(S);await r(t.lib(`fetch.ts`),M,{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,payloadTypes:e.filter(e=>e.method===t&&![`headers`,`cookies`,`response`].includes(e.target)),responseType:e.find(e=>e.target===`response`&&e.method===t)})),a=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`),N,{route:i,validationTypes:e,routeMethods:n,responseTypes:a})}};return{async start(){for(let[e,n]of[[`unwrap.ts`,P],[`@fetch/transport.ts`,j],[`@fetch/index.ts`,A]])await r(t.lib(e),n,{})},async watch(e,t){await i(e,e.filter(p(t,[`create`,`update`])))},async build(e){await i(e,e)},async ssrBuild(){for(let[e,n]of[[`@fetch/transport.ts`,`export { transport } from "${l.libPrefix}/@ssr/fetch";`]])await r(t.lib(e),n,{})}}}),I=h({meta:{name:`Fetch`,slot:`fetch`},factory:F}),L={type:`module`,private:!0,name:`@kosmojs/h3-generator`,version:`0.3.0`,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/h3-generator`},dependencies:{"@kosmojs/core":`workspace:^`,"@kosmojs/lib":`workspace:^`,crc:`^4.3.2`},devDependencies:{h3:`2.0.1-rc.29`,vite:`^8.2.2`}},R=`import { H3, type Middleware } from "h3";
|
|
124
124
|
|
|
125
125
|
import type { Route, RouteDebugOption } from "@kosmojs/core/api";
|
|
126
126
|
|
|
@@ -181,10 +181,12 @@ export function appFactory(
|
|
|
181
181
|
|
|
182
182
|
return app;
|
|
183
183
|
}
|
|
184
|
-
`,
|
|
184
|
+
`,z=`import type { DevSetup } from "@kosmojs/core/api";
|
|
185
185
|
|
|
186
186
|
export const devSetup = (setup: DevSetup) => setup;
|
|
187
|
-
`,
|
|
187
|
+
`,B=`import { type H3Event, HTTPError } from "h3";
|
|
188
|
+
|
|
189
|
+
import { ValidationError } from "@kosmojs/core/errors";
|
|
188
190
|
|
|
189
191
|
type ErrorHandler = (
|
|
190
192
|
error: any,
|
|
@@ -194,9 +196,19 @@ type ErrorHandler = (
|
|
|
194
196
|
export type ErrorHandlerFactory = (handler: ErrorHandler) => ErrorHandler;
|
|
195
197
|
|
|
196
198
|
export const errorHandlerFactory: ErrorHandlerFactory = (handler) => {
|
|
197
|
-
|
|
199
|
+
// H3 wraps errors in its own HTTPError with the original error as \`cause\`
|
|
200
|
+
return (error, event) => {
|
|
201
|
+
return handler(
|
|
202
|
+
error instanceof HTTPError
|
|
203
|
+
? error.cause instanceof ValidationError
|
|
204
|
+
? error.cause
|
|
205
|
+
: error
|
|
206
|
+
: error,
|
|
207
|
+
event,
|
|
208
|
+
);
|
|
209
|
+
};
|
|
198
210
|
};
|
|
199
|
-
`,
|
|
211
|
+
`,me=`import { type H3Event, readBody } from "h3";
|
|
200
212
|
|
|
201
213
|
import {
|
|
202
214
|
parseCookies,
|
|
@@ -236,7 +248,7 @@ export const bodyparsers: {
|
|
|
236
248
|
return event.req.text();
|
|
237
249
|
},
|
|
238
250
|
};
|
|
239
|
-
`,
|
|
251
|
+
`,he=`import type { Middleware } from "h3";
|
|
240
252
|
|
|
241
253
|
import type {
|
|
242
254
|
RequestBodyTarget,
|
|
@@ -423,18 +435,39 @@ export const createRouteMiddleware: CreateRouteMiddleware<
|
|
|
423
435
|
// run all downstream middleware (including the route handler)
|
|
424
436
|
const body = await next();
|
|
425
437
|
|
|
438
|
+
/**
|
|
439
|
+
* H3 builds the actual Response AFTER the middleware chain completes,
|
|
440
|
+
* so at this point event.res only reflects what handlers set explicitly.
|
|
441
|
+
* Reconstruct what will be sent instead: a returned Response is authoritative;
|
|
442
|
+
* otherwise an unset status means 200, and the content type follows H3's
|
|
443
|
+
* serialization rules for the returned value (string -> text, object -> JSON).
|
|
444
|
+
* */
|
|
445
|
+
const rawResponse = body instanceof Response ? body : undefined;
|
|
446
|
+
|
|
426
447
|
const response: {
|
|
427
448
|
status: number;
|
|
428
449
|
contentType: string | null;
|
|
429
450
|
body?: unknown;
|
|
430
451
|
} = {
|
|
431
|
-
status: event.res.status ??
|
|
432
|
-
contentType:
|
|
452
|
+
status: rawResponse?.status ?? event.res.status ?? 200,
|
|
453
|
+
contentType:
|
|
454
|
+
rawResponse?.headers.get("Content-Type") ??
|
|
455
|
+
event.res.headers.get("Content-Type") ??
|
|
456
|
+
(typeof body === "string"
|
|
457
|
+
? "text/plain"
|
|
458
|
+
: body === undefined || body === null
|
|
459
|
+
? null
|
|
460
|
+
: "application/json"),
|
|
433
461
|
};
|
|
434
462
|
|
|
435
463
|
// Validate body only for JSON variants
|
|
436
464
|
if (variants.some((e) => e.contentType?.includes("json"))) {
|
|
437
|
-
response.body =
|
|
465
|
+
response.body = rawResponse
|
|
466
|
+
? await rawResponse
|
|
467
|
+
.clone()
|
|
468
|
+
.json()
|
|
469
|
+
.catch(() => undefined)
|
|
470
|
+
: body;
|
|
438
471
|
}
|
|
439
472
|
|
|
440
473
|
/**
|
|
@@ -454,7 +487,7 @@ export const createRouteMiddleware: CreateRouteMiddleware<
|
|
|
454
487
|
: {
|
|
455
488
|
keyword: "Status",
|
|
456
489
|
path: \`Variant #\${i}\`,
|
|
457
|
-
message: \`expected: \${schema.status}; actual: \${
|
|
490
|
+
message: \`expected: \${schema.status}; actual: \${response.status}\`,
|
|
458
491
|
};
|
|
459
492
|
},
|
|
460
493
|
(i) => {
|
|
@@ -595,7 +628,7 @@ export const routes = createRoutes<ParameterizedMiddleware, Middleware>(
|
|
|
595
628
|
createRouteMiddleware,
|
|
596
629
|
},
|
|
597
630
|
);
|
|
598
|
-
`,
|
|
631
|
+
`,ge=`import { join } from "node:path";
|
|
599
632
|
|
|
600
633
|
import type { RouteSource } from "@kosmojs/core/api";
|
|
601
634
|
|
|
@@ -640,7 +673,7 @@ export const routeSources: Array<RouteSource<never>> = [
|
|
|
640
673
|
},
|
|
641
674
|
{{/each}}
|
|
642
675
|
];
|
|
643
|
-
`,
|
|
676
|
+
`,_e=`import { parseArgs, styleText } from "node:util";
|
|
644
677
|
|
|
645
678
|
import { serve as h3serve } from "h3";
|
|
646
679
|
|
|
@@ -688,7 +721,7 @@ export const serve = async <T extends App>(app: T, opt?: Handles) => {
|
|
|
688
721
|
|
|
689
722
|
return server as never;
|
|
690
723
|
};
|
|
691
|
-
`,
|
|
724
|
+
`,ve=`import type { H3Event, H3EventContext } from "h3";
|
|
692
725
|
|
|
693
726
|
import type { ValidationDefmap, ValidationOptmap } from "@kosmojs/core";
|
|
694
727
|
import {
|
|
@@ -835,14 +868,14 @@ export const defineRoute: <
|
|
|
835
868
|
use: use as never,
|
|
836
869
|
});
|
|
837
870
|
};
|
|
838
|
-
`,
|
|
871
|
+
`,ye=`export * from "./@api/app";
|
|
839
872
|
export { appFactory as default } from "./@api/app";
|
|
840
873
|
export * from "./@api/dev";
|
|
841
874
|
export * from "./@api/errors";
|
|
842
875
|
export * from "./@api/router";
|
|
843
876
|
export * from "./@api/routes";
|
|
844
877
|
export * from "./@api/server";
|
|
845
|
-
`,
|
|
878
|
+
`,be=`import { onError } from "h3";
|
|
846
879
|
|
|
847
880
|
import appFactory, { routes, type App } from "{{ createImport 'lib' 'api:factory' }}";
|
|
848
881
|
import defaultErrorHandler from "./errors";
|
|
@@ -850,7 +883,7 @@ import defaultErrorHandler from "./errors";
|
|
|
850
883
|
export default appFactory(routes, ({ app }) => {
|
|
851
884
|
app.use(onError(defaultErrorHandler));
|
|
852
885
|
}) as App;
|
|
853
|
-
`,
|
|
886
|
+
`,xe=`import { toNodeHandler } from "h3/node";
|
|
854
887
|
|
|
855
888
|
import app from "./app";
|
|
856
889
|
|
|
@@ -870,10 +903,10 @@ process.on("unhandledRejection", (reason) => {
|
|
|
870
903
|
console.error("Reason:", reason);
|
|
871
904
|
process.exit(1);
|
|
872
905
|
});
|
|
873
|
-
`,
|
|
906
|
+
`,Se=`export declare module "{{ createImport 'libApi' }}" {
|
|
874
907
|
interface DefaultContext {}
|
|
875
908
|
}
|
|
876
|
-
`,
|
|
909
|
+
`,Ce=`import { ValidationError } from "@kosmojs/core/errors";
|
|
877
910
|
import { HTTPError } from "h3";
|
|
878
911
|
|
|
879
912
|
import { errorHandlerFactory } from "{{ createImport 'lib' 'api:factory' }}";
|
|
@@ -899,14 +932,14 @@ export default errorHandlerFactory(async (error, event) => {
|
|
|
899
932
|
headers: { "Content-Type": "text/plain" },
|
|
900
933
|
});
|
|
901
934
|
});
|
|
902
|
-
`,
|
|
935
|
+
`,we=`import { defineRoute } from "{{ createImport 'libApi' }}";
|
|
903
936
|
|
|
904
937
|
export default defineRoute<"{{route.name}}">(({ GET }) => [
|
|
905
938
|
GET(async (event) => {
|
|
906
939
|
return "Automatically generated route";
|
|
907
940
|
}),
|
|
908
941
|
]);
|
|
909
|
-
`,
|
|
942
|
+
`,Te=`import { use } from "{{ createImport 'libApi' }}";
|
|
910
943
|
|
|
911
944
|
export type UseT = {};
|
|
912
945
|
|
|
@@ -915,11 +948,11 @@ export default [
|
|
|
915
948
|
return next();
|
|
916
949
|
}),
|
|
917
950
|
];
|
|
918
|
-
`,
|
|
951
|
+
`,Ee=`import { serve } from "{{ createImport 'lib' 'api:factory' }}";
|
|
919
952
|
import app from "./app";
|
|
920
953
|
|
|
921
954
|
await serve(app);
|
|
922
|
-
`,
|
|
955
|
+
`,De=`import { use } from "{{ createImport 'libApi' }}";
|
|
923
956
|
|
|
924
957
|
/**
|
|
925
958
|
* Define global middleware applied to all routes.
|
|
@@ -930,7 +963,7 @@ export default [
|
|
|
930
963
|
return next();
|
|
931
964
|
}),
|
|
932
965
|
];
|
|
933
|
-
`,
|
|
966
|
+
`,Oe=g((e,n)=>{let{createPath:r,createImportHelpers:i}=y(e),a=e=>e.length===0?`{}`:e.length===1?e[0]:`Override<${e[0]}, ${a(e.slice(1))}>`,{renderToFile:o}=x({helpers:{...i({origin:`lib`}),...w(),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:s}=x({helpers:i({origin:`src`})}),l=e=>e?.trim().length===0,d=c(n?.templates,we),f=async e=>{for(let{kind:t,entry:n}of e)t===`apiRoute`?await s(r.api(n.file),d(n.name,n),{route:n},{overwrite:l}):t===`apiUse`&&await s(r.api(n.file),Te,{},{overwrite:l})},m=async e=>{let i=e.flatMap(({kind:e,entry:t})=>e===`apiUse`?[t]:[]),a=e.flatMap(({kind:e,entry:r})=>{if(e!==`apiRoute`)return[];let a=r.name.split(`/`).reduce((e,n)=>{let r=e[e.length-1];return e.push(r?t(r,n):n),e},[]),o={...r,path:r.h3Pattern,basename:r.name,cascadingMiddleware:i.flatMap(e=>a.some(t=>e.name===t)?[e]:[])};return[o,...Object.entries({...n?.alias}).flatMap(([e,t])=>{let n=b(e);return t===r.name?[{...o,name:e,basename:r.name,id:`${o.id}_${T(e)}`,alias:u(n),pathTokens:n}]:[]})]}).sort(S);for(let[e,t]of[[`@api/routes.ts`,ge]])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`,ve],[`api:factory.ts`,ye],[`@api/app.ts`,R],[`@api/parsers.ts`,me],[`@api/dev.ts`,z],[`@api/errors.ts`,B],[`@api/router.ts`,he],[`@api/server.ts`,_e]])await o(r.lib(e),t,{});for(let[e,t]of[[`app.ts`,be],[`dev.ts`,xe],[`errors.ts`,Ce],[`server.ts`,Ee],[`use.ts`,De],[`env.d.ts`,Se]])await s(r.api(e),t,{},{overwrite:l})},async watch(e,t){await f(e.filter(p(t,[`create`]))),await m(e)},async build(e){await f(e),await m(e)}}}),ke=h({meta:{name:`H3`,slot:`backend`},dependencies:{h3:L.devDependencies.h3},factory:Oe}),V={type:`module`,private:!0,name:`@kosmojs/hono-generator`,version:`0.3.0`,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.1`,hono:`^4.13.3`,vite:`^8.2.2`}},Ae=`import { Hono, type MiddlewareHandler } from "hono";
|
|
934
967
|
import type { Router } from "hono/router";
|
|
935
968
|
import { RegExpRouter } from "hono/router/reg-exp-router";
|
|
936
969
|
import { SmartRouter } from "hono/router/smart-router";
|
|
@@ -1002,10 +1035,10 @@ export function appFactory(
|
|
|
1002
1035
|
|
|
1003
1036
|
return app as never;
|
|
1004
1037
|
}
|
|
1005
|
-
`,
|
|
1038
|
+
`,je=`import type { DevSetup } from "@kosmojs/core/api";
|
|
1006
1039
|
|
|
1007
1040
|
export const devSetup = (setup: DevSetup) => setup;
|
|
1008
|
-
`,
|
|
1041
|
+
`,Me=`import type { Context } from "hono";
|
|
1009
1042
|
|
|
1010
1043
|
import type { AppEnv } from "./app";
|
|
1011
1044
|
|
|
@@ -1019,7 +1052,7 @@ export type ErrorHandlerFactory = (handler: ErrorHandler) => ErrorHandler;
|
|
|
1019
1052
|
export const errorHandlerFactory: ErrorHandlerFactory = (handler) => {
|
|
1020
1053
|
return handler;
|
|
1021
1054
|
};
|
|
1022
|
-
`,
|
|
1055
|
+
`,Ne=`import type { Context } from "hono";
|
|
1023
1056
|
|
|
1024
1057
|
import {
|
|
1025
1058
|
parseCookies,
|
|
@@ -1068,7 +1101,7 @@ export const bodyparsers: {
|
|
|
1068
1101
|
return ctx.req[as]();
|
|
1069
1102
|
},
|
|
1070
1103
|
};
|
|
1071
|
-
`,
|
|
1104
|
+
`,Pe=`import type { MiddlewareHandler } from "hono";
|
|
1072
1105
|
|
|
1073
1106
|
import type {
|
|
1074
1107
|
RequestBodyTarget,
|
|
@@ -1435,7 +1468,7 @@ export const routes = createRoutes<ParameterizedMiddleware, MiddlewareHandler>(
|
|
|
1435
1468
|
createRouteMiddleware,
|
|
1436
1469
|
},
|
|
1437
1470
|
);
|
|
1438
|
-
`,
|
|
1471
|
+
`,Fe=`import { join } from "node:path";
|
|
1439
1472
|
|
|
1440
1473
|
import type { RouteSource } from "@kosmojs/core/api";
|
|
1441
1474
|
|
|
@@ -1480,7 +1513,7 @@ export const routeSources: Array<RouteSource<never>> = [
|
|
|
1480
1513
|
},
|
|
1481
1514
|
{{/each}}
|
|
1482
1515
|
];
|
|
1483
|
-
`,
|
|
1516
|
+
`,Ie=`import { chmod, unlink } from "node:fs/promises";
|
|
1484
1517
|
import { parseArgs, styleText } from "node:util";
|
|
1485
1518
|
|
|
1486
1519
|
import { createAdaptorServer } from "@hono/node-server";
|
|
@@ -1565,7 +1598,7 @@ export const serve = async <T extends App>(app: T, opt?: Handles) => {
|
|
|
1565
1598
|
|
|
1566
1599
|
return server as never;
|
|
1567
1600
|
};
|
|
1568
|
-
`,
|
|
1601
|
+
`,Le=`import type { Context, Next } from "hono";
|
|
1569
1602
|
|
|
1570
1603
|
import type { ValidationDefmap, ValidationOptmap } from "@kosmojs/core";
|
|
1571
1604
|
import {
|
|
@@ -1748,20 +1781,20 @@ export const defineRoute: <
|
|
|
1748
1781
|
use: use as never,
|
|
1749
1782
|
});
|
|
1750
1783
|
};
|
|
1751
|
-
`,
|
|
1784
|
+
`,Re=`export * from "./@api/app";
|
|
1752
1785
|
export { appFactory as default } from "./@api/app";
|
|
1753
1786
|
export * from "./@api/dev";
|
|
1754
1787
|
export * from "./@api/errors";
|
|
1755
1788
|
export * from "./@api/router";
|
|
1756
1789
|
export * from "./@api/routes";
|
|
1757
1790
|
export * from "./@api/server";
|
|
1758
|
-
`,
|
|
1791
|
+
`,ze=`import appFactory, { routes } from "{{ createImport 'lib' 'api:factory' }}";
|
|
1759
1792
|
import defaultErrorHandler from "./errors";
|
|
1760
1793
|
|
|
1761
1794
|
export default appFactory(routes, ({ app }) => {
|
|
1762
1795
|
app.onError(defaultErrorHandler);
|
|
1763
1796
|
})
|
|
1764
|
-
`,
|
|
1797
|
+
`,Be=`import { getRequestListener } from "@hono/node-server";
|
|
1765
1798
|
|
|
1766
1799
|
import app from "./app";
|
|
1767
1800
|
|
|
@@ -1782,11 +1815,11 @@ process.on("unhandledRejection", (reason) => {
|
|
|
1782
1815
|
process.exit(1);
|
|
1783
1816
|
});
|
|
1784
1817
|
|
|
1785
|
-
`,
|
|
1818
|
+
`,Ve=`export declare module "{{ createImport 'libApi' }}" {
|
|
1786
1819
|
interface DefaultVariables {}
|
|
1787
1820
|
interface DefaultBindings {}
|
|
1788
1821
|
}
|
|
1789
|
-
`,
|
|
1822
|
+
`,He=`import { accepts } from "hono/accepts";
|
|
1790
1823
|
import { HTTPException } from "hono/http-exception";
|
|
1791
1824
|
|
|
1792
1825
|
import { ValidationError, HTTPError } from "@kosmojs/core/errors";
|
|
@@ -1818,7 +1851,7 @@ export default errorHandlerFactory(async (error, ctx) => {
|
|
|
1818
1851
|
? ctx.json({ error: message }, status)
|
|
1819
1852
|
: ctx.text(message, status);
|
|
1820
1853
|
});
|
|
1821
|
-
`,
|
|
1854
|
+
`,Ue=`import { defineRoute } from "{{ createImport 'libApi' }}";
|
|
1822
1855
|
|
|
1823
1856
|
export default defineRoute<"{{route.name}}">(({ GET }) => [
|
|
1824
1857
|
GET(async (ctx) => {
|
|
@@ -1827,7 +1860,7 @@ export default defineRoute<"{{route.name}}">(({ GET }) => [
|
|
|
1827
1860
|
return ctx.text("Automatically generated route");
|
|
1828
1861
|
}),
|
|
1829
1862
|
]);
|
|
1830
|
-
`,
|
|
1863
|
+
`,We=`import { use } from "{{ createImport 'libApi' }}";
|
|
1831
1864
|
|
|
1832
1865
|
export type UseT = {};
|
|
1833
1866
|
|
|
@@ -1838,11 +1871,11 @@ export default [
|
|
|
1838
1871
|
return next();
|
|
1839
1872
|
}),
|
|
1840
1873
|
];
|
|
1841
|
-
`,
|
|
1874
|
+
`,Ge=`import { serve } from "{{ createImport 'lib' 'api:factory' }}";
|
|
1842
1875
|
import app from "./app";
|
|
1843
1876
|
|
|
1844
1877
|
await serve(app);
|
|
1845
|
-
`,
|
|
1878
|
+
`,Ke=`import { use } from "{{ createImport 'libApi' }}";
|
|
1846
1879
|
|
|
1847
1880
|
/**
|
|
1848
1881
|
* Define global middleware applied to all routes.
|
|
@@ -1853,7 +1886,7 @@ export default [
|
|
|
1853
1886
|
return next();
|
|
1854
1887
|
}),
|
|
1855
1888
|
];
|
|
1856
|
-
`,
|
|
1889
|
+
`,qe=g((e,n)=>{let{createPath:r,createImportHelpers:i}=y(e),a=e=>e.length===0?`{}`:e.length===1?e[0]:`Override<${e[0]}, ${a(e.slice(1))}>`,{renderToFile:o}=x({helpers:{...i({origin:`lib`}),...w(),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:s}=x({helpers:i({origin:`src`})}),l=e=>e?.trim().length===0,u=c(n?.templates,Ue),f=async e=>{for(let{kind:t,entry:n}of e)t===`apiRoute`?await s(r.api(n.file),u(n.name,n),{route:n},{overwrite:l}):t===`apiUse`&&await s(r.api(n.file),We,{},{overwrite:l})},m=async e=>{let i=e.flatMap(({kind:e,entry:t})=>e===`apiUse`?[t]:[]),a=e.flatMap(({kind:e,entry:r})=>{if(e!==`apiRoute`)return[];let a=r.name.split(`/`).reduce((e,n)=>{let r=e[e.length-1];return e.push(r?t(r,n):n),e},[]),o={...r,path:r.honoPattern,basename:r.name,cascadingMiddleware:i.flatMap(e=>a.some(t=>e.name===t)?[e]:[])};return[o,...Object.entries({...n?.alias}).flatMap(([e,t])=>{let n=b(e);return t===r.name?[{...o,name:e,basename:r.name,id:`${o.id}_${T(e)}`,alias:d(n),pathTokens:n}]:[]})]}).sort(S);for(let[e,t]of[[`@api/routes.ts`,Fe]])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`,Le],[`api:factory.ts`,Re],[`@api/app.ts`,Ae],[`@api/parsers.ts`,Ne],[`@api/dev.ts`,je],[`@api/errors.ts`,Me],[`@api/router.ts`,Pe],[`@api/server.ts`,Ie]])await o(r.lib(e),t,{});for(let[e,t]of[[`app.ts`,ze],[`dev.ts`,Be],[`errors.ts`,He],[`server.ts`,Ge],[`use.ts`,Ke],[`env.d.ts`,Ve]])await s(r.api(e),t,{},{overwrite:l})},async watch(e,t){await f(e.filter(p(t,[`create`]))),await m(e)},async build(e){await f(e),await m(e)}}}),Je=h({meta:{name:`Hono`,slot:`backend`},dependencies:{hono:V.devDependencies.hono,"@hono/node-server":V.devDependencies[`@hono/node-server`]},factory:qe}),H={type:`module`,private:!0,name:`@kosmojs/koa-generator`,version:`0.3.0`,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`,"raw-body":`^4.0.0`,vite:`^8.2.2`}},Ye=`import Router, { type RouterMiddleware } from "@koa/router";
|
|
1857
1890
|
import Koa from "koa";
|
|
1858
1891
|
|
|
1859
1892
|
import type { Route, RouteDebugOption } from "@kosmojs/core/api";
|
|
@@ -1913,10 +1946,10 @@ export function appFactory(
|
|
|
1913
1946
|
|
|
1914
1947
|
return app;
|
|
1915
1948
|
}
|
|
1916
|
-
`,
|
|
1949
|
+
`,Xe=`import type { DevSetup } from "@kosmojs/core/api";
|
|
1917
1950
|
|
|
1918
1951
|
export const devSetup = (setup: DevSetup) => setup;
|
|
1919
|
-
`,
|
|
1952
|
+
`,Ze=`import type {
|
|
1920
1953
|
DefaultContext,
|
|
1921
1954
|
DefaultState,
|
|
1922
1955
|
ParameterizedContext,
|
|
@@ -1932,7 +1965,7 @@ export type ErrorHandlerFactory = (handler: ErrorHandler) => ErrorHandler;
|
|
|
1932
1965
|
export const errorHandlerFactory: ErrorHandlerFactory = (handler) => {
|
|
1933
1966
|
return handler;
|
|
1934
1967
|
};
|
|
1935
|
-
`,
|
|
1968
|
+
`,Qe=`import zlib from "node:zlib";
|
|
1936
1969
|
|
|
1937
1970
|
import type { RouterContext } from "@koa/router";
|
|
1938
1971
|
import Formidable, { type Options as FormidableOptions } from "formidable";
|
|
@@ -2145,7 +2178,7 @@ export const bodyparsers: {
|
|
|
2145
2178
|
return rawParser(stream, rawParserOptions);
|
|
2146
2179
|
},
|
|
2147
2180
|
};
|
|
2148
|
-
|
|
2181
|
+
`,$e=`import type { RouterMiddleware } from "@koa/router";
|
|
2149
2182
|
|
|
2150
2183
|
import type {
|
|
2151
2184
|
RequestBodyTarget,
|
|
@@ -2510,7 +2543,7 @@ export const routes = createRoutes<ParameterizedMiddleware, RouterMiddleware>(
|
|
|
2510
2543
|
createRouteMiddleware,
|
|
2511
2544
|
},
|
|
2512
2545
|
);
|
|
2513
|
-
`,
|
|
2546
|
+
`,et=`import { join } from "node:path";
|
|
2514
2547
|
|
|
2515
2548
|
import type { RouteSource } from "@kosmojs/core/api";
|
|
2516
2549
|
|
|
@@ -2555,7 +2588,7 @@ export const routeSources: Array<RouteSource<never>> = [
|
|
|
2555
2588
|
},
|
|
2556
2589
|
{{/each}}
|
|
2557
2590
|
];
|
|
2558
|
-
|
|
2591
|
+
`,tt=`import { chmod, unlink } from "node:fs/promises";
|
|
2559
2592
|
import { parseArgs, styleText } from "node:util";
|
|
2560
2593
|
|
|
2561
2594
|
import type { App } from "./app";
|
|
@@ -2618,7 +2651,7 @@ export const serve = async <T extends App>(app: T, opt?: Handles) => {
|
|
|
2618
2651
|
const server = app.listen(port || sock, onListen);
|
|
2619
2652
|
return server as never;
|
|
2620
2653
|
};
|
|
2621
|
-
`,
|
|
2654
|
+
`,nt=`import type { RouterContext } from "@koa/router";
|
|
2622
2655
|
import type { Next } from "koa";
|
|
2623
2656
|
|
|
2624
2657
|
import type { ValidationDefmap, ValidationOptmap } from "@kosmojs/core";
|
|
@@ -2780,14 +2813,14 @@ export const defineRoute: <
|
|
|
2780
2813
|
use: use as never,
|
|
2781
2814
|
});
|
|
2782
2815
|
};
|
|
2783
|
-
`,
|
|
2816
|
+
`,rt=`export * from "./@api/app";
|
|
2784
2817
|
export { appFactory as default } from "./@api/app";
|
|
2785
2818
|
export * from "./@api/dev";
|
|
2786
2819
|
export * from "./@api/errors";
|
|
2787
2820
|
export * from "./@api/router";
|
|
2788
2821
|
export * from "./@api/routes";
|
|
2789
2822
|
export * from "./@api/server";
|
|
2790
|
-
`,
|
|
2823
|
+
`,it=`import appFactory, { routes } from "{{ createImport 'lib' 'api:factory' }}";
|
|
2791
2824
|
import defaultErrorHandler from "./errors";
|
|
2792
2825
|
|
|
2793
2826
|
export default appFactory(routes, ({ app, router }) => {
|
|
@@ -2798,7 +2831,7 @@ export default appFactory(routes, ({ app, router }) => {
|
|
|
2798
2831
|
app.use(router.routes());
|
|
2799
2832
|
|
|
2800
2833
|
});
|
|
2801
|
-
`,
|
|
2834
|
+
`,at=`import app from "./app";
|
|
2802
2835
|
|
|
2803
2836
|
import { devSetup } from "{{ createImport 'lib' 'api:factory' }}";
|
|
2804
2837
|
|
|
@@ -2816,11 +2849,11 @@ process.on("unhandledRejection", (reason) => {
|
|
|
2816
2849
|
console.error("Reason:", reason);
|
|
2817
2850
|
process.exit(1);
|
|
2818
2851
|
});
|
|
2819
|
-
`,
|
|
2852
|
+
`,ot=`export declare module "{{ createImport 'libApi' }}" {
|
|
2820
2853
|
interface DefaultState {}
|
|
2821
2854
|
interface DefaultContext {}
|
|
2822
2855
|
}
|
|
2823
|
-
`,
|
|
2856
|
+
`,st=`import { HTTPError, ValidationError } from "@kosmojs/core/errors";
|
|
2824
2857
|
|
|
2825
2858
|
import { errorHandlerFactory } from "{{ createImport 'lib' 'api:factory' }}";
|
|
2826
2859
|
|
|
@@ -2841,14 +2874,14 @@ export default errorHandlerFactory(async (error, ctx) => {
|
|
|
2841
2874
|
ctx.body = message;
|
|
2842
2875
|
}
|
|
2843
2876
|
});
|
|
2844
|
-
`,
|
|
2877
|
+
`,ct=`import { defineRoute } from "{{ createImport 'libApi' }}";
|
|
2845
2878
|
|
|
2846
2879
|
export default defineRoute<"{{route.name}}">(({ GET }) => [
|
|
2847
2880
|
GET(async (ctx) => {
|
|
2848
2881
|
ctx.body = "Automatically generated route";
|
|
2849
2882
|
}),
|
|
2850
2883
|
]);
|
|
2851
|
-
`,
|
|
2884
|
+
`,lt=`import { use } from "{{ createImport 'libApi' }}";
|
|
2852
2885
|
|
|
2853
2886
|
export type UseT = {};
|
|
2854
2887
|
|
|
@@ -2859,11 +2892,11 @@ export default [
|
|
|
2859
2892
|
return next();
|
|
2860
2893
|
}),
|
|
2861
2894
|
];
|
|
2862
|
-
`,
|
|
2895
|
+
`,ut=`import { serve } from "{{ createImport 'lib' 'api:factory' }}";
|
|
2863
2896
|
import app from "./app";
|
|
2864
2897
|
|
|
2865
2898
|
await serve(app);
|
|
2866
|
-
`,
|
|
2899
|
+
`,dt=`import { use } from "{{ createImport 'libApi' }}";
|
|
2867
2900
|
|
|
2868
2901
|
/**
|
|
2869
2902
|
* Define global middleware applied to all routes.
|
|
@@ -2874,17 +2907,17 @@ export default [
|
|
|
2874
2907
|
return next();
|
|
2875
2908
|
}),
|
|
2876
2909
|
];
|
|
2877
|
-
`,
|
|
2910
|
+
`,ft=g((e,n)=>{let{createPath:r,createImportHelpers:i}=y(e),a=e=>e.length===0?`{}`:e.length===1?e[0]:`Override<${e[0]}, ${a(e.slice(1))}>`,{renderToFile:o}=x({helpers:{...i({origin:`lib`}),...w(),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:s}=x({helpers:i({origin:`src`})}),l=e=>e?.trim().length===0,u=c(n?.templates,ct),d=async e=>{for(let{kind:t,entry:n}of e)t===`apiRoute`?await s(r.api(n.file),u(n.name,n),{route:n},{overwrite:l}):t===`apiUse`&&await s(r.api(n.file),lt,{},{overwrite:l})},m=async e=>{let i=e.flatMap(({kind:e,entry:t})=>e===`apiUse`?[t]:[]),a=e.flatMap(({kind:e,entry:r})=>{if(e!==`apiRoute`)return[];let a=r.name.split(`/`).reduce((e,n)=>{let r=e[e.length-1];return e.push(r?t(r,n):n),e},[]),o={...r,basename:r.name,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=b(e);return t===r.name?[{...o,name:e,basename:r.name,id:`${o.id}_${T(e)}`,alias:f(n),pathTokens:n}]:[]})]}).sort(S);for(let[e,t]of[[`@api/routes.ts`,et]])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`,nt],[`api:factory.ts`,rt],[`@api/app.ts`,Ye],[`@api/dev.ts`,Xe],[`@api/errors.ts`,Ze],[`@api/parsers.ts`,Qe],[`@api/router.ts`,$e],[`@api/server.ts`,tt]])await o(r.lib(e),t,{});for(let[e,t]of[[`app.ts`,it],[`dev.ts`,at],[`errors.ts`,st],[`server.ts`,ut],[`use.ts`,dt],[`env.d.ts`,ot]])await s(r.api(e),t,{},{overwrite:l})},async watch(e,t){await d(e.filter(p(t,[`create`]))),await m(e)},async build(e){await d(e),await m(e)}}}),pt=h({meta:{name:`Koa`,slot:`backend`,types:[`@types/koa`]},dependencies:{koa:H.devDependencies.koa,"@koa/router":H.devDependencies[`@koa/router`],formidable:H.devDependencies.formidable,"raw-body":H.devDependencies[`raw-body`]},devDependencies:{"@types/koa":H.devDependencies[`@types/koa`],"@types/formidable":H.devDependencies[`@types/formidable`]},factory:ft}),U={type:`module`,private:!0,name:`@kosmojs/mdx-generator`,version:`0.3.0`,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.2`},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`}},mt=()=>{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)]},ht=(e,t,n)=>{let{remarkPlugins:r=[],rehypePlugins:i=[]}={...n},a=()=>{let t=[`${l.srcDir}/${e.name}/${l.entryDir}/client.ts`].map(e=>re(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,`
|
|
2878
2911
|
if (import.meta.hot) {
|
|
2879
2912
|
import.meta.hot.accept(() => {});
|
|
2880
2913
|
}
|
|
2881
2914
|
`].join(`
|
|
2882
|
-
`)}}}},o=[ne({jsxImportSource:`preact`,providerImportSource:`@mdx-js/preact`,remarkPlugins:r,rehypePlugins:i})];return t===`serve`&&o.push(a()),o},
|
|
2915
|
+
`)}}}},o=[ne({jsxImportSource:`preact`,providerImportSource:`@mdx-js/preact`,remarkPlugins:r,rehypePlugins:i})];return t===`serve`&&o.push(a()),o},gt=`import type { FunctionComponent } from "preact";
|
|
2883
2916
|
|
|
2884
2917
|
export const AppProvider: FunctionComponent = (props) => {
|
|
2885
2918
|
return props.children;
|
|
2886
2919
|
};
|
|
2887
|
-
`,
|
|
2920
|
+
`,_t=`import { render, hydrate as hydrateOrig } from "preact";
|
|
2888
2921
|
import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
2889
2922
|
import { clientRenderFactory } from "@kosmojs/core/generators";
|
|
2890
2923
|
|
|
@@ -2925,7 +2958,7 @@ export const mount = async (
|
|
|
2925
2958
|
}
|
|
2926
2959
|
|
|
2927
2960
|
export default clientRenderFactory();
|
|
2928
|
-
`,
|
|
2961
|
+
`,vt=`import { renderToString as renderToStringOrig } from "preact-render-to-string";
|
|
2929
2962
|
|
|
2930
2963
|
import type {
|
|
2931
2964
|
RenderToStringWrapper,
|
|
@@ -2999,7 +3032,7 @@ export const renderToString: RenderToStringWrapper<
|
|
|
2999
3032
|
}
|
|
3000
3033
|
|
|
3001
3034
|
export default serverRenderFactory<false>();
|
|
3002
|
-
`,
|
|
3035
|
+
`,yt=`declare module "*.mdx" {
|
|
3003
3036
|
import type { ComponentType } from "preact";
|
|
3004
3037
|
export const frontmatter: Record<string, unknown>;
|
|
3005
3038
|
const component: ComponentType;
|
|
@@ -3012,7 +3045,7 @@ declare module "*.md" {
|
|
|
3012
3045
|
const component: ComponentType;
|
|
3013
3046
|
export default component;
|
|
3014
3047
|
}
|
|
3015
|
-
`,
|
|
3048
|
+
`,bt=`import { MDXProvider } from "@mdx-js/preact";
|
|
3016
3049
|
import { match, pathToRegexp } from "path-to-regexp";
|
|
3017
3050
|
import { type ComponentType, createContext, h, type VNode } from "preact";
|
|
3018
3051
|
|
|
@@ -3189,7 +3222,11 @@ export const createRoute = (
|
|
|
3189
3222
|
loader: RawRoute["loader"],
|
|
3190
3223
|
layouts: RawRoute["layouts"],
|
|
3191
3224
|
): RawRoute => {
|
|
3192
|
-
|
|
3225
|
+
// strip trailing slash (keeping a sole "/") so the base-joined index route
|
|
3226
|
+
// matches both with and without it - "/docs/" as a pattern rejects "/docs"
|
|
3227
|
+
const path = \`\${base}/\${pathPattern}\`
|
|
3228
|
+
.replace(/\\/+/g, "/")
|
|
3229
|
+
.replace(/(.+)\\/$/, "$1");
|
|
3193
3230
|
|
|
3194
3231
|
const { regexp } = pathToRegexp(path, { sensitive: true });
|
|
3195
3232
|
const matcher = match<Route["params"]>(path);
|
|
@@ -3197,9 +3234,11 @@ export const createRoute = (
|
|
|
3197
3234
|
return {
|
|
3198
3235
|
name,
|
|
3199
3236
|
regexp,
|
|
3237
|
+
// count segments of the same base-joined path the regexp matches against;
|
|
3238
|
+
// resolve() compares this against the full url pathname's segment count
|
|
3200
3239
|
pathSegments: name.includes("...")
|
|
3201
3240
|
? undefined
|
|
3202
|
-
:
|
|
3241
|
+
: path.split("/").filter(Boolean).length,
|
|
3203
3242
|
extractParams: (path) => {
|
|
3204
3243
|
const match = matcher(path);
|
|
3205
3244
|
return match ? match.params : {};
|
|
@@ -3208,7 +3247,7 @@ export const createRoute = (
|
|
|
3208
3247
|
layouts,
|
|
3209
3248
|
};
|
|
3210
3249
|
};
|
|
3211
|
-
`,
|
|
3250
|
+
`,xt=`/* @jsxImportSource preact */
|
|
3212
3251
|
|
|
3213
3252
|
import styles from "./styles.module.css";
|
|
3214
3253
|
|
|
@@ -3249,7 +3288,7 @@ export default function PageSample(props: {
|
|
|
3249
3288
|
</div>
|
|
3250
3289
|
);
|
|
3251
3290
|
}
|
|
3252
|
-
`,
|
|
3291
|
+
`,St=`/* @jsxImportSource preact */
|
|
3253
3292
|
|
|
3254
3293
|
import styles from "./styles.module.css";
|
|
3255
3294
|
|
|
@@ -3301,7 +3340,7 @@ export default function PageSample(props: {
|
|
|
3301
3340
|
</div>
|
|
3302
3341
|
);
|
|
3303
3342
|
}
|
|
3304
|
-
`,
|
|
3343
|
+
`,Ct=`* {
|
|
3305
3344
|
margin: 0;
|
|
3306
3345
|
padding: 0;
|
|
3307
3346
|
box-sizing: border-box;
|
|
@@ -3436,7 +3475,7 @@ export default function PageSample(props: {
|
|
|
3436
3475
|
align-items: center;
|
|
3437
3476
|
gap: 0.25rem;
|
|
3438
3477
|
}
|
|
3439
|
-
`,
|
|
3478
|
+
`,wt=`/* @jsxImportSource preact */
|
|
3440
3479
|
|
|
3441
3480
|
import styles from "./styles.module.css";
|
|
3442
3481
|
|
|
@@ -3502,7 +3541,7 @@ export default function WelcomePage() {
|
|
|
3502
3541
|
</div>
|
|
3503
3542
|
);
|
|
3504
3543
|
}
|
|
3505
|
-
`,
|
|
3544
|
+
`,Tt=`export type ParamsMap = {
|
|
3506
3545
|
{{#each pageRoutes}}"{{name}}": {{serializeParamsLiteral .}};
|
|
3507
3546
|
{{/each}}
|
|
3508
3547
|
};
|
|
@@ -3511,7 +3550,7 @@ export const paramNames = {
|
|
|
3511
3550
|
{{#each pageRoutes}}"{{name}}": [ {{#each params.schema}}"{{name}}", {{/each}}],
|
|
3512
3551
|
{{/each}}
|
|
3513
3552
|
} as const;
|
|
3514
|
-
`,
|
|
3553
|
+
`,Et=`import type { ComponentType } from "preact";
|
|
3515
3554
|
|
|
3516
3555
|
import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
3517
3556
|
import { createRouterFactory } from "@kosmojs/core/generators";
|
|
@@ -3555,7 +3594,7 @@ export default createRouterFactory<
|
|
|
3555
3594
|
Promise<RouteComponent>,
|
|
3556
3595
|
{ server: { route: Route } }
|
|
3557
3596
|
>();
|
|
3558
|
-
`,
|
|
3597
|
+
`,Dt=`import { join } from "node:path";
|
|
3559
3598
|
|
|
3560
3599
|
import { compile } from "path-to-regexp";
|
|
3561
3600
|
|
|
@@ -3601,7 +3640,7 @@ export default Object.entries(routes)
|
|
|
3601
3640
|
return [];
|
|
3602
3641
|
})
|
|
3603
3642
|
.map((path) => join(base, path));
|
|
3604
|
-
`,
|
|
3643
|
+
`,Ot=`import type { PageRoute } from "@kosmojs/core";
|
|
3605
3644
|
|
|
3606
3645
|
{{#each pageRoutes}}
|
|
3607
3646
|
import * as {{id}} from "{{ createImport 'pages' file }}";
|
|
@@ -3625,7 +3664,7 @@ const routeMap: Record<
|
|
|
3625
3664
|
}
|
|
3626
3665
|
|
|
3627
3666
|
export default routeMap;
|
|
3628
|
-
`,
|
|
3667
|
+
`,kt=`import { useContext } from "preact/hooks";
|
|
3629
3668
|
|
|
3630
3669
|
import { RouterContext } from "./mdx";
|
|
3631
3670
|
|
|
@@ -3671,10 +3710,10 @@ export const useFrontmatter = <
|
|
|
3671
3710
|
>(): T => {
|
|
3672
3711
|
return useRoute().frontmatter as T;
|
|
3673
3712
|
};
|
|
3674
|
-
`,
|
|
3713
|
+
`,At=`import { AppProvider } from "{{ createImport 'lib' 'app' }}";
|
|
3675
3714
|
|
|
3676
3715
|
<AppProvider>{props.children}</AppProvider>
|
|
3677
|
-
`,
|
|
3716
|
+
`,jt=`import { h, type JSX } from "preact";
|
|
3678
3717
|
|
|
3679
3718
|
import { pageRouteMap, type LinkProps } from "{{ createImport 'libCore' }}";
|
|
3680
3719
|
|
|
@@ -3687,11 +3726,11 @@ export default function Link(
|
|
|
3687
3726
|
const { to, query, children, ...restProps } = props;
|
|
3688
3727
|
|
|
3689
3728
|
const [key, ...params] = to;
|
|
3690
|
-
const href = pageRouteMap[key]?.
|
|
3729
|
+
const href = pageRouteMap[key]?.path(params as never, query);
|
|
3691
3730
|
|
|
3692
3731
|
return h("a", { ...restProps, href }, children);
|
|
3693
3732
|
}
|
|
3694
|
-
`,
|
|
3733
|
+
`,Mt=`/**
|
|
3695
3734
|
* MDX component overrides.
|
|
3696
3735
|
*
|
|
3697
3736
|
* Every standard markdown element (headings, links, code blocks, etc.)
|
|
@@ -3714,7 +3753,7 @@ export const components = {
|
|
|
3714
3753
|
declare global {
|
|
3715
3754
|
type MDXProvidedComponents = typeof components;
|
|
3716
3755
|
}
|
|
3717
|
-
`,
|
|
3756
|
+
`,Nt=`import renderFactory, {
|
|
3718
3757
|
createRoutes,
|
|
3719
3758
|
hydrate,
|
|
3720
3759
|
mount,
|
|
@@ -3741,7 +3780,7 @@ if (root) {
|
|
|
3741
3780
|
} else {
|
|
3742
3781
|
console.error("❌ Root element not found!");
|
|
3743
3782
|
}
|
|
3744
|
-
`,
|
|
3783
|
+
`,Pt=`import renderFactory, {
|
|
3745
3784
|
createRoutes,
|
|
3746
3785
|
renderToString,
|
|
3747
3786
|
// no renderToStream on MDX folders
|
|
@@ -3762,7 +3801,7 @@ export default renderFactory(() => {
|
|
|
3762
3801
|
},
|
|
3763
3802
|
};
|
|
3764
3803
|
});
|
|
3765
|
-
`,
|
|
3804
|
+
`,Ft=`<!doctype html>
|
|
3766
3805
|
<html lang="en">
|
|
3767
3806
|
<head>
|
|
3768
3807
|
<meta charset="UTF-8" />
|
|
@@ -3774,13 +3813,13 @@ export default renderFactory(() => {
|
|
|
3774
3813
|
<script type="module" src="/{{ entryDir }}/client.ts"><\/script>
|
|
3775
3814
|
</body>
|
|
3776
3815
|
</html>
|
|
3777
|
-
`,
|
|
3816
|
+
`,It=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
|
|
3778
3817
|
|
|
3779
3818
|
export default function Page() {
|
|
3780
3819
|
return <PageSample />;
|
|
3781
3820
|
}
|
|
3782
|
-
`,
|
|
3783
|
-
`,
|
|
3821
|
+
`,Lt=`{props.children}
|
|
3822
|
+
`,Rt=`---
|
|
3784
3823
|
title: "{{title}}"
|
|
3785
3824
|
---
|
|
3786
3825
|
|
|
@@ -3797,7 +3836,7 @@ export const pathMap = {
|
|
|
3797
3836
|
routeName="{{route.name}}"
|
|
3798
3837
|
pathMap={pathMap}
|
|
3799
3838
|
/>
|
|
3800
|
-
`,
|
|
3839
|
+
`,zt=`---
|
|
3801
3840
|
title: Welcome to KosmoJS
|
|
3802
3841
|
description: Content-first development with MDX and Vite
|
|
3803
3842
|
---
|
|
@@ -3805,7 +3844,7 @@ description: Content-first development with MDX and Vite
|
|
|
3805
3844
|
import WelcomePage from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}"
|
|
3806
3845
|
|
|
3807
3846
|
<WelcomePage />
|
|
3808
|
-
`,
|
|
3847
|
+
`,Bt=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
3809
3848
|
|
|
3810
3849
|
import app from "./app.mdx";
|
|
3811
3850
|
import { components } from "./components/mdx"
|
|
@@ -3821,12 +3860,12 @@ export default routerFactory((routes) => {
|
|
|
3821
3860
|
},
|
|
3822
3861
|
};
|
|
3823
3862
|
});
|
|
3824
|
-
`,
|
|
3863
|
+
`,Vt=g((e,t)=>{let{createPath:n,createImportHelpers:r}=y(e),{renderToFile:i}=x({helpers:{...r({origin:`lib`}),...w(),serializeParams(e){return JSON.stringify(e.params)}}}),{renderToFile:a}=x({helpers:r({origin:`src`})}),o=e=>!e?.trim().length,s=c(t?.templates,Rt),u=async e=>{for(let{kind:t,entry:r}of e)t===`pageRoute`?await a(n.pages(r.file),r.name===`index`?zt:s(r.name,r),{route:r,title:r.name.replace(/\{([^}]+)\}/g,`$1`),message:mt()},{overwrite:o}):t===`pageLayout`&&await a(n.pages(r.file),Lt,{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(S)}]}return[]}).sort(S);for(let[e,a]of[[`client.ts`,_t],[`server.ts`,vt]])await i(n.libEntry(e),a,{pageRoutes:r,layouts:t});for(let[e,t]of[[`params.ts`,Tt],[`router.ts`,Et],[`ssg:routes.ts`,Ot]])await i(n.lib(e),t,{pageRoutes:r})};return{config({command:n}){return{oxc:{jsx:{importSource:`preact`}},plugins:ht(e,n,t)}},async start(){for(let[e,t]of[[`env.d.ts`,yt],[`app.ts`,gt],[`mdx.ts`,bt],[`use.ts`,kt],[`ssg.ts`,Dt],[`pageSamples/styles.module.css`,Ct],[`pageSamples/welcome.tsx`,wt],[`pageSamples/page.tsx`,St],[`pageSamples/404.tsx`,xt]])await i(n.lib(e),t,{});for(let[e,t]of[[`pages/404.mdx`,It],[`components/Link.tsx`,jt],[`components/mdx.ts`,Mt],[`app.mdx`,At],[`router.ts`,Bt]])await a(n.src(e),t,{entryDir:l.entryDir},{overwrite:o});await a(n.src(`index.html`),Ft,{entryDir:l.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,Nt],[`server.ts`,Pt]])await a(n.entry(e),t,{},{overwrite:o})},async watch(e,t){await u(e.filter(m(t,[`create`]))),await d(e)},async build(e){await u(e),await d(e)}}}),Ht=h({meta:{name:`MDX`,jsxImportSource:`preact`},dependencies:{"path-to-regexp":U.devDependencies[`path-to-regexp`]},devDependencies:{preact:U.devDependencies.preact,"preact-render-to-string":U.devDependencies[`preact-render-to-string`],"@mdx-js/preact":U.devDependencies[`@mdx-js/preact`],"remark-frontmatter":U.devDependencies[`remark-frontmatter`],"remark-mdx-frontmatter":U.devDependencies[`remark-mdx-frontmatter`]},factory:Vt}),Ut={json:`application/json`,form:[`application/x-www-form-urlencoded`,`multipart/form-data`],raw:void 0},Wt=()=>{let e=e=>[`Buffer`,`ArrayBuffer`,`Blob`].includes(e)?{type:`string`,format:`binary`}:oe.Script(e),n=(e,t,n)=>{let r=n?`${t}_${n.replace(/[^\w.-]/g,`_`)}${T(n)}`:t;return`${e.id}_${r}`},r=(e,t,r,i)=>[`#`,`components`,e,n(t,r,i)].join(`/`),i=e=>e.split(`/`).reduce((e,t)=>e+ +!t.includes(`{`),0),o=e=>{if(e.name===`index`)return[`/`];let{tokens:n}=ae(e.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[]}}),a=(e,t)=>{if(!e.length)return[t];let[n,...i]=e;switch(n.type){case`text`:return a(i,{path:`${t.path}${n.value}`,params:t.params});case`param`:return a(i,{path:`${t.path}{${n.name}}`,params:[...t.params,n.name]});case`wildcard`:return a(i,{path:`${t.path}{${n.name}*}`,params:[...t.params,n.name]});case`group`:{let e=a(i,t),o=a([...n.tokens,...i],t),s=r(n.tokens),c=o.filter(e=>s.some(t=>e.params.includes(t)));return[...e,...c]}}},o=a(n,{path:``,params:[]}),s=e.params.schema.reduce((e,{name:t},n)=>(e[n]=t,e),{});return o.reduce((e,n)=>{let r=t(`/`,n.path);return e.includes(r)||n.params.every((e,t)=>e===s[t])&&e.push(r),e},[]).sort((e,t)=>i(t)-i(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]=Gt(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=t=>{let{parameters:r,schemas:i}={parameters:{},schemas:{}};for(let r of t.validationDefinitions)if(r.target===`response`)for(let{id:a,resolvedType:o}of r.variants)o?.typeboxSchema&&(i[n(t,a)]=e(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(t,a,r.name);i[o]=e(r.typeboxSchema)}}else{let{id:a,resolvedType:o}=r.schema;o?.typeboxSchema&&(i[n(t,a)]=e(o.typeboxSchema))}if(t.params.resolvedType)for(let i of t.params.resolvedType.properties||[])i?.typeboxSchema&&(r[n(t,t.params.id,i.name)]={name:i.name,in:`path`,required:!0,schema:e(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 i of o(e))for(let o of e.methods){let l={responses:c(e,o)},u=s(e,i);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(a).includes(e.target));f.length&&(l.requestBody={required:!0,content:f.reduce((t,n)=>{let{contentType:i=Ut[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[i]||(t[i]={}),t[i][o.toLowerCase()]=l}return t};return{generateComponentId:n,generateComponentPath:r,generatePathVariations:o,generateOpenAPISchema:e=>{let t=new Map;for(let n of e)t.set(n.name,o(n));let{components:n,paths:r}=e.sort(S).flatMap(n=>{let r=t.get(n.name)??[];return r.length>0&&e.some(e=>{if(e.name===n.name)return!1;let i=t.get(e.name)??[],a=new Set(i);return r.every(e=>a.has(e))})?[]:[n]}).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:r,components:n}}}},Gt=(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]},Kt=g((e,t)=>{let{outfile:n=``,...r}={...t},{createPath:i}=y(e),{generateOpenAPISchema:a}=Wt(),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)?ie.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)}}}),qt=h({meta:{name:`OpenAPI`,resolveTypes:!0},factory:Kt}),W={type:`module`,private:!0,name:`@kosmojs/react-generator`,version:`0.3.0`,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.1.0`},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`}},Jt=e=>{let t=e.map(e=>e.orig).join(`/`),n=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`?[n(e.parts[0])]:(/\.\w+$/.test(e.orig)||(console.warn(`❗${r([`red`,`bold`],`WARN`)}: React Router v7 only supports dot-suffix mixed segments (e.g. :param.html).`),console.warn(` ${r([`magenta`],e.orig)} in ${r([`blue`],t)} route won't match as expected.`),console.warn()),[e.parts.map(e=>e.type===`static`?e.value:n(e)).join(``)])).join(`/`)},Yt=()=>{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=Jt(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},Xt=()=>{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)]},Zt=`import type { ReactNode } from "react";
|
|
3825
3864
|
|
|
3826
3865
|
export const AppProvider = ({ children }: { children: ReactNode }) => {
|
|
3827
3866
|
return children;
|
|
3828
3867
|
}
|
|
3829
|
-
`,
|
|
3868
|
+
`,Qt=`import { type QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
3830
3869
|
import type { ReactNode } from "react";
|
|
3831
3870
|
|
|
3832
3871
|
import { getQueryClient } from "./query";
|
|
@@ -3845,7 +3884,7 @@ export const AppProvider = ({
|
|
|
3845
3884
|
</QueryClientProvider>
|
|
3846
3885
|
);
|
|
3847
3886
|
}
|
|
3848
|
-
|
|
3887
|
+
`,$t=`import { lazy, type JSX } from "react";
|
|
3849
3888
|
|
|
3850
3889
|
import {
|
|
3851
3890
|
createRoot,
|
|
@@ -3899,7 +3938,7 @@ export const mount = async (
|
|
|
3899
3938
|
}
|
|
3900
3939
|
|
|
3901
3940
|
export default clientRenderFactory();
|
|
3902
|
-
`,
|
|
3941
|
+
`,en=`{
|
|
3903
3942
|
{{#if name}}
|
|
3904
3943
|
id: "{{name}}",
|
|
3905
3944
|
{{/if}}
|
|
@@ -3917,7 +3956,7 @@ export default clientRenderFactory();
|
|
|
3917
3956
|
children: [ {{#each children}}{{> routePartial}}, {{/each}}],
|
|
3918
3957
|
{{/if}}
|
|
3919
3958
|
}
|
|
3920
|
-
|
|
3959
|
+
`,tn=`import type { JSX } from "react";
|
|
3921
3960
|
|
|
3922
3961
|
import {
|
|
3923
3962
|
renderToString as renderToStringOrig,
|
|
@@ -3983,7 +4022,7 @@ export const renderToStream: RenderToStreamWrapper<
|
|
|
3983
4022
|
};
|
|
3984
4023
|
|
|
3985
4024
|
export default serverRenderFactory();
|
|
3986
|
-
`,
|
|
4025
|
+
`,nn=`/* @jsxImportSource react */
|
|
3987
4026
|
|
|
3988
4027
|
import styles from "./styles.module.css";
|
|
3989
4028
|
|
|
@@ -4024,7 +4063,7 @@ export default function PageSample(props: {
|
|
|
4024
4063
|
</div>
|
|
4025
4064
|
);
|
|
4026
4065
|
}
|
|
4027
|
-
`,
|
|
4066
|
+
`,rn=`/* @jsxImportSource react */
|
|
4028
4067
|
|
|
4029
4068
|
import styles from "./styles.module.css";
|
|
4030
4069
|
|
|
@@ -4076,7 +4115,7 @@ export default function PageSample(props: {
|
|
|
4076
4115
|
</div>
|
|
4077
4116
|
);
|
|
4078
4117
|
}
|
|
4079
|
-
`,
|
|
4118
|
+
`,an=`* {
|
|
4080
4119
|
margin: 0;
|
|
4081
4120
|
padding: 0;
|
|
4082
4121
|
box-sizing: border-box;
|
|
@@ -4211,7 +4250,7 @@ export default function PageSample(props: {
|
|
|
4211
4250
|
align-items: center;
|
|
4212
4251
|
gap: 0.25rem;
|
|
4213
4252
|
}
|
|
4214
|
-
`,
|
|
4253
|
+
`,on=`/* @jsxImportSource react */
|
|
4215
4254
|
|
|
4216
4255
|
import styles from "./styles.module.css";
|
|
4217
4256
|
|
|
@@ -4277,7 +4316,7 @@ export default function WelcomePage() {
|
|
|
4277
4316
|
</div>
|
|
4278
4317
|
);
|
|
4279
4318
|
}
|
|
4280
|
-
`,
|
|
4319
|
+
`,sn=`import { QueryClient, type QueryClientConfig } from "@tanstack/react-query";
|
|
4281
4320
|
|
|
4282
4321
|
let client: QueryClient | undefined;
|
|
4283
4322
|
|
|
@@ -4292,7 +4331,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
4292
4331
|
}
|
|
4293
4332
|
return client;
|
|
4294
4333
|
};
|
|
4295
|
-
`,
|
|
4334
|
+
`,cn=`import { QueryClient, type QueryClientConfig } from "@tanstack/react-query";
|
|
4296
4335
|
|
|
4297
4336
|
import { store } from "{{ createImport 'lib' '@ssr/base' }}";
|
|
4298
4337
|
|
|
@@ -4315,7 +4354,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
4315
4354
|
}
|
|
4316
4355
|
return ctx.tsqClient as QueryClient;
|
|
4317
4356
|
};
|
|
4318
|
-
`,
|
|
4357
|
+
`,ln=`export type ComponentLoader = () => Promise<{
|
|
4319
4358
|
loader?: (arg: unknown) => Promise<unknown>;
|
|
4320
4359
|
}>;
|
|
4321
4360
|
|
|
@@ -4335,7 +4374,7 @@ export const loaderFactory = (opt?: { withPreload?: boolean }) => {
|
|
|
4335
4374
|
return opt?.withPreload ? { loader } : {};
|
|
4336
4375
|
};
|
|
4337
4376
|
};
|
|
4338
|
-
`,
|
|
4377
|
+
`,un=`import type { JSX, ComponentType } from "react";
|
|
4339
4378
|
|
|
4340
4379
|
import {
|
|
4341
4380
|
type RouteObject,
|
|
@@ -4393,7 +4432,7 @@ export const createRouters = (
|
|
|
4393
4432
|
}
|
|
4394
4433
|
|
|
4395
4434
|
export default createRouterFactory<RouteObject, Promise<JSX.Element>>();
|
|
4396
|
-
`,
|
|
4435
|
+
`,dn=`import { Outlet } from "react-router";
|
|
4397
4436
|
import { AppProvider } from "{{ createImport 'lib' 'app' }}";
|
|
4398
4437
|
|
|
4399
4438
|
export default function App() {
|
|
@@ -4403,7 +4442,7 @@ export default function App() {
|
|
|
4403
4442
|
</AppProvider>
|
|
4404
4443
|
);
|
|
4405
4444
|
}
|
|
4406
|
-
`,
|
|
4445
|
+
`,fn=`import {
|
|
4407
4446
|
type LinkProps as RouterLinkProps,
|
|
4408
4447
|
Link as RouterLink,
|
|
4409
4448
|
} from "react-router";
|
|
@@ -4422,7 +4461,7 @@ export default function Link(
|
|
|
4422
4461
|
|
|
4423
4462
|
const href = () => {
|
|
4424
4463
|
const [key, ...params] = to;
|
|
4425
|
-
return pageRouteMap[key]?.
|
|
4464
|
+
return pageRouteMap[key]?.path(params as never, query, { prefix: false });
|
|
4426
4465
|
};
|
|
4427
4466
|
|
|
4428
4467
|
return (
|
|
@@ -4431,7 +4470,7 @@ export default function Link(
|
|
|
4431
4470
|
</RouterLink>
|
|
4432
4471
|
);
|
|
4433
4472
|
}
|
|
4434
|
-
`,
|
|
4473
|
+
`,pn=`import renderFactory, {
|
|
4435
4474
|
createRoutes,
|
|
4436
4475
|
hydrate,
|
|
4437
4476
|
mount,
|
|
@@ -4458,7 +4497,7 @@ if (root) {
|
|
|
4458
4497
|
} else {
|
|
4459
4498
|
console.error("❌ Root element not found!");
|
|
4460
4499
|
}
|
|
4461
|
-
`,
|
|
4500
|
+
`,mn=`import renderFactory, {
|
|
4462
4501
|
createRoutes,
|
|
4463
4502
|
renderToStream,
|
|
4464
4503
|
renderToString,
|
|
@@ -4485,7 +4524,7 @@ export default renderFactory(() => {
|
|
|
4485
4524
|
},
|
|
4486
4525
|
};
|
|
4487
4526
|
});
|
|
4488
|
-
`,
|
|
4527
|
+
`,hn=`<!doctype html>
|
|
4489
4528
|
<html lang="en">
|
|
4490
4529
|
<head>
|
|
4491
4530
|
<meta charset="UTF-8" />
|
|
@@ -4497,17 +4536,17 @@ export default renderFactory(() => {
|
|
|
4497
4536
|
<script type="module" src="/{{ entryDir }}/client.ts"><\/script>
|
|
4498
4537
|
</body>
|
|
4499
4538
|
</html>
|
|
4500
|
-
`,
|
|
4539
|
+
`,gn=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
|
|
4501
4540
|
|
|
4502
4541
|
export default function Page() {
|
|
4503
4542
|
return <PageSample />;
|
|
4504
4543
|
}
|
|
4505
|
-
`,
|
|
4544
|
+
`,_n=`import { Outlet } from "react-router";
|
|
4506
4545
|
|
|
4507
4546
|
export default function Layout() {
|
|
4508
4547
|
return <Outlet />;
|
|
4509
4548
|
}
|
|
4510
|
-
`,
|
|
4549
|
+
`,vn=`import PageSample from "{{ createImport 'lib' 'pageSamples/page.tsx' }}";
|
|
4511
4550
|
|
|
4512
4551
|
export default function Page() {
|
|
4513
4552
|
return PageSample({
|
|
@@ -4520,8 +4559,8 @@ export default function Page() {
|
|
|
4520
4559
|
},
|
|
4521
4560
|
});
|
|
4522
4561
|
}
|
|
4523
|
-
`,
|
|
4524
|
-
`,
|
|
4562
|
+
`,yn=`export { default } from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}";
|
|
4563
|
+
`,bn=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
4525
4564
|
|
|
4526
4565
|
import app from "./app";
|
|
4527
4566
|
|
|
@@ -4536,12 +4575,12 @@ export default routerFactory((routes) => {
|
|
|
4536
4575
|
},
|
|
4537
4576
|
};
|
|
4538
4577
|
});
|
|
4539
|
-
`,
|
|
4578
|
+
`,xn=g((e,t)=>{let{createPath:n,createImportHelpers:r}=y(e),{renderToFile:i}=x({helpers:{...r({origin:`lib`}),...w()},partials:{routePartial:en}}),{renderToFile:a}=x({helpers:r({origin:`src`})}),o=Yt(),s=e=>!e?.trim().length,u=c(t?.templates,vn),d=async e=>{for(let{kind:t,entry:r}of e)t===`pageRoute`?await a(n.pages(r.file),r.name===`index`?yn:u(r.name,r),{route:r,message:Xt()},{overwrite:s}):t===`pageLayout`&&await a(n.pages(r.file),_n,{route:r},{overwrite:s})},f=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(S),r=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`||e===`pageLayout`?[t]:[]),a=o(v(r));for(let[e,t]of[[`client.ts`,$t],[`server.ts`,tn]])await i(n.libEntry(e),t,{pageEntries:r,nestedRoutes:a});await i(n.lib(`router.tsx`),un,{entries:e,indexRoutes:t})};return{config(){let{templates:e,...n}={...t};return{plugins:[se(n)]}},async start(){for(let[e,r]of[[`env.d.ts`,``],[`react.ts`,ln],[`pageSamples/styles.module.css`,an],[`pageSamples/welcome.tsx`,on],[`pageSamples/page.tsx`,rn],[`pageSamples/404.tsx`,nn],...t?.tanstack?.query?[[`app.tsx`,Qt],[`query.ts`,sn]]:[[`app.tsx`,Zt],[`query.ts`,`/** tanstack query disabled */`]]])await i(n.lib(e),r,{});for(let[e,t]of[[`pages/404.tsx`,gn],[`components/Link.tsx`,fn],[`app.tsx`,dn],[`router.ts`,bn]])await a(n.src(e),t,{entryDir:l.entryDir},{overwrite:s});await a(n.src(`index.html`),hn,{entryDir:l.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,pn],[`server.ts`,mn]])await a(n.entry(e),t,{},{overwrite:s})},async watch(e,t){await d(e.filter(m(t,[`create`]))),await f(e)},async build(e){await d(e),await f(e)},async ssrBuild(){await i(n.lib(`query.ts`),t?.tanstack?.query?cn:`/** tanstack query disabled */`,{ssrBundle:!0})}}}),Sn=h({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:xn}),G={type:`module`,private:!0,name:`@kosmojs/solid-generator`,version:`0.3.0`,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.15`}},Cn=()=>{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(`/`),n=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`?[n(e.parts[0])]:(e.parts.length&&(console.warn(`❗${r([`red`,`bold`],`WARN`)}: At the moment Solid Router does not support mixed path segments.`),console.warn(` ${r([`magenta`],e.orig)} segment in ${r([`blue`],t)} route won't match as expected.`),console.warn()),[e.parts.map(e=>e.type===`static`?e.value:n(e)).join(``)])).join(`/`)},wn=()=>{let e=[`🎉 Well done! You just created a new Solid route.`,`🚀 Success! A fresh Solid route is ready to roll.`,`🌟 Nice work! Another Solid route added to your app.`,`🧩 All set! A new Solid route has been scaffolded.`,`🔧 Scaffold complete! Your new Solid route is in place.`,`✅ Built! Your Solid route is scaffolded and ready.`,`✨ Fantastic! Your new Solid route is good to go.`,`🎯 Nailed it! A brand new Solid route just landed.`,`💫 Awesome! Another Solid route joins the party.`,`⚡ Lightning fast! A new Solid route created successfully.`];return e[Math.floor(Math.random()*e.length)]},Tn=`import type { ParentComponent } from "solid-js";
|
|
4540
4579
|
|
|
4541
4580
|
export const AppProvider: ParentComponent = (props) => {
|
|
4542
4581
|
return props.children;
|
|
4543
4582
|
};
|
|
4544
|
-
`,
|
|
4583
|
+
`,En=`import type { ParentComponent } from "solid-js";
|
|
4545
4584
|
import { type QueryClient, QueryClientProvider } from "@tanstack/solid-query";
|
|
4546
4585
|
|
|
4547
4586
|
import { getQueryClient } from "./query";
|
|
@@ -4553,7 +4592,7 @@ export const AppProvider: ParentComponent<{ client?: QueryClient }> = (props) =>
|
|
|
4553
4592
|
</QueryClientProvider>
|
|
4554
4593
|
);
|
|
4555
4594
|
};
|
|
4556
|
-
`,
|
|
4595
|
+
`,Dn=`import { lazy, type JSX } from "solid-js";
|
|
4557
4596
|
import { hydrate as hydrateOrig, render } from "solid-js/web";
|
|
4558
4597
|
import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
4559
4598
|
import { clientRenderFactory } from "@kosmojs/core/generators";
|
|
@@ -4598,7 +4637,7 @@ export const mount = async (
|
|
|
4598
4637
|
}
|
|
4599
4638
|
|
|
4600
4639
|
export default clientRenderFactory();
|
|
4601
|
-
`,
|
|
4640
|
+
`,On=`{
|
|
4602
4641
|
path: "{{path}}",
|
|
4603
4642
|
{{#if component}}
|
|
4604
4643
|
component: {{component}}_component,
|
|
@@ -4608,7 +4647,7 @@ export default clientRenderFactory();
|
|
|
4608
4647
|
children: [ {{#each children}}{{> routePartial}}, {{/each}}],
|
|
4609
4648
|
{{/if}}
|
|
4610
4649
|
}
|
|
4611
|
-
`,
|
|
4650
|
+
`,kn=`import type { JSX } from "solid-js";
|
|
4612
4651
|
|
|
4613
4652
|
import {
|
|
4614
4653
|
generateHydrationScript,
|
|
@@ -4689,7 +4728,7 @@ export const renderToStream: RenderToStreamWrapper<
|
|
|
4689
4728
|
};
|
|
4690
4729
|
|
|
4691
4730
|
export default serverRenderFactory<true>();
|
|
4692
|
-
`,
|
|
4731
|
+
`,An=`/* @jsxImportSource solid-js */
|
|
4693
4732
|
|
|
4694
4733
|
import styles from "./styles.module.css";
|
|
4695
4734
|
|
|
@@ -4730,7 +4769,7 @@ export default function PageSample(props: {
|
|
|
4730
4769
|
</div>
|
|
4731
4770
|
);
|
|
4732
4771
|
}
|
|
4733
|
-
`,
|
|
4772
|
+
`,jn=`/* @jsxImportSource solid-js */
|
|
4734
4773
|
|
|
4735
4774
|
import styles from "./styles.module.css";
|
|
4736
4775
|
|
|
@@ -4782,7 +4821,7 @@ export default function PageSample(props: {
|
|
|
4782
4821
|
</div>
|
|
4783
4822
|
);
|
|
4784
4823
|
}
|
|
4785
|
-
`,
|
|
4824
|
+
`,Mn=`* {
|
|
4786
4825
|
margin: 0;
|
|
4787
4826
|
padding: 0;
|
|
4788
4827
|
box-sizing: border-box;
|
|
@@ -4917,7 +4956,7 @@ export default function PageSample(props: {
|
|
|
4917
4956
|
align-items: center;
|
|
4918
4957
|
gap: 0.25rem;
|
|
4919
4958
|
}
|
|
4920
|
-
`,
|
|
4959
|
+
`,Nn=`/* @jsxImportSource solid-js */
|
|
4921
4960
|
|
|
4922
4961
|
import styles from "./styles.module.css";
|
|
4923
4962
|
|
|
@@ -4983,7 +5022,7 @@ export default function WelcomePage() {
|
|
|
4983
5022
|
</div>
|
|
4984
5023
|
);
|
|
4985
5024
|
}
|
|
4986
|
-
`,
|
|
5025
|
+
`,Pn=`import { QueryClient, type QueryClientConfig } from "@tanstack/solid-query";
|
|
4987
5026
|
|
|
4988
5027
|
let client: QueryClient | undefined;
|
|
4989
5028
|
|
|
@@ -4998,7 +5037,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
4998
5037
|
}
|
|
4999
5038
|
return client;
|
|
5000
5039
|
};
|
|
5001
|
-
`,
|
|
5040
|
+
`,Fn=`import { QueryClient, type QueryClientConfig } from "@tanstack/solid-query";
|
|
5002
5041
|
|
|
5003
5042
|
import { store } from "{{ createImport 'lib' '@ssr/base' }}";
|
|
5004
5043
|
|
|
@@ -5021,7 +5060,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
5021
5060
|
}
|
|
5022
5061
|
return ctx.tsqClient as QueryClient;
|
|
5023
5062
|
};
|
|
5024
|
-
`,
|
|
5063
|
+
`,In=`import type { JSX, ParentComponent } from "solid-js";
|
|
5025
5064
|
import { Router, type RouteDefinition } from "@solidjs/router";
|
|
5026
5065
|
import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
5027
5066
|
import { createRouterFactory } from "@kosmojs/core/generators";
|
|
@@ -5057,7 +5096,7 @@ export const createRouters = (
|
|
|
5057
5096
|
}
|
|
5058
5097
|
|
|
5059
5098
|
export default createRouterFactory<RouteDefinition, JSX.Element>();
|
|
5060
|
-
`,
|
|
5099
|
+
`,Ln=`export type ComponentLoader = () => Promise<{
|
|
5061
5100
|
preload?: () => Promise<unknown>;
|
|
5062
5101
|
}>;
|
|
5063
5102
|
|
|
@@ -5072,10 +5111,10 @@ export const loaderFactory = (opt?: { withPreload?: boolean }) => {
|
|
|
5072
5111
|
return opt?.withPreload ? { preload } : {};
|
|
5073
5112
|
};
|
|
5074
5113
|
};
|
|
5075
|
-
`,
|
|
5114
|
+
`,Rn=`export type MaybeWrapped<T> = import("solid-js/store").Store<T> | T;
|
|
5076
5115
|
|
|
5077
5116
|
export { unwrap } from "solid-js/store";
|
|
5078
|
-
`,
|
|
5117
|
+
`,zn=`import type { ParentComponent } from "solid-js";
|
|
5079
5118
|
import { AppProvider } from "{{ createImport 'lib' 'app' }}";
|
|
5080
5119
|
|
|
5081
5120
|
const App: ParentComponent = (props) => {
|
|
@@ -5083,7 +5122,7 @@ const App: ParentComponent = (props) => {
|
|
|
5083
5122
|
};
|
|
5084
5123
|
|
|
5085
5124
|
export default App;
|
|
5086
|
-
`,
|
|
5125
|
+
`,Bn=`import { A, type AnchorProps } from "@solidjs/router";
|
|
5087
5126
|
import { type JSXElement, splitProps } from "solid-js";
|
|
5088
5127
|
|
|
5089
5128
|
import { pageRouteMap, type LinkProps } from "{{ createImport 'libCore' }}";
|
|
@@ -5103,12 +5142,12 @@ export default function Link(
|
|
|
5103
5142
|
|
|
5104
5143
|
const href = () => {
|
|
5105
5144
|
const [key, ...params] = knownProps.to;
|
|
5106
|
-
return pageRouteMap[key]?.
|
|
5145
|
+
return pageRouteMap[key]?.path(params as never, knownProps.query, { prefix: false });
|
|
5107
5146
|
};
|
|
5108
5147
|
|
|
5109
5148
|
return <A {...{ ...restProps, href: href() }}>{knownProps.children}</A>;
|
|
5110
5149
|
}
|
|
5111
|
-
`,
|
|
5150
|
+
`,Vn=`import renderFactory, {
|
|
5112
5151
|
createRoutes,
|
|
5113
5152
|
hydrate,
|
|
5114
5153
|
mount,
|
|
@@ -5135,7 +5174,7 @@ if (root) {
|
|
|
5135
5174
|
} else {
|
|
5136
5175
|
console.error("❌ Root element not found!");
|
|
5137
5176
|
}
|
|
5138
|
-
`,
|
|
5177
|
+
`,Hn=`import renderFactory, {
|
|
5139
5178
|
createRoutes,
|
|
5140
5179
|
renderToStream,
|
|
5141
5180
|
renderToString,
|
|
@@ -5162,7 +5201,7 @@ export default renderFactory(() => {
|
|
|
5162
5201
|
},
|
|
5163
5202
|
};
|
|
5164
5203
|
});
|
|
5165
|
-
`,
|
|
5204
|
+
`,Un=`<!doctype html>
|
|
5166
5205
|
<html lang="en">
|
|
5167
5206
|
<head>
|
|
5168
5207
|
<meta charset="UTF-8" />
|
|
@@ -5174,19 +5213,19 @@ export default renderFactory(() => {
|
|
|
5174
5213
|
<script type="module" src="/{{ entryDir }}/client.ts"><\/script>
|
|
5175
5214
|
</body>
|
|
5176
5215
|
</html>
|
|
5177
|
-
`,
|
|
5216
|
+
`,Wn=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
|
|
5178
5217
|
|
|
5179
5218
|
export default function Page() {
|
|
5180
5219
|
return <PageSample />;
|
|
5181
5220
|
}
|
|
5182
|
-
`,
|
|
5221
|
+
`,Gn=`import type { ParentComponent } from "solid-js";
|
|
5183
5222
|
|
|
5184
5223
|
const Layout: ParentComponent = (props) => {
|
|
5185
5224
|
return props.children;
|
|
5186
5225
|
};
|
|
5187
5226
|
|
|
5188
5227
|
export default Layout;
|
|
5189
|
-
`,
|
|
5228
|
+
`,Kn=`import PageSample from "{{ createImport 'lib' 'pageSamples/page.tsx' }}";
|
|
5190
5229
|
|
|
5191
5230
|
export default function Page() {
|
|
5192
5231
|
return PageSample({
|
|
@@ -5199,8 +5238,8 @@ export default function Page() {
|
|
|
5199
5238
|
},
|
|
5200
5239
|
});
|
|
5201
5240
|
}
|
|
5202
|
-
`,
|
|
5203
|
-
`,
|
|
5241
|
+
`,qn=`export { default } from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}";
|
|
5242
|
+
`,Jn=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
5204
5243
|
|
|
5205
5244
|
import app from "./app";
|
|
5206
5245
|
|
|
@@ -5215,12 +5254,12 @@ export default routerFactory((routes) => {
|
|
|
5215
5254
|
},
|
|
5216
5255
|
};
|
|
5217
5256
|
});
|
|
5218
|
-
`,
|
|
5257
|
+
`,Yn=g((e,t)=>{let{generators:n=[]}=e.config,{createPath:r,createImportHelpers:i}=y(e),{renderToFile:a}=x({helpers:{...i({origin:`lib`}),...w()},partials:{routePartial:On}}),{renderToFile:o}=x({helpers:i({origin:`src`})}),s=Cn(),u=e=>!e?.trim().length,d=c(t?.templates,Kn),f=async e=>{for(let{kind:t,entry:n}of e)t===`pageRoute`?await o(r.pages(n.file),n.name===`index`?qn:d(n.name,n),{route:n,message:wn()},{overwrite:u}):t===`pageLayout`&&await o(r.pages(n.file),Gn,{route:n},{overwrite:u})},p=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(S),n=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`||e===`pageLayout`?[t]:[]),i=s(v(n));for(let[e,t]of[[`client.ts`,Dn],[`server.ts`,kn]])await a(r.libEntry(e),t,{pageEntries:n,nestedRoutes:i});await a(r.lib(`router.tsx`),In,{entries:e,indexRoutes:t})};return{config({command:e}){let{templates:r,...i}={...t};return{oxc:{jsx:{importSource:`solid-js`}},plugins:e===`build`?[D({...i,...n.some(e=>e.meta.slot===`ssr`)?{ssr:!0,solid:{...i?.solid,hydratable:!0}}:{}})]:[D({...i,dev:!0,hot:!0})]}},async start(){for(let[e,n]of[[`env.d.ts`,``],[`solid.ts`,Ln],[`unwrap.ts`,Rn],[`pageSamples/styles.module.css`,Mn],[`pageSamples/welcome.tsx`,Nn],[`pageSamples/page.tsx`,jn],[`pageSamples/404.tsx`,An],...t?.tanstack?.query?[[`app.tsx`,En],[`query.ts`,Pn]]:[[`app.tsx`,Tn],[`query.ts`,`/** tanstack query disabled */`]]])await a(r.lib(e),n,{});for(let[e,t]of[[`pages/404.tsx`,Wn],[`components/Link.tsx`,Bn],[`app.tsx`,zn],[`router.ts`,Jn]])await o(r.src(e),t,{entryDir:l.entryDir},{overwrite:u});await o(r.src(`index.html`),Un,{entryDir:l.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,Vn],[`server.ts`,Hn]])await o(r.entry(e),t,{},{overwrite:u})},async watch(e,t){await f(e.filter(m(t,[`create`]))),await p(e)},async build(e){await f(e),await p(e)},async ssrBuild(){await a(r.lib(`query.ts`),t?.tanstack?.query?Fn:`/** tanstack query disabled */`,{ssrBundle:!0})}}}),Xn=h({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:Yn}),Zn=g(e=>{let{generators:i=[],refineTypeName:a,...o}={...e.config},{createPath:s}=y(e);return{async postBuild(){let a=s.distDir(`ssg`),c=n(a,`../ssr/server.js`);if(!await ce(c,le.F_OK).then(()=>!0,()=>!1)){console.error(),console.error(r(`red`,`❗Please enable ssrGenerator in ${e.name}/kosmo.config.ts`)),console.error(` SSG generator can not run without SSR server`),console.error();return}let l=te(`${e.name}: SSG`);l.append(`preparing...`);let{createDisposableServer:u}=await import(c);await O(n(a,`../client/assets`),t(a,`assets`),{recursive:!0}),l.append(`bundling routes...`),await E(_(o,...i.map(({factory:t})=>t(e).config?.({kind:`client`,command:`build`})),{root:s.lib(),appType:`custom`,plugins:[C.tsconfigPaths(e),C.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 e=await import(t(a,`routes.js`)).then(e=>e.default);u(async n=>{for(let[r,i]of e.entries()){l.append(`[ ${r+1} of ${e.length} ] ${i}`);let o=await Qn(n,i);o!==void 0&&(await ue(t(a,i),{recursive:!0}),await de(t(a,t(i,`index.html`)),o,`utf8`))}l.succeed(`done ✨`)})}finally{await k(`${a}/routes.js`)}}}}),Qn=async(e,t)=>{try{let n=`http://localhost:${e}${t}`;return await(await fetch(n)).text()}catch(e){console.error(r(`red`,`✗ SSG: Failed generating ${t} route: ${e.message}`));return}},$n=h({meta:{name:`SSG`,slot:`ssg`},factory:Zn}),q={type:`module`,private:!0,name:`@kosmojs/ssr-generator`,version:`0.3.0`,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.2`},devDependencies:{"@hono/node-server":`^2.1.1`,hono:`^4.13.3`,"light-my-request":`^6.6.0`,tinyglobby:`^0.2.17`}},er=`{{#if apiGenerator}}
|
|
5219
5258
|
export { default as apiApp } from "{{ createImport 'api' 'app' }}";
|
|
5220
5259
|
{{else}}
|
|
5221
5260
|
export const apiApp = undefined;
|
|
5222
5261
|
{{/if}}
|
|
5223
|
-
|
|
5262
|
+
`,tr=`import { AsyncLocalStorage } from "node:async_hooks";
|
|
5224
5263
|
|
|
5225
5264
|
import type { FetchApp, NodeApp } from "@kosmojs/core";
|
|
5226
5265
|
|
|
@@ -5264,7 +5303,7 @@ export const store = new AsyncLocalStorage<RequestContext>();
|
|
|
5264
5303
|
export const isFetchApp = (app: FetchApp | NodeApp): app is FetchApp => {
|
|
5265
5304
|
return typeof (app as FetchApp).fetch === "function";
|
|
5266
5305
|
};
|
|
5267
|
-
`,
|
|
5306
|
+
`,nr=`import { type RequestContext, store } from "./base";
|
|
5268
5307
|
|
|
5269
5308
|
import { renderWrapper } from "{{ createImport 'libEntry' 'server' }}";
|
|
5270
5309
|
|
|
@@ -5286,7 +5325,7 @@ export const withSsrContext = <T>(
|
|
|
5286
5325
|
export const errorProvider = () => {
|
|
5287
5326
|
return store.getStore()?.error;
|
|
5288
5327
|
};
|
|
5289
|
-
`,
|
|
5328
|
+
`,rr=`import type { FetchApp, NodeApp } from "@kosmojs/core";
|
|
5290
5329
|
import type { Transport } from "@kosmojs/core/fetch";
|
|
5291
5330
|
|
|
5292
5331
|
import {
|
|
@@ -5489,12 +5528,12 @@ const pathnameOf = (input: RequestInfo | URL): string => {
|
|
|
5489
5528
|
} catch {}
|
|
5490
5529
|
return String(input);
|
|
5491
5530
|
};
|
|
5492
|
-
`,
|
|
5531
|
+
`,ir=`export const routeMap = [
|
|
5493
5532
|
{{#each pageRoutes}}
|
|
5494
5533
|
{ pathPattern: "{{honoPattern}}", renderMode: "{{renderMode}}" },
|
|
5495
5534
|
{{/each}}
|
|
5496
5535
|
];
|
|
5497
|
-
`,
|
|
5536
|
+
`,ar=`import { access, chmod, constants, readFile, unlink } from "node:fs/promises";
|
|
5498
5537
|
import {
|
|
5499
5538
|
createServer,
|
|
5500
5539
|
type IncomingMessage,
|
|
@@ -5910,14 +5949,14 @@ if (isMain) {
|
|
|
5910
5949
|
process.exit(1);
|
|
5911
5950
|
}
|
|
5912
5951
|
}
|
|
5913
|
-
`,
|
|
5952
|
+
`,or=`string`,sr=g((e,r)=>{let{generators:i=[],refineTypeName:a,...o}=e.config,{createPath:c,createImportHelpers:l}=y(e),{renderToFile:u}=x({helpers:{...l({origin:`lib`})}});return{async build(e){let t=r?.renderMode?typeof r.renderMode==`string`?()=>r.renderMode:s(r?.renderMode,`string`):()=>or,n={renderMode:JSON.stringify(r?.renderMode||null),pageRoutes:e.flatMap(e=>e.kind===`pageRoute`?[{...e.entry,renderMode:t(e.entry.name)}]:[]).sort(S),apiGenerator:i.some(e=>e.meta.slot===`backend`)};for(let[e,t]of[[`ssr.ts`,ar],[`@ssr/api.ts`,er],[`@ssr/__kosmo_ssr_bundle.ts`,nr],[`@ssr/base.ts`,tr],[`@ssr/fetch.ts`,rr],[`@ssr/routes.ts`,ir]])await u(c.lib(e),t,n)},async postBuild(){let r=c.distDir(`ssr`),a=[C.tsconfigPaths(e),C.nodePrefix()];for(let t of i)await t.factory(e).ssrBuild?.();await E(_(o,...i.map(({factory:t})=>t(e).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 E({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:t(r,`server`),entryFileNames:`server.js`,format:`esm`}}}}),await O(n(r,`../client`),r,{recursive:!0});for(let e of[`server.js`,`server.js.map`])await O(`${r}/server/${e}`,`${r}/${e}`);await k(`${r}/server`,{recursive:!0,force:!0})}}}),cr=h({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:sr}),J={type:`module`,private:!0,name:`@kosmojs/svelte-generator`,version:`0.3.0`,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.3.0`,vite:`^8.2.2`},devDependencies:{"@tanstack/svelte-query":`^6.1.38`,"path-to-regexp":`^8.4.2`,svelte:`^5.56.10`}},lr=()=>{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">
|
|
5914
5953
|
import type { Snippet } from "svelte";
|
|
5915
5954
|
|
|
5916
5955
|
let { children }: { children: Snippet } = $props();
|
|
5917
5956
|
<\/script>
|
|
5918
5957
|
|
|
5919
5958
|
{@render children()}
|
|
5920
|
-
`,
|
|
5959
|
+
`,ur=`<script lang="ts">
|
|
5921
5960
|
import { type QueryClient, QueryClientProvider } from "@tanstack/svelte-query";
|
|
5922
5961
|
import type { Snippet } from "svelte";
|
|
5923
5962
|
|
|
@@ -5934,7 +5973,7 @@ if (isMain) {
|
|
|
5934
5973
|
<QueryClientProvider client={queryClient}>
|
|
5935
5974
|
{@render children()}
|
|
5936
5975
|
</QueryClientProvider>
|
|
5937
|
-
`,
|
|
5976
|
+
`,dr=`import { hydrate as hydrateOrig, mount as mountOrig } from "svelte";
|
|
5938
5977
|
import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
5939
5978
|
import { clientRenderFactory } from "@kosmojs/core/generators";
|
|
5940
5979
|
|
|
@@ -5975,7 +6014,7 @@ export const mount = async (
|
|
|
5975
6014
|
}
|
|
5976
6015
|
|
|
5977
6016
|
export default clientRenderFactory();
|
|
5978
|
-
`,
|
|
6017
|
+
`,fr=`import { render as renderOrig } from "svelte/server";
|
|
5979
6018
|
|
|
5980
6019
|
import type {
|
|
5981
6020
|
RenderToStringWrapper,
|
|
@@ -6041,12 +6080,12 @@ export const renderToString: RenderToStringWrapper<
|
|
|
6041
6080
|
// svelte/server exposes only render() - no web-stream renderer -
|
|
6042
6081
|
// so this folder is string-only SSR.
|
|
6043
6082
|
export default serverRenderFactory<false>();
|
|
6044
|
-
`,
|
|
6083
|
+
`,pr=`declare module "*.svelte" {
|
|
6045
6084
|
import type { Component } from "svelte";
|
|
6046
6085
|
const component: Component;
|
|
6047
6086
|
export default component;
|
|
6048
6087
|
}
|
|
6049
|
-
`,
|
|
6088
|
+
`,mr=`<script lang="ts">
|
|
6050
6089
|
/**
|
|
6051
6090
|
* Folds [app, ...layouts] around the page component.
|
|
6052
6091
|
*
|
|
@@ -6080,7 +6119,7 @@ export default serverRenderFactory<false>();
|
|
|
6080
6119
|
{/snippet}
|
|
6081
6120
|
|
|
6082
6121
|
{@render layer(0)}
|
|
6083
|
-
`,
|
|
6122
|
+
`,hr=`<script lang="ts">
|
|
6084
6123
|
import styles from "./styles.module.css";
|
|
6085
6124
|
|
|
6086
6125
|
let { headline }: { headline?: string } = $props();
|
|
@@ -6112,7 +6151,7 @@ export default serverRenderFactory<false>();
|
|
|
6112
6151
|
</div>
|
|
6113
6152
|
</div>
|
|
6114
6153
|
</div>
|
|
6115
|
-
`,
|
|
6154
|
+
`,gr=`<script lang="ts">
|
|
6116
6155
|
import styles from "./styles.module.css";
|
|
6117
6156
|
|
|
6118
6157
|
let {
|
|
@@ -6157,7 +6196,7 @@ export default serverRenderFactory<false>();
|
|
|
6157
6196
|
</div>
|
|
6158
6197
|
</div>
|
|
6159
6198
|
</div>
|
|
6160
|
-
`,
|
|
6199
|
+
`,_r=`* {
|
|
6161
6200
|
margin: 0;
|
|
6162
6201
|
padding: 0;
|
|
6163
6202
|
box-sizing: border-box;
|
|
@@ -6292,7 +6331,7 @@ export default serverRenderFactory<false>();
|
|
|
6292
6331
|
align-items: center;
|
|
6293
6332
|
gap: 0.25rem;
|
|
6294
6333
|
}
|
|
6295
|
-
`,
|
|
6334
|
+
`,vr=`<script lang="ts">
|
|
6296
6335
|
import styles from "./styles.module.css";
|
|
6297
6336
|
<\/script>
|
|
6298
6337
|
|
|
@@ -6350,7 +6389,7 @@ export default serverRenderFactory<false>();
|
|
|
6350
6389
|
</div>
|
|
6351
6390
|
</div>
|
|
6352
6391
|
</div>
|
|
6353
|
-
`,
|
|
6392
|
+
`,yr=`export type ParamsMap = {
|
|
6354
6393
|
{{#each pageRoutes}}"{{name}}": {{serializeParamsLiteral .}};
|
|
6355
6394
|
{{/each}}
|
|
6356
6395
|
};
|
|
@@ -6359,7 +6398,7 @@ export const paramNames = {
|
|
|
6359
6398
|
{{#each pageRoutes}}"{{name}}": [ {{#each params.schema}}"{{name}}", {{/each}}],
|
|
6360
6399
|
{{/each}}
|
|
6361
6400
|
} as const;
|
|
6362
|
-
`,
|
|
6401
|
+
`,br=`import { QueryClient, type QueryClientConfig } from "@tanstack/svelte-query";
|
|
6363
6402
|
|
|
6364
6403
|
let client: QueryClient | undefined;
|
|
6365
6404
|
|
|
@@ -6374,7 +6413,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
6374
6413
|
}
|
|
6375
6414
|
return client;
|
|
6376
6415
|
};
|
|
6377
|
-
`,
|
|
6416
|
+
`,xr=`import { QueryClient, type QueryClientConfig } from "@tanstack/svelte-query";
|
|
6378
6417
|
|
|
6379
6418
|
import { store } from "{{ createImport 'lib' '@ssr/base' }}";
|
|
6380
6419
|
|
|
@@ -6397,7 +6436,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
6397
6436
|
}
|
|
6398
6437
|
return ctx.tsqClient as QueryClient;
|
|
6399
6438
|
};
|
|
6400
|
-
`,
|
|
6439
|
+
`,Sr=`import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
6401
6440
|
import { createRouterFactory } from "@kosmojs/core/generators";
|
|
6402
6441
|
|
|
6403
6442
|
import Layouts from "./Layouts.svelte";
|
|
@@ -6437,7 +6476,7 @@ export default createRouterFactory<
|
|
|
6437
6476
|
Promise<RouteComponent>,
|
|
6438
6477
|
{ server: { route: Route } }
|
|
6439
6478
|
>();
|
|
6440
|
-
`,
|
|
6479
|
+
`,Cr=`import { match, pathToRegexp } from "path-to-regexp";
|
|
6441
6480
|
import { type Component, createContext } from "svelte";
|
|
6442
6481
|
|
|
6443
6482
|
import { parseSearchParams } from "@kosmojs/core";
|
|
@@ -6639,7 +6678,11 @@ export const createRoute = (
|
|
|
6639
6678
|
loader: RawRoute["loader"],
|
|
6640
6679
|
layouts: RawRoute["layouts"],
|
|
6641
6680
|
): RawRoute => {
|
|
6642
|
-
|
|
6681
|
+
// strip trailing slash (keeping a sole "/") so the base-joined index route
|
|
6682
|
+
// matches both with and without it - "/docs/" as a pattern rejects "/docs"
|
|
6683
|
+
const path = \`\${base}/\${pathPattern}\`
|
|
6684
|
+
.replace(/\\/+/g, "/")
|
|
6685
|
+
.replace(/(.+)\\/$/, "$1");
|
|
6643
6686
|
|
|
6644
6687
|
const { regexp } = pathToRegexp(path, { sensitive: true });
|
|
6645
6688
|
const matcher = match<Route["params"]>(path);
|
|
@@ -6647,9 +6690,11 @@ export const createRoute = (
|
|
|
6647
6690
|
return {
|
|
6648
6691
|
name,
|
|
6649
6692
|
regexp,
|
|
6693
|
+
// count segments of the same base-joined path the regexp matches against;
|
|
6694
|
+
// resolve() compares this against the full url pathname's segment count
|
|
6650
6695
|
pathSegments: name.includes("...")
|
|
6651
6696
|
? undefined
|
|
6652
|
-
:
|
|
6697
|
+
: path.split("/").filter(Boolean).length,
|
|
6653
6698
|
extractParams: (path) => {
|
|
6654
6699
|
const match = matcher(path);
|
|
6655
6700
|
return match ? match.params : {};
|
|
@@ -6658,7 +6703,7 @@ export const createRoute = (
|
|
|
6658
6703
|
layouts,
|
|
6659
6704
|
};
|
|
6660
6705
|
};
|
|
6661
|
-
`,
|
|
6706
|
+
`,wr=`import { getRouteContext } from "./svelte";
|
|
6662
6707
|
|
|
6663
6708
|
import type { ParamsMap, paramNames } from "{{ createImport 'lib' 'params' }}";
|
|
6664
6709
|
|
|
@@ -6698,7 +6743,7 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
|
|
|
6698
6743
|
const route = useRoute();
|
|
6699
6744
|
return route.loaderData?.[key || route.name] as T;
|
|
6700
6745
|
};
|
|
6701
|
-
`,
|
|
6746
|
+
`,Tr=`<script lang="ts">
|
|
6702
6747
|
import { AppProvider } from "{{ createImport 'lib' 'app' }}";
|
|
6703
6748
|
import type { Snippet } from "svelte";
|
|
6704
6749
|
|
|
@@ -6708,7 +6753,7 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
|
|
|
6708
6753
|
<AppProvider>
|
|
6709
6754
|
{@render children()}
|
|
6710
6755
|
</AppProvider>
|
|
6711
|
-
`,
|
|
6756
|
+
`,Er=`<script lang="ts">
|
|
6712
6757
|
import type { Snippet } from "svelte";
|
|
6713
6758
|
import type { HTMLAnchorAttributes } from "svelte/elements";
|
|
6714
6759
|
|
|
@@ -6727,12 +6772,12 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
|
|
|
6727
6772
|
|
|
6728
6773
|
const href = $derived.by(() => {
|
|
6729
6774
|
const [key, ...params] = to;
|
|
6730
|
-
return pageRouteMap[key]?.
|
|
6775
|
+
return pageRouteMap[key]?.path(params as never, query);
|
|
6731
6776
|
});
|
|
6732
6777
|
<\/script>
|
|
6733
6778
|
|
|
6734
6779
|
<a {href} {...rest}>{@render children?.()}</a>
|
|
6735
|
-
`,
|
|
6780
|
+
`,Dr=`import renderFactory, {
|
|
6736
6781
|
createRoutes,
|
|
6737
6782
|
hydrate,
|
|
6738
6783
|
mount,
|
|
@@ -6759,7 +6804,7 @@ if (root) {
|
|
|
6759
6804
|
} else {
|
|
6760
6805
|
console.error("❌ Root element not found!");
|
|
6761
6806
|
}
|
|
6762
|
-
`,
|
|
6807
|
+
`,Or=`import renderFactory, {
|
|
6763
6808
|
createRoutes,
|
|
6764
6809
|
renderToString,
|
|
6765
6810
|
// no renderToStream on Svelte folders
|
|
@@ -6780,7 +6825,7 @@ export default renderFactory(() => {
|
|
|
6780
6825
|
},
|
|
6781
6826
|
};
|
|
6782
6827
|
});
|
|
6783
|
-
`,
|
|
6828
|
+
`,kr=`<!doctype html>
|
|
6784
6829
|
<html lang="en">
|
|
6785
6830
|
<head>
|
|
6786
6831
|
<meta charset="UTF-8" />
|
|
@@ -6792,19 +6837,19 @@ export default renderFactory(() => {
|
|
|
6792
6837
|
<script type="module" src="/{{ entryDir }}/client.ts"><\/script>
|
|
6793
6838
|
</body>
|
|
6794
6839
|
</html>
|
|
6795
|
-
`,
|
|
6840
|
+
`,Ar=`<script lang="ts">
|
|
6796
6841
|
import PageSample from "{{ createImport 'lib' 'pageSamples/404.svelte' }}";
|
|
6797
6842
|
<\/script>
|
|
6798
6843
|
|
|
6799
6844
|
<PageSample />
|
|
6800
|
-
`,
|
|
6845
|
+
`,jr=`<script lang="ts">
|
|
6801
6846
|
import type { Snippet } from "svelte";
|
|
6802
6847
|
|
|
6803
6848
|
let { children }: { children: Snippet } = $props();
|
|
6804
6849
|
<\/script>
|
|
6805
6850
|
|
|
6806
6851
|
{@render children()}
|
|
6807
|
-
`,
|
|
6852
|
+
`,Mr=`<script lang="ts">
|
|
6808
6853
|
import PageSample from "{{ createImport 'lib' 'pageSamples/page.svelte' }}";
|
|
6809
6854
|
|
|
6810
6855
|
const pathMap = {
|
|
@@ -6823,7 +6868,7 @@ export default renderFactory(() => {
|
|
|
6823
6868
|
routeName={"{{route.name}}"}
|
|
6824
6869
|
{pathMap}
|
|
6825
6870
|
/>
|
|
6826
|
-
`,
|
|
6871
|
+
`,Nr=`<script lang="ts">
|
|
6827
6872
|
import WelcomePage from "{{ createImport 'lib' 'pageSamples/welcome.svelte' }}";
|
|
6828
6873
|
<\/script>
|
|
6829
6874
|
|
|
@@ -6836,7 +6881,7 @@ export default renderFactory(() => {
|
|
|
6836
6881
|
</svelte:head>
|
|
6837
6882
|
|
|
6838
6883
|
<WelcomePage />
|
|
6839
|
-
`,
|
|
6884
|
+
`,Pr=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
6840
6885
|
|
|
6841
6886
|
import app from "./app.svelte";
|
|
6842
6887
|
|
|
@@ -6851,7 +6896,7 @@ export default routerFactory((routes) => {
|
|
|
6851
6896
|
},
|
|
6852
6897
|
};
|
|
6853
6898
|
});
|
|
6854
|
-
`,
|
|
6899
|
+
`,Fr=g((e,t)=>{let{createPath:n,createImportHelpers:r}=y(e),{renderToFile:i}=x({helpers:{...r({origin:`lib`}),...w()}}),{renderToFile:a}=x({helpers:r({origin:`src`})}),o=e=>!e?.trim().length,s=c(t?.templates,Mr),u=async e=>{for(let{kind:t,entry:r}of e)t===`pageRoute`?await a(n.pages(r.file),r.name===`index`?Nr:s(r.name,r),{route:r,title:r.name.replace(/\{([^}]+)\}/g,`$1`),message:lr()},{overwrite:o}):t===`pageLayout`&&await a(n.pages(r.file),jr,{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(S)}]}return[]}).sort(S);for(let[e,a]of[[`client.ts`,dr],[`server.ts`,fr]])await i(n.libEntry(e),a,{pageRoutes:r,layouts:t});for(let[e,t]of[[`params.ts`,yr],[`router.ts`,Sr]])await i(n.lib(e),t,{pageRoutes:r})};return{config(){let{templates:e,...n}={...t};return{plugins:fe(n)}},async start(){for(let[e,r]of[[`env.d.ts`,pr],[`svelte.ts`,Cr],[`Layouts.svelte`,mr],[`use.ts`,wr],[`pageSamples/styles.module.css`,_r],[`pageSamples/welcome.svelte`,vr],[`pageSamples/page.svelte`,gr],[`pageSamples/404.svelte`,hr],...t?.tanstack?.query?[[`app/app.svelte`,Y],[`app/app-tsq.svelte`,ur],[`app/index.ts`,`export { default as AppProvider } from "./app-tsq.svelte";`],[`query.ts`,br]]:[[`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`,Ar],[`components/Link.svelte`,Er],[`app.svelte`,Tr],[`router.ts`,Pr]])await a(n.src(e),t,{entryDir:l.entryDir},{overwrite:o});await a(n.src(`index.html`),kr,{entryDir:l.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,Dr],[`server.ts`,Or]])await a(n.entry(e),t,{},{overwrite:o})},async watch(e,t){await u(e.filter(m(t,[`create`]))),await d(e)},async build(e){await u(e),await d(e)},async ssrBuild(){await i(n.lib(`query.ts`),t?.tanstack?.query?xr:`/** tanstack query disabled */`,{ssrBundle:!0})}}}),Ir=h({meta:{name:`Svelte`},dependencies(e){return{svelte:J.devDependencies.svelte,"path-to-regexp":J.devDependencies[`path-to-regexp`],...e?.tanstack?.query?{"@tanstack/svelte-query":J.devDependencies[`@tanstack/svelte-query`]}:{}}},factory:Fr}),Lr={type:`module`,private:!0,name:`@kosmojs/typebox-generator`,version:`0.3.0`,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.16`}},Rr=`import Type from "typebox";
|
|
6855
6900
|
|
|
6856
6901
|
/**
|
|
6857
6902
|
* Custom types for JavaScript constructs that have no JSON Schema
|
|
@@ -6923,7 +6968,7 @@ export default {
|
|
|
6923
6968
|
Buffer: TBuffer(),
|
|
6924
6969
|
ArrayBuffer: TArrayBuffer(),
|
|
6925
6970
|
};
|
|
6926
|
-
`,
|
|
6971
|
+
`,zr=`import type { TValidationError } from "typebox/error";
|
|
6927
6972
|
|
|
6928
6973
|
import type { ValidationErrorEntry } from "@kosmojs/core";
|
|
6929
6974
|
|
|
@@ -8107,7 +8152,7 @@ const format = (fmt: string, ...args: unknown[]): string => {
|
|
|
8107
8152
|
|
|
8108
8153
|
return str;
|
|
8109
8154
|
};
|
|
8110
|
-
`,
|
|
8155
|
+
`,Br=`import Type from "typebox";
|
|
8111
8156
|
import { Compile } from "typebox/compile";
|
|
8112
8157
|
import Value from "typebox/value";
|
|
8113
8158
|
|
|
@@ -8159,14 +8204,14 @@ export const validationSchemaFactory = (
|
|
|
8159
8204
|
},
|
|
8160
8205
|
};
|
|
8161
8206
|
};
|
|
8162
|
-
`,
|
|
8207
|
+
`,Vr=`import { Settings } from "typebox/system";
|
|
8163
8208
|
|
|
8164
8209
|
Settings.Set({{settings}});
|
|
8165
8210
|
|
|
8166
8211
|
export { default as customTypes } from "{{customTypesImport}}";
|
|
8167
8212
|
|
|
8168
8213
|
export const validationMessages = {{validationMessages}};
|
|
8169
|
-
`,
|
|
8214
|
+
`,Hr=`import type { ValidationSchemas } from "@kosmojs/core";
|
|
8170
8215
|
|
|
8171
8216
|
import { validationSchemaFactory } from "{{ createImport 'lib' '@typebox' }}";
|
|
8172
8217
|
|
|
@@ -8227,14 +8272,14 @@ export const validationSchemas: ValidationSchemas = {
|
|
|
8227
8272
|
{{/each}}
|
|
8228
8273
|
},
|
|
8229
8274
|
};
|
|
8230
|
-
`,
|
|
8275
|
+
`,Ur={exactOptionalPropertyTypes:!0},Wr=g((e,t)=>{let{createPath:n,createImport:r,createImportHelpers:i}=y(e),{renderToFile:a}=x({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(o).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 a(n.libApi(r.name,`schemas.ts`),Hr,{route:r,resolvedTypes:e,requestSchemas:i,responseSchemas:s})}};return{async start(){for(let[e,t]of[[`custom-types.ts`,Rr],[`error-handler.ts`,zr],[`index.ts`,Br],[`setup.ts`,Vr]])await a(n.lib(`@typebox`,e),t,{validationMessages:JSON.stringify(s),customTypesImport:c,settings:JSON.stringify({...Ur,...l})})},async watch(e,t){await u(e.filter(p(t,[`create`,`update`])))},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 Gr=h({meta:{name:`TypeBox`,resolveTypes:!0},dependencies:{typebox:Lr.devDependencies.typebox},factory:Wr}),Z={type:`module`,private:!0,name:`@kosmojs/vue-generator`,version:`0.3.0`,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(`/`)},Kr=()=>{let e=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):t(`/`,Q(c)),d=c.at(-1);return e(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},qr=()=>{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)]},Jr=`import type { Plugin } from "vue";
|
|
8231
8276
|
|
|
8232
8277
|
export { default as AppProvider } from "./provider.vue";
|
|
8233
8278
|
|
|
8234
8279
|
export const appProvider: Plugin = {
|
|
8235
8280
|
install() {},
|
|
8236
8281
|
};
|
|
8237
|
-
`,
|
|
8282
|
+
`,Yr=`import { VueQueryPlugin } from "@tanstack/vue-query";
|
|
8238
8283
|
import type { Plugin } from "vue";
|
|
8239
8284
|
|
|
8240
8285
|
import { getQueryClient } from "../query";
|
|
@@ -8246,10 +8291,10 @@ export const appProvider: Plugin = {
|
|
|
8246
8291
|
app.use(VueQueryPlugin, { queryClient: getQueryClient() });
|
|
8247
8292
|
},
|
|
8248
8293
|
};
|
|
8249
|
-
`,
|
|
8294
|
+
`,Xr=`<template>
|
|
8250
8295
|
<slot />
|
|
8251
8296
|
</template>
|
|
8252
|
-
`,
|
|
8297
|
+
`,Zr=`import type { App } from "vue";
|
|
8253
8298
|
import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
8254
8299
|
import { clientRenderFactory } from "@kosmojs/core/generators";
|
|
8255
8300
|
|
|
@@ -8289,7 +8334,7 @@ export const mount = async (
|
|
|
8289
8334
|
}
|
|
8290
8335
|
|
|
8291
8336
|
export default clientRenderFactory();
|
|
8292
|
-
`,
|
|
8337
|
+
`,Qr=`{
|
|
8293
8338
|
path: "{{path}}",
|
|
8294
8339
|
{{#if name}}
|
|
8295
8340
|
name: "{{name}}",
|
|
@@ -8307,7 +8352,7 @@ export default clientRenderFactory();
|
|
|
8307
8352
|
children: [ {{#each children}}{{> routePartial}}, {{/each}}],
|
|
8308
8353
|
{{/if}}
|
|
8309
8354
|
}
|
|
8310
|
-
|
|
8355
|
+
`,$r=`import type { App } from "vue";
|
|
8311
8356
|
|
|
8312
8357
|
import {
|
|
8313
8358
|
renderToString as renderToStringOrig,
|
|
@@ -8398,12 +8443,12 @@ export const renderToStream: RenderToStreamWrapper<
|
|
|
8398
8443
|
}
|
|
8399
8444
|
|
|
8400
8445
|
export default serverRenderFactory();
|
|
8401
|
-
|
|
8446
|
+
`,$=`declare module "*.vue" {
|
|
8402
8447
|
import type { DefineComponent } from "vue";
|
|
8403
8448
|
const component: DefineComponent<{}, {}, any>;
|
|
8404
8449
|
export default component;
|
|
8405
8450
|
}
|
|
8406
|
-
|
|
8451
|
+
`,ei=`<script setup lang="ts">
|
|
8407
8452
|
import styles from "./styles.module.css";
|
|
8408
8453
|
defineProps<{
|
|
8409
8454
|
headline?: string;
|
|
@@ -8442,7 +8487,7 @@ defineProps<{
|
|
|
8442
8487
|
</div>
|
|
8443
8488
|
</div>
|
|
8444
8489
|
</template>
|
|
8445
|
-
|
|
8490
|
+
`,ti=`<script setup lang="ts">
|
|
8446
8491
|
import styles from "./styles.module.css";
|
|
8447
8492
|
defineProps<{
|
|
8448
8493
|
message: string;
|
|
@@ -8491,7 +8536,7 @@ defineProps<{
|
|
|
8491
8536
|
</div>
|
|
8492
8537
|
</div>
|
|
8493
8538
|
</template>
|
|
8494
|
-
`,
|
|
8539
|
+
`,ni=`* {
|
|
8495
8540
|
margin: 0;
|
|
8496
8541
|
padding: 0;
|
|
8497
8542
|
box-sizing: border-box;
|
|
@@ -8624,7 +8669,7 @@ defineProps<{
|
|
|
8624
8669
|
align-items: center;
|
|
8625
8670
|
gap: 0.25rem;
|
|
8626
8671
|
}
|
|
8627
|
-
`,
|
|
8672
|
+
`,ri=`<script setup lang="ts">
|
|
8628
8673
|
import styles from "./styles.module.css";
|
|
8629
8674
|
<\/script>
|
|
8630
8675
|
|
|
@@ -8688,7 +8733,7 @@ import styles from "./styles.module.css";
|
|
|
8688
8733
|
</div>
|
|
8689
8734
|
</div>
|
|
8690
8735
|
</template>
|
|
8691
|
-
`,
|
|
8736
|
+
`,ii=`import { QueryClient, type QueryClientConfig } from "@tanstack/vue-query";
|
|
8692
8737
|
|
|
8693
8738
|
let client: QueryClient | undefined;
|
|
8694
8739
|
|
|
@@ -8703,7 +8748,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
8703
8748
|
}
|
|
8704
8749
|
return client;
|
|
8705
8750
|
};
|
|
8706
|
-
`,
|
|
8751
|
+
`,ai=`import { QueryClient, type QueryClientConfig } from "@tanstack/vue-query";
|
|
8707
8752
|
|
|
8708
8753
|
import { store } from "{{ createImport 'lib' '@ssr/base' }}";
|
|
8709
8754
|
|
|
@@ -8726,7 +8771,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
8726
8771
|
}
|
|
8727
8772
|
return ctx.tsqClient as QueryClient;
|
|
8728
8773
|
};
|
|
8729
|
-
`,
|
|
8774
|
+
`,oi=`import {
|
|
8730
8775
|
type App,
|
|
8731
8776
|
type Component,
|
|
8732
8777
|
createApp,
|
|
@@ -8855,7 +8900,18 @@ export const createRouters = (
|
|
|
8855
8900
|
// would otherwise skip the guard
|
|
8856
8901
|
installLoaderGuard(router);
|
|
8857
8902
|
|
|
8858
|
-
|
|
8903
|
+
let { pathname } = url;
|
|
8904
|
+
|
|
8905
|
+
if (base !== "/") {
|
|
8906
|
+
// strip the base from pushed paths
|
|
8907
|
+
if (pathname === base) {
|
|
8908
|
+
pathname = "/";
|
|
8909
|
+
} else if (pathname.startsWith(\`\${base}/\`)) {
|
|
8910
|
+
pathname = pathname.slice(base.length);
|
|
8911
|
+
}
|
|
8912
|
+
}
|
|
8913
|
+
|
|
8914
|
+
await router.push(pathname + url.search);
|
|
8859
8915
|
|
|
8860
8916
|
await router.isReady();
|
|
8861
8917
|
|
|
@@ -8877,14 +8933,14 @@ export default createRouterFactory<
|
|
|
8877
8933
|
Promise<App>,
|
|
8878
8934
|
{ server: { loaderData: Record<string, unknown> } }
|
|
8879
8935
|
>();
|
|
8880
|
-
`,
|
|
8936
|
+
`,si=`import { type Ref, unref } from "vue";
|
|
8881
8937
|
|
|
8882
8938
|
export type MaybeWrapped<T> = Ref<T> | T;
|
|
8883
8939
|
|
|
8884
8940
|
export function unwrap<T>(value: MaybeWrapped<T>): T {
|
|
8885
8941
|
return unref(value);
|
|
8886
8942
|
}
|
|
8887
|
-
`,
|
|
8943
|
+
`,ci=`import { useRoute, useRouter } from "vue-router";
|
|
8888
8944
|
|
|
8889
8945
|
import type { RouterWithLoaderData } from "./router";
|
|
8890
8946
|
|
|
@@ -8899,7 +8955,7 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
|
|
|
8899
8955
|
const route = useRoute();
|
|
8900
8956
|
return router.__loaderData?.[key || (route.name as string)] as T;
|
|
8901
8957
|
};
|
|
8902
|
-
`,
|
|
8958
|
+
`,li=`<script setup lang="ts">
|
|
8903
8959
|
import { AppProvider } from "_/app";
|
|
8904
8960
|
<\/script>
|
|
8905
8961
|
|
|
@@ -8908,39 +8964,40 @@ import { AppProvider } from "_/app";
|
|
|
8908
8964
|
<RouterView />
|
|
8909
8965
|
</AppProvider>
|
|
8910
8966
|
</template>
|
|
8911
|
-
`,
|
|
8967
|
+
`,ui=`<script setup lang="ts" generic="T extends LinkProps">
|
|
8912
8968
|
import { computed } from "vue";
|
|
8913
8969
|
import { RouterLink } from "vue-router";
|
|
8914
8970
|
|
|
8915
8971
|
import { pageRouteMap, type LinkProps } from "{{ createImport 'libCore' }}";
|
|
8916
8972
|
|
|
8917
|
-
|
|
8918
|
-
to: T
|
|
8919
|
-
query?: Record<string | number, unknown
|
|
8920
|
-
replace?: boolean
|
|
8921
|
-
activeClass?: string
|
|
8922
|
-
exactActiveClass?: string
|
|
8973
|
+
type Props = {
|
|
8974
|
+
to: T;
|
|
8975
|
+
query?: Record<string | number, unknown>;
|
|
8976
|
+
replace?: boolean;
|
|
8977
|
+
activeClass?: string;
|
|
8978
|
+
exactActiveClass?: string;
|
|
8923
8979
|
}
|
|
8924
8980
|
|
|
8925
8981
|
const props = defineProps<Props>();
|
|
8926
8982
|
|
|
8927
8983
|
const href = computed(() => {
|
|
8928
|
-
const [key, ...params] = props.to
|
|
8929
|
-
return pageRouteMap[key]?.
|
|
8984
|
+
const [key, ...params] = props.to;
|
|
8985
|
+
return pageRouteMap[key]?.path(params as never, props.query, { prefix: false });
|
|
8930
8986
|
})
|
|
8987
|
+
|
|
8988
|
+
const linkProps = computed(() => ({
|
|
8989
|
+
...(props.replace !== undefined ? { replace: props.replace } : {}),
|
|
8990
|
+
...(props.activeClass !== undefined ? { activeClass: props.activeClass } : {}),
|
|
8991
|
+
...(props.exactActiveClass !== undefined ? { exactActiveClass: props.exactActiveClass } : {}),
|
|
8992
|
+
}))
|
|
8931
8993
|
<\/script>
|
|
8932
8994
|
|
|
8933
8995
|
<template>
|
|
8934
|
-
<RouterLink
|
|
8935
|
-
:to="href"
|
|
8936
|
-
:replace="replace"
|
|
8937
|
-
:active-class="activeClass"
|
|
8938
|
-
:exact-active-class="exactActiveClass"
|
|
8939
|
-
>
|
|
8996
|
+
<RouterLink :to="href" v-bind="linkProps">
|
|
8940
8997
|
<slot />
|
|
8941
8998
|
</RouterLink>
|
|
8942
8999
|
</template>
|
|
8943
|
-
`,
|
|
9000
|
+
`,di=`import renderFactory, {
|
|
8944
9001
|
createRoutes,
|
|
8945
9002
|
hydrate,
|
|
8946
9003
|
mount,
|
|
@@ -8967,7 +9024,7 @@ if (root) {
|
|
|
8967
9024
|
} else {
|
|
8968
9025
|
console.error("❌ Root element not found!");
|
|
8969
9026
|
}
|
|
8970
|
-
`,
|
|
9027
|
+
`,fi=`import renderFactory, {
|
|
8971
9028
|
createRoutes,
|
|
8972
9029
|
renderToStream,
|
|
8973
9030
|
renderToString,
|
|
@@ -8994,7 +9051,7 @@ export default renderFactory(() => {
|
|
|
8994
9051
|
},
|
|
8995
9052
|
};
|
|
8996
9053
|
});
|
|
8997
|
-
`,
|
|
9054
|
+
`,pi=`<!doctype html>
|
|
8998
9055
|
<html lang="en">
|
|
8999
9056
|
<head>
|
|
9000
9057
|
<meta charset="UTF-8" />
|
|
@@ -9006,17 +9063,17 @@ export default renderFactory(() => {
|
|
|
9006
9063
|
<script type="module" src="/{{ entryDir }}/client.ts"><\/script>
|
|
9007
9064
|
</body>
|
|
9008
9065
|
</html>
|
|
9009
|
-
`,
|
|
9066
|
+
`,mi=`<script setup lang="ts">
|
|
9010
9067
|
import PageSample from "{{ createImport 'lib' 'pageSamples/404.vue' }}";
|
|
9011
9068
|
<\/script>
|
|
9012
9069
|
|
|
9013
9070
|
<template>
|
|
9014
9071
|
<PageSample />
|
|
9015
9072
|
</template>
|
|
9016
|
-
`,
|
|
9073
|
+
`,hi=`<template>
|
|
9017
9074
|
<router-view />
|
|
9018
9075
|
</template>
|
|
9019
|
-
`,
|
|
9076
|
+
`,gi=`<script setup lang="ts">
|
|
9020
9077
|
import PageSample from "{{ createImport 'lib' 'pageSamples/page.vue' }}";
|
|
9021
9078
|
<\/script>
|
|
9022
9079
|
|
|
@@ -9031,14 +9088,14 @@ import PageSample from "{{ createImport 'lib' 'pageSamples/page.vue' }}";
|
|
|
9031
9088
|
}"
|
|
9032
9089
|
/>
|
|
9033
9090
|
</template>
|
|
9034
|
-
`,
|
|
9091
|
+
`,_i=`<script setup lang="ts">
|
|
9035
9092
|
import WelcomePage from "{{ createImport 'lib' 'pageSamples/welcome.vue' }}";
|
|
9036
9093
|
<\/script>
|
|
9037
9094
|
|
|
9038
9095
|
<template>
|
|
9039
9096
|
<WelcomePage />
|
|
9040
9097
|
</template>
|
|
9041
|
-
`,
|
|
9098
|
+
`,vi=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
9042
9099
|
import { appProvider } from "{{ createImport 'lib' 'app' }}";
|
|
9043
9100
|
|
|
9044
9101
|
import app from "./app.vue";
|
|
@@ -9057,5 +9114,5 @@ export default routerFactory((routes) => {
|
|
|
9057
9114
|
},
|
|
9058
9115
|
};
|
|
9059
9116
|
});
|
|
9060
|
-
`,
|
|
9117
|
+
`,yi=g((e,t)=>{let{createPath:n,createImportHelpers:r}=y(e),{renderToFile:i}=x({helpers:{...r({origin:`lib`}),...w()},partials:{routePartial:Qr}}),{renderToFile:a}=x({helpers:r({origin:`src`})}),o=Kr(),s=e=>!e?.trim().length,u=c(t?.templates,gi),d=async e=>{for(let{kind:t,entry:r}of e)t===`pageRoute`?await a(n.pages(r.file),r.name===`index`?_i:u(r.name,r),{route:r,message:qr()},{overwrite:s}):t===`pageLayout`&&await a(n.pages(r.file),hi,{route:r},{overwrite:s})},f=async e=>{let t=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`?[t]:[]).sort(S),r=e.flatMap(({kind:e,entry:t})=>e===`pageRoute`||e===`pageLayout`?[t]:[]),a=o(v(r));for(let[e,t]of[[`client.ts`,Zr],[`server.ts`,$r]])await i(n.libEntry(e),t,{pageEntries:r,nestedRoutes:a,lazyLoad:e===`client.ts`});await i(n.lib(`router.ts`),oi,{entries:e,indexRoutes:t})};return{config(){let{templates:e,...n}={...t};return{plugins:[pe(n)]}},async start(){for(let[e,r]of[[`env.d.ts`,$],[`unwrap.ts`,si],[`use.ts`,ci],[`pageSamples/styles.module.css`,ni],[`pageSamples/welcome.vue`,ri],[`pageSamples/page.vue`,ti],[`pageSamples/404.vue`,ei],[`app/provider.vue`,Xr],...t?.tanstack?.query?[[`app/index.ts`,Yr],[`query.ts`,ii]]:[[`app/index.ts`,Jr],[`query.ts`,`/** tanstack query disabled */`]]])await i(n.lib(e),r,{});for(let[e,t]of[[`pages/404.vue`,mi],[`components/Link.vue`,ui],[`app.vue`,li],[`router.ts`,vi]])await a(n.src(e),t,{entryDir:l.entryDir},{overwrite:s});await a(n.src(`index.html`),pi,{entryDir:l.entryDir},{overwrite:e=>!e?.trim().length||!e.replace(/<!--[\s\S]*?-->/g,``).trim().length});for(let[e,t]of[[`client.ts`,di],[`server.ts`,fi]])await a(n.entry(e),t,{},{overwrite:s})},async watch(e,t){await d(e.filter(m(t,[`create`]))),await f(e)},async build(e){await d(e),await f(e)},async ssrBuild(){await i(n.lib(`query.ts`),t?.tanstack?.query?ai:`/** tanstack query disabled */`,{ssrBundle:!0})}}}),bi=h({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:yi}),xi=e=>{let n=process.env.NODE_ENV||`development`,a=typeof e.base==`string`?e.base:e.base[n];if(!a?.trim())throw Error(r([`red`],`ERROR: Invalid Config - no base provided`));return{...e,base:t(`/`,a),apiBase:t(`/`,e.apiBase||i)}};export{e as coreGenerator,xi as defineConfig,I as fetchGenerator,ke as h3Generator,Je as honoGenerator,pt as koaGenerator,Ht as mdxGenerator,qt as openapiGenerator,Sn as reactGenerator,Xn as solidGenerator,$n as ssgGenerator,cr as ssrGenerator,Ir as svelteGenerator,Gr as typeboxGenerator,bi as vueGenerator};
|
|
9061
9118
|
//# sourceMappingURL=index.js.map
|