tspace-spear 1.2.5-beta.5 โ 1.2.6-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +300 -26
- package/dist/cli/controller.d.ts +1 -1
- package/dist/cli/controller.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/lib/core/compiler/generator.js +76 -26
- package/dist/lib/core/compiler/generator.js.map +1 -1
- package/dist/lib/core/compiler/pre-routes.d.ts +26 -264
- package/dist/lib/core/compiler/pre-routes.js +6 -148
- package/dist/lib/core/compiler/pre-routes.js.map +1 -1
- package/dist/lib/core/decorators/context.js +1 -1
- package/dist/lib/core/decorators/context.js.map +1 -1
- package/dist/lib/core/decorators/swagger.d.ts +1 -1
- package/dist/lib/core/decorators/swagger.js +1 -1
- package/dist/lib/core/decorators/swagger.js.map +1 -1
- package/dist/lib/core/server/index.d.ts +1 -0
- package/dist/lib/core/server/index.js +65 -15
- package/dist/lib/core/server/index.js.map +1 -1
- package/dist/lib/core/server/parser-factory.js +200 -106
- package/dist/lib/core/server/parser-factory.js.map +1 -1
- package/dist/lib/core/types/index.d.ts +5 -3
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -3,10 +3,23 @@
|
|
|
3
3
|
[](https://www.npmjs.com)
|
|
4
4
|
[](https://www.npmjs.com)
|
|
5
5
|
|
|
6
|
-
tspace-spear is a lightweight
|
|
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
|
|
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 `app.useSwagger()` (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
|
-
|
|
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
|
-
|
|
579
|
+
const key = keys[i];
|
|
554
580
|
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
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
|
-
|
|
565
|
-
|
|
566
|
-
|
|
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
|
-
|
|
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
|
-
|
|
604
|
-
|
|
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
|
|
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'
|
|
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
|
package/dist/cli/controller.d.ts
CHANGED
|
@@ -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
|
|
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";
|
package/dist/cli/controller.js
CHANGED
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", "
|
|
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) {
|
package/dist/cli/index.js.map
CHANGED
|
@@ -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,
|
|
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"}
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.generateRoutes = generateRoutes;
|
|
7
7
|
const ts_morph_1 = require("ts-morph");
|
|
8
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
8
9
|
const fs_1 = __importDefault(require("fs"));
|
|
9
10
|
const path_1 = __importDefault(require("path"));
|
|
10
11
|
const HTTP_METHODS = {
|
|
@@ -50,7 +51,7 @@ function parseType(type) {
|
|
|
50
51
|
if (type === "never") {
|
|
51
52
|
return null;
|
|
52
53
|
}
|
|
53
|
-
if (type.startsWith("Record")) {
|
|
54
|
+
if (type.startsWith("Record<")) {
|
|
54
55
|
return {};
|
|
55
56
|
}
|
|
56
57
|
if (type.startsWith("Partial<")) {
|
|
@@ -165,7 +166,23 @@ function resolveType(type) {
|
|
|
165
166
|
if (!decl)
|
|
166
167
|
continue;
|
|
167
168
|
const propType = prop.getTypeAtLocation(decl);
|
|
168
|
-
|
|
169
|
+
const text = propType.getText(decl);
|
|
170
|
+
const key = prop.getName();
|
|
171
|
+
let value = resolveType(propType);
|
|
172
|
+
if (/^\s*(\(.*\)\s*=>|function\b)/.test(value)) {
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
if (text.includes('[x: string]')) {
|
|
176
|
+
value = text;
|
|
177
|
+
}
|
|
178
|
+
;
|
|
179
|
+
let colon = ":";
|
|
180
|
+
const maybeOptional = value.includes(" | undefined");
|
|
181
|
+
if (maybeOptional) {
|
|
182
|
+
value = value.replace(" | undefined", "");
|
|
183
|
+
colon = "?:";
|
|
184
|
+
}
|
|
185
|
+
obj.push(`${key}${colon} ${value}`);
|
|
169
186
|
}
|
|
170
187
|
return `{ ${obj.join("; ")} }`;
|
|
171
188
|
}
|
|
@@ -177,6 +194,8 @@ function extractPropertyType(type, key, node) {
|
|
|
177
194
|
return "never";
|
|
178
195
|
const t = prop.getTypeAtLocation(node);
|
|
179
196
|
const text = t.getText(node);
|
|
197
|
+
if (text.includes('[x: string]'))
|
|
198
|
+
return text;
|
|
180
199
|
if (!text || text.includes("undefined"))
|
|
181
200
|
return "never";
|
|
182
201
|
return resolveType(t) ?? "never";
|
|
@@ -239,31 +258,18 @@ async function generateRoutes(options) {
|
|
|
239
258
|
}
|
|
240
259
|
}
|
|
241
260
|
}
|
|
242
|
-
const
|
|
243
|
-
|
|
244
|
-
|
|
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] = {
|
|
261
|
+
const groupedTypes = routes.reduce((acc, r) => {
|
|
262
|
+
acc[r.path] ??= {};
|
|
263
|
+
acc[r.path][r.method] = {
|
|
259
264
|
response: r.response,
|
|
260
265
|
body: r.body,
|
|
261
266
|
params: r.params,
|
|
262
267
|
query: r.query,
|
|
263
268
|
files: r.files,
|
|
264
269
|
};
|
|
265
|
-
|
|
266
|
-
|
|
270
|
+
return acc;
|
|
271
|
+
}, {});
|
|
272
|
+
const routeMapTypes = Object.entries(groupedTypes)
|
|
267
273
|
.map(([path, methods]) => {
|
|
268
274
|
const methodBlock = Object.entries(methods)
|
|
269
275
|
.map(([method, c]) => `
|
|
@@ -273,23 +279,59 @@ async function generateRoutes(options) {
|
|
|
273
279
|
body: ${c.body}
|
|
274
280
|
files: ${c.files}
|
|
275
281
|
response: ${c.response}
|
|
276
|
-
}`)
|
|
277
|
-
.join("\n");
|
|
282
|
+
}`).join("\n");
|
|
278
283
|
return `
|
|
279
284
|
"${path}": {
|
|
280
|
-
${methodBlock}
|
|
285
|
+
${methodBlock}
|
|
281
286
|
}`;
|
|
282
287
|
})
|
|
283
288
|
.join("\n");
|
|
289
|
+
const formatValue = (v) => {
|
|
290
|
+
if (typeof v === "string")
|
|
291
|
+
return v;
|
|
292
|
+
return JSON.stringify(v);
|
|
293
|
+
};
|
|
294
|
+
const groupedValues = routes.reduce((acc, route) => {
|
|
295
|
+
if (!acc[route.path]) {
|
|
296
|
+
acc[route.path] = {};
|
|
297
|
+
}
|
|
298
|
+
acc[route.path][route.method] = {
|
|
299
|
+
params: parseType(route.params),
|
|
300
|
+
query: parseType(route.query),
|
|
301
|
+
body: parseType(route.body),
|
|
302
|
+
files: parseType(route.files),
|
|
303
|
+
response: parseType(route.response),
|
|
304
|
+
};
|
|
305
|
+
return acc;
|
|
306
|
+
}, {});
|
|
307
|
+
const routerMapValues = Object.entries(groupedValues)
|
|
308
|
+
.map(([path, methods]) => {
|
|
309
|
+
const methodBlock = Object.entries(methods)
|
|
310
|
+
.map(([method, c]) => `
|
|
311
|
+
${method}: {
|
|
312
|
+
params: ${formatValue(c.params)},
|
|
313
|
+
query: ${formatValue(c.query)},
|
|
314
|
+
body: ${formatValue(c.body)},
|
|
315
|
+
files: ${formatValue(c.files)},
|
|
316
|
+
response: ${formatValue(c.response)}
|
|
317
|
+
}`).join(",\n");
|
|
318
|
+
return `
|
|
319
|
+
"${path}": {
|
|
320
|
+
${methodBlock}
|
|
321
|
+
}`;
|
|
322
|
+
})
|
|
323
|
+
.join(",\n");
|
|
284
324
|
const output = `
|
|
285
325
|
// @ts-nocheck
|
|
286
326
|
// AUTO GENERATED FILE
|
|
287
327
|
// DO NOT EDIT
|
|
288
328
|
|
|
289
|
-
export const appRoutes =
|
|
329
|
+
export const appRoutes = {
|
|
330
|
+
${routerMapValues}
|
|
331
|
+
}
|
|
290
332
|
|
|
291
333
|
export interface AppRoutes {
|
|
292
|
-
${
|
|
334
|
+
${routeMapTypes}
|
|
293
335
|
}
|
|
294
336
|
|
|
295
337
|
export type AppRoute = keyof AppRoutes
|
|
@@ -301,6 +343,14 @@ export type AppRoute = keyof AppRoutes
|
|
|
301
343
|
recursive: true,
|
|
302
344
|
});
|
|
303
345
|
await fs_1.default.promises.writeFile(outPath, output);
|
|
346
|
+
const compiled = typescript_1.default.transpileModule(output, {
|
|
347
|
+
compilerOptions: {
|
|
348
|
+
module: typescript_1.default.ModuleKind.CommonJS,
|
|
349
|
+
target: typescript_1.default.ScriptTarget.ES2020,
|
|
350
|
+
},
|
|
351
|
+
});
|
|
352
|
+
const jsPath = outPath.replace(/\.ts$/, ".js");
|
|
353
|
+
await fs_1.default.promises.writeFile(jsPath, compiled.outputText, "utf8");
|
|
304
354
|
return routes;
|
|
305
355
|
}
|
|
306
356
|
//# sourceMappingURL=generator.js.map
|
|
@@ -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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"}
|