tspace-spear 1.2.3 → 1.2.5-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.
Files changed (63) hide show
  1. package/README.md +268 -19
  2. package/dist/lib/core/client/index.d.ts +23 -0
  3. package/dist/lib/core/client/index.js +45 -0
  4. package/dist/lib/core/client/index.js.map +1 -0
  5. package/dist/lib/core/compiler/generator.d.ts +18 -0
  6. package/dist/lib/core/compiler/generator.js +142 -0
  7. package/dist/lib/core/compiler/generator.js.map +1 -0
  8. package/dist/lib/core/compiler/index.d.ts +14 -0
  9. package/dist/lib/core/compiler/index.js +11 -0
  10. package/dist/lib/core/compiler/index.js.map +1 -0
  11. package/dist/lib/core/compiler/pre-routes.d.ts +3 -0
  12. package/dist/lib/core/compiler/pre-routes.js +5 -0
  13. package/dist/lib/core/compiler/pre-routes.js.map +1 -0
  14. package/dist/lib/core/compiler/types.d.ts +12 -0
  15. package/dist/lib/core/compiler/types.js +3 -0
  16. package/dist/lib/core/compiler/types.js.map +1 -0
  17. package/dist/lib/core/const/index.d.ts +153 -0
  18. package/dist/lib/core/const/index.js +105 -0
  19. package/dist/lib/core/const/index.js.map +1 -0
  20. package/dist/lib/core/decorators/context.d.ts +16 -9
  21. package/dist/lib/core/decorators/context.js +85 -59
  22. package/dist/lib/core/decorators/context.js.map +1 -1
  23. package/dist/lib/core/decorators/headers.d.ts +2 -2
  24. package/dist/lib/core/decorators/headers.js +1 -1
  25. package/dist/lib/core/decorators/headers.js.map +1 -1
  26. package/dist/lib/core/decorators/methods.d.ts +7 -7
  27. package/dist/lib/core/decorators/methods.js.map +1 -1
  28. package/dist/lib/core/decorators/middleware.d.ts +3 -3
  29. package/dist/lib/core/decorators/middleware.js +2 -2
  30. package/dist/lib/core/decorators/middleware.js.map +1 -1
  31. package/dist/lib/core/decorators/statusCode.d.ts +1 -1
  32. package/dist/lib/core/decorators/statusCode.js.map +1 -1
  33. package/dist/lib/core/decorators/swagger.d.ts +1 -1
  34. package/dist/lib/core/decorators/swagger.js.map +1 -1
  35. package/dist/lib/core/server/fast-router.d.ts +133 -0
  36. package/dist/lib/core/server/fast-router.js +277 -0
  37. package/dist/lib/core/server/fast-router.js.map +1 -0
  38. package/dist/lib/core/server/index.d.ts +39 -37
  39. package/dist/lib/core/server/index.js +201 -501
  40. package/dist/lib/core/server/index.js.map +1 -1
  41. package/dist/lib/core/server/net/index.d.ts +20 -0
  42. package/dist/lib/core/server/net/index.js +393 -0
  43. package/dist/lib/core/server/net/index.js.map +1 -0
  44. package/dist/lib/core/server/parser-factory.d.ts +10 -11
  45. package/dist/lib/core/server/parser-factory.js +259 -437
  46. package/dist/lib/core/server/parser-factory.js.map +1 -1
  47. package/dist/lib/core/server/response.d.ts +6 -0
  48. package/dist/lib/core/server/response.js +168 -0
  49. package/dist/lib/core/server/response.js.map +1 -0
  50. package/dist/lib/core/server/router.d.ts +2 -12
  51. package/dist/lib/core/server/router.js +2 -13
  52. package/dist/lib/core/server/router.js.map +1 -1
  53. package/dist/lib/core/server/uWS/index.d.ts +30 -0
  54. package/dist/lib/core/server/uWS/index.js +357 -0
  55. package/dist/lib/core/server/uWS/index.js.map +1 -0
  56. package/dist/lib/core/types/index.d.ts +150 -48
  57. package/dist/lib/core/utils/index.d.ts +12 -0
  58. package/dist/lib/core/utils/index.js +137 -0
  59. package/dist/lib/core/utils/index.js.map +1 -0
  60. package/dist/lib/index.d.ts +4 -3
  61. package/dist/lib/index.js +4 -2
  62. package/dist/lib/index.js.map +1 -1
  63. package/package.json +20 -14
