tspace-spear 1.2.9 → 1.3.0

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.
Files changed (68) hide show
  1. package/README.md +342 -200
  2. package/dist/cli/generators/app/index.js +1 -1
  3. package/dist/cli/generators/app/index.js.map +1 -1
  4. package/dist/cli/generators/controller/template.d.ts +1 -1
  5. package/dist/cli/generators/controller/template.js +11 -9
  6. package/dist/cli/generators/controller/template.js.map +1 -1
  7. package/dist/cli/index.js +10 -8
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/lib/core/client/index.js +18 -6
  10. package/dist/lib/core/client/index.js.map +1 -1
  11. package/dist/lib/core/client/types.d.ts +4 -3
  12. package/dist/lib/core/compiler/generator.js +8 -4
  13. package/dist/lib/core/compiler/generator.js.map +1 -1
  14. package/dist/lib/core/compiler/pre-routes.js +10 -2
  15. package/dist/lib/core/compiler/pre-routes.js.map +1 -1
  16. package/dist/lib/core/const/index.d.ts +12 -0
  17. package/dist/lib/core/const/index.js +6 -1
  18. package/dist/lib/core/const/index.js.map +1 -1
  19. package/dist/lib/core/decorators/controller.js +2 -1
  20. package/dist/lib/core/decorators/controller.js.map +1 -1
  21. package/dist/lib/core/decorators/headers.js +1 -0
  22. package/dist/lib/core/decorators/headers.js.map +1 -1
  23. package/dist/lib/core/decorators/index.d.ts +1 -0
  24. package/dist/lib/core/decorators/index.js +1 -0
  25. package/dist/lib/core/decorators/index.js.map +1 -1
  26. package/dist/lib/core/decorators/methods.js +4 -3
  27. package/dist/lib/core/decorators/methods.js.map +1 -1
  28. package/dist/lib/core/decorators/middleware.d.ts +46 -2
  29. package/dist/lib/core/decorators/middleware.js +100 -15
  30. package/dist/lib/core/decorators/middleware.js.map +1 -1
  31. package/dist/lib/core/decorators/service.d.ts +28 -0
  32. package/dist/lib/core/decorators/service.js +36 -0
  33. package/dist/lib/core/decorators/service.js.map +1 -0
  34. package/dist/lib/core/decorators/statusCode.js.map +1 -1
  35. package/dist/lib/core/decorators/swagger.js +4 -3
  36. package/dist/lib/core/decorators/swagger.js.map +1 -1
  37. package/dist/lib/core/exception/index.d.ts +68 -0
  38. package/dist/lib/core/exception/index.js +123 -0
  39. package/dist/lib/core/exception/index.js.map +1 -0
  40. package/dist/lib/core/metadata/index.d.ts +6 -0
  41. package/dist/lib/core/metadata/index.js +13 -0
  42. package/dist/lib/core/metadata/index.js.map +1 -0
  43. package/dist/lib/core/server/fast-router.d.ts +5 -5
  44. package/dist/lib/core/server/fast-router.js +2 -2
  45. package/dist/lib/core/server/fast-router.js.map +1 -1
  46. package/dist/lib/core/server/http/index.d.ts +22 -0
  47. package/dist/lib/core/server/http/index.js +220 -0
  48. package/dist/lib/core/server/http/index.js.map +1 -0
  49. package/dist/lib/core/server/index.d.ts +35 -7
  50. package/dist/lib/core/server/index.js +252 -75
  51. package/dist/lib/core/server/index.js.map +1 -1
  52. package/dist/lib/core/server/net/index.d.ts +13 -8
  53. package/dist/lib/core/server/net/index.js +2 -2
  54. package/dist/lib/core/server/net/index.js.map +1 -1
  55. package/dist/lib/core/server/parser-factory.d.ts +3 -4
  56. package/dist/lib/core/server/parser-factory.js +52 -143
  57. package/dist/lib/core/server/parser-factory.js.map +1 -1
  58. package/dist/lib/core/server/response.d.ts +1 -2
  59. package/dist/lib/core/server/response.js +173 -171
  60. package/dist/lib/core/server/response.js.map +1 -1
  61. package/dist/lib/core/server/uWS/index.d.ts +2 -3
  62. package/dist/lib/core/server/uWS/index.js +15 -10
  63. package/dist/lib/core/server/uWS/index.js.map +1 -1
  64. package/dist/lib/core/types/index.d.ts +25 -8
  65. package/dist/lib/core/utils/index.d.ts +3 -3
  66. package/dist/lib/core/utils/index.js +19 -16
  67. package/dist/lib/core/utils/index.js.map +1 -1
  68. package/package.json +35 -12
