tspace-spear 1.2.5 → 1.2.6-beta.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/README.md +300 -26
- package/dist/cli/app.d.ts +1 -0
- package/dist/cli/app.js +24 -0
- package/dist/cli/app.js.map +1 -0
- package/dist/cli/controller.d.ts +1 -0
- package/dist/cli/controller.js +158 -0
- package/dist/cli/controller.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +138 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/lib/core/client/index.d.ts +82 -0
- package/dist/lib/core/client/index.js +142 -0
- package/dist/lib/core/client/index.js.map +1 -0
- package/dist/lib/core/compiler/generator.d.ts +18 -0
- package/dist/lib/core/compiler/generator.js +365 -0
- package/dist/lib/core/compiler/generator.js.map +1 -0
- package/dist/lib/core/compiler/index.d.ts +14 -0
- package/dist/lib/core/compiler/index.js +12 -0
- package/dist/lib/core/compiler/index.js.map +1 -0
- package/dist/lib/core/compiler/pre-routes.d.ts +61 -0
- package/dist/lib/core/compiler/pre-routes.js +18 -0
- package/dist/lib/core/compiler/pre-routes.js.map +1 -0
- package/dist/lib/core/compiler/types.d.ts +14 -0
- package/dist/lib/core/compiler/types.js +3 -0
- package/dist/lib/core/compiler/types.js.map +1 -0
- package/dist/lib/core/decorators/context.d.ts +50 -1
- package/dist/lib/core/decorators/context.js +87 -3
- 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/fast-router.js +11 -2
- package/dist/lib/core/server/fast-router.js.map +1 -1
- package/dist/lib/core/server/index.d.ts +16 -0
- package/dist/lib/core/server/index.js +118 -38
- package/dist/lib/core/server/index.js.map +1 -1
- package/dist/lib/core/server/parser-factory.d.ts +2 -2
- package/dist/lib/core/server/parser-factory.js +236 -4
- package/dist/lib/core/server/parser-factory.js.map +1 -1
- package/dist/lib/core/types/index.d.ts +13 -9
- package/dist/tests/e2e..test.d.ts +1 -0
- package/dist/tests/e2e..test.js +16 -0
- package/dist/tests/e2e..test.js.map +1 -0
- package/package.json +32 -4
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.generateRoutes = generateRoutes;
|
|
7
|
+
const ts_morph_1 = require("ts-morph");
|
|
8
|
+
const typescript_1 = __importDefault(require("typescript"));
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const HTTP_METHODS = {
|
|
12
|
+
Get: "GET",
|
|
13
|
+
Post: "POST",
|
|
14
|
+
Put: "PUT",
|
|
15
|
+
Patch: "PATCH",
|
|
16
|
+
Delete: "DELETE",
|
|
17
|
+
Options: "OPTIONS",
|
|
18
|
+
Head: "HEAD",
|
|
19
|
+
};
|
|
20
|
+
function normalizePath(p) {
|
|
21
|
+
return ("/" +
|
|
22
|
+
p
|
|
23
|
+
.replace(/['"`]/g, "")
|
|
24
|
+
.replace(/\/+/g, "/")
|
|
25
|
+
.replace(/\/$/, "")
|
|
26
|
+
.replace(/^\//, ""));
|
|
27
|
+
}
|
|
28
|
+
function splitTopLevel(input) {
|
|
29
|
+
const parts = [];
|
|
30
|
+
let current = "";
|
|
31
|
+
let depth = 0;
|
|
32
|
+
for (const char of input) {
|
|
33
|
+
if (char === "{")
|
|
34
|
+
depth++;
|
|
35
|
+
if (char === "}")
|
|
36
|
+
depth--;
|
|
37
|
+
if (char === ";" && depth === 0) {
|
|
38
|
+
parts.push(current.trim());
|
|
39
|
+
current = "";
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
current += char;
|
|
43
|
+
}
|
|
44
|
+
if (current.trim()) {
|
|
45
|
+
parts.push(current.trim());
|
|
46
|
+
}
|
|
47
|
+
return parts;
|
|
48
|
+
}
|
|
49
|
+
function parseType(type) {
|
|
50
|
+
type = type.trim();
|
|
51
|
+
if (type === "never") {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
if (type.startsWith("Record<")) {
|
|
55
|
+
return {};
|
|
56
|
+
}
|
|
57
|
+
if (type.startsWith("Partial<")) {
|
|
58
|
+
const inner = type
|
|
59
|
+
.replace(/^Partial</, "")
|
|
60
|
+
.replace(/>$/, "");
|
|
61
|
+
const parsed = parseType(inner);
|
|
62
|
+
if (parsed &&
|
|
63
|
+
typeof parsed === "object" &&
|
|
64
|
+
!Array.isArray(parsed)) {
|
|
65
|
+
for (const key in parsed) {
|
|
66
|
+
parsed[key] =
|
|
67
|
+
parsed[key] + " | null";
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return parsed;
|
|
71
|
+
}
|
|
72
|
+
if (type.startsWith("Promise<")) {
|
|
73
|
+
const inner = type
|
|
74
|
+
.replace(/^Promise</, "")
|
|
75
|
+
.replace(/>$/, "");
|
|
76
|
+
return parseType(inner);
|
|
77
|
+
}
|
|
78
|
+
if (type.endsWith("[]")) {
|
|
79
|
+
return [parseType(type.slice(0, -2))];
|
|
80
|
+
}
|
|
81
|
+
if (type.startsWith("{") &&
|
|
82
|
+
type.endsWith("}")) {
|
|
83
|
+
const result = {};
|
|
84
|
+
const content = type.slice(1, -1);
|
|
85
|
+
const fields = splitTopLevel(content)
|
|
86
|
+
.map((x) => x.trim())
|
|
87
|
+
.filter(Boolean);
|
|
88
|
+
for (const field of fields) {
|
|
89
|
+
const match = field.match(/^(\w+)(\??):\s*(.+)$/);
|
|
90
|
+
if (!match)
|
|
91
|
+
continue;
|
|
92
|
+
const [, key, optional, value] = match;
|
|
93
|
+
let parsed;
|
|
94
|
+
if (value === "string") {
|
|
95
|
+
parsed = optional
|
|
96
|
+
? "string | null"
|
|
97
|
+
: "string";
|
|
98
|
+
}
|
|
99
|
+
else if (value === "number") {
|
|
100
|
+
parsed = optional
|
|
101
|
+
? "number | null"
|
|
102
|
+
: "number";
|
|
103
|
+
}
|
|
104
|
+
else if (value === "boolean") {
|
|
105
|
+
parsed = optional
|
|
106
|
+
? "boolean | null"
|
|
107
|
+
: "boolean";
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
parsed = parseType(value);
|
|
111
|
+
}
|
|
112
|
+
result[key] = parsed;
|
|
113
|
+
}
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
if (type === "string")
|
|
117
|
+
return "string";
|
|
118
|
+
if (type === "number")
|
|
119
|
+
return "number";
|
|
120
|
+
if (type === "boolean")
|
|
121
|
+
return "boolean";
|
|
122
|
+
if (type === "date")
|
|
123
|
+
return "date";
|
|
124
|
+
if (type === "string | undefined")
|
|
125
|
+
return "string";
|
|
126
|
+
if (type === "number | undefined")
|
|
127
|
+
return "number";
|
|
128
|
+
if (type === "boolean | undefined")
|
|
129
|
+
return "boolean";
|
|
130
|
+
if (type === "date | undefined")
|
|
131
|
+
return "date";
|
|
132
|
+
if (type.includes("| undefined")) {
|
|
133
|
+
return type;
|
|
134
|
+
}
|
|
135
|
+
if (type.includes("| null")) {
|
|
136
|
+
return type;
|
|
137
|
+
}
|
|
138
|
+
if (type.includes(" | ") && !type.startsWith("{")) {
|
|
139
|
+
return type.replace(/"/g, "");
|
|
140
|
+
}
|
|
141
|
+
// fallback
|
|
142
|
+
return {
|
|
143
|
+
$ref: type
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function resolveType(type) {
|
|
147
|
+
if (type.getSymbol()?.getName() === "Promise") {
|
|
148
|
+
type = type.getTypeArguments()[0];
|
|
149
|
+
}
|
|
150
|
+
if (type.isString())
|
|
151
|
+
return "string";
|
|
152
|
+
if (type.isNumber())
|
|
153
|
+
return "number";
|
|
154
|
+
if (type.isBoolean())
|
|
155
|
+
return "boolean";
|
|
156
|
+
if (type.isNull())
|
|
157
|
+
return "null";
|
|
158
|
+
if (type.isUndefined())
|
|
159
|
+
return "undefined";
|
|
160
|
+
if (type.isAny())
|
|
161
|
+
return "any";
|
|
162
|
+
if (type.isUnknown())
|
|
163
|
+
return "unknown";
|
|
164
|
+
if (type.isUnion())
|
|
165
|
+
return type.getText();
|
|
166
|
+
if (type.isArray()) {
|
|
167
|
+
const el = type.getArrayElementTypeOrThrow();
|
|
168
|
+
return `${resolveType(el)}[]`;
|
|
169
|
+
}
|
|
170
|
+
const props = type.getProperties();
|
|
171
|
+
if (props.length) {
|
|
172
|
+
const obj = [];
|
|
173
|
+
for (const prop of props) {
|
|
174
|
+
const decl = prop.getDeclarations()[0];
|
|
175
|
+
if (!decl)
|
|
176
|
+
continue;
|
|
177
|
+
const propType = prop.getTypeAtLocation(decl);
|
|
178
|
+
const text = propType.getText(decl);
|
|
179
|
+
const key = prop.getName();
|
|
180
|
+
let value = resolveType(propType);
|
|
181
|
+
if (/^\s*(\(.*\)\s*=>|function\b)/.test(value)) {
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (text.includes('[x: string]')) {
|
|
185
|
+
value = text;
|
|
186
|
+
}
|
|
187
|
+
;
|
|
188
|
+
let colon = ":";
|
|
189
|
+
const maybeOptional = value.includes(" | undefined");
|
|
190
|
+
if (maybeOptional) {
|
|
191
|
+
value = value.replace(" | undefined", "");
|
|
192
|
+
colon = "?:";
|
|
193
|
+
}
|
|
194
|
+
obj.push(`${key}${colon} ${value}`);
|
|
195
|
+
}
|
|
196
|
+
return `{ ${obj.join("; ")} }`;
|
|
197
|
+
}
|
|
198
|
+
return type.getText();
|
|
199
|
+
}
|
|
200
|
+
function extractPropertyType(type, key, node) {
|
|
201
|
+
const prop = type.getProperty(key);
|
|
202
|
+
if (!prop)
|
|
203
|
+
return "never";
|
|
204
|
+
const t = prop.getTypeAtLocation(node);
|
|
205
|
+
const text = t.getText(node);
|
|
206
|
+
if (text.includes('[x: string]'))
|
|
207
|
+
return text;
|
|
208
|
+
if (!text || text.includes("undefined"))
|
|
209
|
+
return "never";
|
|
210
|
+
return resolveType(t) ?? "never";
|
|
211
|
+
}
|
|
212
|
+
async function generateRoutes(options) {
|
|
213
|
+
const project = new ts_morph_1.Project({
|
|
214
|
+
tsConfigFilePath: path_1.default.resolve(process.cwd(), "tsconfig.json"),
|
|
215
|
+
});
|
|
216
|
+
project.addSourceFilesAtPaths(path_1.default.join(options.controllers.folder, "**/*"));
|
|
217
|
+
const files = project.getSourceFiles();
|
|
218
|
+
if (!files.length) {
|
|
219
|
+
console.log("No controller files found");
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
const routes = [];
|
|
223
|
+
for (const file of files) {
|
|
224
|
+
const filename = file.getBaseName();
|
|
225
|
+
if (!options.controllers.name.test(filename))
|
|
226
|
+
continue;
|
|
227
|
+
for (const cls of file.getClasses()) {
|
|
228
|
+
const controller = cls.getDecorator("Controller");
|
|
229
|
+
if (!controller)
|
|
230
|
+
continue;
|
|
231
|
+
const basePath = controller.getArguments()[0]
|
|
232
|
+
?.getText()
|
|
233
|
+
.replace(/['"`]/g, "") || "";
|
|
234
|
+
for (const method of cls.getMethods()) {
|
|
235
|
+
for (const [decName, http] of Object.entries(HTTP_METHODS)) {
|
|
236
|
+
const decorator = method.getDecorator(decName);
|
|
237
|
+
if (!decorator)
|
|
238
|
+
continue;
|
|
239
|
+
const methodPath = decorator
|
|
240
|
+
.getArguments()[0]
|
|
241
|
+
?.getText()
|
|
242
|
+
.replace(/['"`]/g, "") || "";
|
|
243
|
+
const fullPath = normalizePath(`${basePath}/${methodPath}`);
|
|
244
|
+
const response = resolveType(method.getReturnType());
|
|
245
|
+
let body = "never";
|
|
246
|
+
let params = "never";
|
|
247
|
+
let query = "never";
|
|
248
|
+
let files = "never";
|
|
249
|
+
const firstParam = method.getParameters()[0];
|
|
250
|
+
if (firstParam) {
|
|
251
|
+
const type = firstParam.getType();
|
|
252
|
+
body = extractPropertyType(type, "body", firstParam);
|
|
253
|
+
params = extractPropertyType(type, "params", firstParam);
|
|
254
|
+
query = extractPropertyType(type, "query", firstParam);
|
|
255
|
+
files = extractPropertyType(type, "files", firstParam);
|
|
256
|
+
}
|
|
257
|
+
routes.push({
|
|
258
|
+
method: http,
|
|
259
|
+
path: fullPath,
|
|
260
|
+
response,
|
|
261
|
+
body,
|
|
262
|
+
params,
|
|
263
|
+
query,
|
|
264
|
+
files,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
const groupedTypes = routes.reduce((acc, r) => {
|
|
271
|
+
acc[r.path] ??= {};
|
|
272
|
+
acc[r.path][r.method] = {
|
|
273
|
+
response: r.response,
|
|
274
|
+
body: r.body,
|
|
275
|
+
params: r.params,
|
|
276
|
+
query: r.query,
|
|
277
|
+
files: r.files,
|
|
278
|
+
};
|
|
279
|
+
return acc;
|
|
280
|
+
}, {});
|
|
281
|
+
const routeMapTypes = Object.entries(groupedTypes)
|
|
282
|
+
.map(([path, methods]) => {
|
|
283
|
+
const methodBlock = Object.entries(methods)
|
|
284
|
+
.map(([method, c]) => `
|
|
285
|
+
${method}: {
|
|
286
|
+
params: ${c.params}
|
|
287
|
+
query: ${c.query}
|
|
288
|
+
body: ${c.body}
|
|
289
|
+
files: ${c.files}
|
|
290
|
+
response: ${c.response}
|
|
291
|
+
}`).join("\n");
|
|
292
|
+
return `
|
|
293
|
+
"${path}": {
|
|
294
|
+
${methodBlock}
|
|
295
|
+
}`;
|
|
296
|
+
})
|
|
297
|
+
.join("\n");
|
|
298
|
+
const formatValue = (v) => {
|
|
299
|
+
if (typeof v === "string")
|
|
300
|
+
return v;
|
|
301
|
+
return JSON.stringify(v);
|
|
302
|
+
};
|
|
303
|
+
const groupedValues = routes.reduce((acc, route) => {
|
|
304
|
+
if (!acc[route.path]) {
|
|
305
|
+
acc[route.path] = {};
|
|
306
|
+
}
|
|
307
|
+
acc[route.path][route.method] = {
|
|
308
|
+
params: parseType(route.params),
|
|
309
|
+
query: parseType(route.query),
|
|
310
|
+
body: parseType(route.body),
|
|
311
|
+
files: parseType(route.files),
|
|
312
|
+
response: parseType(route.response),
|
|
313
|
+
};
|
|
314
|
+
return acc;
|
|
315
|
+
}, {});
|
|
316
|
+
const routerMapValues = Object.entries(groupedValues)
|
|
317
|
+
.map(([path, methods]) => {
|
|
318
|
+
const methodBlock = Object.entries(methods)
|
|
319
|
+
.map(([method, c]) => `
|
|
320
|
+
${method}: {
|
|
321
|
+
params: ${formatValue(c.params)},
|
|
322
|
+
query: ${formatValue(c.query)},
|
|
323
|
+
body: ${formatValue(c.body)},
|
|
324
|
+
files: ${formatValue(c.files)},
|
|
325
|
+
response: ${formatValue(c.response)}
|
|
326
|
+
}`).join(",\n");
|
|
327
|
+
return `
|
|
328
|
+
"${path}": {
|
|
329
|
+
${methodBlock}
|
|
330
|
+
}`;
|
|
331
|
+
})
|
|
332
|
+
.join(",\n");
|
|
333
|
+
const output = `
|
|
334
|
+
// @ts-nocheck
|
|
335
|
+
// AUTO GENERATED FILE
|
|
336
|
+
// DO NOT EDIT
|
|
337
|
+
|
|
338
|
+
export const appRoutes = {
|
|
339
|
+
${routerMapValues}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
export interface AppRoutes {
|
|
343
|
+
${routeMapTypes}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
export type AppRoute = keyof AppRoutes
|
|
347
|
+
`;
|
|
348
|
+
const outPath = options.output
|
|
349
|
+
? `${__dirname}/${options.output}/pre-routes.ts`
|
|
350
|
+
: `${__dirname}/pre-routes.ts`;
|
|
351
|
+
await fs_1.default.promises.mkdir(path_1.default.dirname(outPath), {
|
|
352
|
+
recursive: true,
|
|
353
|
+
});
|
|
354
|
+
await fs_1.default.promises.writeFile(outPath, output);
|
|
355
|
+
const compiled = typescript_1.default.transpileModule(output, {
|
|
356
|
+
compilerOptions: {
|
|
357
|
+
module: typescript_1.default.ModuleKind.CommonJS,
|
|
358
|
+
target: typescript_1.default.ScriptTarget.ES2020,
|
|
359
|
+
},
|
|
360
|
+
});
|
|
361
|
+
const jsPath = outPath.replace(/\.ts$/, ".js");
|
|
362
|
+
await fs_1.default.promises.writeFile(jsPath, compiled.outputText, "utf8");
|
|
363
|
+
return routes;
|
|
364
|
+
}
|
|
365
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../src/lib/core/compiler/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class Compiler {
|
|
2
|
+
generateRoutes(options: {
|
|
3
|
+
folder: string;
|
|
4
|
+
name: RegExp;
|
|
5
|
+
}): Promise<void | {
|
|
6
|
+
method: string;
|
|
7
|
+
path: string;
|
|
8
|
+
response: string;
|
|
9
|
+
body: string;
|
|
10
|
+
params: string;
|
|
11
|
+
query: string;
|
|
12
|
+
files: string;
|
|
13
|
+
}[] | undefined>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Compiler = void 0;
|
|
4
|
+
const generator_1 = require("./generator");
|
|
5
|
+
class Compiler {
|
|
6
|
+
async generateRoutes(options) {
|
|
7
|
+
return await (0, generator_1.generateRoutes)({ controllers: options })
|
|
8
|
+
.catch(err => console.log(err));
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.Compiler = Compiler;
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/core/compiler/index.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAC5C,MAAa,QAAQ;IACV,KAAK,CAAC,cAAc,CAAE,OAG5B;QACG,OAAO,MAAM,IAAA,0BAAc,EAAC,EAAE,WAAW,EAAG,OAAO,EAAE,CAAC;aACrD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IACnC,CAAC;CACJ;AARD,4BAQC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export declare const appRoutes: {
|
|
2
|
+
"/cats": {
|
|
3
|
+
POST: {
|
|
4
|
+
params: null;
|
|
5
|
+
query: {
|
|
6
|
+
v: string;
|
|
7
|
+
};
|
|
8
|
+
body: {
|
|
9
|
+
name: string;
|
|
10
|
+
age: string;
|
|
11
|
+
};
|
|
12
|
+
files: null;
|
|
13
|
+
response: {
|
|
14
|
+
cat: string;
|
|
15
|
+
body: {
|
|
16
|
+
name: string;
|
|
17
|
+
age: string;
|
|
18
|
+
};
|
|
19
|
+
query: {
|
|
20
|
+
v: string;
|
|
21
|
+
};
|
|
22
|
+
cats: {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
age: string;
|
|
26
|
+
}[];
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
export interface AppRoutes {
|
|
32
|
+
"/cats": {
|
|
33
|
+
POST: {
|
|
34
|
+
params: never;
|
|
35
|
+
query: {
|
|
36
|
+
v: string;
|
|
37
|
+
};
|
|
38
|
+
body: {
|
|
39
|
+
name: string;
|
|
40
|
+
age: number;
|
|
41
|
+
};
|
|
42
|
+
files: never;
|
|
43
|
+
response: {
|
|
44
|
+
cat: "cat1" | "cat2" | "cat3";
|
|
45
|
+
body: {
|
|
46
|
+
name: string;
|
|
47
|
+
age: number;
|
|
48
|
+
};
|
|
49
|
+
query: {
|
|
50
|
+
v: string;
|
|
51
|
+
};
|
|
52
|
+
cats: {
|
|
53
|
+
id: number;
|
|
54
|
+
name: string;
|
|
55
|
+
age: number;
|
|
56
|
+
}[];
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export type AppRoute = keyof AppRoutes;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
// AUTO GENERATED FILE
|
|
4
|
+
// DO NOT EDIT
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.appRoutes = void 0;
|
|
7
|
+
exports.appRoutes = {
|
|
8
|
+
"/cats": {
|
|
9
|
+
POST: {
|
|
10
|
+
params: null,
|
|
11
|
+
query: { "v": "string" },
|
|
12
|
+
body: { "name": "string", "age": "number" },
|
|
13
|
+
files: null,
|
|
14
|
+
response: { "cat": "cat1 | cat2 | cat3", "body": { "name": "string", "age": "number" }, "query": { "v": "string" }, "cats": [{ "id": "number", "name": "string", "age": "number" }] }
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=pre-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-routes.js","sourceRoot":"","sources":["../../../../src/lib/core/compiler/pre-routes.ts"],"names":[],"mappings":";AACA,cAAc;AACd,sBAAsB;AACtB,cAAc;;;AAED,QAAA,SAAS,GAAG;IAEvB,OAAO,EAAE;QAEP,IAAI,EAAE;YACJ,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,EAAC,GAAG,EAAC,QAAQ,EAAC;YACrB,IAAI,EAAE,EAAC,MAAM,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC;YACtC,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,EAAC,KAAK,EAAC,oBAAoB,EAAC,MAAM,EAAC,EAAC,MAAM,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,EAAC,OAAO,EAAC,EAAC,GAAG,EAAC,QAAQ,EAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,QAAQ,EAAC,MAAM,EAAC,QAAQ,EAAC,KAAK,EAAC,QAAQ,EAAC,CAAC,EAAC;SAC9J;KACF;CACF,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type AnyRoutes = {
|
|
2
|
+
[key: string]: any;
|
|
3
|
+
};
|
|
4
|
+
export type RoutesWithMethod<TRoutes extends AnyRoutes, TMethod extends string> = {
|
|
5
|
+
[K in keyof TRoutes]: TMethod extends keyof TRoutes[K] ? K : never;
|
|
6
|
+
}[keyof TRoutes];
|
|
7
|
+
export type ExtractFrom<TRoutes extends AnyRoutes, TPath extends keyof TRoutes, TMethod extends keyof TRoutes[TPath], Key extends string> = TRoutes[TPath][TMethod] extends Record<Key, infer R> ? R : never;
|
|
8
|
+
export type RequestBody<TRoutes extends AnyRoutes, TPath extends keyof TRoutes, TMethod extends keyof TRoutes[TPath]> = ExtractFrom<TRoutes, TPath, TMethod, "body">;
|
|
9
|
+
export type RequestQuery<TRoutes extends AnyRoutes, TPath extends keyof TRoutes, TMethod extends keyof TRoutes[TPath]> = ExtractFrom<TRoutes, TPath, TMethod, "query">;
|
|
10
|
+
export type RequestParams<TRoutes extends AnyRoutes, TPath extends keyof TRoutes, TMethod extends keyof TRoutes[TPath]> = ExtractFrom<TRoutes, TPath, TMethod, "params">;
|
|
11
|
+
export type RequestFiles<TRoutes extends AnyRoutes, TPath extends keyof TRoutes, TMethod extends keyof TRoutes[TPath]> = ExtractFrom<TRoutes, TPath, TMethod, "files">;
|
|
12
|
+
export type ResponseType<TRoutes extends AnyRoutes, TPath extends keyof TRoutes, TMethod extends keyof TRoutes[TPath]> = TRoutes[TPath][TMethod] extends {
|
|
13
|
+
response: infer R;
|
|
14
|
+
} ? Awaited<R> : never;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/core/compiler/types.ts"],"names":[],"mappings":""}
|
|
@@ -20,7 +20,7 @@ export declare function createContextDecorator(hook: (ctx: T.Context, next: T.Ne
|
|
|
20
20
|
* }
|
|
21
21
|
* ```
|
|
22
22
|
*
|
|
23
|
-
* @param {...string}
|
|
23
|
+
* @param {...string} keys - Body field names to extract.
|
|
24
24
|
* @returns {MethodDecorator}
|
|
25
25
|
*/
|
|
26
26
|
export declare const Body: (...keys: string[]) => MethodDecorator;
|
|
@@ -96,3 +96,52 @@ export declare const Query: (...keys: string[]) => MethodDecorator;
|
|
|
96
96
|
* @returns {MethodDecorator}
|
|
97
97
|
*/
|
|
98
98
|
export declare const Cookies: (...keys: string[]) => MethodDecorator;
|
|
99
|
+
/**
|
|
100
|
+
* Validates required fields from a request target.
|
|
101
|
+
*
|
|
102
|
+
* @param keys - List of required field names.
|
|
103
|
+
* @param options - Validation options.
|
|
104
|
+
* @param options.target - Request source to validate.
|
|
105
|
+
* Defaults to `"body"`.
|
|
106
|
+
*
|
|
107
|
+
* @param options.required - Enables required-value validation.
|
|
108
|
+
*
|
|
109
|
+
* - `true`
|
|
110
|
+
* - Rejects `null`
|
|
111
|
+
* - Rejects empty strings (`""`)
|
|
112
|
+
*
|
|
113
|
+
* - `object`
|
|
114
|
+
* - Allows customizing required rules.
|
|
115
|
+
*
|
|
116
|
+
* @param options.required.allowNull - Allow `null` values.
|
|
117
|
+
* Default: `false`
|
|
118
|
+
*
|
|
119
|
+
* @param options.required.allowEmptyString - Allow empty string values.
|
|
120
|
+
* Default: `false`
|
|
121
|
+
* @returns {MethodDecorator}
|
|
122
|
+
*
|
|
123
|
+
* @throws {Object} Throws a validation error object when
|
|
124
|
+
* one or more required fields are missing.
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```ts
|
|
128
|
+
* \@Validate(["email", "password"], {
|
|
129
|
+
* required: {
|
|
130
|
+
* allowEmptyString : true,
|
|
131
|
+
* allowNull : false
|
|
132
|
+
* }
|
|
133
|
+
* });
|
|
134
|
+
* ```
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```ts
|
|
138
|
+
* \@Validate(["id"], { target: "query" });
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
export declare const Validate: (keys: string[], { target, required }?: {
|
|
142
|
+
target?: "params" | "query" | "body" | "files";
|
|
143
|
+
required?: boolean | {
|
|
144
|
+
allowNull?: boolean;
|
|
145
|
+
allowEmptyString?: boolean;
|
|
146
|
+
};
|
|
147
|
+
}) => MethodDecorator;
|