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.
- package/README.md +268 -19
- package/dist/lib/core/client/index.d.ts +23 -0
- package/dist/lib/core/client/index.js +45 -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 +142 -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 +11 -0
- package/dist/lib/core/compiler/index.js.map +1 -0
- package/dist/lib/core/compiler/pre-routes.d.ts +3 -0
- package/dist/lib/core/compiler/pre-routes.js +5 -0
- package/dist/lib/core/compiler/pre-routes.js.map +1 -0
- package/dist/lib/core/compiler/types.d.ts +12 -0
- package/dist/lib/core/compiler/types.js +3 -0
- package/dist/lib/core/compiler/types.js.map +1 -0
- package/dist/lib/core/const/index.d.ts +153 -0
- package/dist/lib/core/const/index.js +105 -0
- package/dist/lib/core/const/index.js.map +1 -0
- package/dist/lib/core/decorators/context.d.ts +16 -9
- package/dist/lib/core/decorators/context.js +85 -59
- package/dist/lib/core/decorators/context.js.map +1 -1
- package/dist/lib/core/decorators/headers.d.ts +2 -2
- package/dist/lib/core/decorators/headers.js +1 -1
- package/dist/lib/core/decorators/headers.js.map +1 -1
- package/dist/lib/core/decorators/methods.d.ts +7 -7
- package/dist/lib/core/decorators/methods.js.map +1 -1
- package/dist/lib/core/decorators/middleware.d.ts +3 -3
- package/dist/lib/core/decorators/middleware.js +2 -2
- package/dist/lib/core/decorators/middleware.js.map +1 -1
- package/dist/lib/core/decorators/statusCode.d.ts +1 -1
- package/dist/lib/core/decorators/statusCode.js.map +1 -1
- package/dist/lib/core/decorators/swagger.d.ts +1 -1
- package/dist/lib/core/decorators/swagger.js.map +1 -1
- package/dist/lib/core/server/fast-router.d.ts +133 -0
- package/dist/lib/core/server/fast-router.js +277 -0
- package/dist/lib/core/server/fast-router.js.map +1 -0
- package/dist/lib/core/server/index.d.ts +39 -37
- package/dist/lib/core/server/index.js +201 -501
- package/dist/lib/core/server/index.js.map +1 -1
- package/dist/lib/core/server/net/index.d.ts +20 -0
- package/dist/lib/core/server/net/index.js +393 -0
- package/dist/lib/core/server/net/index.js.map +1 -0
- package/dist/lib/core/server/parser-factory.d.ts +10 -11
- package/dist/lib/core/server/parser-factory.js +259 -437
- package/dist/lib/core/server/parser-factory.js.map +1 -1
- package/dist/lib/core/server/response.d.ts +6 -0
- package/dist/lib/core/server/response.js +168 -0
- package/dist/lib/core/server/response.js.map +1 -0
- package/dist/lib/core/server/router.d.ts +2 -12
- package/dist/lib/core/server/router.js +2 -13
- package/dist/lib/core/server/router.js.map +1 -1
- package/dist/lib/core/server/uWS/index.d.ts +30 -0
- package/dist/lib/core/server/uWS/index.js +357 -0
- package/dist/lib/core/server/uWS/index.js.map +1 -0
- package/dist/lib/core/types/index.d.ts +150 -48
- package/dist/lib/core/utils/index.d.ts +12 -0
- package/dist/lib/core/utils/index.js +137 -0
- package/dist/lib/core/utils/index.js.map +1 -0
- package/dist/lib/index.d.ts +4 -3
- package/dist/lib/index.js +4 -2
- package/dist/lib/index.js.map +1 -1
- 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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"}
|