tspace-spear 1.2.8 → 1.2.9
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 +253 -71
- package/dist/cli/generators/app/index.js.map +1 -1
- package/dist/cli/generators/controller/template.d.ts +1 -1
- package/dist/cli/generators/controller/template.js +15 -8
- package/dist/cli/generators/controller/template.js.map +1 -1
- package/dist/cli/generators/dto/index.js +5 -3
- package/dist/cli/generators/dto/index.js.map +1 -1
- package/dist/cli/generators/module/index.js +3 -3
- package/dist/cli/generators/service/template.d.ts +1 -1
- package/dist/cli/generators/service/template.js +17 -17
- package/dist/cli/index.js +1 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/lib/core/client/index.d.ts +13 -43
- package/dist/lib/core/client/index.js +47 -26
- package/dist/lib/core/client/index.js.map +1 -1
- package/dist/lib/core/{compiler → client}/types.d.ts +29 -0
- package/dist/lib/core/client/types.js.map +1 -0
- package/dist/lib/core/compiler/generator.d.ts +4 -6
- package/dist/lib/core/compiler/generator.js +168 -39
- package/dist/lib/core/compiler/generator.js.map +1 -1
- package/dist/lib/core/compiler/index.d.ts +2 -2
- package/dist/lib/core/compiler/index.js +2 -2
- package/dist/lib/core/compiler/index.js.map +1 -1
- package/dist/lib/core/compiler/pre-routes.d.ts +170 -34
- package/dist/lib/core/compiler/pre-routes.js +45 -25
- package/dist/lib/core/compiler/pre-routes.js.map +1 -1
- package/dist/lib/core/decorators/context.js +23 -15
- package/dist/lib/core/decorators/context.js.map +1 -1
- package/dist/lib/core/decorators/statusCode.js +3 -1
- package/dist/lib/core/decorators/statusCode.js.map +1 -1
- package/dist/lib/core/server/fast-router.d.ts +2 -2
- package/dist/lib/core/server/fast-router.js +17 -3
- package/dist/lib/core/server/fast-router.js.map +1 -1
- package/dist/lib/core/server/index.js +2 -2
- package/dist/lib/core/server/index.js.map +1 -1
- package/dist/lib/core/server/response.js +21 -1
- package/dist/lib/core/server/response.js.map +1 -1
- package/dist/lib/core/types/index.d.ts +32 -27
- package/package.json +6 -3
- package/dist/cli/app.d.ts +0 -1
- package/dist/cli/app.js +0 -32
- package/dist/cli/app.js.map +0 -1
- package/dist/cli/client.d.ts +0 -1
- package/dist/cli/client.js +0 -30
- package/dist/cli/client.js.map +0 -1
- package/dist/cli/controller.d.ts +0 -1
- package/dist/cli/controller.js +0 -169
- package/dist/cli/controller.js.map +0 -1
- package/dist/cli/middleware.d.ts +0 -1
- package/dist/cli/middleware.js +0 -16
- package/dist/cli/middleware.js.map +0 -1
- package/dist/client.d.ts +0 -1
- package/dist/client.js +0 -17
- package/dist/client.js.map +0 -1
- package/dist/common/middlewares/log.middleware.d.ts +0 -2
- package/dist/common/middlewares/log.middleware.js +0 -12
- package/dist/common/middlewares/log.middleware.js.map +0 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -32
- package/dist/index.js.map +0 -1
- package/dist/lib/core/compiler/types.js.map +0 -1
- package/dist/modules/cats/cat.controller.d.ts +0 -58
- package/dist/modules/cats/cat.controller.js +0 -90
- package/dist/modules/cats/cat.controller.js.map +0 -1
- package/dist/modules/cats/cat.dto.d.ts +0 -8
- package/dist/modules/cats/cat.dto.js +0 -44
- package/dist/modules/cats/cat.dto.js.map +0 -1
- package/dist/modules/cats/cat.service.d.ts +0 -23
- package/dist/modules/cats/cat.service.js +0 -56
- package/dist/modules/cats/cat.service.js.map +0 -1
- package/dist/tests/e2e..test.d.ts +0 -1
- package/dist/tests/e2e..test.js +0 -16
- package/dist/tests/e2e..test.js.map +0 -1
- /package/dist/lib/core/{compiler → client}/types.js +0 -0
package/README.md
CHANGED
|
@@ -12,12 +12,19 @@ It is designed with a strong focus on developer experience and provides end-to-e
|
|
|
12
12
|
## Features
|
|
13
13
|
|
|
14
14
|
- ⚡ High-performance core built on native Node.js HTTP
|
|
15
|
-
- 🚀 Optional uWebSockets.js support
|
|
16
|
-
- 🧠 End-to-end (
|
|
17
|
-
-
|
|
15
|
+
- 🚀 Optional [uWebSockets.js](#adapter) adapter support for ultra-low latency and maximum throughput
|
|
16
|
+
- 🧠 End-to-end [E2E](#e2e) type safety across the entire request → response lifecycle
|
|
17
|
+
- 🎮 Built-in support for [Controllers](#controller) and route-based architecture
|
|
18
|
+
- 🏷️ Powerful Decorator system for routes, middleware, validation, and metadata
|
|
19
|
+
- 📦 [DTO](#dto) (Data Transfer Object) support for structured and type-safe request handling
|
|
20
|
+
- 📂 Built-in [File Upload](#file-upload) support via `useFileUpload()` with zero configuration required
|
|
21
|
+
- 🔌 Native [WebSocket](#web-socket) support for real-time applications and event-driven systems
|
|
22
|
+
- ⚛️ [GraphQL](#graphql) support with flexible schema integration and HTTP adapters
|
|
23
|
+
- 🖥️ Built-in [cluster mode](#cluster) support for multi-core scalability and higher throughput
|
|
24
|
+
- 🧪 Built-in testing utilities for [E2E](#e2e) validation
|
|
18
25
|
- 🧩 Simple and intuitive developer experience
|
|
19
|
-
-
|
|
20
|
-
-
|
|
26
|
+
- 📘 Auto-generated [Swagger](#swagger) documentation via `app.useSwagger()` with zero manual configuration
|
|
27
|
+
- 🔥 Lightweight and optimized for high-performance APIs and microservices
|
|
21
28
|
|
|
22
29
|
---
|
|
23
30
|
|
|
@@ -36,7 +43,7 @@ See the [`docs`](https://thanathip41.github.io/tspace-spear) directory for full
|
|
|
36
43
|
|
|
37
44
|
## Basic Usage
|
|
38
45
|
- [Getting Started](#getting-started)
|
|
39
|
-
- [
|
|
46
|
+
- [Quick Started](#quick-started)
|
|
40
47
|
- [Adapter](#adapter)
|
|
41
48
|
- [Cluster](#cluster)
|
|
42
49
|
- [Global Prefix](#global-prefix)
|
|
@@ -55,8 +62,8 @@ See the [`docs`](https://thanathip41.github.io/tspace-spear) directory for full
|
|
|
55
62
|
- [Router](#router)
|
|
56
63
|
- [Swagger](#swagger)
|
|
57
64
|
- [WebSocket](#websocket)
|
|
65
|
+
- [Graphql](#graphql)
|
|
58
66
|
- [E2E](#e2e)
|
|
59
|
-
- [Example CRUD](#example-crud)
|
|
60
67
|
|
|
61
68
|
## Getting Started
|
|
62
69
|
```js
|
|
@@ -72,7 +79,7 @@ new Spear()
|
|
|
72
79
|
.listen(8000 , () => console.log(`Server is now listening http://localhost:8000`))
|
|
73
80
|
```
|
|
74
81
|
|
|
75
|
-
##
|
|
82
|
+
## Quick Started
|
|
76
83
|
Generate applications, modules, controllers, services, and middleware with the Spear CLI.
|
|
77
84
|
```sh
|
|
78
85
|
# Install CLI globally
|
|
@@ -1083,6 +1090,244 @@ new Spear()
|
|
|
1083
1090
|
|
|
1084
1091
|
```
|
|
1085
1092
|
|
|
1093
|
+
## Graphql
|
|
1094
|
+
GraphQL CRUD Example with graphql-http + tspace-spear
|
|
1095
|
+
|
|
1096
|
+
This example shows how to build a simple GraphQL CRUD API using graphql-http and tspace-spear.
|
|
1097
|
+
|
|
1098
|
+
It includes:
|
|
1099
|
+
|
|
1100
|
+
- GraphQL schema setup
|
|
1101
|
+
- Query and Mutation examples
|
|
1102
|
+
- Create / Read / Update / Delete operations
|
|
1103
|
+
- HTTP integration with graphql-http
|
|
1104
|
+
- cURL testing examples
|
|
1105
|
+
|
|
1106
|
+
The server uses an in-memory array as a fake database for simplicity.
|
|
1107
|
+
|
|
1108
|
+
Features
|
|
1109
|
+
- High performance HTTP server with tspace-spear
|
|
1110
|
+
- Native GraphQL schema definitions
|
|
1111
|
+
- Full CRUD operations
|
|
1112
|
+
- Simple and dependency-light setup
|
|
1113
|
+
- Works with standard GraphQL clients and tools
|
|
1114
|
+
|
|
1115
|
+
```sh
|
|
1116
|
+
npm install graphql graphql-http
|
|
1117
|
+
```
|
|
1118
|
+
|
|
1119
|
+
```js
|
|
1120
|
+
|
|
1121
|
+
import {
|
|
1122
|
+
GraphQLSchema,
|
|
1123
|
+
GraphQLObjectType,
|
|
1124
|
+
GraphQLString,
|
|
1125
|
+
GraphQLList,
|
|
1126
|
+
GraphQLNonNull,
|
|
1127
|
+
GraphQLID,
|
|
1128
|
+
} from 'graphql';
|
|
1129
|
+
|
|
1130
|
+
import { createHandler } from 'graphql-http/lib/use/http';
|
|
1131
|
+
import { type T, Spear } from "tspace-spear";
|
|
1132
|
+
|
|
1133
|
+
/**
|
|
1134
|
+
* Fake database
|
|
1135
|
+
*/
|
|
1136
|
+
const users : {
|
|
1137
|
+
id : string;
|
|
1138
|
+
name : string;
|
|
1139
|
+
email :string
|
|
1140
|
+
}[] = [];
|
|
1141
|
+
|
|
1142
|
+
/**
|
|
1143
|
+
* User Type
|
|
1144
|
+
*/
|
|
1145
|
+
const UserType = new GraphQLObjectType({
|
|
1146
|
+
name: 'User',
|
|
1147
|
+
|
|
1148
|
+
fields: {
|
|
1149
|
+
id: { type: GraphQLID },
|
|
1150
|
+
name: { type: GraphQLString },
|
|
1151
|
+
email: { type: GraphQLString },
|
|
1152
|
+
},
|
|
1153
|
+
});
|
|
1154
|
+
|
|
1155
|
+
/**
|
|
1156
|
+
* Queries (READ)
|
|
1157
|
+
*/
|
|
1158
|
+
const QueryType = new GraphQLObjectType({
|
|
1159
|
+
name: 'Query',
|
|
1160
|
+
|
|
1161
|
+
fields: {
|
|
1162
|
+
users: {
|
|
1163
|
+
type: new GraphQLList(UserType),
|
|
1164
|
+
|
|
1165
|
+
resolve: () => {
|
|
1166
|
+
return users;
|
|
1167
|
+
},
|
|
1168
|
+
},
|
|
1169
|
+
|
|
1170
|
+
user: {
|
|
1171
|
+
type: UserType,
|
|
1172
|
+
|
|
1173
|
+
args: {
|
|
1174
|
+
id: { type: new GraphQLNonNull(GraphQLID) },
|
|
1175
|
+
},
|
|
1176
|
+
|
|
1177
|
+
resolve: (_, args) => {
|
|
1178
|
+
return users.find((v) => v.id === args.id);
|
|
1179
|
+
},
|
|
1180
|
+
},
|
|
1181
|
+
},
|
|
1182
|
+
});
|
|
1183
|
+
|
|
1184
|
+
/**
|
|
1185
|
+
* Mutations (CREATE UPDATE DELETE)
|
|
1186
|
+
*/
|
|
1187
|
+
const MutationType = new GraphQLObjectType({
|
|
1188
|
+
name: 'Mutation',
|
|
1189
|
+
|
|
1190
|
+
fields: {
|
|
1191
|
+
/**
|
|
1192
|
+
* CREATE
|
|
1193
|
+
*/
|
|
1194
|
+
createUser: {
|
|
1195
|
+
type: UserType,
|
|
1196
|
+
|
|
1197
|
+
args: {
|
|
1198
|
+
name: { type: new GraphQLNonNull(GraphQLString) },
|
|
1199
|
+
email: { type: new GraphQLNonNull(GraphQLString) },
|
|
1200
|
+
},
|
|
1201
|
+
|
|
1202
|
+
resolve: (_, args) => {
|
|
1203
|
+
const user = {
|
|
1204
|
+
id: String(users.length + 1),
|
|
1205
|
+
name: args.name,
|
|
1206
|
+
email: args.email,
|
|
1207
|
+
};
|
|
1208
|
+
|
|
1209
|
+
users.push(user);
|
|
1210
|
+
|
|
1211
|
+
return user;
|
|
1212
|
+
},
|
|
1213
|
+
},
|
|
1214
|
+
|
|
1215
|
+
/**
|
|
1216
|
+
* UPDATE
|
|
1217
|
+
*/
|
|
1218
|
+
updateUser: {
|
|
1219
|
+
type: UserType,
|
|
1220
|
+
|
|
1221
|
+
args: {
|
|
1222
|
+
id: { type: new GraphQLNonNull(GraphQLID) },
|
|
1223
|
+
name: { type: GraphQLString },
|
|
1224
|
+
email: { type: GraphQLString },
|
|
1225
|
+
},
|
|
1226
|
+
|
|
1227
|
+
resolve: (_, args) => {
|
|
1228
|
+
const user = users.find((v) => v.id === args.id);
|
|
1229
|
+
|
|
1230
|
+
if (!user) {
|
|
1231
|
+
throw new Error('User not found');
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
if (args.name !== undefined) {
|
|
1235
|
+
user.name = args.name;
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
if (args.email !== undefined) {
|
|
1239
|
+
user.email = args.email;
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
return user;
|
|
1243
|
+
},
|
|
1244
|
+
},
|
|
1245
|
+
|
|
1246
|
+
/**
|
|
1247
|
+
* DELETE
|
|
1248
|
+
*/
|
|
1249
|
+
deleteUser: {
|
|
1250
|
+
type: GraphQLString,
|
|
1251
|
+
|
|
1252
|
+
args: {
|
|
1253
|
+
id: { type: new GraphQLNonNull(GraphQLID) },
|
|
1254
|
+
},
|
|
1255
|
+
|
|
1256
|
+
resolve: (_, args) => {
|
|
1257
|
+
const index = users.findIndex((v) => v.id === args.id);
|
|
1258
|
+
|
|
1259
|
+
if (index === -1) {
|
|
1260
|
+
throw new Error('User not found');
|
|
1261
|
+
}
|
|
1262
|
+
|
|
1263
|
+
users.splice(index, 1);
|
|
1264
|
+
|
|
1265
|
+
return 'Deleted';
|
|
1266
|
+
},
|
|
1267
|
+
},
|
|
1268
|
+
},
|
|
1269
|
+
});
|
|
1270
|
+
|
|
1271
|
+
/**
|
|
1272
|
+
* Schema
|
|
1273
|
+
*/
|
|
1274
|
+
const schema = new GraphQLSchema({
|
|
1275
|
+
query: QueryType,
|
|
1276
|
+
mutation: MutationType,
|
|
1277
|
+
});
|
|
1278
|
+
|
|
1279
|
+
/**
|
|
1280
|
+
* Handler
|
|
1281
|
+
*/
|
|
1282
|
+
const graphqlHandler = createHandler({
|
|
1283
|
+
schema,
|
|
1284
|
+
});
|
|
1285
|
+
|
|
1286
|
+
const app = new Spear()
|
|
1287
|
+
.post('/graphql',({ req , res }) => graphqlHandler(req , res))
|
|
1288
|
+
|
|
1289
|
+
app.listen(4000 , ({ port , server }) => {
|
|
1290
|
+
console.log(`server listening on : http://localhost:${port}/graphql`)
|
|
1291
|
+
})
|
|
1292
|
+
```
|
|
1293
|
+
|
|
1294
|
+
```sh
|
|
1295
|
+
## Create
|
|
1296
|
+
curl -X POST http://localhost:4000/graphql \
|
|
1297
|
+
-H "Content-Type: application/json" \
|
|
1298
|
+
-d '{
|
|
1299
|
+
"query": "mutation { createUser(name:\"John\", email:\"john@example.com\") { id name email } }"
|
|
1300
|
+
}'
|
|
1301
|
+
|
|
1302
|
+
## Read all
|
|
1303
|
+
curl -X POST http://localhost:4000/graphql \
|
|
1304
|
+
-H "Content-Type: application/json" \
|
|
1305
|
+
-d '{
|
|
1306
|
+
"query": "query { users { id name email } }"
|
|
1307
|
+
}'
|
|
1308
|
+
|
|
1309
|
+
## Read one
|
|
1310
|
+
curl -X POST http://localhost:4000/graphql \
|
|
1311
|
+
-H "Content-Type: application/json" \
|
|
1312
|
+
-d '{
|
|
1313
|
+
"query": "query { user(id:\"1\") { id name email } }"
|
|
1314
|
+
}'
|
|
1315
|
+
|
|
1316
|
+
## Update
|
|
1317
|
+
curl -X POST http://localhost:4000/graphql \
|
|
1318
|
+
-H "Content-Type: application/json" \
|
|
1319
|
+
-d '{
|
|
1320
|
+
"query": "mutation { updateUser(id:\"1\", name:\"Johnny\") { id name email } }"
|
|
1321
|
+
}'
|
|
1322
|
+
|
|
1323
|
+
## Delete
|
|
1324
|
+
curl -X POST http://localhost:4000/graphql \
|
|
1325
|
+
-H "Content-Type: application/json" \
|
|
1326
|
+
-d '{
|
|
1327
|
+
"query": "mutation { deleteUser(id:\"1\") }"
|
|
1328
|
+
}'
|
|
1329
|
+
```
|
|
1330
|
+
|
|
1086
1331
|
## E2E
|
|
1087
1332
|
Provides end-to-end type safety and testing support across the full request lifecycle, from request input to
|
|
1088
1333
|
response output. It allows you to:
|
|
@@ -1264,66 +1509,3 @@ const res = await client.get("/cats");
|
|
|
1264
1509
|
|
|
1265
1510
|
```
|
|
1266
1511
|
|
|
1267
|
-
## Example CRUD
|
|
1268
|
-
```js
|
|
1269
|
-
import { Spear } from "tspace-spear";
|
|
1270
|
-
|
|
1271
|
-
const spears = [
|
|
1272
|
-
{
|
|
1273
|
-
id : 1,
|
|
1274
|
-
damage : 100
|
|
1275
|
-
},
|
|
1276
|
-
{
|
|
1277
|
-
id : 2,
|
|
1278
|
-
damage : 75
|
|
1279
|
-
},
|
|
1280
|
-
{
|
|
1281
|
-
id : 3,
|
|
1282
|
-
damage : 50
|
|
1283
|
-
}
|
|
1284
|
-
]
|
|
1285
|
-
|
|
1286
|
-
new Spear()
|
|
1287
|
-
// enable body payload
|
|
1288
|
-
.useBodyParser()
|
|
1289
|
-
.get('/' , () => spears)
|
|
1290
|
-
.get('/:id' , ({ params }) => spears.find(spear => spear.id === Number(params.id ?? 0)))
|
|
1291
|
-
.post('/' , ({ body }) => {
|
|
1292
|
-
// please validation the your body
|
|
1293
|
-
const damage = Number(body.damage ?? (Math.random() * 100).toFixed(0))
|
|
1294
|
-
|
|
1295
|
-
const id = spears.reduce((max, spear) => spear.id > max ? spear.id : max, 0) + 1
|
|
1296
|
-
|
|
1297
|
-
spears.push({ id , damage })
|
|
1298
|
-
|
|
1299
|
-
return spears.find(spear => spear.id === id)
|
|
1300
|
-
})
|
|
1301
|
-
.patch('/:id' , ({ params , body , res }) => {
|
|
1302
|
-
|
|
1303
|
-
const damage = Number(body.damage ?? (Math.random() * 100).toFixed(0))
|
|
1304
|
-
|
|
1305
|
-
const id = Number(params.id)
|
|
1306
|
-
|
|
1307
|
-
const spear = spears.find(spear => spear.id === id)
|
|
1308
|
-
|
|
1309
|
-
if (spear == null) return res.status(404).json({ message : 'Spear not found'})
|
|
1310
|
-
|
|
1311
|
-
spear.damage = damage;
|
|
1312
|
-
|
|
1313
|
-
return spears.find(spear => spear.id === id)
|
|
1314
|
-
})
|
|
1315
|
-
.delete('/:id', ({ params , res }) => {
|
|
1316
|
-
|
|
1317
|
-
const id = Number(params.id)
|
|
1318
|
-
|
|
1319
|
-
const spear = spears.find(spear => spear.id === id)
|
|
1320
|
-
|
|
1321
|
-
if (spear == null) return res.status(404).json({ message : 'Spear not found'})
|
|
1322
|
-
|
|
1323
|
-
spears.splice(spears.findIndex(spear => spear.id === Number(params.id ?? 0)), 1)
|
|
1324
|
-
|
|
1325
|
-
return res.status(204).json()
|
|
1326
|
-
})
|
|
1327
|
-
.listen(8000 , () => console.log(`Server is now listening http://localhost:8000`))
|
|
1328
|
-
|
|
1329
|
-
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/generators/app/index.ts"],"names":[],"mappings":";;;;;AAsBA,8BAsJC;AA5KD,4CAAoB;AACpB,gDAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/generators/app/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const ControllerTemplate = "\nimport {\n type T,\n Controller,\n Middleware,\n Get,\n Post,\n Put,\n Delete,\n ValidateDto\n} from \"tspace-spear\";\nimport { CatService } from \"./cat.service\";\nimport { CreateCatDto , UpdateCatDto } from \"./cat.dto\";\nimport { LogMiddleware } from \"../../common/middlewares/log.middleware\";\n\n@Controller(\"/cats\")\nclass CatController {\n\n constructor(\n private catService: CatService = new CatService()\n ) {}\n\n @Get(\"/\")\n @Middleware(LogMiddleware)\n async index() {\n
|
|
1
|
+
export declare const ControllerTemplate = "\nimport {\n type T,\n Controller,\n Middleware,\n Get,\n Post,\n Put,\n Delete,\n ValidateDto\n} from \"tspace-spear\";\nimport { CatService } from \"./cat.service\";\nimport { CreateCatDto , UpdateCatDto } from \"./cat.dto\";\nimport { LogMiddleware } from \"../../common/middlewares/log.middleware\";\n\n@Controller(\"/cats\")\nclass CatController {\n\n constructor(\n private catService: CatService = new CatService()\n ) {}\n\n @Get(\"/\")\n @Middleware(LogMiddleware)\n async index() {\n const cats = this.catService.index();\n return { cats };\n }\n\n @Get(\"/:id\")\n @Middleware(LogMiddleware)\n async show({\n params\n }: T.Context<{\n params: {\n id: number;\n };\n }>) {\n const cat = this.catService.show(+params.id);\n return { cat }\n }\n\n @Post(\"/\")\n @ValidateDto(CreateCatDto)\n @Middleware(LogMiddleware)\n async create({\n body\n }: T.Context<{\n body: CreateCatDto;\n }>) {\n\n const cat = this.catService\n .create({ \n name: body.name, \n age: body.age \n });\n\n return { cat };\n }\n\n @Put(\"/:id\")\n @ValidateDto(UpdateCatDto)\n @Middleware(LogMiddleware)\n async update({\n params,\n body\n }: T.Context<{\n params: {\n id: number;\n };\n body: UpdateCatDto;\n }>) {\n\n const cat = this.catService\n .update(+params.id, { \n name: body.name, \n age: body.age \n });\n\n return { cat }\n }\n\n @Delete(\"/:id\")\n @Middleware(LogMiddleware)\n async remove({\n params\n }: T.Context<{\n params: {\n id: number;\n };\n }>) {\n\n const deleted = this.catService\n .remove(+params.id);\n\n return deleted;\n }\n}\n\nexport { CatController };\nexport default CatController;\n";
|
|
@@ -26,7 +26,8 @@ class CatController {
|
|
|
26
26
|
@Get("/")
|
|
27
27
|
@Middleware(LogMiddleware)
|
|
28
28
|
async index() {
|
|
29
|
-
|
|
29
|
+
const cats = this.catService.index();
|
|
30
|
+
return { cats };
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
@Get("/:id")
|
|
@@ -38,8 +39,8 @@ class CatController {
|
|
|
38
39
|
id: number;
|
|
39
40
|
};
|
|
40
41
|
}>) {
|
|
41
|
-
|
|
42
|
-
return
|
|
42
|
+
const cat = this.catService.show(+params.id);
|
|
43
|
+
return { cat }
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
@Post("/")
|
|
@@ -51,11 +52,13 @@ class CatController {
|
|
|
51
52
|
body: CreateCatDto;
|
|
52
53
|
}>) {
|
|
53
54
|
|
|
54
|
-
|
|
55
|
+
const cat = this.catService
|
|
55
56
|
.create({
|
|
56
57
|
name: body.name,
|
|
57
58
|
age: body.age
|
|
58
59
|
});
|
|
60
|
+
|
|
61
|
+
return { cat };
|
|
59
62
|
}
|
|
60
63
|
|
|
61
64
|
@Put("/:id")
|
|
@@ -71,11 +74,13 @@ class CatController {
|
|
|
71
74
|
body: UpdateCatDto;
|
|
72
75
|
}>) {
|
|
73
76
|
|
|
74
|
-
|
|
75
|
-
.update(params.id, {
|
|
77
|
+
const cat = this.catService
|
|
78
|
+
.update(+params.id, {
|
|
76
79
|
name: body.name,
|
|
77
80
|
age: body.age
|
|
78
81
|
});
|
|
82
|
+
|
|
83
|
+
return { cat }
|
|
79
84
|
}
|
|
80
85
|
|
|
81
86
|
@Delete("/:id")
|
|
@@ -88,8 +93,10 @@ class CatController {
|
|
|
88
93
|
};
|
|
89
94
|
}>) {
|
|
90
95
|
|
|
91
|
-
|
|
92
|
-
.remove(params.id);
|
|
96
|
+
const deleted = this.catService
|
|
97
|
+
.remove(+params.id);
|
|
98
|
+
|
|
99
|
+
return deleted;
|
|
93
100
|
}
|
|
94
101
|
}
|
|
95
102
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../src/cli/generators/controller/template.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../src/cli/generators/controller/template.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqGjC,CAAC"}
|
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
Min,
|
|
24
24
|
IsNotEmpty,
|
|
25
25
|
IsNumber,
|
|
26
|
+
IsOptional
|
|
26
27
|
} from "class-validator";
|
|
27
28
|
|
|
28
29
|
export class Create${className} {
|
|
@@ -36,13 +37,14 @@ export class Create${className} {
|
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
export class Update${className} {
|
|
40
|
+
@IsOptional()
|
|
39
41
|
@IsString()
|
|
40
|
-
|
|
41
|
-
name!: string;
|
|
42
|
+
name?: string;
|
|
42
43
|
|
|
44
|
+
@IsOptional()
|
|
43
45
|
@IsNumber()
|
|
44
46
|
@Min(0.1)
|
|
45
|
-
age
|
|
47
|
+
age?: number;
|
|
46
48
|
}
|
|
47
49
|
`);
|
|
48
50
|
console.log(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/generators/dto/index.ts"],"names":[],"mappings":";;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/generators/dto/index.ts"],"names":[],"mappings":";;;;;AAQA,8BAwDC;AAhED,4CAAoB;AACpB,gDAAwB;AACxB,sCAImB;AAEnB,SAAgB,SAAS,CAAC,IAAa,EAAC,IAAa;IACjD,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAEH,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAG,SAAS,EAAE,IAAA,iBAAQ,EAAC,IAAI,CAAC,CAAC,CAAC;IAEnF,MAAM,QAAQ,GAAG,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,SAAS,CAAC;IAE9C,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAEjD,YAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,MAAM,SAAS,GAAG,IAAA,mBAAU,EAAC,IAAA,mBAAU,EAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;IAEvD,YAAE,CAAC,aAAa,CACd,MAAM,EACN;;;;;;;;;qBASiB,SAAS;;;;;;;;;;qBAUT,SAAS;;;;;;;;;;CAU7B,CACE,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC;WACF,MAAM;;gCAEe,IAAI;;CAEnC,CAAC,CAAA;AACF,CAAC"}
|
|
@@ -54,7 +54,7 @@ class ${controllerName} {
|
|
|
54
54
|
async show({
|
|
55
55
|
params
|
|
56
56
|
}: T.Context<{ params: { id: number } }>) {
|
|
57
|
-
return this.${(0, shared_1.toSingular)(name)}Service.show(params.id);
|
|
57
|
+
return this.${(0, shared_1.toSingular)(name)}Service.show(+params.id);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
@Post("/")
|
|
@@ -81,7 +81,7 @@ class ${controllerName} {
|
|
|
81
81
|
}>) {
|
|
82
82
|
|
|
83
83
|
return this.${(0, shared_1.toSingular)(name)}Service
|
|
84
|
-
.update(params.id, {
|
|
84
|
+
.update(+params.id, {
|
|
85
85
|
name: body.name,
|
|
86
86
|
age: body.age
|
|
87
87
|
});
|
|
@@ -92,7 +92,7 @@ class ${controllerName} {
|
|
|
92
92
|
params
|
|
93
93
|
}: T.Context<{ params: { id: number } }>) {
|
|
94
94
|
return this.${(0, shared_1.toSingular)(name)}Service
|
|
95
|
-
.remove(params.id);
|
|
95
|
+
.remove(+params.id);
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const ServiceTemplate = "\ntype Cat = {\n id: number;\n name: string;\n age: number;\n}\n\nexport class CatService {\n private cats: Cat[] = [\n { id: 1, name: 'cat1', age: 1.6 },\n { id: 2, name: 'cat2', age: 1.8 },\n ];\n public async index() {\n return this.cats;\n };\n\n public async show(id: number) {\n
|
|
1
|
+
export declare const ServiceTemplate = "\nimport { \n CreateCatDto, \n UpdateCatDto \n} from \"./cat.dto\";\n\ntype Cat = {\n id: number;\n name: string;\n age: number;\n}\n\nexport class CatService {\n private cats: Cat[] = [\n { id: 1, name: 'cat1', age: 1.6 },\n { id: 2, name: 'cat2', age: 1.8 },\n ];\n public async index() {\n return this.cats;\n };\n\n public async show(id: number) {\n const cat = this.cats.find(cat => cat.id === id);\n if(cat == null) return null;\n return cat;\n };\n\n public async create({ name, age }: CreateCatDto) {\n\n const cat = {\n id: this.cats.length + 1,\n name: name,\n age: age\n };\n\n this.cats.push(cat);\n\n return cat;\n }\n \n public async update(id: number, { name, age }: UpdateCatDto) {\n const index = this.cats.findIndex(d => d.id === id);\n\n if (index === -1) {\n throw new Error(\"Cat not found\");\n }\n\n this.cats[index] = {\n ...this.cats[index],\n ...{ name, age } \n };\n\n const cat = this.cats[index];\n\n return cat;\n }\n\n public async remove(id: number) {\n const index = this.cats.findIndex(d => d.id === id);\n\n if (index === -1) {\n throw new Error(\"Cat not found\");\n }\n\n this.cats.splice(index, 1);\n\n return true;\n }\n}\n";
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ServiceTemplate = void 0;
|
|
4
4
|
exports.ServiceTemplate = `
|
|
5
|
+
import {
|
|
6
|
+
CreateCatDto,
|
|
7
|
+
UpdateCatDto
|
|
8
|
+
} from "./cat.dto";
|
|
9
|
+
|
|
5
10
|
type Cat = {
|
|
6
11
|
id: number;
|
|
7
12
|
name: string;
|
|
@@ -18,12 +23,14 @@ export class CatService {
|
|
|
18
23
|
};
|
|
19
24
|
|
|
20
25
|
public async show(id: number) {
|
|
21
|
-
|
|
26
|
+
const cat = this.cats.find(cat => cat.id === id);
|
|
27
|
+
if(cat == null) return null;
|
|
28
|
+
return cat;
|
|
22
29
|
};
|
|
23
30
|
|
|
24
|
-
public async create({ name, age }:
|
|
31
|
+
public async create({ name, age }: CreateCatDto) {
|
|
25
32
|
|
|
26
|
-
const cat
|
|
33
|
+
const cat = {
|
|
27
34
|
id: this.cats.length + 1,
|
|
28
35
|
name: name,
|
|
29
36
|
age: age
|
|
@@ -31,13 +38,10 @@ export class CatService {
|
|
|
31
38
|
|
|
32
39
|
this.cats.push(cat);
|
|
33
40
|
|
|
34
|
-
return
|
|
35
|
-
message: "Created",
|
|
36
|
-
cat
|
|
37
|
-
};
|
|
41
|
+
return cat;
|
|
38
42
|
}
|
|
39
43
|
|
|
40
|
-
public async update(id: number, { name, age }:
|
|
44
|
+
public async update(id: number, { name, age }: UpdateCatDto) {
|
|
41
45
|
const index = this.cats.findIndex(d => d.id === id);
|
|
42
46
|
|
|
43
47
|
if (index === -1) {
|
|
@@ -49,10 +53,9 @@ export class CatService {
|
|
|
49
53
|
...{ name, age }
|
|
50
54
|
};
|
|
51
55
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
};
|
|
56
|
+
const cat = this.cats[index];
|
|
57
|
+
|
|
58
|
+
return cat;
|
|
56
59
|
}
|
|
57
60
|
|
|
58
61
|
public async remove(id: number) {
|
|
@@ -62,12 +65,9 @@ export class CatService {
|
|
|
62
65
|
throw new Error("Cat not found");
|
|
63
66
|
}
|
|
64
67
|
|
|
65
|
-
|
|
68
|
+
this.cats.splice(index, 1);
|
|
66
69
|
|
|
67
|
-
return
|
|
68
|
-
message: "Deleted",
|
|
69
|
-
cat: removedCat
|
|
70
|
-
};
|
|
70
|
+
return true;
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
`;
|
package/dist/cli/index.js
CHANGED
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,0CAA6C;AAC7C,gDAAmD;AACnD,wDAA2D;AAC3D,kDAAqD;AACrD,wDAA2D;AAC3D,0CAA6C;AAE7C,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAE/C;;;;;;GAMG;AAEH,IAAI,OAAO,KAAK,QAAQ,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;IAC3C,IAAA,eAAS,EAAC,IAAI,CAAC;SACd,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC1B,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAC9B,CAAC;AAED,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;IACpB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC;IAEnB,QAAQ,IAAI,EAAE,CAAC;QAEb,KAAK,QAAQ;YACX,IAAA,qBAAY,EAAC,IAAI,EAAC,IAAI,CAAC,CAAC;YACxB,MAAM;QAER,KAAK,YAAY;YACf,IAAA,6BAAgB,EAAC,IAAI,EAAC,IAAI,CAAC,CAAC;YAC5B,MAAM;QAER,KAAK,SAAS;YACZ,IAAA,uBAAa,EAAC,IAAI,EAAC,IAAI,CAAC,CAAC;YACzB,MAAM;QAER,KAAK,KAAK;YACR,IAAA,eAAS,EAAC,IAAI,EAAC,IAAI,CAAC,CAAC;YACrB,MAAM;QAER,KAAK,YAAY;YACf,IAAA,6BAAgB,EAAC,IAAI,EAAC,IAAI,CAAC,CAAC;YAC5B,MAAM;QAER;YACE,UAAU,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;CAYb,CAAC,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,0CAA6C;AAC7C,gDAAmD;AACnD,wDAA2D;AAC3D,kDAAqD;AACrD,wDAA2D;AAC3D,0CAA6C;AAE7C,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAE/C;;;;;;GAMG;AAEH,IAAI,OAAO,KAAK,QAAQ,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;IAC3C,IAAA,eAAS,EAAC,IAAI,CAAC;SACd,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC1B,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AAC9B,CAAC;AAED,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;IACpB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC;IAEnB,QAAQ,IAAI,EAAE,CAAC;QAEb,KAAK,QAAQ;YACX,IAAA,qBAAY,EAAC,IAAI,EAAC,IAAI,CAAC,CAAC;YACxB,MAAM;QAER,KAAK,YAAY;YACf,IAAA,6BAAgB,EAAC,IAAI,EAAC,IAAI,CAAC,CAAC;YAC5B,MAAM;QAER,KAAK,SAAS;YACZ,IAAA,uBAAa,EAAC,IAAI,EAAC,IAAI,CAAC,CAAC;YACzB,MAAM;QAER,KAAK,KAAK;YACR,IAAA,eAAS,EAAC,IAAI,EAAC,IAAI,CAAC,CAAC;YACrB,MAAM;QAER,KAAK,YAAY;YACf,IAAA,6BAAgB,EAAC,IAAI,EAAC,IAAI,CAAC,CAAC;YAC5B,MAAM;QAER;YACE,UAAU,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,UAAU,EAAE,CAAC;AAEb,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;CAYb,CAAC,CAAC;AACH,CAAC"}
|