tspace-spear 1.2.9-beta.1 → 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 (55) hide show
  1. package/README.md +103 -0
  2. package/dist/cli/generators/controller/template.d.ts +1 -1
  3. package/dist/cli/generators/controller/template.js +1 -1
  4. package/dist/lib/core/client/index.js +19 -23
  5. package/dist/lib/core/client/index.js.map +1 -1
  6. package/dist/lib/core/client/types.d.ts +4 -3
  7. package/dist/lib/core/compiler/generator.js +2 -2
  8. package/dist/lib/core/compiler/generator.js.map +1 -1
  9. package/dist/lib/core/compiler/pre-routes.d.ts +260 -6
  10. package/dist/lib/core/compiler/pre-routes.js +54 -4
  11. package/dist/lib/core/compiler/pre-routes.js.map +1 -1
  12. package/dist/lib/core/const/index.d.ts +12 -0
  13. package/dist/lib/core/const/index.js +6 -1
  14. package/dist/lib/core/const/index.js.map +1 -1
  15. package/dist/lib/core/decorators/headers.js +1 -0
  16. package/dist/lib/core/decorators/headers.js.map +1 -1
  17. package/dist/lib/core/decorators/middleware.d.ts +9 -3
  18. package/dist/lib/core/decorators/middleware.js +55 -15
  19. package/dist/lib/core/decorators/middleware.js.map +1 -1
  20. package/dist/lib/core/decorators/statusCode.js.map +1 -1
  21. package/dist/lib/core/server/fast-router.d.ts +5 -5
  22. package/dist/lib/core/server/fast-router.js +2 -2
  23. package/dist/lib/core/server/fast-router.js.map +1 -1
  24. package/dist/lib/core/server/http/index.d.ts +22 -0
  25. package/dist/lib/core/server/http/index.js +220 -0
  26. package/dist/lib/core/server/http/index.js.map +1 -0
  27. package/dist/lib/core/server/index.d.ts +3 -2
  28. package/dist/lib/core/server/index.js +94 -60
  29. package/dist/lib/core/server/index.js.map +1 -1
  30. package/dist/lib/core/server/net/index.d.ts +13 -8
  31. package/dist/lib/core/server/net/index.js +2 -2
  32. package/dist/lib/core/server/net/index.js.map +1 -1
  33. package/dist/lib/core/server/parser-factory.d.ts +3 -4
  34. package/dist/lib/core/server/parser-factory.js +17 -157
  35. package/dist/lib/core/server/parser-factory.js.map +1 -1
  36. package/dist/lib/core/server/response.d.ts +1 -2
  37. package/dist/lib/core/server/response.js +173 -171
  38. package/dist/lib/core/server/response.js.map +1 -1
  39. package/dist/lib/core/server/uWS/index.d.ts +2 -3
  40. package/dist/lib/core/server/uWS/index.js +15 -10
  41. package/dist/lib/core/server/uWS/index.js.map +1 -1
  42. package/dist/lib/core/types/index.d.ts +15 -6
  43. package/dist/lib/core/utils/index.d.ts +3 -3
  44. package/dist/lib/core/utils/index.js +19 -16
  45. package/dist/lib/core/utils/index.js.map +1 -1
  46. package/package.json +27 -10
  47. package/dist/cli/app.d.ts +0 -1
  48. package/dist/cli/app.js +0 -28
  49. package/dist/cli/app.js.map +0 -1
  50. package/dist/cli/controller.d.ts +0 -1
  51. package/dist/cli/controller.js +0 -158
  52. package/dist/cli/controller.js.map +0 -1
  53. package/dist/lib/core/compiler/types.d.ts +0 -39
  54. package/dist/lib/core/compiler/types.js +0 -3
  55. package/dist/lib/core/compiler/types.js.map +0 -1
