@kosmojs/dev 0.4.0 → 0.4.2
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 +7 -7
- package/pkg/assets/{pkg-DU-tTiIp.js → pkg-Bkag325q.js} +99 -53
- package/pkg/assets/pkg-Bkag325q.js.map +1 -0
- package/pkg/chassis.js +1 -1
- package/pkg/chassis.js.map +1 -1
- package/pkg/index.js +303 -225
- 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-Bkag325q.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,11 +628,18 @@ 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
|
|
|
602
|
-
import {
|
|
635
|
+
import {
|
|
636
|
+
base,
|
|
637
|
+
apiBase,
|
|
638
|
+
apiRouteMap,
|
|
639
|
+
apiRouteMapper,
|
|
640
|
+
// needed for cascadingMiddleware
|
|
641
|
+
type Override,
|
|
642
|
+
} from "{{ createImport 'libCore' }}";
|
|
603
643
|
|
|
604
644
|
{{#each routes}}
|
|
605
645
|
import {{id}} from "{{ createImport 'api' file }}";
|
|
@@ -640,7 +680,7 @@ export const routeSources: Array<RouteSource<never>> = [
|
|
|
640
680
|
},
|
|
641
681
|
{{/each}}
|
|
642
682
|
];
|
|
643
|
-
`,
|
|
683
|
+
`,_e=`import { parseArgs, styleText } from "node:util";
|
|
644
684
|
|
|
645
685
|
import { serve as h3serve } from "h3";
|
|
646
686
|
|
|
@@ -688,7 +728,7 @@ export const serve = async <T extends App>(app: T, opt?: Handles) => {
|
|
|
688
728
|
|
|
689
729
|
return server as never;
|
|
690
730
|
};
|
|
691
|
-
`,
|
|
731
|
+
`,ve=`import type { H3Event, H3EventContext } from "h3";
|
|
692
732
|
|
|
693
733
|
import type { ValidationDefmap, ValidationOptmap } from "@kosmojs/core";
|
|
694
734
|
import {
|
|
@@ -835,14 +875,14 @@ export const defineRoute: <
|
|
|
835
875
|
use: use as never,
|
|
836
876
|
});
|
|
837
877
|
};
|
|
838
|
-
`,
|
|
878
|
+
`,ye=`export * from "./@api/app";
|
|
839
879
|
export { appFactory as default } from "./@api/app";
|
|
840
880
|
export * from "./@api/dev";
|
|
841
881
|
export * from "./@api/errors";
|
|
842
882
|
export * from "./@api/router";
|
|
843
883
|
export * from "./@api/routes";
|
|
844
884
|
export * from "./@api/server";
|
|
845
|
-
`,
|
|
885
|
+
`,be=`import { onError } from "h3";
|
|
846
886
|
|
|
847
887
|
import appFactory, { routes, type App } from "{{ createImport 'lib' 'api:factory' }}";
|
|
848
888
|
import defaultErrorHandler from "./errors";
|
|
@@ -850,7 +890,7 @@ import defaultErrorHandler from "./errors";
|
|
|
850
890
|
export default appFactory(routes, ({ app }) => {
|
|
851
891
|
app.use(onError(defaultErrorHandler));
|
|
852
892
|
}) as App;
|
|
853
|
-
`,
|
|
893
|
+
`,xe=`import { toNodeHandler } from "h3/node";
|
|
854
894
|
|
|
855
895
|
import app from "./app";
|
|
856
896
|
|
|
@@ -870,10 +910,10 @@ process.on("unhandledRejection", (reason) => {
|
|
|
870
910
|
console.error("Reason:", reason);
|
|
871
911
|
process.exit(1);
|
|
872
912
|
});
|
|
873
|
-
`,
|
|
913
|
+
`,Se=`export declare module "{{ createImport 'libApi' }}" {
|
|
874
914
|
interface DefaultContext {}
|
|
875
915
|
}
|
|
876
|
-
`,
|
|
916
|
+
`,Ce=`import { ValidationError } from "@kosmojs/core/errors";
|
|
877
917
|
import { HTTPError } from "h3";
|
|
878
918
|
|
|
879
919
|
import { errorHandlerFactory } from "{{ createImport 'lib' 'api:factory' }}";
|
|
@@ -899,14 +939,14 @@ export default errorHandlerFactory(async (error, event) => {
|
|
|
899
939
|
headers: { "Content-Type": "text/plain" },
|
|
900
940
|
});
|
|
901
941
|
});
|
|
902
|
-
`,
|
|
942
|
+
`,we=`import { defineRoute } from "{{ createImport 'libApi' }}";
|
|
903
943
|
|
|
904
944
|
export default defineRoute<"{{route.name}}">(({ GET }) => [
|
|
905
945
|
GET(async (event) => {
|
|
906
946
|
return "Automatically generated route";
|
|
907
947
|
}),
|
|
908
948
|
]);
|
|
909
|
-
`,
|
|
949
|
+
`,Te=`import { use } from "{{ createImport 'libApi' }}";
|
|
910
950
|
|
|
911
951
|
export type UseT = {};
|
|
912
952
|
|
|
@@ -915,11 +955,11 @@ export default [
|
|
|
915
955
|
return next();
|
|
916
956
|
}),
|
|
917
957
|
];
|
|
918
|
-
`,
|
|
958
|
+
`,Ee=`import { serve } from "{{ createImport 'lib' 'api:factory' }}";
|
|
919
959
|
import app from "./app";
|
|
920
960
|
|
|
921
961
|
await serve(app);
|
|
922
|
-
`,
|
|
962
|
+
`,De=`import { use } from "{{ createImport 'libApi' }}";
|
|
923
963
|
|
|
924
964
|
/**
|
|
925
965
|
* Define global middleware applied to all routes.
|
|
@@ -930,7 +970,7 @@ export default [
|
|
|
930
970
|
return next();
|
|
931
971
|
}),
|
|
932
972
|
];
|
|
933
|
-
`,
|
|
973
|
+
`,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
974
|
import type { Router } from "hono/router";
|
|
935
975
|
import { RegExpRouter } from "hono/router/reg-exp-router";
|
|
936
976
|
import { SmartRouter } from "hono/router/smart-router";
|
|
@@ -1002,10 +1042,10 @@ export function appFactory(
|
|
|
1002
1042
|
|
|
1003
1043
|
return app as never;
|
|
1004
1044
|
}
|
|
1005
|
-
`,
|
|
1045
|
+
`,je=`import type { DevSetup } from "@kosmojs/core/api";
|
|
1006
1046
|
|
|
1007
1047
|
export const devSetup = (setup: DevSetup) => setup;
|
|
1008
|
-
`,
|
|
1048
|
+
`,Me=`import type { Context } from "hono";
|
|
1009
1049
|
|
|
1010
1050
|
import type { AppEnv } from "./app";
|
|
1011
1051
|
|
|
@@ -1019,7 +1059,7 @@ export type ErrorHandlerFactory = (handler: ErrorHandler) => ErrorHandler;
|
|
|
1019
1059
|
export const errorHandlerFactory: ErrorHandlerFactory = (handler) => {
|
|
1020
1060
|
return handler;
|
|
1021
1061
|
};
|
|
1022
|
-
`,
|
|
1062
|
+
`,Ne=`import type { Context } from "hono";
|
|
1023
1063
|
|
|
1024
1064
|
import {
|
|
1025
1065
|
parseCookies,
|
|
@@ -1068,7 +1108,7 @@ export const bodyparsers: {
|
|
|
1068
1108
|
return ctx.req[as]();
|
|
1069
1109
|
},
|
|
1070
1110
|
};
|
|
1071
|
-
`,
|
|
1111
|
+
`,Pe=`import type { MiddlewareHandler } from "hono";
|
|
1072
1112
|
|
|
1073
1113
|
import type {
|
|
1074
1114
|
RequestBodyTarget,
|
|
@@ -1435,11 +1475,18 @@ export const routes = createRoutes<ParameterizedMiddleware, MiddlewareHandler>(
|
|
|
1435
1475
|
createRouteMiddleware,
|
|
1436
1476
|
},
|
|
1437
1477
|
);
|
|
1438
|
-
`,
|
|
1478
|
+
`,Fe=`import { join } from "node:path";
|
|
1439
1479
|
|
|
1440
1480
|
import type { RouteSource } from "@kosmojs/core/api";
|
|
1441
1481
|
|
|
1442
|
-
import {
|
|
1482
|
+
import {
|
|
1483
|
+
base,
|
|
1484
|
+
apiBase,
|
|
1485
|
+
apiRouteMap,
|
|
1486
|
+
apiRouteMapper,
|
|
1487
|
+
// needed for cascadingMiddleware
|
|
1488
|
+
type Override,
|
|
1489
|
+
} from "{{ createImport 'libCore' }}";
|
|
1443
1490
|
|
|
1444
1491
|
{{#each routes}}
|
|
1445
1492
|
import {{id}} from "{{ createImport 'api' file }}";
|
|
@@ -1480,7 +1527,7 @@ export const routeSources: Array<RouteSource<never>> = [
|
|
|
1480
1527
|
},
|
|
1481
1528
|
{{/each}}
|
|
1482
1529
|
];
|
|
1483
|
-
`,
|
|
1530
|
+
`,Ie=`import { chmod, unlink } from "node:fs/promises";
|
|
1484
1531
|
import { parseArgs, styleText } from "node:util";
|
|
1485
1532
|
|
|
1486
1533
|
import { createAdaptorServer } from "@hono/node-server";
|
|
@@ -1565,7 +1612,7 @@ export const serve = async <T extends App>(app: T, opt?: Handles) => {
|
|
|
1565
1612
|
|
|
1566
1613
|
return server as never;
|
|
1567
1614
|
};
|
|
1568
|
-
`,
|
|
1615
|
+
`,Le=`import type { Context, Next } from "hono";
|
|
1569
1616
|
|
|
1570
1617
|
import type { ValidationDefmap, ValidationOptmap } from "@kosmojs/core";
|
|
1571
1618
|
import {
|
|
@@ -1748,20 +1795,20 @@ export const defineRoute: <
|
|
|
1748
1795
|
use: use as never,
|
|
1749
1796
|
});
|
|
1750
1797
|
};
|
|
1751
|
-
`,
|
|
1798
|
+
`,Re=`export * from "./@api/app";
|
|
1752
1799
|
export { appFactory as default } from "./@api/app";
|
|
1753
1800
|
export * from "./@api/dev";
|
|
1754
1801
|
export * from "./@api/errors";
|
|
1755
1802
|
export * from "./@api/router";
|
|
1756
1803
|
export * from "./@api/routes";
|
|
1757
1804
|
export * from "./@api/server";
|
|
1758
|
-
`,
|
|
1805
|
+
`,ze=`import appFactory, { routes } from "{{ createImport 'lib' 'api:factory' }}";
|
|
1759
1806
|
import defaultErrorHandler from "./errors";
|
|
1760
1807
|
|
|
1761
1808
|
export default appFactory(routes, ({ app }) => {
|
|
1762
1809
|
app.onError(defaultErrorHandler);
|
|
1763
1810
|
})
|
|
1764
|
-
`,
|
|
1811
|
+
`,Be=`import { getRequestListener } from "@hono/node-server";
|
|
1765
1812
|
|
|
1766
1813
|
import app from "./app";
|
|
1767
1814
|
|
|
@@ -1782,11 +1829,11 @@ process.on("unhandledRejection", (reason) => {
|
|
|
1782
1829
|
process.exit(1);
|
|
1783
1830
|
});
|
|
1784
1831
|
|
|
1785
|
-
`,
|
|
1832
|
+
`,Ve=`export declare module "{{ createImport 'libApi' }}" {
|
|
1786
1833
|
interface DefaultVariables {}
|
|
1787
1834
|
interface DefaultBindings {}
|
|
1788
1835
|
}
|
|
1789
|
-
`,
|
|
1836
|
+
`,He=`import { accepts } from "hono/accepts";
|
|
1790
1837
|
import { HTTPException } from "hono/http-exception";
|
|
1791
1838
|
|
|
1792
1839
|
import { ValidationError, HTTPError } from "@kosmojs/core/errors";
|
|
@@ -1818,7 +1865,7 @@ export default errorHandlerFactory(async (error, ctx) => {
|
|
|
1818
1865
|
? ctx.json({ error: message }, status)
|
|
1819
1866
|
: ctx.text(message, status);
|
|
1820
1867
|
});
|
|
1821
|
-
`,
|
|
1868
|
+
`,Ue=`import { defineRoute } from "{{ createImport 'libApi' }}";
|
|
1822
1869
|
|
|
1823
1870
|
export default defineRoute<"{{route.name}}">(({ GET }) => [
|
|
1824
1871
|
GET(async (ctx) => {
|
|
@@ -1827,7 +1874,7 @@ export default defineRoute<"{{route.name}}">(({ GET }) => [
|
|
|
1827
1874
|
return ctx.text("Automatically generated route");
|
|
1828
1875
|
}),
|
|
1829
1876
|
]);
|
|
1830
|
-
`,
|
|
1877
|
+
`,We=`import { use } from "{{ createImport 'libApi' }}";
|
|
1831
1878
|
|
|
1832
1879
|
export type UseT = {};
|
|
1833
1880
|
|
|
@@ -1838,11 +1885,11 @@ export default [
|
|
|
1838
1885
|
return next();
|
|
1839
1886
|
}),
|
|
1840
1887
|
];
|
|
1841
|
-
`,
|
|
1888
|
+
`,Ge=`import { serve } from "{{ createImport 'lib' 'api:factory' }}";
|
|
1842
1889
|
import app from "./app";
|
|
1843
1890
|
|
|
1844
1891
|
await serve(app);
|
|
1845
|
-
`,
|
|
1892
|
+
`,Ke=`import { use } from "{{ createImport 'libApi' }}";
|
|
1846
1893
|
|
|
1847
1894
|
/**
|
|
1848
1895
|
* Define global middleware applied to all routes.
|
|
@@ -1853,7 +1900,7 @@ export default [
|
|
|
1853
1900
|
return next();
|
|
1854
1901
|
}),
|
|
1855
1902
|
];
|
|
1856
|
-
`,
|
|
1903
|
+
`,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
1904
|
import Koa from "koa";
|
|
1858
1905
|
|
|
1859
1906
|
import type { Route, RouteDebugOption } from "@kosmojs/core/api";
|
|
@@ -1913,10 +1960,10 @@ export function appFactory(
|
|
|
1913
1960
|
|
|
1914
1961
|
return app;
|
|
1915
1962
|
}
|
|
1916
|
-
`,
|
|
1963
|
+
`,Xe=`import type { DevSetup } from "@kosmojs/core/api";
|
|
1917
1964
|
|
|
1918
1965
|
export const devSetup = (setup: DevSetup) => setup;
|
|
1919
|
-
`,
|
|
1966
|
+
`,Ze=`import type {
|
|
1920
1967
|
DefaultContext,
|
|
1921
1968
|
DefaultState,
|
|
1922
1969
|
ParameterizedContext,
|
|
@@ -1932,7 +1979,7 @@ export type ErrorHandlerFactory = (handler: ErrorHandler) => ErrorHandler;
|
|
|
1932
1979
|
export const errorHandlerFactory: ErrorHandlerFactory = (handler) => {
|
|
1933
1980
|
return handler;
|
|
1934
1981
|
};
|
|
1935
|
-
`,
|
|
1982
|
+
`,Qe=`import zlib from "node:zlib";
|
|
1936
1983
|
|
|
1937
1984
|
import type { RouterContext } from "@koa/router";
|
|
1938
1985
|
import Formidable, { type Options as FormidableOptions } from "formidable";
|
|
@@ -2145,7 +2192,7 @@ export const bodyparsers: {
|
|
|
2145
2192
|
return rawParser(stream, rawParserOptions);
|
|
2146
2193
|
},
|
|
2147
2194
|
};
|
|
2148
|
-
|
|
2195
|
+
`,$e=`import type { RouterMiddleware } from "@koa/router";
|
|
2149
2196
|
|
|
2150
2197
|
import type {
|
|
2151
2198
|
RequestBodyTarget,
|
|
@@ -2510,11 +2557,18 @@ export const routes = createRoutes<ParameterizedMiddleware, RouterMiddleware>(
|
|
|
2510
2557
|
createRouteMiddleware,
|
|
2511
2558
|
},
|
|
2512
2559
|
);
|
|
2513
|
-
`,
|
|
2560
|
+
`,et=`import { join } from "node:path";
|
|
2514
2561
|
|
|
2515
2562
|
import type { RouteSource } from "@kosmojs/core/api";
|
|
2516
2563
|
|
|
2517
|
-
import {
|
|
2564
|
+
import {
|
|
2565
|
+
base,
|
|
2566
|
+
apiBase,
|
|
2567
|
+
apiRouteMap,
|
|
2568
|
+
apiRouteMapper,
|
|
2569
|
+
// needed for cascadingMiddleware
|
|
2570
|
+
type Override,
|
|
2571
|
+
} from "{{ createImport 'libCore' }}";
|
|
2518
2572
|
|
|
2519
2573
|
{{#each routes}}
|
|
2520
2574
|
import {{id}} from "{{ createImport 'api' file }}";
|
|
@@ -2555,7 +2609,7 @@ export const routeSources: Array<RouteSource<never>> = [
|
|
|
2555
2609
|
},
|
|
2556
2610
|
{{/each}}
|
|
2557
2611
|
];
|
|
2558
|
-
|
|
2612
|
+
`,tt=`import { chmod, unlink } from "node:fs/promises";
|
|
2559
2613
|
import { parseArgs, styleText } from "node:util";
|
|
2560
2614
|
|
|
2561
2615
|
import type { App } from "./app";
|
|
@@ -2618,7 +2672,7 @@ export const serve = async <T extends App>(app: T, opt?: Handles) => {
|
|
|
2618
2672
|
const server = app.listen(port || sock, onListen);
|
|
2619
2673
|
return server as never;
|
|
2620
2674
|
};
|
|
2621
|
-
`,
|
|
2675
|
+
`,nt=`import type { RouterContext } from "@koa/router";
|
|
2622
2676
|
import type { Next } from "koa";
|
|
2623
2677
|
|
|
2624
2678
|
import type { ValidationDefmap, ValidationOptmap } from "@kosmojs/core";
|
|
@@ -2780,14 +2834,14 @@ export const defineRoute: <
|
|
|
2780
2834
|
use: use as never,
|
|
2781
2835
|
});
|
|
2782
2836
|
};
|
|
2783
|
-
`,
|
|
2837
|
+
`,rt=`export * from "./@api/app";
|
|
2784
2838
|
export { appFactory as default } from "./@api/app";
|
|
2785
2839
|
export * from "./@api/dev";
|
|
2786
2840
|
export * from "./@api/errors";
|
|
2787
2841
|
export * from "./@api/router";
|
|
2788
2842
|
export * from "./@api/routes";
|
|
2789
2843
|
export * from "./@api/server";
|
|
2790
|
-
`,
|
|
2844
|
+
`,it=`import appFactory, { routes } from "{{ createImport 'lib' 'api:factory' }}";
|
|
2791
2845
|
import defaultErrorHandler from "./errors";
|
|
2792
2846
|
|
|
2793
2847
|
export default appFactory(routes, ({ app, router }) => {
|
|
@@ -2798,7 +2852,7 @@ export default appFactory(routes, ({ app, router }) => {
|
|
|
2798
2852
|
app.use(router.routes());
|
|
2799
2853
|
|
|
2800
2854
|
});
|
|
2801
|
-
`,
|
|
2855
|
+
`,at=`import app from "./app";
|
|
2802
2856
|
|
|
2803
2857
|
import { devSetup } from "{{ createImport 'lib' 'api:factory' }}";
|
|
2804
2858
|
|
|
@@ -2816,11 +2870,11 @@ process.on("unhandledRejection", (reason) => {
|
|
|
2816
2870
|
console.error("Reason:", reason);
|
|
2817
2871
|
process.exit(1);
|
|
2818
2872
|
});
|
|
2819
|
-
`,
|
|
2873
|
+
`,ot=`export declare module "{{ createImport 'libApi' }}" {
|
|
2820
2874
|
interface DefaultState {}
|
|
2821
2875
|
interface DefaultContext {}
|
|
2822
2876
|
}
|
|
2823
|
-
`,
|
|
2877
|
+
`,st=`import { HTTPError, ValidationError } from "@kosmojs/core/errors";
|
|
2824
2878
|
|
|
2825
2879
|
import { errorHandlerFactory } from "{{ createImport 'lib' 'api:factory' }}";
|
|
2826
2880
|
|
|
@@ -2841,14 +2895,14 @@ export default errorHandlerFactory(async (error, ctx) => {
|
|
|
2841
2895
|
ctx.body = message;
|
|
2842
2896
|
}
|
|
2843
2897
|
});
|
|
2844
|
-
`,
|
|
2898
|
+
`,ct=`import { defineRoute } from "{{ createImport 'libApi' }}";
|
|
2845
2899
|
|
|
2846
2900
|
export default defineRoute<"{{route.name}}">(({ GET }) => [
|
|
2847
2901
|
GET(async (ctx) => {
|
|
2848
2902
|
ctx.body = "Automatically generated route";
|
|
2849
2903
|
}),
|
|
2850
2904
|
]);
|
|
2851
|
-
`,
|
|
2905
|
+
`,lt=`import { use } from "{{ createImport 'libApi' }}";
|
|
2852
2906
|
|
|
2853
2907
|
export type UseT = {};
|
|
2854
2908
|
|
|
@@ -2859,11 +2913,11 @@ export default [
|
|
|
2859
2913
|
return next();
|
|
2860
2914
|
}),
|
|
2861
2915
|
];
|
|
2862
|
-
`,
|
|
2916
|
+
`,ut=`import { serve } from "{{ createImport 'lib' 'api:factory' }}";
|
|
2863
2917
|
import app from "./app";
|
|
2864
2918
|
|
|
2865
2919
|
await serve(app);
|
|
2866
|
-
`,
|
|
2920
|
+
`,dt=`import { use } from "{{ createImport 'libApi' }}";
|
|
2867
2921
|
|
|
2868
2922
|
/**
|
|
2869
2923
|
* Define global middleware applied to all routes.
|
|
@@ -2874,17 +2928,17 @@ export default [
|
|
|
2874
2928
|
return next();
|
|
2875
2929
|
}),
|
|
2876
2930
|
];
|
|
2877
|
-
`,
|
|
2931
|
+
`,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
2932
|
if (import.meta.hot) {
|
|
2879
2933
|
import.meta.hot.accept(() => {});
|
|
2880
2934
|
}
|
|
2881
2935
|
`].join(`
|
|
2882
|
-
`)}}}},o=[ne({jsxImportSource:`preact`,providerImportSource:`@mdx-js/preact`,remarkPlugins:r,rehypePlugins:i})];return t===`serve`&&o.push(a()),o},
|
|
2936
|
+
`)}}}},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
2937
|
|
|
2884
2938
|
export const AppProvider: FunctionComponent = (props) => {
|
|
2885
2939
|
return props.children;
|
|
2886
2940
|
};
|
|
2887
|
-
`,
|
|
2941
|
+
`,_t=`import { render, hydrate as hydrateOrig } from "preact";
|
|
2888
2942
|
import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
2889
2943
|
import { clientRenderFactory } from "@kosmojs/core/generators";
|
|
2890
2944
|
|
|
@@ -2925,7 +2979,7 @@ export const mount = async (
|
|
|
2925
2979
|
}
|
|
2926
2980
|
|
|
2927
2981
|
export default clientRenderFactory();
|
|
2928
|
-
`,
|
|
2982
|
+
`,vt=`import { renderToString as renderToStringOrig } from "preact-render-to-string";
|
|
2929
2983
|
|
|
2930
2984
|
import type {
|
|
2931
2985
|
RenderToStringWrapper,
|
|
@@ -2999,7 +3053,7 @@ export const renderToString: RenderToStringWrapper<
|
|
|
2999
3053
|
}
|
|
3000
3054
|
|
|
3001
3055
|
export default serverRenderFactory<false>();
|
|
3002
|
-
`,
|
|
3056
|
+
`,yt=`declare module "*.mdx" {
|
|
3003
3057
|
import type { ComponentType } from "preact";
|
|
3004
3058
|
export const frontmatter: Record<string, unknown>;
|
|
3005
3059
|
const component: ComponentType;
|
|
@@ -3012,7 +3066,7 @@ declare module "*.md" {
|
|
|
3012
3066
|
const component: ComponentType;
|
|
3013
3067
|
export default component;
|
|
3014
3068
|
}
|
|
3015
|
-
`,
|
|
3069
|
+
`,bt=`import { MDXProvider } from "@mdx-js/preact";
|
|
3016
3070
|
import { match, pathToRegexp } from "path-to-regexp";
|
|
3017
3071
|
import { type ComponentType, createContext, h, type VNode } from "preact";
|
|
3018
3072
|
|
|
@@ -3189,7 +3243,11 @@ export const createRoute = (
|
|
|
3189
3243
|
loader: RawRoute["loader"],
|
|
3190
3244
|
layouts: RawRoute["layouts"],
|
|
3191
3245
|
): RawRoute => {
|
|
3192
|
-
|
|
3246
|
+
// strip trailing slash (keeping a sole "/") so the base-joined index route
|
|
3247
|
+
// matches both with and without it - "/docs/" as a pattern rejects "/docs"
|
|
3248
|
+
const path = \`\${base}/\${pathPattern}\`
|
|
3249
|
+
.replace(/\\/+/g, "/")
|
|
3250
|
+
.replace(/(.+)\\/$/, "$1");
|
|
3193
3251
|
|
|
3194
3252
|
const { regexp } = pathToRegexp(path, { sensitive: true });
|
|
3195
3253
|
const matcher = match<Route["params"]>(path);
|
|
@@ -3197,9 +3255,11 @@ export const createRoute = (
|
|
|
3197
3255
|
return {
|
|
3198
3256
|
name,
|
|
3199
3257
|
regexp,
|
|
3258
|
+
// count segments of the same base-joined path the regexp matches against;
|
|
3259
|
+
// resolve() compares this against the full url pathname's segment count
|
|
3200
3260
|
pathSegments: name.includes("...")
|
|
3201
3261
|
? undefined
|
|
3202
|
-
:
|
|
3262
|
+
: path.split("/").filter(Boolean).length,
|
|
3203
3263
|
extractParams: (path) => {
|
|
3204
3264
|
const match = matcher(path);
|
|
3205
3265
|
return match ? match.params : {};
|
|
@@ -3208,7 +3268,7 @@ export const createRoute = (
|
|
|
3208
3268
|
layouts,
|
|
3209
3269
|
};
|
|
3210
3270
|
};
|
|
3211
|
-
`,
|
|
3271
|
+
`,xt=`/* @jsxImportSource preact */
|
|
3212
3272
|
|
|
3213
3273
|
import styles from "./styles.module.css";
|
|
3214
3274
|
|
|
@@ -3249,7 +3309,7 @@ export default function PageSample(props: {
|
|
|
3249
3309
|
</div>
|
|
3250
3310
|
);
|
|
3251
3311
|
}
|
|
3252
|
-
`,
|
|
3312
|
+
`,St=`/* @jsxImportSource preact */
|
|
3253
3313
|
|
|
3254
3314
|
import styles from "./styles.module.css";
|
|
3255
3315
|
|
|
@@ -3301,7 +3361,7 @@ export default function PageSample(props: {
|
|
|
3301
3361
|
</div>
|
|
3302
3362
|
);
|
|
3303
3363
|
}
|
|
3304
|
-
`,
|
|
3364
|
+
`,Ct=`* {
|
|
3305
3365
|
margin: 0;
|
|
3306
3366
|
padding: 0;
|
|
3307
3367
|
box-sizing: border-box;
|
|
@@ -3436,7 +3496,7 @@ export default function PageSample(props: {
|
|
|
3436
3496
|
align-items: center;
|
|
3437
3497
|
gap: 0.25rem;
|
|
3438
3498
|
}
|
|
3439
|
-
`,
|
|
3499
|
+
`,wt=`/* @jsxImportSource preact */
|
|
3440
3500
|
|
|
3441
3501
|
import styles from "./styles.module.css";
|
|
3442
3502
|
|
|
@@ -3502,7 +3562,7 @@ export default function WelcomePage() {
|
|
|
3502
3562
|
</div>
|
|
3503
3563
|
);
|
|
3504
3564
|
}
|
|
3505
|
-
`,
|
|
3565
|
+
`,Tt=`export type ParamsMap = {
|
|
3506
3566
|
{{#each pageRoutes}}"{{name}}": {{serializeParamsLiteral .}};
|
|
3507
3567
|
{{/each}}
|
|
3508
3568
|
};
|
|
@@ -3511,7 +3571,7 @@ export const paramNames = {
|
|
|
3511
3571
|
{{#each pageRoutes}}"{{name}}": [ {{#each params.schema}}"{{name}}", {{/each}}],
|
|
3512
3572
|
{{/each}}
|
|
3513
3573
|
} as const;
|
|
3514
|
-
`,
|
|
3574
|
+
`,Et=`import type { ComponentType } from "preact";
|
|
3515
3575
|
|
|
3516
3576
|
import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
3517
3577
|
import { createRouterFactory } from "@kosmojs/core/generators";
|
|
@@ -3555,7 +3615,7 @@ export default createRouterFactory<
|
|
|
3555
3615
|
Promise<RouteComponent>,
|
|
3556
3616
|
{ server: { route: Route } }
|
|
3557
3617
|
>();
|
|
3558
|
-
`,
|
|
3618
|
+
`,Dt=`import { join } from "node:path";
|
|
3559
3619
|
|
|
3560
3620
|
import { compile } from "path-to-regexp";
|
|
3561
3621
|
|
|
@@ -3601,7 +3661,7 @@ export default Object.entries(routes)
|
|
|
3601
3661
|
return [];
|
|
3602
3662
|
})
|
|
3603
3663
|
.map((path) => join(base, path));
|
|
3604
|
-
`,
|
|
3664
|
+
`,Ot=`import type { PageRoute } from "@kosmojs/core";
|
|
3605
3665
|
|
|
3606
3666
|
{{#each pageRoutes}}
|
|
3607
3667
|
import * as {{id}} from "{{ createImport 'pages' file }}";
|
|
@@ -3625,7 +3685,7 @@ const routeMap: Record<
|
|
|
3625
3685
|
}
|
|
3626
3686
|
|
|
3627
3687
|
export default routeMap;
|
|
3628
|
-
`,
|
|
3688
|
+
`,kt=`import { useContext } from "preact/hooks";
|
|
3629
3689
|
|
|
3630
3690
|
import { RouterContext } from "./mdx";
|
|
3631
3691
|
|
|
@@ -3671,10 +3731,10 @@ export const useFrontmatter = <
|
|
|
3671
3731
|
>(): T => {
|
|
3672
3732
|
return useRoute().frontmatter as T;
|
|
3673
3733
|
};
|
|
3674
|
-
`,
|
|
3734
|
+
`,At=`import { AppProvider } from "{{ createImport 'lib' 'app' }}";
|
|
3675
3735
|
|
|
3676
3736
|
<AppProvider>{props.children}</AppProvider>
|
|
3677
|
-
`,
|
|
3737
|
+
`,jt=`import { h, type JSX } from "preact";
|
|
3678
3738
|
|
|
3679
3739
|
import { pageRouteMap, type LinkProps } from "{{ createImport 'libCore' }}";
|
|
3680
3740
|
|
|
@@ -3687,11 +3747,11 @@ export default function Link(
|
|
|
3687
3747
|
const { to, query, children, ...restProps } = props;
|
|
3688
3748
|
|
|
3689
3749
|
const [key, ...params] = to;
|
|
3690
|
-
const href = pageRouteMap[key]?.
|
|
3750
|
+
const href = pageRouteMap[key]?.path(params as never, query);
|
|
3691
3751
|
|
|
3692
3752
|
return h("a", { ...restProps, href }, children);
|
|
3693
3753
|
}
|
|
3694
|
-
`,
|
|
3754
|
+
`,Mt=`/**
|
|
3695
3755
|
* MDX component overrides.
|
|
3696
3756
|
*
|
|
3697
3757
|
* Every standard markdown element (headings, links, code blocks, etc.)
|
|
@@ -3714,7 +3774,7 @@ export const components = {
|
|
|
3714
3774
|
declare global {
|
|
3715
3775
|
type MDXProvidedComponents = typeof components;
|
|
3716
3776
|
}
|
|
3717
|
-
`,
|
|
3777
|
+
`,Nt=`import renderFactory, {
|
|
3718
3778
|
createRoutes,
|
|
3719
3779
|
hydrate,
|
|
3720
3780
|
mount,
|
|
@@ -3741,7 +3801,7 @@ if (root) {
|
|
|
3741
3801
|
} else {
|
|
3742
3802
|
console.error("❌ Root element not found!");
|
|
3743
3803
|
}
|
|
3744
|
-
`,
|
|
3804
|
+
`,Pt=`import renderFactory, {
|
|
3745
3805
|
createRoutes,
|
|
3746
3806
|
renderToString,
|
|
3747
3807
|
// no renderToStream on MDX folders
|
|
@@ -3762,7 +3822,7 @@ export default renderFactory(() => {
|
|
|
3762
3822
|
},
|
|
3763
3823
|
};
|
|
3764
3824
|
});
|
|
3765
|
-
`,
|
|
3825
|
+
`,Ft=`<!doctype html>
|
|
3766
3826
|
<html lang="en">
|
|
3767
3827
|
<head>
|
|
3768
3828
|
<meta charset="UTF-8" />
|
|
@@ -3774,13 +3834,13 @@ export default renderFactory(() => {
|
|
|
3774
3834
|
<script type="module" src="/{{ entryDir }}/client.ts"><\/script>
|
|
3775
3835
|
</body>
|
|
3776
3836
|
</html>
|
|
3777
|
-
`,
|
|
3837
|
+
`,It=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
|
|
3778
3838
|
|
|
3779
3839
|
export default function Page() {
|
|
3780
3840
|
return <PageSample />;
|
|
3781
3841
|
}
|
|
3782
|
-
`,
|
|
3783
|
-
`,
|
|
3842
|
+
`,Lt=`{props.children}
|
|
3843
|
+
`,Rt=`---
|
|
3784
3844
|
title: "{{title}}"
|
|
3785
3845
|
---
|
|
3786
3846
|
|
|
@@ -3797,7 +3857,7 @@ export const pathMap = {
|
|
|
3797
3857
|
routeName="{{route.name}}"
|
|
3798
3858
|
pathMap={pathMap}
|
|
3799
3859
|
/>
|
|
3800
|
-
`,
|
|
3860
|
+
`,zt=`---
|
|
3801
3861
|
title: Welcome to KosmoJS
|
|
3802
3862
|
description: Content-first development with MDX and Vite
|
|
3803
3863
|
---
|
|
@@ -3805,7 +3865,7 @@ description: Content-first development with MDX and Vite
|
|
|
3805
3865
|
import WelcomePage from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}"
|
|
3806
3866
|
|
|
3807
3867
|
<WelcomePage />
|
|
3808
|
-
`,
|
|
3868
|
+
`,Bt=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
3809
3869
|
|
|
3810
3870
|
import app from "./app.mdx";
|
|
3811
3871
|
import { components } from "./components/mdx"
|
|
@@ -3821,12 +3881,12 @@ export default routerFactory((routes) => {
|
|
|
3821
3881
|
},
|
|
3822
3882
|
};
|
|
3823
3883
|
});
|
|
3824
|
-
`,
|
|
3884
|
+
`,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:{runtime:`automatic`,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`,jsx:`react-jsx`,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.102.2`,"@types/react":`^19.2.18`,"@types/react-dom":`^19.2.5`,"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
3885
|
|
|
3826
3886
|
export const AppProvider = ({ children }: { children: ReactNode }) => {
|
|
3827
3887
|
return children;
|
|
3828
3888
|
}
|
|
3829
|
-
`,
|
|
3889
|
+
`,Qt=`import { type QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
3830
3890
|
import type { ReactNode } from "react";
|
|
3831
3891
|
|
|
3832
3892
|
import { getQueryClient } from "./query";
|
|
@@ -3845,7 +3905,7 @@ export const AppProvider = ({
|
|
|
3845
3905
|
</QueryClientProvider>
|
|
3846
3906
|
);
|
|
3847
3907
|
}
|
|
3848
|
-
|
|
3908
|
+
`,$t=`import { lazy, type JSX } from "react";
|
|
3849
3909
|
|
|
3850
3910
|
import {
|
|
3851
3911
|
createRoot,
|
|
@@ -3899,7 +3959,7 @@ export const mount = async (
|
|
|
3899
3959
|
}
|
|
3900
3960
|
|
|
3901
3961
|
export default clientRenderFactory();
|
|
3902
|
-
`,
|
|
3962
|
+
`,en=`{
|
|
3903
3963
|
{{#if name}}
|
|
3904
3964
|
id: "{{name}}",
|
|
3905
3965
|
{{/if}}
|
|
@@ -3917,7 +3977,7 @@ export default clientRenderFactory();
|
|
|
3917
3977
|
children: [ {{#each children}}{{> routePartial}}, {{/each}}],
|
|
3918
3978
|
{{/if}}
|
|
3919
3979
|
}
|
|
3920
|
-
|
|
3980
|
+
`,tn=`import type { JSX } from "react";
|
|
3921
3981
|
|
|
3922
3982
|
import {
|
|
3923
3983
|
renderToString as renderToStringOrig,
|
|
@@ -3983,7 +4043,7 @@ export const renderToStream: RenderToStreamWrapper<
|
|
|
3983
4043
|
};
|
|
3984
4044
|
|
|
3985
4045
|
export default serverRenderFactory();
|
|
3986
|
-
`,
|
|
4046
|
+
`,nn=`/* @jsxImportSource react */
|
|
3987
4047
|
|
|
3988
4048
|
import styles from "./styles.module.css";
|
|
3989
4049
|
|
|
@@ -4024,7 +4084,7 @@ export default function PageSample(props: {
|
|
|
4024
4084
|
</div>
|
|
4025
4085
|
);
|
|
4026
4086
|
}
|
|
4027
|
-
`,
|
|
4087
|
+
`,rn=`/* @jsxImportSource react */
|
|
4028
4088
|
|
|
4029
4089
|
import styles from "./styles.module.css";
|
|
4030
4090
|
|
|
@@ -4076,7 +4136,7 @@ export default function PageSample(props: {
|
|
|
4076
4136
|
</div>
|
|
4077
4137
|
);
|
|
4078
4138
|
}
|
|
4079
|
-
`,
|
|
4139
|
+
`,an=`* {
|
|
4080
4140
|
margin: 0;
|
|
4081
4141
|
padding: 0;
|
|
4082
4142
|
box-sizing: border-box;
|
|
@@ -4211,7 +4271,7 @@ export default function PageSample(props: {
|
|
|
4211
4271
|
align-items: center;
|
|
4212
4272
|
gap: 0.25rem;
|
|
4213
4273
|
}
|
|
4214
|
-
`,
|
|
4274
|
+
`,on=`/* @jsxImportSource react */
|
|
4215
4275
|
|
|
4216
4276
|
import styles from "./styles.module.css";
|
|
4217
4277
|
|
|
@@ -4277,7 +4337,7 @@ export default function WelcomePage() {
|
|
|
4277
4337
|
</div>
|
|
4278
4338
|
);
|
|
4279
4339
|
}
|
|
4280
|
-
`,
|
|
4340
|
+
`,sn=`import { QueryClient, type QueryClientConfig } from "@tanstack/react-query";
|
|
4281
4341
|
|
|
4282
4342
|
let client: QueryClient | undefined;
|
|
4283
4343
|
|
|
@@ -4292,7 +4352,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
4292
4352
|
}
|
|
4293
4353
|
return client;
|
|
4294
4354
|
};
|
|
4295
|
-
`,
|
|
4355
|
+
`,cn=`import { QueryClient, type QueryClientConfig } from "@tanstack/react-query";
|
|
4296
4356
|
|
|
4297
4357
|
import { store } from "{{ createImport 'lib' '@ssr/base' }}";
|
|
4298
4358
|
|
|
@@ -4315,7 +4375,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
4315
4375
|
}
|
|
4316
4376
|
return ctx.tsqClient as QueryClient;
|
|
4317
4377
|
};
|
|
4318
|
-
`,
|
|
4378
|
+
`,ln=`export type ComponentLoader = () => Promise<{
|
|
4319
4379
|
loader?: (arg: unknown) => Promise<unknown>;
|
|
4320
4380
|
}>;
|
|
4321
4381
|
|
|
@@ -4335,7 +4395,7 @@ export const loaderFactory = (opt?: { withPreload?: boolean }) => {
|
|
|
4335
4395
|
return opt?.withPreload ? { loader } : {};
|
|
4336
4396
|
};
|
|
4337
4397
|
};
|
|
4338
|
-
`,
|
|
4398
|
+
`,un=`import type { JSX, ComponentType } from "react";
|
|
4339
4399
|
|
|
4340
4400
|
import {
|
|
4341
4401
|
type RouteObject,
|
|
@@ -4393,7 +4453,7 @@ export const createRouters = (
|
|
|
4393
4453
|
}
|
|
4394
4454
|
|
|
4395
4455
|
export default createRouterFactory<RouteObject, Promise<JSX.Element>>();
|
|
4396
|
-
`,
|
|
4456
|
+
`,dn=`import { Outlet } from "react-router";
|
|
4397
4457
|
import { AppProvider } from "{{ createImport 'lib' 'app' }}";
|
|
4398
4458
|
|
|
4399
4459
|
export default function App() {
|
|
@@ -4403,7 +4463,7 @@ export default function App() {
|
|
|
4403
4463
|
</AppProvider>
|
|
4404
4464
|
);
|
|
4405
4465
|
}
|
|
4406
|
-
`,
|
|
4466
|
+
`,fn=`import {
|
|
4407
4467
|
type LinkProps as RouterLinkProps,
|
|
4408
4468
|
Link as RouterLink,
|
|
4409
4469
|
} from "react-router";
|
|
@@ -4422,7 +4482,7 @@ export default function Link(
|
|
|
4422
4482
|
|
|
4423
4483
|
const href = () => {
|
|
4424
4484
|
const [key, ...params] = to;
|
|
4425
|
-
return pageRouteMap[key]?.
|
|
4485
|
+
return pageRouteMap[key]?.path(params as never, query, { prefix: false });
|
|
4426
4486
|
};
|
|
4427
4487
|
|
|
4428
4488
|
return (
|
|
@@ -4431,7 +4491,7 @@ export default function Link(
|
|
|
4431
4491
|
</RouterLink>
|
|
4432
4492
|
);
|
|
4433
4493
|
}
|
|
4434
|
-
`,
|
|
4494
|
+
`,pn=`import renderFactory, {
|
|
4435
4495
|
createRoutes,
|
|
4436
4496
|
hydrate,
|
|
4437
4497
|
mount,
|
|
@@ -4458,7 +4518,7 @@ if (root) {
|
|
|
4458
4518
|
} else {
|
|
4459
4519
|
console.error("❌ Root element not found!");
|
|
4460
4520
|
}
|
|
4461
|
-
`,
|
|
4521
|
+
`,mn=`import renderFactory, {
|
|
4462
4522
|
createRoutes,
|
|
4463
4523
|
renderToStream,
|
|
4464
4524
|
renderToString,
|
|
@@ -4485,7 +4545,7 @@ export default renderFactory(() => {
|
|
|
4485
4545
|
},
|
|
4486
4546
|
};
|
|
4487
4547
|
});
|
|
4488
|
-
`,
|
|
4548
|
+
`,hn=`<!doctype html>
|
|
4489
4549
|
<html lang="en">
|
|
4490
4550
|
<head>
|
|
4491
4551
|
<meta charset="UTF-8" />
|
|
@@ -4497,17 +4557,17 @@ export default renderFactory(() => {
|
|
|
4497
4557
|
<script type="module" src="/{{ entryDir }}/client.ts"><\/script>
|
|
4498
4558
|
</body>
|
|
4499
4559
|
</html>
|
|
4500
|
-
`,
|
|
4560
|
+
`,gn=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
|
|
4501
4561
|
|
|
4502
4562
|
export default function Page() {
|
|
4503
4563
|
return <PageSample />;
|
|
4504
4564
|
}
|
|
4505
|
-
`,
|
|
4565
|
+
`,_n=`import { Outlet } from "react-router";
|
|
4506
4566
|
|
|
4507
4567
|
export default function Layout() {
|
|
4508
4568
|
return <Outlet />;
|
|
4509
4569
|
}
|
|
4510
|
-
`,
|
|
4570
|
+
`,vn=`import PageSample from "{{ createImport 'lib' 'pageSamples/page.tsx' }}";
|
|
4511
4571
|
|
|
4512
4572
|
export default function Page() {
|
|
4513
4573
|
return PageSample({
|
|
@@ -4520,8 +4580,8 @@ export default function Page() {
|
|
|
4520
4580
|
},
|
|
4521
4581
|
});
|
|
4522
4582
|
}
|
|
4523
|
-
`,
|
|
4524
|
-
`,
|
|
4583
|
+
`,yn=`export { default } from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}";
|
|
4584
|
+
`,bn=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
4525
4585
|
|
|
4526
4586
|
import app from "./app";
|
|
4527
4587
|
|
|
@@ -4536,12 +4596,12 @@ export default routerFactory((routes) => {
|
|
|
4536
4596
|
},
|
|
4537
4597
|
};
|
|
4538
4598
|
});
|
|
4539
|
-
`,
|
|
4599
|
+
`,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.102.2`,"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
4600
|
|
|
4541
4601
|
export const AppProvider: ParentComponent = (props) => {
|
|
4542
4602
|
return props.children;
|
|
4543
4603
|
};
|
|
4544
|
-
`,
|
|
4604
|
+
`,En=`import type { ParentComponent } from "solid-js";
|
|
4545
4605
|
import { type QueryClient, QueryClientProvider } from "@tanstack/solid-query";
|
|
4546
4606
|
|
|
4547
4607
|
import { getQueryClient } from "./query";
|
|
@@ -4553,7 +4613,7 @@ export const AppProvider: ParentComponent<{ client?: QueryClient }> = (props) =>
|
|
|
4553
4613
|
</QueryClientProvider>
|
|
4554
4614
|
);
|
|
4555
4615
|
};
|
|
4556
|
-
`,
|
|
4616
|
+
`,Dn=`import { lazy, type JSX } from "solid-js";
|
|
4557
4617
|
import { hydrate as hydrateOrig, render } from "solid-js/web";
|
|
4558
4618
|
import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
4559
4619
|
import { clientRenderFactory } from "@kosmojs/core/generators";
|
|
@@ -4598,7 +4658,7 @@ export const mount = async (
|
|
|
4598
4658
|
}
|
|
4599
4659
|
|
|
4600
4660
|
export default clientRenderFactory();
|
|
4601
|
-
`,
|
|
4661
|
+
`,On=`{
|
|
4602
4662
|
path: "{{path}}",
|
|
4603
4663
|
{{#if component}}
|
|
4604
4664
|
component: {{component}}_component,
|
|
@@ -4608,7 +4668,7 @@ export default clientRenderFactory();
|
|
|
4608
4668
|
children: [ {{#each children}}{{> routePartial}}, {{/each}}],
|
|
4609
4669
|
{{/if}}
|
|
4610
4670
|
}
|
|
4611
|
-
`,
|
|
4671
|
+
`,kn=`import type { JSX } from "solid-js";
|
|
4612
4672
|
|
|
4613
4673
|
import {
|
|
4614
4674
|
generateHydrationScript,
|
|
@@ -4681,7 +4741,7 @@ export const renderToStream: RenderToStreamWrapper<
|
|
|
4681
4741
|
* and surfaces the error to the stream consumer; catching here only keeps
|
|
4682
4742
|
* the rejection from escaping as an unhandled one.
|
|
4683
4743
|
* */
|
|
4684
|
-
stream.pipeTo(writable).catch(() => {});
|
|
4744
|
+
void Promise.resolve(stream.pipeTo(writable)).catch(() => {});
|
|
4685
4745
|
return {
|
|
4686
4746
|
head: [...headerTags, generateHydrationScript()].join("\\n"),
|
|
4687
4747
|
html: readable,
|
|
@@ -4689,7 +4749,7 @@ export const renderToStream: RenderToStreamWrapper<
|
|
|
4689
4749
|
};
|
|
4690
4750
|
|
|
4691
4751
|
export default serverRenderFactory<true>();
|
|
4692
|
-
`,
|
|
4752
|
+
`,An=`/* @jsxImportSource solid-js */
|
|
4693
4753
|
|
|
4694
4754
|
import styles from "./styles.module.css";
|
|
4695
4755
|
|
|
@@ -4730,7 +4790,7 @@ export default function PageSample(props: {
|
|
|
4730
4790
|
</div>
|
|
4731
4791
|
);
|
|
4732
4792
|
}
|
|
4733
|
-
`,
|
|
4793
|
+
`,jn=`/* @jsxImportSource solid-js */
|
|
4734
4794
|
|
|
4735
4795
|
import styles from "./styles.module.css";
|
|
4736
4796
|
|
|
@@ -4782,7 +4842,7 @@ export default function PageSample(props: {
|
|
|
4782
4842
|
</div>
|
|
4783
4843
|
);
|
|
4784
4844
|
}
|
|
4785
|
-
`,
|
|
4845
|
+
`,Mn=`* {
|
|
4786
4846
|
margin: 0;
|
|
4787
4847
|
padding: 0;
|
|
4788
4848
|
box-sizing: border-box;
|
|
@@ -4917,7 +4977,7 @@ export default function PageSample(props: {
|
|
|
4917
4977
|
align-items: center;
|
|
4918
4978
|
gap: 0.25rem;
|
|
4919
4979
|
}
|
|
4920
|
-
`,
|
|
4980
|
+
`,Nn=`/* @jsxImportSource solid-js */
|
|
4921
4981
|
|
|
4922
4982
|
import styles from "./styles.module.css";
|
|
4923
4983
|
|
|
@@ -4983,7 +5043,7 @@ export default function WelcomePage() {
|
|
|
4983
5043
|
</div>
|
|
4984
5044
|
);
|
|
4985
5045
|
}
|
|
4986
|
-
`,
|
|
5046
|
+
`,Pn=`import { QueryClient, type QueryClientConfig } from "@tanstack/solid-query";
|
|
4987
5047
|
|
|
4988
5048
|
let client: QueryClient | undefined;
|
|
4989
5049
|
|
|
@@ -4998,7 +5058,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
4998
5058
|
}
|
|
4999
5059
|
return client;
|
|
5000
5060
|
};
|
|
5001
|
-
`,
|
|
5061
|
+
`,Fn=`import { QueryClient, type QueryClientConfig } from "@tanstack/solid-query";
|
|
5002
5062
|
|
|
5003
5063
|
import { store } from "{{ createImport 'lib' '@ssr/base' }}";
|
|
5004
5064
|
|
|
@@ -5021,7 +5081,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
5021
5081
|
}
|
|
5022
5082
|
return ctx.tsqClient as QueryClient;
|
|
5023
5083
|
};
|
|
5024
|
-
`,
|
|
5084
|
+
`,In=`import type { JSX, ParentComponent } from "solid-js";
|
|
5025
5085
|
import { Router, type RouteDefinition } from "@solidjs/router";
|
|
5026
5086
|
import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
5027
5087
|
import { createRouterFactory } from "@kosmojs/core/generators";
|
|
@@ -5057,7 +5117,7 @@ export const createRouters = (
|
|
|
5057
5117
|
}
|
|
5058
5118
|
|
|
5059
5119
|
export default createRouterFactory<RouteDefinition, JSX.Element>();
|
|
5060
|
-
`,
|
|
5120
|
+
`,Ln=`export type ComponentLoader = () => Promise<{
|
|
5061
5121
|
preload?: () => Promise<unknown>;
|
|
5062
5122
|
}>;
|
|
5063
5123
|
|
|
@@ -5072,10 +5132,10 @@ export const loaderFactory = (opt?: { withPreload?: boolean }) => {
|
|
|
5072
5132
|
return opt?.withPreload ? { preload } : {};
|
|
5073
5133
|
};
|
|
5074
5134
|
};
|
|
5075
|
-
`,
|
|
5135
|
+
`,Rn=`export type MaybeWrapped<T> = import("solid-js/store").Store<T> | T;
|
|
5076
5136
|
|
|
5077
5137
|
export { unwrap } from "solid-js/store";
|
|
5078
|
-
`,
|
|
5138
|
+
`,zn=`import type { ParentComponent } from "solid-js";
|
|
5079
5139
|
import { AppProvider } from "{{ createImport 'lib' 'app' }}";
|
|
5080
5140
|
|
|
5081
5141
|
const App: ParentComponent = (props) => {
|
|
@@ -5083,7 +5143,7 @@ const App: ParentComponent = (props) => {
|
|
|
5083
5143
|
};
|
|
5084
5144
|
|
|
5085
5145
|
export default App;
|
|
5086
|
-
`,
|
|
5146
|
+
`,Bn=`import { A, type AnchorProps } from "@solidjs/router";
|
|
5087
5147
|
import { type JSXElement, splitProps } from "solid-js";
|
|
5088
5148
|
|
|
5089
5149
|
import { pageRouteMap, type LinkProps } from "{{ createImport 'libCore' }}";
|
|
@@ -5103,12 +5163,12 @@ export default function Link(
|
|
|
5103
5163
|
|
|
5104
5164
|
const href = () => {
|
|
5105
5165
|
const [key, ...params] = knownProps.to;
|
|
5106
|
-
return pageRouteMap[key]?.
|
|
5166
|
+
return pageRouteMap[key]?.path(params as never, knownProps.query, { prefix: false });
|
|
5107
5167
|
};
|
|
5108
5168
|
|
|
5109
5169
|
return <A {...{ ...restProps, href: href() }}>{knownProps.children}</A>;
|
|
5110
5170
|
}
|
|
5111
|
-
`,
|
|
5171
|
+
`,Vn=`import renderFactory, {
|
|
5112
5172
|
createRoutes,
|
|
5113
5173
|
hydrate,
|
|
5114
5174
|
mount,
|
|
@@ -5135,7 +5195,7 @@ if (root) {
|
|
|
5135
5195
|
} else {
|
|
5136
5196
|
console.error("❌ Root element not found!");
|
|
5137
5197
|
}
|
|
5138
|
-
`,
|
|
5198
|
+
`,Hn=`import renderFactory, {
|
|
5139
5199
|
createRoutes,
|
|
5140
5200
|
renderToStream,
|
|
5141
5201
|
renderToString,
|
|
@@ -5162,7 +5222,7 @@ export default renderFactory(() => {
|
|
|
5162
5222
|
},
|
|
5163
5223
|
};
|
|
5164
5224
|
});
|
|
5165
|
-
`,
|
|
5225
|
+
`,Un=`<!doctype html>
|
|
5166
5226
|
<html lang="en">
|
|
5167
5227
|
<head>
|
|
5168
5228
|
<meta charset="UTF-8" />
|
|
@@ -5174,19 +5234,19 @@ export default renderFactory(() => {
|
|
|
5174
5234
|
<script type="module" src="/{{ entryDir }}/client.ts"><\/script>
|
|
5175
5235
|
</body>
|
|
5176
5236
|
</html>
|
|
5177
|
-
`,
|
|
5237
|
+
`,Wn=`import PageSample from "{{ createImport 'lib' 'pageSamples/404.tsx' }}";
|
|
5178
5238
|
|
|
5179
5239
|
export default function Page() {
|
|
5180
5240
|
return <PageSample />;
|
|
5181
5241
|
}
|
|
5182
|
-
`,
|
|
5242
|
+
`,Gn=`import type { ParentComponent } from "solid-js";
|
|
5183
5243
|
|
|
5184
5244
|
const Layout: ParentComponent = (props) => {
|
|
5185
5245
|
return props.children;
|
|
5186
5246
|
};
|
|
5187
5247
|
|
|
5188
5248
|
export default Layout;
|
|
5189
|
-
`,
|
|
5249
|
+
`,Kn=`import PageSample from "{{ createImport 'lib' 'pageSamples/page.tsx' }}";
|
|
5190
5250
|
|
|
5191
5251
|
export default function Page() {
|
|
5192
5252
|
return PageSample({
|
|
@@ -5199,8 +5259,8 @@ export default function Page() {
|
|
|
5199
5259
|
},
|
|
5200
5260
|
});
|
|
5201
5261
|
}
|
|
5202
|
-
`,
|
|
5203
|
-
`,
|
|
5262
|
+
`,qn=`export { default } from "{{ createImport 'lib' 'pageSamples/welcome.tsx' }}";
|
|
5263
|
+
`,Jn=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
5204
5264
|
|
|
5205
5265
|
import app from "./app";
|
|
5206
5266
|
|
|
@@ -5215,12 +5275,12 @@ export default routerFactory((routes) => {
|
|
|
5215
5275
|
},
|
|
5216
5276
|
};
|
|
5217
5277
|
});
|
|
5218
|
-
`,
|
|
5278
|
+
`,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
5279
|
export { default as apiApp } from "{{ createImport 'api' 'app' }}";
|
|
5220
5280
|
{{else}}
|
|
5221
5281
|
export const apiApp = undefined;
|
|
5222
5282
|
{{/if}}
|
|
5223
|
-
|
|
5283
|
+
`,tr=`import { AsyncLocalStorage } from "node:async_hooks";
|
|
5224
5284
|
|
|
5225
5285
|
import type { FetchApp, NodeApp } from "@kosmojs/core";
|
|
5226
5286
|
|
|
@@ -5264,7 +5324,7 @@ export const store = new AsyncLocalStorage<RequestContext>();
|
|
|
5264
5324
|
export const isFetchApp = (app: FetchApp | NodeApp): app is FetchApp => {
|
|
5265
5325
|
return typeof (app as FetchApp).fetch === "function";
|
|
5266
5326
|
};
|
|
5267
|
-
`,
|
|
5327
|
+
`,nr=`import { type RequestContext, store } from "./base";
|
|
5268
5328
|
|
|
5269
5329
|
import { renderWrapper } from "{{ createImport 'libEntry' 'server' }}";
|
|
5270
5330
|
|
|
@@ -5286,7 +5346,7 @@ export const withSsrContext = <T>(
|
|
|
5286
5346
|
export const errorProvider = () => {
|
|
5287
5347
|
return store.getStore()?.error;
|
|
5288
5348
|
};
|
|
5289
|
-
`,
|
|
5349
|
+
`,rr=`import type { FetchApp, NodeApp } from "@kosmojs/core";
|
|
5290
5350
|
import type { Transport } from "@kosmojs/core/fetch";
|
|
5291
5351
|
|
|
5292
5352
|
import {
|
|
@@ -5489,12 +5549,12 @@ const pathnameOf = (input: RequestInfo | URL): string => {
|
|
|
5489
5549
|
} catch {}
|
|
5490
5550
|
return String(input);
|
|
5491
5551
|
};
|
|
5492
|
-
`,
|
|
5552
|
+
`,ir=`export const routeMap = [
|
|
5493
5553
|
{{#each pageRoutes}}
|
|
5494
5554
|
{ pathPattern: "{{honoPattern}}", renderMode: "{{renderMode}}" },
|
|
5495
5555
|
{{/each}}
|
|
5496
5556
|
];
|
|
5497
|
-
`,
|
|
5557
|
+
`,ar=`import { access, chmod, constants, readFile, unlink } from "node:fs/promises";
|
|
5498
5558
|
import {
|
|
5499
5559
|
createServer,
|
|
5500
5560
|
type IncomingMessage,
|
|
@@ -5910,14 +5970,14 @@ if (isMain) {
|
|
|
5910
5970
|
process.exit(1);
|
|
5911
5971
|
}
|
|
5912
5972
|
}
|
|
5913
|
-
`,
|
|
5973
|
+
`,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.41`,"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
5974
|
import type { Snippet } from "svelte";
|
|
5915
5975
|
|
|
5916
5976
|
let { children }: { children: Snippet } = $props();
|
|
5917
5977
|
<\/script>
|
|
5918
5978
|
|
|
5919
5979
|
{@render children()}
|
|
5920
|
-
`,
|
|
5980
|
+
`,ur=`<script lang="ts">
|
|
5921
5981
|
import { type QueryClient, QueryClientProvider } from "@tanstack/svelte-query";
|
|
5922
5982
|
import type { Snippet } from "svelte";
|
|
5923
5983
|
|
|
@@ -5934,7 +5994,7 @@ if (isMain) {
|
|
|
5934
5994
|
<QueryClientProvider client={queryClient}>
|
|
5935
5995
|
{@render children()}
|
|
5936
5996
|
</QueryClientProvider>
|
|
5937
|
-
`,
|
|
5997
|
+
`,dr=`import { hydrate as hydrateOrig, mount as mountOrig } from "svelte";
|
|
5938
5998
|
import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
5939
5999
|
import { clientRenderFactory } from "@kosmojs/core/generators";
|
|
5940
6000
|
|
|
@@ -5975,7 +6035,7 @@ export const mount = async (
|
|
|
5975
6035
|
}
|
|
5976
6036
|
|
|
5977
6037
|
export default clientRenderFactory();
|
|
5978
|
-
`,
|
|
6038
|
+
`,fr=`import { render as renderOrig } from "svelte/server";
|
|
5979
6039
|
|
|
5980
6040
|
import type {
|
|
5981
6041
|
RenderToStringWrapper,
|
|
@@ -6041,12 +6101,12 @@ export const renderToString: RenderToStringWrapper<
|
|
|
6041
6101
|
// svelte/server exposes only render() - no web-stream renderer -
|
|
6042
6102
|
// so this folder is string-only SSR.
|
|
6043
6103
|
export default serverRenderFactory<false>();
|
|
6044
|
-
`,
|
|
6104
|
+
`,pr=`declare module "*.svelte" {
|
|
6045
6105
|
import type { Component } from "svelte";
|
|
6046
6106
|
const component: Component;
|
|
6047
6107
|
export default component;
|
|
6048
6108
|
}
|
|
6049
|
-
`,
|
|
6109
|
+
`,mr=`<script lang="ts">
|
|
6050
6110
|
/**
|
|
6051
6111
|
* Folds [app, ...layouts] around the page component.
|
|
6052
6112
|
*
|
|
@@ -6080,7 +6140,7 @@ export default serverRenderFactory<false>();
|
|
|
6080
6140
|
{/snippet}
|
|
6081
6141
|
|
|
6082
6142
|
{@render layer(0)}
|
|
6083
|
-
`,
|
|
6143
|
+
`,hr=`<script lang="ts">
|
|
6084
6144
|
import styles from "./styles.module.css";
|
|
6085
6145
|
|
|
6086
6146
|
let { headline }: { headline?: string } = $props();
|
|
@@ -6112,7 +6172,7 @@ export default serverRenderFactory<false>();
|
|
|
6112
6172
|
</div>
|
|
6113
6173
|
</div>
|
|
6114
6174
|
</div>
|
|
6115
|
-
`,
|
|
6175
|
+
`,gr=`<script lang="ts">
|
|
6116
6176
|
import styles from "./styles.module.css";
|
|
6117
6177
|
|
|
6118
6178
|
let {
|
|
@@ -6157,7 +6217,7 @@ export default serverRenderFactory<false>();
|
|
|
6157
6217
|
</div>
|
|
6158
6218
|
</div>
|
|
6159
6219
|
</div>
|
|
6160
|
-
`,
|
|
6220
|
+
`,_r=`* {
|
|
6161
6221
|
margin: 0;
|
|
6162
6222
|
padding: 0;
|
|
6163
6223
|
box-sizing: border-box;
|
|
@@ -6292,7 +6352,7 @@ export default serverRenderFactory<false>();
|
|
|
6292
6352
|
align-items: center;
|
|
6293
6353
|
gap: 0.25rem;
|
|
6294
6354
|
}
|
|
6295
|
-
`,
|
|
6355
|
+
`,vr=`<script lang="ts">
|
|
6296
6356
|
import styles from "./styles.module.css";
|
|
6297
6357
|
<\/script>
|
|
6298
6358
|
|
|
@@ -6350,7 +6410,7 @@ export default serverRenderFactory<false>();
|
|
|
6350
6410
|
</div>
|
|
6351
6411
|
</div>
|
|
6352
6412
|
</div>
|
|
6353
|
-
`,
|
|
6413
|
+
`,yr=`export type ParamsMap = {
|
|
6354
6414
|
{{#each pageRoutes}}"{{name}}": {{serializeParamsLiteral .}};
|
|
6355
6415
|
{{/each}}
|
|
6356
6416
|
};
|
|
@@ -6359,7 +6419,7 @@ export const paramNames = {
|
|
|
6359
6419
|
{{#each pageRoutes}}"{{name}}": [ {{#each params.schema}}"{{name}}", {{/each}}],
|
|
6360
6420
|
{{/each}}
|
|
6361
6421
|
} as const;
|
|
6362
|
-
`,
|
|
6422
|
+
`,br=`import { QueryClient, type QueryClientConfig } from "@tanstack/svelte-query";
|
|
6363
6423
|
|
|
6364
6424
|
let client: QueryClient | undefined;
|
|
6365
6425
|
|
|
@@ -6374,7 +6434,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
6374
6434
|
}
|
|
6375
6435
|
return client;
|
|
6376
6436
|
};
|
|
6377
|
-
`,
|
|
6437
|
+
`,xr=`import { QueryClient, type QueryClientConfig } from "@tanstack/svelte-query";
|
|
6378
6438
|
|
|
6379
6439
|
import { store } from "{{ createImport 'lib' '@ssr/base' }}";
|
|
6380
6440
|
|
|
@@ -6397,7 +6457,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
6397
6457
|
}
|
|
6398
6458
|
return ctx.tsqClient as QueryClient;
|
|
6399
6459
|
};
|
|
6400
|
-
`,
|
|
6460
|
+
`,Sr=`import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
6401
6461
|
import { createRouterFactory } from "@kosmojs/core/generators";
|
|
6402
6462
|
|
|
6403
6463
|
import Layouts from "./Layouts.svelte";
|
|
@@ -6437,7 +6497,7 @@ export default createRouterFactory<
|
|
|
6437
6497
|
Promise<RouteComponent>,
|
|
6438
6498
|
{ server: { route: Route } }
|
|
6439
6499
|
>();
|
|
6440
|
-
`,
|
|
6500
|
+
`,Cr=`import { match, pathToRegexp } from "path-to-regexp";
|
|
6441
6501
|
import { type Component, createContext } from "svelte";
|
|
6442
6502
|
|
|
6443
6503
|
import { parseSearchParams } from "@kosmojs/core";
|
|
@@ -6639,7 +6699,11 @@ export const createRoute = (
|
|
|
6639
6699
|
loader: RawRoute["loader"],
|
|
6640
6700
|
layouts: RawRoute["layouts"],
|
|
6641
6701
|
): RawRoute => {
|
|
6642
|
-
|
|
6702
|
+
// strip trailing slash (keeping a sole "/") so the base-joined index route
|
|
6703
|
+
// matches both with and without it - "/docs/" as a pattern rejects "/docs"
|
|
6704
|
+
const path = \`\${base}/\${pathPattern}\`
|
|
6705
|
+
.replace(/\\/+/g, "/")
|
|
6706
|
+
.replace(/(.+)\\/$/, "$1");
|
|
6643
6707
|
|
|
6644
6708
|
const { regexp } = pathToRegexp(path, { sensitive: true });
|
|
6645
6709
|
const matcher = match<Route["params"]>(path);
|
|
@@ -6647,9 +6711,11 @@ export const createRoute = (
|
|
|
6647
6711
|
return {
|
|
6648
6712
|
name,
|
|
6649
6713
|
regexp,
|
|
6714
|
+
// count segments of the same base-joined path the regexp matches against;
|
|
6715
|
+
// resolve() compares this against the full url pathname's segment count
|
|
6650
6716
|
pathSegments: name.includes("...")
|
|
6651
6717
|
? undefined
|
|
6652
|
-
:
|
|
6718
|
+
: path.split("/").filter(Boolean).length,
|
|
6653
6719
|
extractParams: (path) => {
|
|
6654
6720
|
const match = matcher(path);
|
|
6655
6721
|
return match ? match.params : {};
|
|
@@ -6658,7 +6724,7 @@ export const createRoute = (
|
|
|
6658
6724
|
layouts,
|
|
6659
6725
|
};
|
|
6660
6726
|
};
|
|
6661
|
-
`,
|
|
6727
|
+
`,wr=`import { getRouteContext } from "./svelte";
|
|
6662
6728
|
|
|
6663
6729
|
import type { ParamsMap, paramNames } from "{{ createImport 'lib' 'params' }}";
|
|
6664
6730
|
|
|
@@ -6698,7 +6764,7 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
|
|
|
6698
6764
|
const route = useRoute();
|
|
6699
6765
|
return route.loaderData?.[key || route.name] as T;
|
|
6700
6766
|
};
|
|
6701
|
-
`,
|
|
6767
|
+
`,Tr=`<script lang="ts">
|
|
6702
6768
|
import { AppProvider } from "{{ createImport 'lib' 'app' }}";
|
|
6703
6769
|
import type { Snippet } from "svelte";
|
|
6704
6770
|
|
|
@@ -6708,7 +6774,7 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
|
|
|
6708
6774
|
<AppProvider>
|
|
6709
6775
|
{@render children()}
|
|
6710
6776
|
</AppProvider>
|
|
6711
|
-
`,
|
|
6777
|
+
`,Er=`<script lang="ts">
|
|
6712
6778
|
import type { Snippet } from "svelte";
|
|
6713
6779
|
import type { HTMLAnchorAttributes } from "svelte/elements";
|
|
6714
6780
|
|
|
@@ -6727,12 +6793,12 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
|
|
|
6727
6793
|
|
|
6728
6794
|
const href = $derived.by(() => {
|
|
6729
6795
|
const [key, ...params] = to;
|
|
6730
|
-
return pageRouteMap[key]?.
|
|
6796
|
+
return pageRouteMap[key]?.path(params as never, query);
|
|
6731
6797
|
});
|
|
6732
6798
|
<\/script>
|
|
6733
6799
|
|
|
6734
6800
|
<a {href} {...rest}>{@render children?.()}</a>
|
|
6735
|
-
`,
|
|
6801
|
+
`,Dr=`import renderFactory, {
|
|
6736
6802
|
createRoutes,
|
|
6737
6803
|
hydrate,
|
|
6738
6804
|
mount,
|
|
@@ -6759,7 +6825,7 @@ if (root) {
|
|
|
6759
6825
|
} else {
|
|
6760
6826
|
console.error("❌ Root element not found!");
|
|
6761
6827
|
}
|
|
6762
|
-
`,
|
|
6828
|
+
`,Or=`import renderFactory, {
|
|
6763
6829
|
createRoutes,
|
|
6764
6830
|
renderToString,
|
|
6765
6831
|
// no renderToStream on Svelte folders
|
|
@@ -6780,7 +6846,7 @@ export default renderFactory(() => {
|
|
|
6780
6846
|
},
|
|
6781
6847
|
};
|
|
6782
6848
|
});
|
|
6783
|
-
`,
|
|
6849
|
+
`,kr=`<!doctype html>
|
|
6784
6850
|
<html lang="en">
|
|
6785
6851
|
<head>
|
|
6786
6852
|
<meta charset="UTF-8" />
|
|
@@ -6792,19 +6858,19 @@ export default renderFactory(() => {
|
|
|
6792
6858
|
<script type="module" src="/{{ entryDir }}/client.ts"><\/script>
|
|
6793
6859
|
</body>
|
|
6794
6860
|
</html>
|
|
6795
|
-
`,
|
|
6861
|
+
`,Ar=`<script lang="ts">
|
|
6796
6862
|
import PageSample from "{{ createImport 'lib' 'pageSamples/404.svelte' }}";
|
|
6797
6863
|
<\/script>
|
|
6798
6864
|
|
|
6799
6865
|
<PageSample />
|
|
6800
|
-
`,
|
|
6866
|
+
`,jr=`<script lang="ts">
|
|
6801
6867
|
import type { Snippet } from "svelte";
|
|
6802
6868
|
|
|
6803
6869
|
let { children }: { children: Snippet } = $props();
|
|
6804
6870
|
<\/script>
|
|
6805
6871
|
|
|
6806
6872
|
{@render children()}
|
|
6807
|
-
`,
|
|
6873
|
+
`,Mr=`<script lang="ts">
|
|
6808
6874
|
import PageSample from "{{ createImport 'lib' 'pageSamples/page.svelte' }}";
|
|
6809
6875
|
|
|
6810
6876
|
const pathMap = {
|
|
@@ -6823,7 +6889,7 @@ export default renderFactory(() => {
|
|
|
6823
6889
|
routeName={"{{route.name}}"}
|
|
6824
6890
|
{pathMap}
|
|
6825
6891
|
/>
|
|
6826
|
-
`,
|
|
6892
|
+
`,Nr=`<script lang="ts">
|
|
6827
6893
|
import WelcomePage from "{{ createImport 'lib' 'pageSamples/welcome.svelte' }}";
|
|
6828
6894
|
<\/script>
|
|
6829
6895
|
|
|
@@ -6836,7 +6902,7 @@ export default renderFactory(() => {
|
|
|
6836
6902
|
</svelte:head>
|
|
6837
6903
|
|
|
6838
6904
|
<WelcomePage />
|
|
6839
|
-
`,
|
|
6905
|
+
`,Pr=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
6840
6906
|
|
|
6841
6907
|
import app from "./app.svelte";
|
|
6842
6908
|
|
|
@@ -6851,7 +6917,7 @@ export default routerFactory((routes) => {
|
|
|
6851
6917
|
},
|
|
6852
6918
|
};
|
|
6853
6919
|
});
|
|
6854
|
-
`,
|
|
6920
|
+
`,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.18`}},Rr=`import Type from "typebox";
|
|
6855
6921
|
|
|
6856
6922
|
/**
|
|
6857
6923
|
* Custom types for JavaScript constructs that have no JSON Schema
|
|
@@ -6923,7 +6989,7 @@ export default {
|
|
|
6923
6989
|
Buffer: TBuffer(),
|
|
6924
6990
|
ArrayBuffer: TArrayBuffer(),
|
|
6925
6991
|
};
|
|
6926
|
-
`,
|
|
6992
|
+
`,zr=`import type { TValidationError } from "typebox/error";
|
|
6927
6993
|
|
|
6928
6994
|
import type { ValidationErrorEntry } from "@kosmojs/core";
|
|
6929
6995
|
|
|
@@ -8107,7 +8173,7 @@ const format = (fmt: string, ...args: unknown[]): string => {
|
|
|
8107
8173
|
|
|
8108
8174
|
return str;
|
|
8109
8175
|
};
|
|
8110
|
-
`,
|
|
8176
|
+
`,Br=`import Type from "typebox";
|
|
8111
8177
|
import { Compile } from "typebox/compile";
|
|
8112
8178
|
import Value from "typebox/value";
|
|
8113
8179
|
|
|
@@ -8159,14 +8225,14 @@ export const validationSchemaFactory = (
|
|
|
8159
8225
|
},
|
|
8160
8226
|
};
|
|
8161
8227
|
};
|
|
8162
|
-
`,
|
|
8228
|
+
`,Vr=`import { Settings } from "typebox/system";
|
|
8163
8229
|
|
|
8164
8230
|
Settings.Set({{settings}});
|
|
8165
8231
|
|
|
8166
8232
|
export { default as customTypes } from "{{customTypesImport}}";
|
|
8167
8233
|
|
|
8168
8234
|
export const validationMessages = {{validationMessages}};
|
|
8169
|
-
`,
|
|
8235
|
+
`,Hr=`import type { ValidationSchemas } from "@kosmojs/core";
|
|
8170
8236
|
|
|
8171
8237
|
import { validationSchemaFactory } from "{{ createImport 'lib' '@typebox' }}";
|
|
8172
8238
|
|
|
@@ -8227,14 +8293,14 @@ export const validationSchemas: ValidationSchemas = {
|
|
|
8227
8293
|
{{/each}}
|
|
8228
8294
|
},
|
|
8229
8295
|
};
|
|
8230
|
-
`,
|
|
8296
|
+
`,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.102.2`,"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
8297
|
|
|
8232
8298
|
export { default as AppProvider } from "./provider.vue";
|
|
8233
8299
|
|
|
8234
8300
|
export const appProvider: Plugin = {
|
|
8235
8301
|
install() {},
|
|
8236
8302
|
};
|
|
8237
|
-
`,
|
|
8303
|
+
`,Yr=`import { VueQueryPlugin } from "@tanstack/vue-query";
|
|
8238
8304
|
import type { Plugin } from "vue";
|
|
8239
8305
|
|
|
8240
8306
|
import { getQueryClient } from "../query";
|
|
@@ -8246,10 +8312,10 @@ export const appProvider: Plugin = {
|
|
|
8246
8312
|
app.use(VueQueryPlugin, { queryClient: getQueryClient() });
|
|
8247
8313
|
},
|
|
8248
8314
|
};
|
|
8249
|
-
`,
|
|
8315
|
+
`,Xr=`<template>
|
|
8250
8316
|
<slot />
|
|
8251
8317
|
</template>
|
|
8252
|
-
`,
|
|
8318
|
+
`,Zr=`import type { App } from "vue";
|
|
8253
8319
|
import type { RouterFactoryReturn } from "@kosmojs/core";
|
|
8254
8320
|
import { clientRenderFactory } from "@kosmojs/core/generators";
|
|
8255
8321
|
|
|
@@ -8289,7 +8355,7 @@ export const mount = async (
|
|
|
8289
8355
|
}
|
|
8290
8356
|
|
|
8291
8357
|
export default clientRenderFactory();
|
|
8292
|
-
`,
|
|
8358
|
+
`,Qr=`{
|
|
8293
8359
|
path: "{{path}}",
|
|
8294
8360
|
{{#if name}}
|
|
8295
8361
|
name: "{{name}}",
|
|
@@ -8307,7 +8373,7 @@ export default clientRenderFactory();
|
|
|
8307
8373
|
children: [ {{#each children}}{{> routePartial}}, {{/each}}],
|
|
8308
8374
|
{{/if}}
|
|
8309
8375
|
}
|
|
8310
|
-
|
|
8376
|
+
`,$r=`import type { App } from "vue";
|
|
8311
8377
|
|
|
8312
8378
|
import {
|
|
8313
8379
|
renderToString as renderToStringOrig,
|
|
@@ -8398,12 +8464,12 @@ export const renderToStream: RenderToStreamWrapper<
|
|
|
8398
8464
|
}
|
|
8399
8465
|
|
|
8400
8466
|
export default serverRenderFactory();
|
|
8401
|
-
|
|
8467
|
+
`,$=`declare module "*.vue" {
|
|
8402
8468
|
import type { DefineComponent } from "vue";
|
|
8403
8469
|
const component: DefineComponent<{}, {}, any>;
|
|
8404
8470
|
export default component;
|
|
8405
8471
|
}
|
|
8406
|
-
|
|
8472
|
+
`,ei=`<script setup lang="ts">
|
|
8407
8473
|
import styles from "./styles.module.css";
|
|
8408
8474
|
defineProps<{
|
|
8409
8475
|
headline?: string;
|
|
@@ -8442,7 +8508,7 @@ defineProps<{
|
|
|
8442
8508
|
</div>
|
|
8443
8509
|
</div>
|
|
8444
8510
|
</template>
|
|
8445
|
-
|
|
8511
|
+
`,ti=`<script setup lang="ts">
|
|
8446
8512
|
import styles from "./styles.module.css";
|
|
8447
8513
|
defineProps<{
|
|
8448
8514
|
message: string;
|
|
@@ -8491,7 +8557,7 @@ defineProps<{
|
|
|
8491
8557
|
</div>
|
|
8492
8558
|
</div>
|
|
8493
8559
|
</template>
|
|
8494
|
-
`,
|
|
8560
|
+
`,ni=`* {
|
|
8495
8561
|
margin: 0;
|
|
8496
8562
|
padding: 0;
|
|
8497
8563
|
box-sizing: border-box;
|
|
@@ -8624,7 +8690,7 @@ defineProps<{
|
|
|
8624
8690
|
align-items: center;
|
|
8625
8691
|
gap: 0.25rem;
|
|
8626
8692
|
}
|
|
8627
|
-
`,
|
|
8693
|
+
`,ri=`<script setup lang="ts">
|
|
8628
8694
|
import styles from "./styles.module.css";
|
|
8629
8695
|
<\/script>
|
|
8630
8696
|
|
|
@@ -8688,7 +8754,7 @@ import styles from "./styles.module.css";
|
|
|
8688
8754
|
</div>
|
|
8689
8755
|
</div>
|
|
8690
8756
|
</template>
|
|
8691
|
-
`,
|
|
8757
|
+
`,ii=`import { QueryClient, type QueryClientConfig } from "@tanstack/vue-query";
|
|
8692
8758
|
|
|
8693
8759
|
let client: QueryClient | undefined;
|
|
8694
8760
|
|
|
@@ -8703,7 +8769,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
8703
8769
|
}
|
|
8704
8770
|
return client;
|
|
8705
8771
|
};
|
|
8706
|
-
`,
|
|
8772
|
+
`,ai=`import { QueryClient, type QueryClientConfig } from "@tanstack/vue-query";
|
|
8707
8773
|
|
|
8708
8774
|
import { store } from "{{ createImport 'lib' '@ssr/base' }}";
|
|
8709
8775
|
|
|
@@ -8726,7 +8792,7 @@ export const getQueryClient = (): QueryClient => {
|
|
|
8726
8792
|
}
|
|
8727
8793
|
return ctx.tsqClient as QueryClient;
|
|
8728
8794
|
};
|
|
8729
|
-
`,
|
|
8795
|
+
`,oi=`import {
|
|
8730
8796
|
type App,
|
|
8731
8797
|
type Component,
|
|
8732
8798
|
createApp,
|
|
@@ -8855,7 +8921,18 @@ export const createRouters = (
|
|
|
8855
8921
|
// would otherwise skip the guard
|
|
8856
8922
|
installLoaderGuard(router);
|
|
8857
8923
|
|
|
8858
|
-
|
|
8924
|
+
let { pathname } = url;
|
|
8925
|
+
|
|
8926
|
+
if (base !== "/") {
|
|
8927
|
+
// strip the base from pushed paths
|
|
8928
|
+
if (pathname === base) {
|
|
8929
|
+
pathname = "/";
|
|
8930
|
+
} else if (pathname.startsWith(\`\${base}/\`)) {
|
|
8931
|
+
pathname = pathname.slice(base.length);
|
|
8932
|
+
}
|
|
8933
|
+
}
|
|
8934
|
+
|
|
8935
|
+
await router.push(pathname + url.search);
|
|
8859
8936
|
|
|
8860
8937
|
await router.isReady();
|
|
8861
8938
|
|
|
@@ -8877,14 +8954,14 @@ export default createRouterFactory<
|
|
|
8877
8954
|
Promise<App>,
|
|
8878
8955
|
{ server: { loaderData: Record<string, unknown> } }
|
|
8879
8956
|
>();
|
|
8880
|
-
`,
|
|
8957
|
+
`,si=`import { type Ref, unref } from "vue";
|
|
8881
8958
|
|
|
8882
8959
|
export type MaybeWrapped<T> = Ref<T> | T;
|
|
8883
8960
|
|
|
8884
8961
|
export function unwrap<T>(value: MaybeWrapped<T>): T {
|
|
8885
8962
|
return unref(value);
|
|
8886
8963
|
}
|
|
8887
|
-
`,
|
|
8964
|
+
`,ci=`import { useRoute, useRouter } from "vue-router";
|
|
8888
8965
|
|
|
8889
8966
|
import type { RouterWithLoaderData } from "./router";
|
|
8890
8967
|
|
|
@@ -8899,7 +8976,7 @@ export const useLoaderData = <T>(key?: string): T | undefined => {
|
|
|
8899
8976
|
const route = useRoute();
|
|
8900
8977
|
return router.__loaderData?.[key || (route.name as string)] as T;
|
|
8901
8978
|
};
|
|
8902
|
-
`,
|
|
8979
|
+
`,li=`<script setup lang="ts">
|
|
8903
8980
|
import { AppProvider } from "_/app";
|
|
8904
8981
|
<\/script>
|
|
8905
8982
|
|
|
@@ -8908,39 +8985,40 @@ import { AppProvider } from "_/app";
|
|
|
8908
8985
|
<RouterView />
|
|
8909
8986
|
</AppProvider>
|
|
8910
8987
|
</template>
|
|
8911
|
-
`,
|
|
8988
|
+
`,ui=`<script setup lang="ts" generic="T extends LinkProps">
|
|
8912
8989
|
import { computed } from "vue";
|
|
8913
8990
|
import { RouterLink } from "vue-router";
|
|
8914
8991
|
|
|
8915
8992
|
import { pageRouteMap, type LinkProps } from "{{ createImport 'libCore' }}";
|
|
8916
8993
|
|
|
8917
|
-
|
|
8918
|
-
to: T
|
|
8919
|
-
query?: Record<string | number, unknown
|
|
8920
|
-
replace?: boolean
|
|
8921
|
-
activeClass?: string
|
|
8922
|
-
exactActiveClass?: string
|
|
8994
|
+
type Props = {
|
|
8995
|
+
to: T;
|
|
8996
|
+
query?: Record<string | number, unknown>;
|
|
8997
|
+
replace?: boolean;
|
|
8998
|
+
activeClass?: string;
|
|
8999
|
+
exactActiveClass?: string;
|
|
8923
9000
|
}
|
|
8924
9001
|
|
|
8925
9002
|
const props = defineProps<Props>();
|
|
8926
9003
|
|
|
8927
9004
|
const href = computed(() => {
|
|
8928
|
-
const [key, ...params] = props.to
|
|
8929
|
-
return pageRouteMap[key]?.
|
|
9005
|
+
const [key, ...params] = props.to;
|
|
9006
|
+
return pageRouteMap[key]?.path(params as never, props.query, { prefix: false });
|
|
8930
9007
|
})
|
|
9008
|
+
|
|
9009
|
+
const linkProps = computed(() => ({
|
|
9010
|
+
...(props.replace !== undefined ? { replace: props.replace } : {}),
|
|
9011
|
+
...(props.activeClass !== undefined ? { activeClass: props.activeClass } : {}),
|
|
9012
|
+
...(props.exactActiveClass !== undefined ? { exactActiveClass: props.exactActiveClass } : {}),
|
|
9013
|
+
}))
|
|
8931
9014
|
<\/script>
|
|
8932
9015
|
|
|
8933
9016
|
<template>
|
|
8934
|
-
<RouterLink
|
|
8935
|
-
:to="href"
|
|
8936
|
-
:replace="replace"
|
|
8937
|
-
:active-class="activeClass"
|
|
8938
|
-
:exact-active-class="exactActiveClass"
|
|
8939
|
-
>
|
|
9017
|
+
<RouterLink :to="href" v-bind="linkProps">
|
|
8940
9018
|
<slot />
|
|
8941
9019
|
</RouterLink>
|
|
8942
9020
|
</template>
|
|
8943
|
-
`,
|
|
9021
|
+
`,di=`import renderFactory, {
|
|
8944
9022
|
createRoutes,
|
|
8945
9023
|
hydrate,
|
|
8946
9024
|
mount,
|
|
@@ -8967,7 +9045,7 @@ if (root) {
|
|
|
8967
9045
|
} else {
|
|
8968
9046
|
console.error("❌ Root element not found!");
|
|
8969
9047
|
}
|
|
8970
|
-
`,
|
|
9048
|
+
`,fi=`import renderFactory, {
|
|
8971
9049
|
createRoutes,
|
|
8972
9050
|
renderToStream,
|
|
8973
9051
|
renderToString,
|
|
@@ -8994,7 +9072,7 @@ export default renderFactory(() => {
|
|
|
8994
9072
|
},
|
|
8995
9073
|
};
|
|
8996
9074
|
});
|
|
8997
|
-
`,
|
|
9075
|
+
`,pi=`<!doctype html>
|
|
8998
9076
|
<html lang="en">
|
|
8999
9077
|
<head>
|
|
9000
9078
|
<meta charset="UTF-8" />
|
|
@@ -9006,17 +9084,17 @@ export default renderFactory(() => {
|
|
|
9006
9084
|
<script type="module" src="/{{ entryDir }}/client.ts"><\/script>
|
|
9007
9085
|
</body>
|
|
9008
9086
|
</html>
|
|
9009
|
-
`,
|
|
9087
|
+
`,mi=`<script setup lang="ts">
|
|
9010
9088
|
import PageSample from "{{ createImport 'lib' 'pageSamples/404.vue' }}";
|
|
9011
9089
|
<\/script>
|
|
9012
9090
|
|
|
9013
9091
|
<template>
|
|
9014
9092
|
<PageSample />
|
|
9015
9093
|
</template>
|
|
9016
|
-
`,
|
|
9094
|
+
`,hi=`<template>
|
|
9017
9095
|
<router-view />
|
|
9018
9096
|
</template>
|
|
9019
|
-
`,
|
|
9097
|
+
`,gi=`<script setup lang="ts">
|
|
9020
9098
|
import PageSample from "{{ createImport 'lib' 'pageSamples/page.vue' }}";
|
|
9021
9099
|
<\/script>
|
|
9022
9100
|
|
|
@@ -9031,14 +9109,14 @@ import PageSample from "{{ createImport 'lib' 'pageSamples/page.vue' }}";
|
|
|
9031
9109
|
}"
|
|
9032
9110
|
/>
|
|
9033
9111
|
</template>
|
|
9034
|
-
`,
|
|
9112
|
+
`,_i=`<script setup lang="ts">
|
|
9035
9113
|
import WelcomePage from "{{ createImport 'lib' 'pageSamples/welcome.vue' }}";
|
|
9036
9114
|
<\/script>
|
|
9037
9115
|
|
|
9038
9116
|
<template>
|
|
9039
9117
|
<WelcomePage />
|
|
9040
9118
|
</template>
|
|
9041
|
-
`,
|
|
9119
|
+
`,vi=`import routerFactory, { createRouters } from "{{ createImport 'lib' 'router' }}";
|
|
9042
9120
|
import { appProvider } from "{{ createImport 'lib' 'app' }}";
|
|
9043
9121
|
|
|
9044
9122
|
import app from "./app.vue";
|
|
@@ -9057,5 +9135,5 @@ export default routerFactory((routes) => {
|
|
|
9057
9135
|
},
|
|
9058
9136
|
};
|
|
9059
9137
|
});
|
|
9060
|
-
`,
|
|
9138
|
+
`,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
9139
|
//# sourceMappingURL=index.js.map
|