@@ -0,0 +1,220 @@
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.httpfiles = exports.httpBody = exports.httpAdaptRequestResponse = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const mime_types_1 = __importDefault(require("mime-types"));
10
+ const crypto_1 = __importDefault(require("crypto"));
11
+ const string_decoder_1 = require("string_decoder");
12
+ const busboy_1 = __importDefault(require("busboy"));
13
+ const utils_1 = require("../../utils");
14
+ const httpAdaptRequestResponse = (req, res) => {
15
+ const headers = req.headers || {};
16
+ const request = {
17
+ http: req,
18
+ method: req.method?.toUpperCase() || "GET",
19
+ url: req.url || "/",
20
+ headers,
21
+ on(event, cb) {
22
+ return req.on(event, cb);
23
+ },
24
+ pipe(cb) {
25
+ return req.pipe(cb);
26
+ }
27
+ };
28
+ const response = {
29
+ http: res,
30
+ writableEnded: false,
31
+ aborted: false,
32
+ writeHeaders: Object.create(null),
33
+ headersSent: false,
34
+ statusCode: 200,
35
+ setHeader(key, value) {
36
+ if (!response.headersSent && !response.writableEnded) {
37
+ res.setHeader(key, value);
38
+ }
39
+ return response;
40
+ },
41
+ writeHeader(key, value) {
42
+ return response.setHeader(key, value);
43
+ },
44
+ writeHead(status, context) {
45
+ response.statusCode = status;
46
+ if (!response.headersSent) {
47
+ res.writeHead(status, context);
48
+ response.headersSent = true;
49
+ }
50
+ return response;
51
+ },
52
+ writeStatus(status) {
53
+ response.statusCode = status;
54
+ if (!response.headersSent) {
55
+ res.statusCode = status;
56
+ }
57
+ return response;
58
+ },
59
+ end(chunk) {
60
+ if (response.writableEnded)
61
+ return;
62
+ if (chunk == null) {
63
+ res.end();
64
+ return;
65
+ }
66
+ response.writableEnded = true;
67
+ if (!response.headersSent) {
68
+ res.statusCode = response.statusCode;
69
+ }
70
+ if (typeof chunk === 'string' ||
71
+ Buffer.isBuffer(chunk) ||
72
+ chunk instanceof Uint8Array) {
73
+ res.end(chunk);
74
+ return;
75
+ }
76
+ res.end(JSON.stringify(chunk));
77
+ return;
78
+ },
79
+ };
80
+ return {
81
+ req: request,
82
+ res: response,
83
+ };
84
+ };
85
+ exports.httpAdaptRequestResponse = httpAdaptRequestResponse;
86
+ const httpBody = (req, res) => {
87
+ return new Promise((resolve, reject) => {
88
+ const decoder = new string_decoder_1.StringDecoder("utf-8");
89
+ let payload = "";
90
+ req.on("data", (data) => {
91
+ payload += decoder.write(data);
92
+ });
93
+ req.on("end", async () => {
94
+ payload += decoder.end();
95
+ const contentType = req.headers["content-type"]?.toLowerCase() || null;
96
+ try {
97
+ const body = await (0, utils_1.normalizeRequestBody)({ contentType, payload });
98
+ return resolve(body);
99
+ }
100
+ catch (err) {
101
+ return reject(err);
102
+ }
103
+ });
104
+ req.on("error", (err) => {
105
+ return reject(err);
106
+ });
107
+ });
108
+ };
109
+ exports.httpBody = httpBody;
110
+ const httpfiles = async ({ req, res, options, }) => {
111
+ const temp = options.tempFileDir;
112
+ if (!fs_1.default.existsSync(temp)) {
113
+ try {
114
+ fs_1.default.mkdirSync(temp, { recursive: true });
115
+ }
116
+ catch (err) { }
117
+ }
118
+ return new Promise((resolve, reject) => {
119
+ const body = {};
120
+ const files = {};
121
+ const fileWritePromises = [];
122
+ const bb = (0, busboy_1.default)({ headers: req.headers, defParamCharset: "utf8" });
123
+ const removeTemp = (fileTemp, ms) => {
124
+ const remove = () => {
125
+ try {
126
+ fs_1.default.unlinkSync(fileTemp);
127
+ }
128
+ catch (err) { }
129
+ };
130
+ setTimeout(remove, ms);
131
+ };
132
+ bb.on("file", (fieldName, fileData, info) => {
133
+ const { filename, mimeType } = info;
134
+ const extension = mime_types_1.default.extension(mimeType) ||
135
+ path_1.default.extname(filename).replace(".", "") ||
136
+ "bin";
137
+ const tempFilename = crypto_1.default.randomBytes(16).toString("hex");
138
+ const filePath = path_1.default.join(path_1.default.resolve(), `${temp}/${tempFilename}`);
139
+ const writeStream = fs_1.default.createWriteStream(filePath);
140
+ let fileSize = 0;
141
+ fileData.on("data", (data) => {
142
+ fileSize += data.length;
143
+ if (fileSize > options.limit) {
144
+ fileData.unpipe(writeStream);
145
+ writeStream.destroy();
146
+ return reject(new Error(`The file '${fieldName}' is too large to be uploaded. The limit is '${options.limit}' bytes.`));
147
+ }
148
+ });
149
+ const fileWritePromise = new Promise((resolve, reject) => {
150
+ fileData.pipe(writeStream);
151
+ writeStream.on("finish", () => {
152
+ const file = {
153
+ name: filename,
154
+ tempFilePath: filePath,
155
+ tempFileName: tempFilename,
156
+ mimetype: mimeType,
157
+ extension: extension,
158
+ size: fileSize,
159
+ sizes: {
160
+ bytes: fileSize,
161
+ kb: fileSize / 1024,
162
+ mb: fileSize / 1024 / 1024,
163
+ gb: fileSize / 1024 / 1024 / 1024,
164
+ },
165
+ write: (to) => {
166
+ return new Promise((resolve, reject) => {
167
+ fs_1.default
168
+ .createReadStream(filePath)
169
+ .pipe(fs_1.default.createWriteStream(to))
170
+ .on("finish", () => {
171
+ return resolve(null);
172
+ })
173
+ .on("error", (err) => {
174
+ return reject(err);
175
+ });
176
+ });
177
+ },
178
+ remove: () => {
179
+ return new Promise((resolve) => setTimeout(() => {
180
+ fs_1.default.unlinkSync(filePath);
181
+ return resolve(null);
182
+ }, 100));
183
+ },
184
+ };
185
+ if (files[fieldName] == null) {
186
+ files[fieldName] = [];
187
+ }
188
+ files[fieldName].push(file);
189
+ if (options.removeTempFile.remove) {
190
+ removeTemp(filePath, options.removeTempFile.ms);
191
+ }
192
+ return resolve(null);
193
+ });
194
+ writeStream.on("error", reject);
195
+ });
196
+ fileWritePromises.push(fileWritePromise);
197
+ });
198
+ bb.on("field", (name, value) => {
199
+ body[name] = value;
200
+ });
201
+ bb.on("finish", () => {
202
+ Promise.all(fileWritePromises)
203
+ .then(() => {
204
+ return resolve({
205
+ files,
206
+ body,
207
+ });
208
+ })
209
+ .catch((err) => {
210
+ return reject(err);
211
+ });
212
+ });
213
+ bb.on("error", (err) => {
214
+ return reject(err);
215
+ });
216
+ req.pipe(bb);
217
+ });
218
+ };
219
+ exports.httpfiles = httpfiles;
220
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/core/server/http/index.ts"],"names":[],"mappings":"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"}
@@ -84,21 +84,46 @@ declare class Spear {
84
84
  /**
85
85
  * The 'useGlobalPrefix' method is used to sets a global prefix for all routes in the router.
86
86
  *
87
- * If `globalPrefix` is `null` or `undefined`, it will default to an empty string,
88
- * meaning no prefix will be applied.
87
+ * This prefix will be prepended to every route path in the application.
88
+ * If `path` is `null`, `undefined`, or an empty string, no global prefix
89
+ * will be applied.
89
90
  *
90
- * @param {string | null} globalPrefix - The base path prefix to apply to all routes.
91
- * @returns {this} Returns the current instance for method chaining.
91
+ * @param {string} path - The global route prefix.
92
+ *
93
+ * @param {Object} [options] - Additional configuration options.
94
+ * @param {Array<{ path: string; method?: TMethod | TMethod[] }>} [options.exclude]
95
+ * Routes to exclude from the global prefix.
96
+ *
97
+ * @returns {this} Returns the current router instance for chaining.
98
+ *
99
+ * @example
100
+ * import Spear from "tspace-spear";
101
+ * const app = new Spear()
102
+ *
103
+ * app.useGlobalPrefix('/api');
104
+ *
105
+ * @example
106
+ * app.useGlobalPrefix('/api', {
107
+ * exclude: [
108
+ * { path: '/health' },
109
+ * { path: '/auth/login', method: 'POST' }
110
+ * ]
111
+ * });
92
112
  */
93
- useGlobalPrefix(globalPrefix: string | null): this;
113
+ useGlobalPrefix(path: string | null, options?: {
114
+ exclude?: {
115
+ path: string;
116
+ methods?: T.MethodInput[] | '*';
117
+ }[];
118
+ }): this;
94
119
  /**
95
- * The 'useAdater' method is used to switch between different server implementations,
120
+ * The 'useAdapter' method is used to switch between different server implementations,
96
121
  * such as the native Node.js HTTP server or uWebSockets.js (uWS).
97
122
  *
98
123
  * @param {T.AdapterServer} adapter - The adapter instance (e.g., HTTP or uWS).
99
124
  * @returns {this} Returns the current instance for chaining
100
125
  */
101
- useAdater(adapter: T.AdapterServer): this;
126
+ useAdapter(adapter: T.AdapterServer): this;
102
127
  /**
103
128
  * The 'useCluster' method is used cluster run the server
104
129
  *
@@ -299,6 +324,8 @@ declare class Spear {
299
324
  private _import;
300
325
  private _scan;
301
326
  private _registerControllers;
327
+ private _createController;
328
+ private _normalizeMiddlewares;
302
329
  private _registerMiddlewares;
303
330
  private _wrapHandlers;
304
331
  private _wrapResponse;
@@ -308,6 +335,7 @@ declare class Spear {
308
335
  private _createContext;
309
336
  private _normalizePath;
310
337
  private _swaggerHandler;
338
+ private _resolveGlobalPrefix;
311
339
  }
312
340
  export declare class Application extends Spear {
313
341
  }