@@ -16,10 +16,10 @@ const normalizeRequestBody = async ({ contentType, payload, }) => {
16
16
  if (contentType == null || payload == null || payload === "") {
17
17
  return {};
18
18
  }
19
- if (contentType.includes("x-www-form-urlencoded")) {
19
+ if (contentType.includes(const_1.HEADER_CONTENT_TYPES["form"]["Content-Type"])) {
20
20
  return querystring_1.default.parse(payload);
21
21
  }
22
- if (contentType.includes("application/json")) {
22
+ if (contentType.includes(const_1.HEADER_CONTENT_TYPES["json"]["Content-Type"])) {
23
23
  try {
24
24
  return JSON.parse(payload);
25
25
  }
@@ -27,8 +27,8 @@ const normalizeRequestBody = async ({ contentType, payload, }) => {
27
27
  throw new Error("Invalid JSON format in request body.");
28
28
  }
29
29
  }
30
- if (contentType.includes("application/xml") ||
31
- contentType.includes("text/xml")) {
30
+ if (contentType.includes(const_1.HEADER_CONTENT_TYPES["xml"]["Content-Type"]) ||
31
+ contentType.includes(const_1.HEADER_CONTENT_TYPES["xmlText"]["Content-Type"])) {
32
32
  try {
33
33
  const result = await xml2js_1.default.parseStringPromise(payload, {
34
34
  explicitArray: false,
@@ -39,10 +39,10 @@ const normalizeRequestBody = async ({ contentType, payload, }) => {
39
39
  throw new Error("Invalid XML format in request body.");
40
40
  }
41
41
  }
42
- if (contentType.includes("text/plain") ||
43
- contentType.includes("text/javascript") ||
44
- contentType.includes("application/javascript") ||
45
- contentType.includes("application/x-javascript")) {
42
+ if (contentType.includes(const_1.HEADER_CONTENT_TYPES["text"]["Content-Type"]) ||
43
+ contentType.includes(const_1.HEADER_CONTENT_TYPES["js"]["Content-Type"]) ||
44
+ contentType.includes(const_1.HEADER_CONTENT_TYPES["jsText"]["Content-Type"]) ||
45
+ contentType.includes(const_1.HEADER_CONTENT_TYPES["jsX"]["Content-Type"])) {
46
46
  return { contentType, text: payload };
47
47
  }
48
48
  return {};
@@ -60,7 +60,7 @@ const pipeStream = async ({ req, res, filePath, isUwebSocket, }) => {
60
60
  const stat = fs_1.default.statSync(filePath);
61
61
  const fileSize = stat.size;
62
62
  const range = req.headers["range"] ?? null;
63
- const contentType = mime_types_1.default.lookup(filePath) || "application/octet-stream";
63
+ const contentType = mime_types_1.default.lookup(filePath) || const_1.HEADER_CONTENT_TYPES["octet"]["Content-Type"];
64
64
  const isVideo = contentType.startsWith("video/");
65
65
  const writeHead = (header, code = 200) => {
66
66
  const extension = filePath.split(".").pop();
@@ -80,7 +80,7 @@ const pipeStream = async ({ req, res, filePath, isUwebSocket, }) => {
80
80
  "mpeg",
81
81
  ],
82
82
  audio: ["wav", "mp3"],
83
- document: ["pdf"],
83
+ document: ["pdf", "html"],
84
84
  image: ["png", "jpeg", "jpg", "gif", "webp", "svg", "ico"],
85
85
  }).flat();
86
86
  if (previews.some((p) => extension?.toLocaleLowerCase().includes(p))) {
@@ -88,10 +88,13 @@ const pipeStream = async ({ req, res, filePath, isUwebSocket, }) => {
88
88
  return;
89
89
  }
90
90
  res.setHeader("Content-Disposition", `attachment; filename=${+new Date()}.${extension}`);
91
- res.setHeader("Content-Type", "application/octet-stream");
91
+ res.setHeader("Content-Type", const_1.HEADER_CONTENT_TYPES["octet"]["Content-Type"]);
92
92
  };
93
93
  const maxAge = 1000 * 60 * 60 * 24 * 7;
94
- const etag = crypto_1.default.createHash("md5").update(`${stat.size}-${stat.mtimeMs}`).digest("hex");
94
+ const etag = crypto_1.default
95
+ .createHash("md5")
96
+ .update(`${stat.size}-${stat.mtimeMs}`)
97
+ .digest("hex");
95
98
  const baseHeader = {
96
99
  "Connection": "keep-alive",
97
100
  "Keep-Alive": "timeout=60, max=1000",
@@ -115,8 +118,8 @@ const pipeStream = async ({ req, res, filePath, isUwebSocket, }) => {
115
118
  };
116
119
  const stream = fs_1.default.createReadStream(filePath);
117
120
  writeHead(header);
118
- stream.on("error", () => res.end());
119
- return stream.pipe(res);
121
+ stream.on("error", () => res.http.end());
122
+ return stream.pipe(res.http);
120
123
  }
121
124
  const parts = range.replace(/bytes=/, "").split("-");
122
125
  const start = parseInt(parts[0], 10);
@@ -130,8 +133,8 @@ const pipeStream = async ({ req, res, filePath, isUwebSocket, }) => {
130
133
  "Accept-Ranges": "bytes"
131
134
  };
132
135
  writeHead(header, 206);
133
- stream.on("error", () => res.end());
134
- return stream.pipe(res);
136
+ stream.on("error", () => res.http.end());
137
+ return stream.pipe(res.http);
135
138
  };
136
139
  exports.pipeStream = pipeStream;
137
140
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/core/utils/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/core/utils/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tspace-spear",
3
- "version": "1.2.9-beta.1",
3
+ "version": "1.3.0",
4
4
  "description": "tspace-spear is a lightweight, high-performance API framework for Node.js that leverages the native HTTP server and supports uWebSockets.js (C++) for maximum speed and efficiency.",
5
5
  "main": "./dist/lib/index.js",
6
6
  "types": "./dist/lib/index.d.ts",
@@ -18,16 +18,33 @@
18
18
  "keywords": [
19
19
  "tspace",
20
20
  "tspace-spear",
21
+ "nodejs",
22
+ "node",
23
+ "framework",
21
24
  "api",
22
- "rest api",
23
- "fast",
24
- "fast-api",
25
- "fast api",
26
- "low overhead",
27
25
  "http",
28
- "uWS",
29
- "uWebSockets",
30
- "uWebSockets.js"
26
+ "server",
27
+ "backend",
28
+ "web",
29
+ "typescript",
30
+ "type-safe",
31
+ "dependency-injection",
32
+ "decorators",
33
+ "middleware",
34
+ "routing",
35
+ "controller",
36
+ "rest",
37
+ "rest-api",
38
+ "high-performance",
39
+ "fast",
40
+ "lightweight",
41
+ "low-overhead",
42
+ "uws",
43
+ "uwebsockets",
44
+ "uwebsockets.js",
45
+ "native-http",
46
+ "e2e",
47
+ "end-to-end"
31
48
  ],
32
49
  "author": "Thanathip (https://github.com/thanathip41)",
33
50
  "license": "MIT",
@@ -45,7 +62,7 @@
45
62
  "benchmark:node": "npm run build && node --no-warnings --optimize-for-size benchmarks/tests/benchmark.node.js",
46
63
  "benchmark:bun": "npm run build && bun run --no-warnings --optimize-for-size benchmarks/tests/benchmark.bun.js",
47
64
  "load": "autocannon -c 100 -d 30 -p 10 localhost:5000",
48
- "test": "ts-mocha ./__tests__/**/*.test.ts --reporter spec --slow 0 --no-timeouts --recursive --reporter mochawesome --reporter-options reportDir=__tests-report__,reportFilename=errors.html,reportTitle=Unit-test --exit",
65
+ "test": "ts-mocha ./__tests__/**/0*.test.ts --reporter spec --slow 0 --no-timeouts --recursive --reporter mochawesome --reporter-options reportDir=__tests-report__,reportFilename=errors.html,reportTitle=Unit-test --exit",
49
66
  "docs": "npx docsify-cli serve docs"
50
67
  },
51
68
  "exports": {
package/dist/cli/app.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare const app = "\nimport Spear from \"tspace-spear\";\n\nexport const app = new Spear({\n logger: true,\n controllers: {\n folder: `${__dirname}/controllers`,\n name: /controller\\\\.(ts|js)$/i,\n\n // don't forget to set this option for auto-generate route metadata for type-safe E2E usage, \n // and swagger documentation. By default if use .useSwagger() in app no need to set any description\n preRouteTypes: true\n }\n})\n\napp.useGlobalPrefix(\"api\");\napp.useSwagger();\napp.useBodyParser();\n\napp.listen(8000 , ({ port , server }) => {\n console.log(`Server listening on : http://localhost:${port}`)\n console.log(\n`Docs listening on : http://localhost:${port}`/api/docs)\n})\n";
package/dist/cli/app.js DELETED
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.app = void 0;
4
- exports.app = `
5
- import Spear from "tspace-spear";
6
-
7
- export const app = new Spear({
8
- logger: true,
9
- controllers: {
10
- folder: \`\${__dirname}/controllers\`,
11
- name: /controller\\\\.(ts|js)$/i,
12
-
13
- // don't forget to set this option for auto-generate route metadata for type-safe E2E usage,
14
- // and swagger documentation. By default if use .useSwagger() in app no need to set any description
15
- preRouteTypes: true
16
- }
17
- })
18
-
19
- app.useGlobalPrefix("api");
20
- app.useSwagger();
21
- app.useBodyParser();
22
-
23
- app.listen(8000 , ({ port , server }) => {
24
- console.log(\`Server listening on : http://localhost:\${port}\`)
25
- console.log(\n\`Docs listening on : http://localhost:\${port}\`/api/docs)
26
- })
27
- `;
28
- //# sourceMappingURL=app.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/cli/app.ts"],"names":[],"mappings":";;;AAAa,QAAA,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBlB,CAAC"}
@@ -1 +0,0 @@
1
- export declare const CatController = "\nimport {\n type T,\n Controller,\n Get,\n Post,\n Put,\n Delete\n} from \"tspace-spear\";\n\ntype Cat = {\n id: number;\n name: string;\n age: number;\n};\n\nlet cats: Cat[] = [\n {\n id: 1,\n name: \"cat 1\",\n age: 2\n },\n {\n id: 2,\n name: \"cat 2\",\n age: 4\n }\n];\n\n@Controller(\"/cats\")\nexport default class CatController {\n\n @Get(\"/\")\n async index() {\n return {\n cats\n };\n }\n\n @Get(\"/:id\")\n async show({\n res,\n params\n }: T.Context<{\n params: {\n id: number;\n };\n }>) {\n\n const cat = cats.find(\n d => d.id === Number(params.id)\n );\n\n if (!cat) {\n throw res.notFound(\n \"Cat not found\"\n );\n }\n\n return {\n cat\n };\n }\n\n @Post(\"/\")\n async create({\n body\n }: T.Context<{\n body: {\n name: string;\n age: number;\n };\n }>) {\n\n const cat: Cat = {\n id: cats.length + 1,\n name: body.name,\n age: body.age\n };\n\n cats.push(cat);\n\n return {\n message: \"Created\",\n cat\n };\n }\n\n @Put(\"/:id\")\n async update({\n res,\n params,\n body\n }: T.Context<{\n params: {\n id: number;\n };\n body: Partial<{\n name: string;\n age: number;\n }>;\n }>) {\n\n const index = cats.findIndex(\n d => d.id === Number(params.id)\n );\n\n if (index === -1) {\n throw res.notFound(\n \"Cat not found\"\n );\n }\n\n cats[index] = {\n ...cats[index],\n ...body\n };\n\n return {\n message: \"Updated\",\n cat: cats[index]\n };\n }\n\n @Delete(\"/:id\")\n async remove({\n res,\n params\n }: T.Context<{\n params: {\n id: number;\n };\n }>) {\n\n const index = cats.findIndex(\n d => d.id === Number(params.id)\n );\n\n if (index === -1) {\n throw res.notFound(\n \"Cat not found\"\n );\n }\n\n cats = cats.filter(\n d => d.id !== Number(params.id)\n );\n\n return {\n message: \"Deleted\"\n };\n }\n}\n";
@@ -1,158 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CatController = void 0;
4
- exports.CatController = `
5
- import {
6
- type T,
7
- Controller,
8
- Get,
9
- Post,
10
- Put,
11
- Delete
12
- } from "tspace-spear";
13
-
14
- type Cat = {
15
- id: number;
16
- name: string;
17
- age: number;
18
- };
19
-
20
- let cats: Cat[] = [
21
- {
22
- id: 1,
23
- name: "cat 1",
24
- age: 2
25
- },
26
- {
27
- id: 2,
28
- name: "cat 2",
29
- age: 4
30
- }
31
- ];
32
-
33
- @Controller("/cats")
34
- export default class CatController {
35
-
36
- @Get("/")
37
- async index() {
38
- return {
39
- cats
40
- };
41
- }
42
-
43
- @Get("/:id")
44
- async show({
45
- res,
46
- params
47
- }: T.Context<{
48
- params: {
49
- id: number;
50
- };
51
- }>) {
52
-
53
- const cat = cats.find(
54
- d => d.id === Number(params.id)
55
- );
56
-
57
- if (!cat) {
58
- throw res.notFound(
59
- "Cat not found"
60
- );
61
- }
62
-
63
- return {
64
- cat
65
- };
66
- }
67
-
68
- @Post("/")
69
- async create({
70
- body
71
- }: T.Context<{
72
- body: {
73
- name: string;
74
- age: number;
75
- };
76
- }>) {
77
-
78
- const cat: Cat = {
79
- id: cats.length + 1,
80
- name: body.name,
81
- age: body.age
82
- };
83
-
84
- cats.push(cat);
85
-
86
- return {
87
- message: "Created",
88
- cat
89
- };
90
- }
91
-
92
- @Put("/:id")
93
- async update({
94
- res,
95
- params,
96
- body
97
- }: T.Context<{
98
- params: {
99
- id: number;
100
- };
101
- body: Partial<{
102
- name: string;
103
- age: number;
104
- }>;
105
- }>) {
106
-
107
- const index = cats.findIndex(
108
- d => d.id === Number(params.id)
109
- );
110
-
111
- if (index === -1) {
112
- throw res.notFound(
113
- "Cat not found"
114
- );
115
- }
116
-
117
- cats[index] = {
118
- ...cats[index],
119
- ...body
120
- };
121
-
122
- return {
123
- message: "Updated",
124
- cat: cats[index]
125
- };
126
- }
127
-
128
- @Delete("/:id")
129
- async remove({
130
- res,
131
- params
132
- }: T.Context<{
133
- params: {
134
- id: number;
135
- };
136
- }>) {
137
-
138
- const index = cats.findIndex(
139
- d => d.id === Number(params.id)
140
- );
141
-
142
- if (index === -1) {
143
- throw res.notFound(
144
- "Cat not found"
145
- );
146
- }
147
-
148
- cats = cats.filter(
149
- d => d.id !== Number(params.id)
150
- );
151
-
152
- return {
153
- message: "Deleted"
154
- };
155
- }
156
- }
157
- `;
158
- //# sourceMappingURL=controller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/cli/controller.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyJ5B,CAAC"}
@@ -1,39 +0,0 @@
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;
15
- export type OptionalIfEmpty<T> = {} extends T ? [input?: T] : [input: T];
16
- export type RequestInput<TRoutes extends AnyRoutes, TPath extends keyof TRoutes, TMethod extends keyof TRoutes[TPath]> = RequestParams<TRoutes, TPath, TMethod> extends never ? {
17
- params?: never;
18
- query?: RequestQuery<TRoutes, TPath, TMethod>;
19
- body?: RequestBody<TRoutes, TPath, TMethod>;
20
- files?: RequestFiles<TRoutes, TPath, TMethod>;
21
- } : {
22
- params: RequestParams<TRoutes, TPath, TMethod>;
23
- query?: RequestQuery<TRoutes, TPath, TMethod>;
24
- body?: RequestBody<TRoutes, TPath, TMethod>;
25
- files?: RequestFiles<TRoutes, TPath, TMethod>;
26
- };
27
- export type SuccessStatus = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226;
28
- export type ErrorStatus = 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 421 | 422 | 423 | 424 | 425 | 426 | 428 | 429 | 431 | 451 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511;
29
- export type ApiResponse<T, E = unknown> = {
30
- ok: true;
31
- status: SuccessStatus;
32
- headers: Headers;
33
- data: T;
34
- } | {
35
- ok: false;
36
- status: ErrorStatus;
37
- headers: Headers;
38
- data: E;
39
- };
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/lib/core/compiler/types.ts"],"names":[],"mappings":""}