tspace-spear 1.2.5-beta.5 โ†’ 1.2.6

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/README.md CHANGED
@@ -3,10 +3,23 @@
3
3
  [![NPM version](https://img.shields.io/npm/v/tspace-spear.svg)](https://www.npmjs.com)
4
4
  [![NPM downloads](https://img.shields.io/npm/dm/tspace-spear.svg)](https://www.npmjs.com)
5
5
 
6
- tspace-spear is a lightweight and high-performance API framework for Node.js,
7
- built on the native HTTP server with optional support for uWebSockets.js (C++) to achieve maximum speed and efficiency.
6
+ **tspace-spear** is a lightweight, high-performance API framework for Node.js, built on the native HTTP server with optional support for uWebSockets.js (C++) to achieve maximum speed and efficiency.
8
7
 
9
- It is designed with a strong focus on delivering an excellent developer experience.
8
+ It is designed with a strong focus on developer experience and provides end-to-end (E2E) type safety and testing support across the full request lifecycle, from request input to response output (see [E2E](#e2e)).
9
+
10
+ ---
11
+
12
+ ## Features
13
+
14
+ - โšก High-performance core built on native Node.js HTTP
15
+ - ๐Ÿš€ Optional uWebSockets.js support via adapter for ultra-low latency and maximum throughput
16
+ - ๐Ÿง  End-to-end (E2E) type safety across request โ†’ response lifecycle
17
+ - ๐Ÿงช Built-in testing support for E2E validation
18
+ - ๐Ÿงฉ Simple and intuitive developer experience
19
+ - ๐Ÿ”Œ Flexible architecture for plugins and extensions
20
+ - ๐Ÿ“˜ Auto-generated Swagger documentation via `@Swagger()` decorator (zero manual configuration required)
21
+
22
+ ---
10
23
 
11
24
  ## Install
12
25
 
@@ -41,6 +54,7 @@ See the [`docs`](https://thanathip41.github.io/tspace-spear) directory for full
41
54
  - [Router](#router)
42
55
  - [Swagger](#swagger)
43
56
  - [WebSocket](#websocket)
57
+ - [E2E](#e2e)
44
58
  - [Example CRUD](#example-crud)
45
59
 
46
60
  ## Start Server
@@ -508,8 +522,12 @@ import CatController from './cat-controller.ts'
508
522
  controllers: [ CatController ]
509
523
  // if you want to import controllers with a directory can you follow the example
510
524
  // controllers : {
511
- // folder : `${__dirname}/controllers`,
512
- // name : /controller\.(ts|js)$/i
525
+ // folder : `${__dirname}/controllers`, // nestjs style `${__dirname}/modules/*`
526
+ // name : /controller\.(ts|js)$/i,
527
+
528
+ // *Auto-generate route metadata for type-safe E2E usage,
529
+ // *and swagger documentation. By default if use .useSwagger() in app no need to set any description
530
+ // preRouteTypes : true
513
531
  // }
514
532
  })
515
533
 
@@ -531,40 +549,48 @@ import CatController from './cat-controller.ts'
531
549
  })()
532
550
  ```
533
551
 
534
-
535
552
  ## Dto
536
553
  DTO (Data Transfer Object) is used to validate and transform incoming request data before it reaches your controller logic.
537
554
  ```js
538
555
  import {
539
556
  Controller ,
540
557
  Post,
541
- createDtoDecorator
558
+ createDtoDecorator,
559
+ Validate,
542
560
  type T
543
561
  } from 'tspace-spear';
544
562
 
545
563
  import z from "zod";
546
564
 
547
- const ValidateDtoBody = (keys: string[]) => {
565
+ import {
566
+ IsString,
567
+ IsInt,
568
+ validate
569
+ } from "class-validator";
570
+
571
+ import { ClassConstructor, plainToInstance } from 'class-transformer';
572
+
573
+ const ValidateDtoCustomBody = (keys: string[]) => {
548
574
  return createDtoDecorator((ctx) => {
549
575
  const body = ctx.body ?? {};
550
576
  const issues: Array<{ path: string; message: string }> = [];
551
577
 
552
578
  for (let i = 0; i < keys.length; i++) {
553
- const key = keys[i];
579
+ const key = keys[i];
554
580
 
555
- if (body[key] == null) {
556
- issues.push({
557
- path: key,
558
- message: "Missing field",
559
- });
560
- }
581
+ if (body[key] == null) {
582
+ issues.push({
583
+ path: key,
584
+ message: "Missing field",
585
+ });
586
+ }
561
587
  }
562
588
 
563
589
  if (issues.length > 0) {
564
- throw {
565
- message : "Validation failed",
566
- issues
567
- }
590
+ throw {
591
+ message : "Validation failed",
592
+ issues
593
+ }
568
594
  }
569
595
  });
570
596
  }
@@ -580,7 +606,12 @@ const ValidateDtoPromiseBody = (keys: string[]) => {
580
606
  return createDtoDecorator(async (ctx) => {
581
607
  await new Promise(resolve => setTimeout(resolve,500));
582
608
  // check in DB or other async operation
583
- throw new Error('Validation failed in promise!');
609
+ const cats = await catRepository.findMany({ where : { name : ctx.body.name }});
610
+
611
+ if(!cats.length) {
612
+ throw new Error('Validation failed in promise!');
613
+ }
614
+
584
615
  }, (ctx, error) => {
585
616
  // you implement your custom error handling for async validation here
586
617
  return ctx.res.status(400).json({
@@ -590,18 +621,70 @@ const ValidateDtoPromiseBody = (keys: string[]) => {
590
621
  });
591
622
  }
592
623
 
624
+ const ValidateDtoClsBody = <T extends object>(
625
+ cls: ClassConstructor<T>
626
+ ) => {
627
+ return createDtoDecorator(async (ctx) => {
628
+
629
+ const dto = plainToInstance(
630
+ cls,
631
+ ctx.body
632
+ );
633
+
634
+ const errors = await validate(dto);
635
+
636
+ if (errors.length > 0) {
637
+ throw {
638
+ message: "Validation failed",
639
+ issues: errors.flatMap((error) => {
640
+ const constraints = error.constraints ?? {};
641
+
642
+ const firstError = Object.values(constraints)[0] ?? "Validation error";
643
+
644
+ return {
645
+ path: error.property,
646
+ message: firstError,
647
+ };
648
+ })
649
+ };
650
+ }
651
+
652
+ ctx.body = dto;
653
+ }
654
+ );
655
+ };
656
+
593
657
  const catSchema = z.object({
594
658
  name: z.string(),
595
659
  age: z.number(),
596
660
  })
597
661
 
662
+ class CreateCatDto {
663
+ @IsString()
664
+ name!: string;
665
+
666
+ @IsInt()
667
+ age!: number;
668
+ }
669
+
598
670
 
599
671
  // file cat-controller.ts
600
672
  @Controller('/cats')
601
673
  export class CatController {
674
+
602
675
  @Post('/')
603
- @ValidateDtoBody(["name", "age"])
604
- public async basic(ctx : T.Context) {
676
+ // only required validation without type checking
677
+ @Validate(["name", "age"], { required: { allowEmptyString: false, allowNull: false } })
678
+ public async basic(ctx : T.Context<{ body : { name : any , age : any }}>) {
679
+ const body = ctx.body;
680
+ return {
681
+ body
682
+ }
683
+ }
684
+
685
+ @Post('/')
686
+ @ValidateDtoCustomBody(["name", "age"])
687
+ public async custom(ctx : T.Context<{ body : { name : string , age : number }}>) {
605
688
  const body = ctx.body;
606
689
  return {
607
690
  body
@@ -610,16 +693,26 @@ export class CatController {
610
693
 
611
694
  @Post('/zod')
612
695
  @ValidateDtoZodBody(catSchema)
613
- public async zod(ctx : T.Context) {
614
- const body = ctx.body as z.infer<typeof catSchema>;
696
+ public async zod(ctx : T.Context<z.infer<typeof catSchema>>) {
697
+ const body = ctx.body;
615
698
  return {
616
699
  body
617
700
  }
618
701
  }
619
702
 
620
703
  @Post('/promise')
621
- @ValidateDtoPromiseBody(['name', 'age'])
622
- public async promise(ctx : T.Context) {
704
+ @ValidateDtoPromiseBody(['name'])
705
+ public async promise(ctx : T.Context<{ body : { name : string }}>) {
706
+ const body = ctx.body;
707
+
708
+ return {
709
+ body
710
+ }
711
+ }
712
+
713
+ @Post('/cls')
714
+ @ValidateDtoClsBody(CreateCatDto)
715
+ public async cls(ctx : T.Context<{ body : CreateCatDto }>) {
623
716
  const body = ctx.body;
624
717
 
625
718
  return {
@@ -992,6 +1085,187 @@ new Spear()
992
1085
  })
993
1086
 
994
1087
 
1088
+ ```
1089
+
1090
+ ## E2E
1091
+ Provides end-to-end type safety and testing support across the full request lifecycle, from request input to
1092
+ response output. It allows you to:
1093
+ ```js
1094
+ // file cat-controller.ts
1095
+ import z from 'zod';
1096
+ import {
1097
+ type T,
1098
+ Controller,
1099
+ Get,
1100
+ Post,
1101
+ Put,
1102
+ Delete,
1103
+ createDtoDecorator
1104
+ } from "tspace-spear";
1105
+
1106
+ const catSchema = z.object({
1107
+ id: z.number(),
1108
+ name: z.string(),
1109
+ age: z.number(),
1110
+ });
1111
+
1112
+ const catSchemaAction = z.object({
1113
+ name: z.string(),
1114
+ age: z.number(),
1115
+ });
1116
+
1117
+ type Cat = z.infer<typeof catSchema>
1118
+
1119
+ let cats: z.infer<typeof catSchema>[] = [
1120
+ { id: 1, name: 'cat1', age: 1.6 },
1121
+ { id: 2, name: 'cat2', age: 1.8 },
1122
+ ];
1123
+
1124
+ const ValidateDtoBody = (schema: z.ZodTypeAny) => {
1125
+ return createDtoDecorator((ctx) => {
1126
+ const result = schema.parse(ctx.body);
1127
+ ctx.body = result as T.Body;
1128
+ });
1129
+ };
1130
+ @Controller('/cats')
1131
+ class CatController {
1132
+
1133
+ @Get('/')
1134
+ public async index({
1135
+ query,
1136
+ }: T.Context) {
1137
+ return {
1138
+ cats,
1139
+ };
1140
+ }
1141
+
1142
+ @Get('/:id')
1143
+ public async show({ res, params }: T.Context<{ params: { id: number } }>) : Promise<{
1144
+ cat : Cat
1145
+ }> {
1146
+ const cat = cats.find((d) => d.id === Number(params.id));
1147
+
1148
+ if(cat == null) {
1149
+ return res.notFound('not found cat')
1150
+ }
1151
+
1152
+ return {
1153
+ cat
1154
+ };
1155
+ }
1156
+
1157
+ @Post('/')
1158
+ @ValidateDtoBody(catSchemaAction)
1159
+ public async create({
1160
+ body,
1161
+ }: T.Context<{ body: z.infer<typeof catSchemaAction> }>) {
1162
+
1163
+ const cat = {
1164
+ id: cats.length + 1,
1165
+ ...body
1166
+ }
1167
+
1168
+ cats.push(cat);
1169
+
1170
+ return {
1171
+ cat,
1172
+ message: 'created',
1173
+ };
1174
+ }
1175
+
1176
+ @Put('/:id')
1177
+ @ValidateDtoBody(catSchemaAction.partial())
1178
+ public async update({
1179
+ res,
1180
+ params,
1181
+ body,
1182
+ }: T.Context<{
1183
+ params: { id: number };
1184
+ body: Partial<z.infer<typeof catSchemaAction>>;
1185
+ }>) {
1186
+ const id = Number(params.id);
1187
+
1188
+ const index = cats.findIndex((d) => d.id === id);
1189
+
1190
+ if (index === -1) {
1191
+ return res.notFound('not found cat')
1192
+ }
1193
+
1194
+ cats[index] = {
1195
+ ...cats[index],
1196
+ ...body,
1197
+ id
1198
+ };
1199
+
1200
+ const cat = cats[index]
1201
+
1202
+ return {
1203
+ message: 'updated',
1204
+ cat,
1205
+ };
1206
+ }
1207
+
1208
+ @Delete('/:id')
1209
+ public async remove({ res, params }: T.Context<{ params: { id: number } }>) {
1210
+ const id = Number(params.id);
1211
+
1212
+ const index = cats.findIndex((d) => d.id === id);
1213
+
1214
+ if (index === -1) {
1215
+ throw res.notFound('not found cat')
1216
+ }
1217
+
1218
+ cats = cats.filter((d) => d.id !== id);
1219
+
1220
+ return {
1221
+ message: 'deleted',
1222
+ };
1223
+ }
1224
+ }
1225
+
1226
+ export { CatController };
1227
+ export default CatController;
1228
+
1229
+ // file server/app.ts
1230
+ import Spear from "tspace-spear";
1231
+ const app = new Spear({
1232
+ logger : true,
1233
+ controllers: {
1234
+ folder : `${__dirname}/controllers`,
1235
+ name:/controller\.(ts|js)$/i,
1236
+ // don't forget to set this option for auto-generate route metadata for type-safe E2E usage,
1237
+ // and swagger documentation. By default if use .useSwagger() in app no need to set any description
1238
+ preRouteTypes: true
1239
+ }
1240
+ })
1241
+
1242
+ app.useGlobalPrefix('api');
1243
+ app.useBodyParser();
1244
+ app.listen(3000 , () => console.log(`Server is now listening http://localhost:3000`));
1245
+
1246
+ type AppRouter = typeof app.contract;
1247
+ export { AppRouter }
1248
+ export default app;
1249
+
1250
+ // file frontend/index.ts
1251
+ import { AppRouter } from "./server/app";
1252
+ import { ApiClient } from "tspace-spear/client";
1253
+
1254
+ const client: ApiClient<AppRouter> = new ApiClient(
1255
+ `http://localhost:3000/api`
1256
+ );
1257
+
1258
+ const test = await client.get("/catsq"); // Type error: Argument of type '"/catsq"' is not assignable to parameter of type '"/cats" | "/cats/:id" | ... 3 more
1259
+ const res = await client.get("/cats");
1260
+ res.data.cats = 1 // Type error: Type 'number' is not assignable to type '{ id: number; name: string; age: number; }[]'
1261
+ res.data.cats[0].name = 1 // Type error: Type 'number' is not assignable to type 'string'
1262
+ res.data.cats[0].age = "1.6" // Type error: Type 'string' is not assignable to type 'number'
1263
+
1264
+ console.log(res)
1265
+ // res.ok -> boolean
1266
+ // res.status -> number
1267
+ // res.data -> { cats: [{ id: 1, name: 'cat1', age: 1.6 },{ id: 2, name: 'cat2', age: 1.8 }] }
1268
+
995
1269
  ```
996
1270
 
997
1271
  ## Example CRUD
@@ -1 +1 @@
1
- export declare const CatController = "\nimport {\n type T,\n Controller,\n Get,\n Post,\n Put,\n Delete\n} from \"tspace-spear\";\n\ntype Cat = {\n id: number;\n name: string;\n age: number;\n};\n\nlet cats: Cat[] = [\n {\n id: 1,\n name: \"cat 1\",\n age: 2\n },\n {\n id: 2,\n name: \"cat 2\",\n age: 4\n }\n];\n\n@Controller(\"/cats\")\nexport default class CatController {\n\n @Get(\"/\")\n async index() {\n return {\n cats\n };\n }\n\n @Get(\"/:id\")\n async show({\n res,\n params\n }: T.Context<{\n params: {\n id: number;\n };\n }>) {\n\n const cat = cats.find(\n d => d.id === Number(params.id)\n );\n\n if (!cat) {\n throw res.notFound(\n \"Cat not found\"\n );\n }\n\n return {\n cat\n };\n }\n\n @Post(\"/\")\n async create({\n body\n }: T.Context<{\n body: {\n name: string;\n age: number;\n };\n }>) {\n\n const cat: Cat = {\n id: cats.length + 1,\n name: body.name,\n age: body.age\n };\n\n cats.push(cat);\n\n return {\n message: \"Created\",\n cat\n };\n }\n\n @Put(\"/:id\")\n async update({\n res,\n params,\n body\n }: T.Context<{\n params: {\n id: number;\n };\n body: Partial<{\n name: string;\n age: number;\n }>;\n }>) {\n\n const index = cats.findIndex(\n d => d.id === Number(params.id)\n );\n\n if (index === -1) {\n throw res.notFound(\n \"Cat not found\"\n );\n }\n\n cats[index] = {\n ...cats[index],\n ...body\n };\n\n return {\n message: \"Updated\",\n cat: cats[index]\n };\n }\n\n @Delete(\"/:id\")\n async remove({\n res,\n params\n }: T.Context<{\n params: {\n id: number;\n };\n }>) {\n\n const index = cats.findIndex(\n d => d.id === Number(params.id)\n );\n\n if (index === -1) {\n thorw res.notFound(\n \"Cat not found\"\n );\n }\n\n cats = cats.filter(\n d => d.id !== Number(params.id)\n );\n\n return {\n message: \"Deleted\"\n };\n }\n}\n";
1
+ export declare const CatController = "\nimport {\n type T,\n Controller,\n Get,\n Post,\n Put,\n Delete\n} from \"tspace-spear\";\n\ntype Cat = {\n id: number;\n name: string;\n age: number;\n};\n\nlet cats: Cat[] = [\n {\n id: 1,\n name: \"cat 1\",\n age: 2\n },\n {\n id: 2,\n name: \"cat 2\",\n age: 4\n }\n];\n\n@Controller(\"/cats\")\nexport default class CatController {\n\n @Get(\"/\")\n async index() {\n return {\n cats\n };\n }\n\n @Get(\"/:id\")\n async show({\n res,\n params\n }: T.Context<{\n params: {\n id: number;\n };\n }>) {\n\n const cat = cats.find(\n d => d.id === Number(params.id)\n );\n\n if (!cat) {\n throw res.notFound(\n \"Cat not found\"\n );\n }\n\n return {\n cat\n };\n }\n\n @Post(\"/\")\n async create({\n body\n }: T.Context<{\n body: {\n name: string;\n age: number;\n };\n }>) {\n\n const cat: Cat = {\n id: cats.length + 1,\n name: body.name,\n age: body.age\n };\n\n cats.push(cat);\n\n return {\n message: \"Created\",\n cat\n };\n }\n\n @Put(\"/:id\")\n async update({\n res,\n params,\n body\n }: T.Context<{\n params: {\n id: number;\n };\n body: Partial<{\n name: string;\n age: number;\n }>;\n }>) {\n\n const index = cats.findIndex(\n d => d.id === Number(params.id)\n );\n\n if (index === -1) {\n throw res.notFound(\n \"Cat not found\"\n );\n }\n\n cats[index] = {\n ...cats[index],\n ...body\n };\n\n return {\n message: \"Updated\",\n cat: cats[index]\n };\n }\n\n @Delete(\"/:id\")\n async remove({\n res,\n params\n }: T.Context<{\n params: {\n id: number;\n };\n }>) {\n\n const index = cats.findIndex(\n d => d.id === Number(params.id)\n );\n\n if (index === -1) {\n throw res.notFound(\n \"Cat not found\"\n );\n }\n\n cats = cats.filter(\n d => d.id !== Number(params.id)\n );\n\n return {\n message: \"Deleted\"\n };\n }\n}\n";
@@ -140,7 +140,7 @@ export default class CatController {
140
140
  );
141
141
 
142
142
  if (index === -1) {
143
- thorw res.notFound(
143
+ throw res.notFound(
144
144
  "Cat not found"
145
145
  );
146
146
  }
package/dist/cli/index.js CHANGED
@@ -37,7 +37,7 @@ function createApp(targetPath) {
37
37
  recursive: true
38
38
  });
39
39
  fs_1.default.writeFileSync(path_1.default.join(root, "index.ts"), app_1.app);
40
- fs_1.default.writeFileSync(path_1.default.join(root, "controllers", "home.controller.ts"), controller_1.CatController);
40
+ fs_1.default.writeFileSync(path_1.default.join(root, "controllers", "cat.controller.ts"), controller_1.CatController);
41
41
  console.log(`App created at: ${root}`);
42
42
  }
43
43
  function createController(name) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;AAEA,4CAAoB;AACpB,gDAAwB;AACxB,+BAA4B;AAC5B,6CAA6C;AAE7C,MAAM,CAAC,EAAE,AAAD,EAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAEhD,QAAQ,GAAG,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;IAE5B,KAAK,YAAY;QACf,SAAS,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM;IAER,KAAK,mBAAmB;QACtB,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM;IAER;QACE,OAAO,CAAC,GAAG,CAAC;;;;;CAKf,CAAC,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,UAAmB;IAEpC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,cAAI,CAAC,OAAO,CACvB,OAAO,CAAC,GAAG,EAAE,EACb,UAAU,CACX,CAAC;IAEF,YAAE,CAAC,SAAS,CAAC,IAAI,EAAE;QACjB,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,YAAE,CAAC,SAAS,CACV,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAC9B;QACE,SAAS,EAAE,IAAI;KAChB,CACF,CAAC;IAEF,YAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAC3B,SAAG,CACJ,CAAC;IAEF,YAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CACP,IAAI,EACJ,aAAa,EACb,oBAAoB,CACrB,EAAC,0BAAa,CAChB,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,mBAAmB,IAAI,EAAE,CAC1B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa;IAErC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GACZ,GAAG,IAAI,gBAAgB,CAAC;IAE1B,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CACzB,OAAO,CAAC,GAAG,EAAE,EACb,aAAa,EACb,QAAQ,CACT,CAAC;IAEF,YAAE,CAAC,SAAS,CACV,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EACpB;QACE,SAAS,EAAE,IAAI;KAChB,CACF,CAAC;IAEF,MAAM,SAAS,GACb,UAAU,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;IAElC,YAAE,CAAC,aAAa,CACd,MAAM,EACV;;;;;;;;;;gBAUgB,IAAI;uBACG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkE/B,CACE,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,uBAAuB,QAAQ,EAAE,CAClC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,KAAa;IAEb,OAAO,CACL,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QAC7B,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;AAEA,4CAAoB;AACpB,gDAAwB;AACxB,+BAA4B;AAC5B,6CAA6C;AAE7C,MAAM,CAAC,EAAE,AAAD,EAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAEhD,QAAQ,GAAG,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;IAE5B,KAAK,YAAY;QACf,SAAS,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM;IAER,KAAK,mBAAmB;QACtB,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACzB,MAAM;IAER;QACE,OAAO,CAAC,GAAG,CAAC;;;;;CAKf,CAAC,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,UAAmB;IAEpC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,cAAI,CAAC,OAAO,CACvB,OAAO,CAAC,GAAG,EAAE,EACb,UAAU,CACX,CAAC;IAEF,YAAE,CAAC,SAAS,CAAC,IAAI,EAAE;QACjB,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,YAAE,CAAC,SAAS,CACV,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAC9B;QACE,SAAS,EAAE,IAAI;KAChB,CACF,CAAC;IAEF,YAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAC3B,SAAG,CACJ,CAAC;IAEF,YAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CACP,IAAI,EACJ,aAAa,EACb,mBAAmB,CACpB,EAAC,0BAAa,CAChB,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,mBAAmB,IAAI,EAAE,CAC1B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa;IAErC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GACZ,GAAG,IAAI,gBAAgB,CAAC;IAE1B,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CACzB,OAAO,CAAC,GAAG,EAAE,EACb,aAAa,EACb,QAAQ,CACT,CAAC;IAEF,YAAE,CAAC,SAAS,CACV,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EACpB;QACE,SAAS,EAAE,IAAI;KAChB,CACF,CAAC;IAEF,MAAM,SAAS,GACb,UAAU,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;IAElC,YAAE,CAAC,aAAa,CACd,MAAM,EACV;;;;;;;;;;gBAUgB,IAAI;uBACG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkE/B,CACE,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,uBAAuB,QAAQ,EAAE,CAClC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,KAAa;IAEb,OAAO,CACL,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QAC7B,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACf,CAAC;AACJ,CAAC"}
@@ -50,7 +50,7 @@ function parseType(type) {
50
50
  if (type === "never") {
51
51
  return null;
52
52
  }
53
- if (type.startsWith("Record")) {
53
+ if (type.startsWith("Record<")) {
54
54
  return {};
55
55
  }
56
56
  if (type.startsWith("Partial<")) {
@@ -165,7 +165,23 @@ function resolveType(type) {
165
165
  if (!decl)
166
166
  continue;
167
167
  const propType = prop.getTypeAtLocation(decl);
168
- obj.push(`${prop.getName()}: ${resolveType(propType)}`);
168
+ const text = propType.getText(decl);
169
+ const key = prop.getName();
170
+ let value = resolveType(propType);
171
+ if (/^\s*(\(.*\)\s*=>|function\b)/.test(value)) {
172
+ continue;
173
+ }
174
+ if (text.includes('[x: string]')) {
175
+ value = text;
176
+ }
177
+ ;
178
+ let colon = ":";
179
+ const maybeOptional = value.includes(" | undefined");
180
+ if (maybeOptional) {
181
+ value = value.replace(" | undefined", "");
182
+ colon = "?:";
183
+ }
184
+ obj.push(`${key}${colon} ${value}`);
169
185
  }
170
186
  return `{ ${obj.join("; ")} }`;
171
187
  }
@@ -177,6 +193,8 @@ function extractPropertyType(type, key, node) {
177
193
  return "never";
178
194
  const t = prop.getTypeAtLocation(node);
179
195
  const text = t.getText(node);
196
+ if (text.includes('[x: string]'))
197
+ return text;
180
198
  if (!text || text.includes("undefined"))
181
199
  return "never";
182
200
  return resolveType(t) ?? "never";
@@ -239,31 +257,18 @@ async function generateRoutes(options) {
239
257
  }
240
258
  }
241
259
  }
242
- const grouped = {};
243
- const grouped1 = routes.reduce((acc, route) => {
244
- if (!acc[route.path]) {
245
- acc[route.path] = {};
246
- }
247
- acc[route.path][route.method] = {
248
- params: parseType(route.params),
249
- query: parseType(route.query),
250
- body: parseType(route.body),
251
- files: parseType(route.files),
252
- response: parseType(route.response),
253
- };
254
- return acc;
255
- }, {});
256
- for (const r of routes) {
257
- grouped[r.path] ??= {};
258
- grouped[r.path][r.method] = {
260
+ const groupedTypes = routes.reduce((acc, r) => {
261
+ acc[r.path] ??= {};
262
+ acc[r.path][r.method] = {
259
263
  response: r.response,
260
264
  body: r.body,
261
265
  params: r.params,
262
266
  query: r.query,
263
267
  files: r.files,
264
268
  };
265
- }
266
- const routeMap = Object.entries(grouped)
269
+ return acc;
270
+ }, {});
271
+ const routeMapTypes = Object.entries(groupedTypes)
267
272
  .map(([path, methods]) => {
268
273
  const methodBlock = Object.entries(methods)
269
274
  .map(([method, c]) => `
@@ -273,23 +278,59 @@ async function generateRoutes(options) {
273
278
  body: ${c.body}
274
279
  files: ${c.files}
275
280
  response: ${c.response}
276
- }`)
277
- .join("\n");
281
+ }`).join("\n");
278
282
  return `
279
283
  "${path}": {
280
- ${methodBlock}
284
+ ${methodBlock}
281
285
  }`;
282
286
  })
283
287
  .join("\n");
288
+ const formatValue = (v) => {
289
+ if (typeof v === "string")
290
+ return v;
291
+ return JSON.stringify(v);
292
+ };
293
+ const groupedValues = routes.reduce((acc, route) => {
294
+ if (!acc[route.path]) {
295
+ acc[route.path] = {};
296
+ }
297
+ acc[route.path][route.method] = {
298
+ params: parseType(route.params),
299
+ query: parseType(route.query),
300
+ body: parseType(route.body),
301
+ files: parseType(route.files),
302
+ response: parseType(route.response),
303
+ };
304
+ return acc;
305
+ }, {});
306
+ const routerMapValues = Object.entries(groupedValues)
307
+ .map(([path, methods]) => {
308
+ const methodBlock = Object.entries(methods)
309
+ .map(([method, c]) => `
310
+ ${method}: {
311
+ params: ${formatValue(c.params)},
312
+ query: ${formatValue(c.query)},
313
+ body: ${formatValue(c.body)},
314
+ files: ${formatValue(c.files)},
315
+ response: ${formatValue(c.response)}
316
+ }`).join(",\n");
317
+ return `
318
+ "${path}": {
319
+ ${methodBlock}
320
+ }`;
321
+ })
322
+ .join(",\n");
284
323
  const output = `
285
324
  // @ts-nocheck
286
325
  // AUTO GENERATED FILE
287
326
  // DO NOT EDIT
288
327
 
289
- export const appRoutes = ${JSON.stringify(grouped1, null, 2)}
328
+ export const appRoutes = {
329
+ ${routerMapValues}
330
+ }
290
331
 
291
332
  export interface AppRoutes {
292
- ${routeMap}
333
+ ${routeMapTypes}
293
334
  }
294
335
 
295
336
  export type AppRoute = keyof AppRoutes
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../src/lib/core/compiler/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../src/lib/core/compiler/generator.ts"],"names":[],"mappings":"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"}