@@ -0,0 +1,357 @@
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.uWSPipeStream = exports.uWSfiles = exports.uWSBody = exports.uWSAdaptRequestResponse = 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 const_1 = require("../../const");
12
+ const utils_1 = require("../../utils");
13
+ const uWSAdaptRequestResponse = (uwsReq, uwsRes) => {
14
+ const headers = {};
15
+ uwsReq.forEach((key, value) => {
16
+ headers[key.toLowerCase()] = value;
17
+ });
18
+ const req = {
19
+ uWS: uwsReq,
20
+ method: String(uwsReq.getMethod()).toUpperCase(),
21
+ url: uwsReq.getUrl() + (uwsReq.getQuery() ? `?${uwsReq.getQuery()}` : ""),
22
+ headers: headers,
23
+ };
24
+ const _writeHead = (status, context) => {
25
+ const statusMessage = const_1.HTTP_STATUS_MESSAGES[status] ||
26
+ const_1.HTTP_STATUS_MESSAGES[500];
27
+ res.uWS.writeStatus(`${status} ${statusMessage}`);
28
+ res.uWS.writeHeader(Object.keys(context)[0], Object.values(context)[0]);
29
+ return res;
30
+ };
31
+ const res = {
32
+ writeHeader: (key, value) => {
33
+ if (!res.aborted) {
34
+ uwsRes.writeHeader(key, value);
35
+ }
36
+ return res;
37
+ },
38
+ setHeader: (key, value) => {
39
+ if (!res.aborted) {
40
+ uwsRes.writeHeader(key, value);
41
+ }
42
+ return res;
43
+ },
44
+ writeHead(status, context) {
45
+ res.writeHeaders = {
46
+ ...res.writeHeaders,
47
+ [status]: context,
48
+ };
49
+ res.headersSent = true;
50
+ res.statusCode = status;
51
+ return res;
52
+ },
53
+ writeStatus: (status) => {
54
+ if (!res.aborted) {
55
+ res.uWS.writeStatus(status);
56
+ }
57
+ return res;
58
+ },
59
+ end: (str) => {
60
+ if (res.aborted) {
61
+ return;
62
+ }
63
+ if (str === undefined) {
64
+ return;
65
+ }
66
+ uwsRes.cork(() => {
67
+ if (!res.aborted) {
68
+ res.aborted = true;
69
+ res.writableEnded = true;
70
+ for (const h in res.writeHeaders) {
71
+ _writeHead(+h, res.writeHeaders[h]);
72
+ }
73
+ uwsRes.end(str);
74
+ return;
75
+ }
76
+ });
77
+ },
78
+ writableEnded: false,
79
+ aborted: false,
80
+ writeHeaders: Object.create(null),
81
+ headersSent: false,
82
+ statusCode: 200,
83
+ uWS: uwsRes,
84
+ };
85
+ uwsRes.onAborted(() => {
86
+ res.aborted = true;
87
+ });
88
+ return { req, res };
89
+ };
90
+ exports.uWSAdaptRequestResponse = uWSAdaptRequestResponse;
91
+ const uWSBody = (req, res) => {
92
+ return new Promise((resolve, reject) => {
93
+ let buffer = [];
94
+ res.uWS.onAborted(() => {
95
+ reject(new Error("Request aborted"));
96
+ });
97
+ res.uWS.onData(async (chunk, isLast) => {
98
+ buffer.push(Buffer.from(chunk));
99
+ if (!isLast)
100
+ return;
101
+ const payload = Buffer.concat(buffer).toString("utf-8");
102
+ const contentType = req.headers["content-type"]?.toLowerCase() ?? null;
103
+ try {
104
+ const body = await (0, utils_1.normalizeRequestBody)({ contentType, payload });
105
+ return resolve(body);
106
+ }
107
+ catch (err) {
108
+ return reject(err);
109
+ }
110
+ });
111
+ });
112
+ };
113
+ exports.uWSBody = uWSBody;
114
+ const uWSfiles = async ({ req, res, options, }) => {
115
+ const temp = options.tempFileDir;
116
+ if (!fs_1.default.existsSync(temp)) {
117
+ try {
118
+ fs_1.default.mkdirSync(temp, { recursive: true });
119
+ }
120
+ catch { }
121
+ }
122
+ const removeTemp = (fileTemp, ms) => {
123
+ const remove = () => {
124
+ try {
125
+ fs_1.default.unlinkSync(fileTemp);
126
+ }
127
+ catch (err) { }
128
+ };
129
+ setTimeout(remove, ms);
130
+ };
131
+ const contentType = req.headers["content-type"] ?? "";
132
+ const boundary = contentType.split("boundary=")[1];
133
+ if (!boundary) {
134
+ throw new Error("Invalid multipart/form-data (no boundary)");
135
+ }
136
+ const boundaryBuf = Buffer.from(`\r\n--${boundary}`);
137
+ return new Promise((resolve, reject) => {
138
+ let body = {};
139
+ let files = {};
140
+ let buffer = Buffer.alloc(0);
141
+ let currentFileStream = null;
142
+ let file = null;
143
+ let headerParsed = false;
144
+ let aborted = false;
145
+ const fail = (err) => {
146
+ if (aborted)
147
+ return;
148
+ aborted = true;
149
+ try {
150
+ currentFileStream?.destroy();
151
+ }
152
+ catch { }
153
+ try {
154
+ file?.tempFilePath && fs_1.default.unlinkSync(file.tempFilePath);
155
+ }
156
+ catch { }
157
+ try {
158
+ res.uWS.close();
159
+ }
160
+ catch { }
161
+ return reject(err);
162
+ };
163
+ res.uWS.onData((chunk, isLast) => {
164
+ if (aborted)
165
+ return;
166
+ const data = Buffer.from(new Uint8Array(chunk));
167
+ buffer = buffer.length === 0 ? data : Buffer.concat([buffer, data]);
168
+ try {
169
+ while (true) {
170
+ if (!headerParsed) {
171
+ const headerEnd = buffer.indexOf("\r\n\r\n");
172
+ if (headerEnd === -1)
173
+ break;
174
+ const header = buffer.slice(0, headerEnd).toString();
175
+ buffer = buffer.slice(headerEnd + 4);
176
+ const disposition = header.match(/name="([^"]+)"(?:; filename="([^"]+)")?/);
177
+ if (!disposition)
178
+ continue;
179
+ const fieldName = disposition[1];
180
+ const fileName = disposition[2];
181
+ if (!fileName) {
182
+ const nextBoundary = buffer.indexOf(boundaryBuf);
183
+ if (nextBoundary === -1)
184
+ break;
185
+ const value = buffer.slice(0, nextBoundary).toString().trim();
186
+ body[fieldName] = value;
187
+ buffer = buffer.slice(nextBoundary + boundaryBuf.length);
188
+ continue;
189
+ }
190
+ const contentTypeMatch = header.match(/Content-Type: ([^\r\n]+)/);
191
+ const mimetype = contentTypeMatch
192
+ ? contentTypeMatch[1]
193
+ : "application/octet-stream";
194
+ const extension = mime_types_1.default.extension(mimetype) ||
195
+ path_1.default.extname(fileName).replace(".", "") ||
196
+ "bin";
197
+ const tempFilename = crypto_1.default.randomBytes(16).toString("hex");
198
+ const filePath = path_1.default.join(path_1.default.resolve(), `${temp}/${tempFilename}`);
199
+ currentFileStream = fs_1.default.createWriteStream(filePath);
200
+ file = {
201
+ name: fileName,
202
+ tempFilePath: filePath,
203
+ tempFileName: tempFilename,
204
+ mimetype: mimetype,
205
+ extension: extension,
206
+ size: 0,
207
+ sizes: {
208
+ bytes: 0,
209
+ kb: 0,
210
+ mb: 0,
211
+ gb: 0,
212
+ },
213
+ write: (to) => {
214
+ return new Promise((resolve, reject) => {
215
+ fs_1.default
216
+ .createReadStream(filePath)
217
+ .pipe(fs_1.default.createWriteStream(to))
218
+ .on("finish", () => {
219
+ return resolve(null);
220
+ })
221
+ .on("error", (err) => {
222
+ return reject(err);
223
+ });
224
+ });
225
+ },
226
+ remove: () => {
227
+ return new Promise((resolve) => setTimeout(() => {
228
+ fs_1.default.unlinkSync(filePath);
229
+ return resolve(null);
230
+ }, 100));
231
+ },
232
+ };
233
+ if (!files[fieldName])
234
+ files[fieldName] = [];
235
+ files[fieldName].push(file);
236
+ if (options.removeTempFile.remove) {
237
+ removeTemp(filePath, options.removeTempFile.ms);
238
+ }
239
+ headerParsed = true;
240
+ }
241
+ const boundaryIndex = buffer.indexOf(boundaryBuf);
242
+ if (boundaryIndex === -1) {
243
+ const safeLength = buffer.length - boundaryBuf.length;
244
+ if (safeLength > 0) {
245
+ const writeChunk = buffer.slice(0, safeLength);
246
+ currentFileStream.write(writeChunk);
247
+ file.size += writeChunk.length;
248
+ file.sizes = {
249
+ bytes: file.size,
250
+ kb: file.size / 1024,
251
+ mb: file.size / 1024 / 1024,
252
+ gb: file.size / 1024 / 1024 / 1024,
253
+ };
254
+ if (file.size > options.limit) {
255
+ return fail(new Error(`File too large (limit ${options.limit} bytes)`));
256
+ }
257
+ buffer = buffer.slice(safeLength);
258
+ }
259
+ break;
260
+ }
261
+ const filePart = buffer.slice(0, boundaryIndex);
262
+ currentFileStream.write(filePart);
263
+ file.size += filePart.length;
264
+ file.sizes = {
265
+ bytes: file.size,
266
+ kb: file.size / 1024,
267
+ mb: file.size / 1024 / 1024,
268
+ gb: file.size / 1024 / 1024 / 1024,
269
+ };
270
+ if (file.size > options.limit) {
271
+ return fail(new Error(`File too large (limit ${options.limit} bytes)`));
272
+ }
273
+ currentFileStream.end();
274
+ currentFileStream = null;
275
+ file = null;
276
+ buffer = buffer.slice(boundaryIndex + boundaryBuf.length);
277
+ headerParsed = false;
278
+ }
279
+ if (isLast && !aborted) {
280
+ if (currentFileStream)
281
+ currentFileStream.end();
282
+ return resolve({ body, files });
283
+ }
284
+ }
285
+ catch (err) {
286
+ return fail(err);
287
+ }
288
+ });
289
+ });
290
+ };
291
+ exports.uWSfiles = uWSfiles;
292
+ const uWSPipeStream = async ({ req, res, filePath }) => {
293
+ //@ts-ignore
294
+ const uwsRes = res.uWS;
295
+ const stat = fs_1.default.statSync(filePath);
296
+ const fileSize = stat.size;
297
+ const range = req.headers["range"] ?? null;
298
+ const contentType = mime_types_1.default.lookup(filePath) || "application/octet-stream";
299
+ const isVideo = contentType.startsWith("video/");
300
+ //@ts-ignore
301
+ let aborted = res.aborted || false;
302
+ let stream;
303
+ let start = 0;
304
+ let end = fileSize - 1;
305
+ uwsRes.onAborted(() => {
306
+ aborted = true;
307
+ if (stream)
308
+ stream.destroy();
309
+ });
310
+ if (range && isVideo) {
311
+ const parts = range.replace(/bytes=/, "").split("-");
312
+ start = parseInt(parts[0], 10);
313
+ end = parts[1] ? parseInt(parts[1], 10) : end;
314
+ uwsRes.writeStatus("206 Partial Content");
315
+ uwsRes.writeHeader("Content-Range", `bytes ${start}-${end}/${fileSize}`);
316
+ }
317
+ else {
318
+ uwsRes.writeStatus("200 OK");
319
+ }
320
+ const chunkSize = end - start + 1;
321
+ uwsRes.writeHeader("Content-Type", contentType);
322
+ uwsRes.writeHeader("Accept-Ranges", "bytes");
323
+ uwsRes.writeHeader("Content-Length", chunkSize.toString());
324
+ stream = fs_1.default.createReadStream(filePath, { start, end });
325
+ stream.pause();
326
+ stream.on("data", (chunk) => {
327
+ if (aborted)
328
+ return;
329
+ const ok = uwsRes.cork(() => uwsRes.write(chunk));
330
+ if (!ok)
331
+ stream.pause();
332
+ });
333
+ uwsRes.onWritable(() => {
334
+ if (aborted)
335
+ return false;
336
+ stream.resume();
337
+ return true;
338
+ });
339
+ stream.on("end", () => {
340
+ if (!aborted) {
341
+ uwsRes.cork(() => {
342
+ uwsRes.end();
343
+ });
344
+ }
345
+ });
346
+ stream.on("error", () => {
347
+ if (!aborted) {
348
+ uwsRes.cork(() => {
349
+ uwsRes.writeStatus("500 Internal Server Error").end();
350
+ });
351
+ }
352
+ });
353
+ stream.resume();
354
+ return stream;
355
+ };
356
+ exports.uWSPipeStream = uWSPipeStream;
357
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/core/server/uWS/index.ts"],"names":[],"mappings":"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"}