tspace-spear 1.2.7 → 1.2.9-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 (99) hide show
  1. package/README.md +347 -155
  2. package/dist/cli/generators/app/index.d.ts +1 -0
  3. package/dist/cli/generators/app/index.js +124 -0
  4. package/dist/cli/generators/app/index.js.map +1 -0
  5. package/dist/cli/generators/app/template.d.ts +1 -0
  6. package/dist/cli/generators/app/template.js +42 -0
  7. package/dist/cli/generators/app/template.js.map +1 -0
  8. package/dist/cli/generators/client/template.d.ts +1 -0
  9. package/dist/cli/generators/client/template.js +30 -0
  10. package/dist/cli/generators/client/template.js.map +1 -0
  11. package/dist/cli/generators/controller/index.d.ts +1 -0
  12. package/dist/cli/generators/controller/index.js +78 -0
  13. package/dist/cli/generators/controller/index.js.map +1 -0
  14. package/dist/cli/generators/controller/template.d.ts +1 -0
  15. package/dist/cli/generators/controller/template.js +108 -0
  16. package/dist/cli/generators/controller/template.js.map +1 -0
  17. package/dist/cli/generators/dto/index.d.ts +1 -0
  18. package/dist/cli/generators/dto/index.js +57 -0
  19. package/dist/cli/generators/dto/index.js.map +1 -0
  20. package/dist/cli/generators/dto/template.d.ts +1 -0
  21. package/dist/cli/generators/dto/template.js +32 -0
  22. package/dist/cli/generators/dto/template.js.map +1 -0
  23. package/dist/cli/generators/middleware/index.d.ts +1 -0
  24. package/dist/cli/generators/middleware/index.js +38 -0
  25. package/dist/cli/generators/middleware/index.js.map +1 -0
  26. package/dist/cli/generators/middleware/template.d.ts +1 -0
  27. package/dist/cli/generators/middleware/template.js +16 -0
  28. package/dist/cli/generators/middleware/template.js.map +1 -0
  29. package/dist/cli/generators/module/index.d.ts +1 -0
  30. package/dist/cli/generators/module/index.js +173 -0
  31. package/dist/cli/generators/module/index.js.map +1 -0
  32. package/dist/cli/generators/service/index.d.ts +1 -0
  33. package/dist/cli/generators/service/index.js +53 -0
  34. package/dist/cli/generators/service/index.js.map +1 -0
  35. package/dist/cli/generators/service/template.d.ts +1 -0
  36. package/dist/cli/generators/service/template.js +74 -0
  37. package/dist/cli/generators/service/template.js.map +1 -0
  38. package/dist/cli/generators/shared/index.d.ts +3 -0
  39. package/dist/cli/generators/shared/index.js +22 -0
  40. package/dist/cli/generators/shared/index.js.map +1 -0
  41. package/dist/cli/index.js +55 -96
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/lib/core/client/index.d.ts +13 -43
  44. package/dist/lib/core/client/index.js +70 -33
  45. package/dist/lib/core/client/index.js.map +1 -1
  46. package/dist/lib/core/client/types.d.ts +43 -0
  47. package/dist/lib/core/client/types.js +3 -0
  48. package/dist/lib/core/client/types.js.map +1 -0
  49. package/dist/lib/core/compiler/generator.d.ts +4 -6
  50. package/dist/lib/core/compiler/generator.js +190 -39
  51. package/dist/lib/core/compiler/generator.js.map +1 -1
  52. package/dist/lib/core/compiler/index.d.ts +2 -2
  53. package/dist/lib/core/compiler/index.js +2 -2
  54. package/dist/lib/core/compiler/index.js.map +1 -1
  55. package/dist/lib/core/compiler/pre-routes.d.ts +12 -130
  56. package/dist/lib/core/compiler/pre-routes.js +13 -35
  57. package/dist/lib/core/compiler/pre-routes.js.map +1 -1
  58. package/dist/lib/core/compiler/types.d.ts +25 -0
  59. package/dist/lib/core/decorators/context.d.ts +78 -8
  60. package/dist/lib/core/decorators/context.js +84 -9
  61. package/dist/lib/core/decorators/context.js.map +1 -1
  62. package/dist/lib/core/decorators/controller.js +2 -1
  63. package/dist/lib/core/decorators/controller.js.map +1 -1
  64. package/dist/lib/core/decorators/index.d.ts +1 -0
  65. package/dist/lib/core/decorators/index.js +1 -0
  66. package/dist/lib/core/decorators/index.js.map +1 -1
  67. package/dist/lib/core/decorators/methods.js +4 -3
  68. package/dist/lib/core/decorators/methods.js.map +1 -1
  69. package/dist/lib/core/decorators/middleware.d.ts +40 -2
  70. package/dist/lib/core/decorators/middleware.js +54 -9
  71. package/dist/lib/core/decorators/middleware.js.map +1 -1
  72. package/dist/lib/core/decorators/service.d.ts +28 -0
  73. package/dist/lib/core/decorators/service.js +36 -0
  74. package/dist/lib/core/decorators/service.js.map +1 -0
  75. package/dist/lib/core/decorators/statusCode.js +3 -1
  76. package/dist/lib/core/decorators/statusCode.js.map +1 -1
  77. package/dist/lib/core/decorators/swagger.js +4 -3
  78. package/dist/lib/core/decorators/swagger.js.map +1 -1
  79. package/dist/lib/core/exception/index.d.ts +68 -0
  80. package/dist/lib/core/exception/index.js +123 -0
  81. package/dist/lib/core/exception/index.js.map +1 -0
  82. package/dist/lib/core/metadata/index.d.ts +6 -0
  83. package/dist/lib/core/metadata/index.js +13 -0
  84. package/dist/lib/core/metadata/index.js.map +1 -0
  85. package/dist/lib/core/package/index.d.ts +11 -0
  86. package/dist/lib/core/package/index.js +42 -0
  87. package/dist/lib/core/package/index.js.map +1 -0
  88. package/dist/lib/core/server/fast-router.d.ts +2 -2
  89. package/dist/lib/core/server/fast-router.js +17 -3
  90. package/dist/lib/core/server/fast-router.js.map +1 -1
  91. package/dist/lib/core/server/index.d.ts +32 -5
  92. package/dist/lib/core/server/index.js +188 -45
  93. package/dist/lib/core/server/index.js.map +1 -1
  94. package/dist/lib/core/server/parser-factory.js +59 -10
  95. package/dist/lib/core/server/parser-factory.js.map +1 -1
  96. package/dist/lib/core/server/response.js +21 -1
  97. package/dist/lib/core/server/response.js.map +1 -1
  98. package/dist/lib/core/types/index.d.ts +42 -29
  99. package/package.json +15 -6
@@ -22,7 +22,7 @@ type THeaders<T = IncomingHttpHeaders> = {
22
22
  type TQuery<T = Record<string, string | undefined>> = T;
23
23
  type TParams<T = Record<string, string | number | undefined>> = T;
24
24
  type TBody<T = Record<string, any>> = T;
25
- type TCookies<T = Record<string, any | undefined>> = T;
25
+ type TCookies<T = Record<string, string | undefined>> = T;
26
26
  type TFile = {
27
27
  size: number;
28
28
  sizes: {
@@ -54,35 +54,35 @@ type THttpResponder = {
54
54
  */
55
55
  uWS: any;
56
56
  /** 200 OK - Standard successful response */
57
- ok: (data?: Record<string, any>) => any;
57
+ ok: <T extends Record<string, any>>(data?: T) => T.Response & T;
58
58
  /** 201 Created - Resource successfully created */
59
- created: (data?: Record<string, any>) => any;
59
+ created: <T extends Record<string, any>>(data?: T) => T.Response & T;
60
60
  /** 202 Accepted - Request accepted for processing */
61
- accepted: (data?: Record<string, any>) => any;
61
+ accepted: <T extends Record<string, any>>(data?: T) => T.Response & T;
62
62
  /** 204 No Content - Successful request with no response body */
63
- noContent: (message?: string) => any;
63
+ noContent: <T extends string>(message?: T) => T.Response & T;
64
64
  /** 400 Bad Request - Invalid request from client */
65
- badRequest: (message?: string) => any;
65
+ badRequest: <T extends string>(message?: T) => T.Response & T;
66
66
  /** 401 Unauthorized - Authentication required or failed */
67
- unauthorized: (message?: string) => any;
67
+ unauthorized: <T extends string>(message?: T) => T.Response & T;
68
68
  /** 402 Payment Required - Reserved for future/payment flow */
69
- paymentRequired: (message?: string) => any;
69
+ paymentRequired: <T extends string>(message?: T) => T.Response & T;
70
70
  /** 403 Forbidden - Client does not have access rights */
71
- forbidden: (message?: string) => any;
71
+ forbidden: <T extends string>(message?: T) => T.Response & T;
72
+ /** 404 Not Found - Resource does not exist */
73
+ notFound: <T extends string>(message?: T) => T.Response & T;
72
74
  /** 422 Unprocessable Entity - Valid request but semantic errors */
73
- unprocessable: (message?: string) => any;
75
+ unprocessable: <T extends string>(message?: T) => T.Response & T;
74
76
  /** 429 Too Many Requests - Rate limit exceeded */
75
- tooManyRequests: (message?: string) => any;
76
- /** 404 Not Found - Resource does not exist */
77
- notFound: (message?: string) => any;
77
+ tooManyRequests: <T extends string>(message?: T) => T.Response & T;
78
78
  /** 500 Internal Server Error - Generic server failure */
79
- serverError: (message?: string) => any;
79
+ serverError: <T extends string>(message?: T) => T.Response & T;
80
80
  /** 502 Bad Gateway - Invalid response from upstream server */
81
- badGateway: (message?: string) => any;
81
+ badGateway: <T extends string>(message?: T) => T.Response & T;
82
82
  /** 503 Service Unavailable - Server temporarily unavailable */
83
- unavailable: (message?: string) => any;
83
+ unavailable: <T extends string>(message?: T) => T.Response & T;
84
84
  /** 504 Gateway Timeout - Upstream server timeout */
85
- gatewayTimeout: (message?: string) => any;
85
+ gatewayTimeout: <T extends string>(message?: T) => T.Response & T;
86
86
  /**
87
87
  * Serve a media file (video, image, PDF, etc.) from file system.
88
88
  * @param filePath Absolute or relative path to media file
@@ -92,7 +92,7 @@ type THttpResponder = {
92
92
  * Send JSON response.
93
93
  * @param data JSON serializable object
94
94
  */
95
- json: (data?: Record<string, any>) => any;
95
+ json: <T extends Record<string, any>>(data?: T) => T.Response & T;
96
96
  /**
97
97
  * Send error response (generic wrapper).
98
98
  * @param err Error object or message
@@ -133,7 +133,7 @@ type THttpResponder = {
133
133
  *
134
134
  * @param data JSON-serializable object to send as response body
135
135
  */
136
- json: (data?: Record<string, any>) => any;
136
+ json: <T extends Record<string, any>>(data?: T) => T.Response & T;
137
137
  /**
138
138
  * Send plain text response with the previously set status code.
139
139
  *
@@ -162,6 +162,11 @@ type THttpResponder = {
162
162
  httpOnly?: boolean;
163
163
  expires?: Date;
164
164
  }>) => any;
165
+ /**
166
+ * Set HTTP status code.
167
+ * @param code http status code
168
+ */
169
+ setStatusCode: (code: TStatusCode) => void;
165
170
  };
166
171
  type TStatusCode = 200 | 201 | 202 | 203 | 204 | 300 | 301 | 302 | 303 | 304 | 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;
167
172
  type TResponse = ServerResponse & THttpResponder;
@@ -176,7 +181,7 @@ type TRoute = {
176
181
  params: string[];
177
182
  };
178
183
  type TMethod = 'get' | 'post' | 'patch' | 'put' | 'delete' | 'all' | 'head' | 'options';
179
- type TMethodInput = Uppercase<TMethod>;
184
+ type TMethodInput = Uppercase<Exclude<TMethod, 'all'>>;
180
185
  type HandlerUWS = (res: unknown, req: unknown) => void | Promise<void>;
181
186
  type UWS = {
182
187
  App: () => {
@@ -244,7 +249,15 @@ type TSwaggerDoc = {
244
249
  method: string;
245
250
  params: string[];
246
251
  }[];
247
- globalPrefix?: string;
252
+ globalPrefix?: {
253
+ path: string;
254
+ options: {
255
+ exclude: {
256
+ path: string;
257
+ method?: T.MethodInput[] | '*';
258
+ }[];
259
+ };
260
+ };
248
261
  specs?: (TSwagger & {
249
262
  path: string;
250
263
  method: string;
@@ -318,7 +331,7 @@ type TWSHandler = {
318
331
  error: (ws: WebSocket & Partial<any>, error: Error) => void;
319
332
  };
320
333
  export declare namespace T {
321
- type Context<O extends Partial<Pick<TContextBase, "body" | "query" | "files" | "params">> = {}> = TContext<O>;
334
+ type Context<O extends Partial<Pick<TContextBase, "query" | "params" | "body" | "cookies" | "files">> = {}> = TContext<O>;
322
335
  type Adapter = TAdapter;
323
336
  type AdapterServer = TAdapterServer;
324
337
  type Application = TApplication;
@@ -328,22 +341,22 @@ export declare namespace T {
328
341
  type Route = TRoute;
329
342
  type Method = TMethod;
330
343
  type ErrorFunction = TErrorFunction;
331
- type HttpStatus = THttpResponder;
344
+ type HttpResponder = THttpResponder;
332
345
  type ContextHandler = TContextHandler;
333
346
  type WebSocketHandler = TWSHandler;
334
347
  type StatusCode = TStatusCode;
335
348
  type MethodInput = TMethodInput;
336
349
  type Response = TResponse;
337
350
  type Request = TRequest;
338
- type FileUpload<T = Record<string, TFile[] | undefined>> = T;
339
- type FileInput = TFile;
340
- type Cookies<T = Record<string, any>> = TCookies<T>;
341
- type Params<T = Record<string, string>> = TParams<T>;
342
- type Query<T = Record<string, string>> = TQuery<T>;
343
- type Body<T = Record<string, any>> = TBody<T>;
344
351
  type Headers<T = IncomingHttpHeaders> = THeaders<T>;
345
352
  type Ip = TIp;
346
353
  type Ips = TIps;
354
+ type FileInput = TFile;
355
+ type FileUpload<T = Record<string, TFile[] | undefined>> = T;
356
+ type Cookies<T = Record<string, string | undefined>> = TCookies<T>;
357
+ type Params<T = Record<string, string | number | undefined>> = TParams<T>;
358
+ type Query<T = Record<string, string | undefined>> = TQuery<T>;
359
+ type Body<T = Record<string, any>> = TBody<T>;
347
360
  namespace Swagger {
348
361
  type Spec = TSwagger;
349
362
  type Format = TSwaggerFormat;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tspace-spear",
3
- "version": "1.2.7",
3
+ "version": "1.2.9-beta.1",
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",
@@ -8,7 +8,7 @@
8
8
  "dist"
9
9
  ],
10
10
  "bin": {
11
- "tspace-spear": "./dist/cli/index.js"
11
+ "spear": "./dist/cli/index.js"
12
12
  },
13
13
  "type": "commonjs",
14
14
  "repository": {
@@ -42,10 +42,10 @@
42
42
  "beta": "npm run build && npm publish --tag beta",
43
43
  "bm:node": "npm run benchmark:node",
44
44
  "bm:bun": "npm run benchmark:bun",
45
- "benchmark:node": "npm run build && node benchmarks/tests/benchmark.node.js",
46
- "benchmark:bun": "npm run build && bun run benchmarks/tests/benchmark.bun.js",
45
+ "benchmark:node": "npm run build && node --no-warnings --optimize-for-size benchmarks/tests/benchmark.node.js",
46
+ "benchmark:bun": "npm run build && bun run --no-warnings --optimize-for-size benchmarks/tests/benchmark.bun.js",
47
47
  "load": "autocannon -c 100 -d 30 -p 10 localhost:5000",
48
- "test": "ts-mocha ./__tests__/**/*.test.ts --reporter spec --no-timeouts --recursive --reporter mochawesome --reporter-options reportDir=__tests-report__,reportFilename=errors.html,reportTitle=Unit-test --exit",
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",
49
49
  "docs": "npx docsify-cli serve docs"
50
50
  },
51
51
  "exports": {
@@ -58,6 +58,11 @@
58
58
  "types": "./dist/lib/core/client/index.d.ts",
59
59
  "import": "./dist/lib/core/client/index.js",
60
60
  "require": "./dist/lib/core/client/index.js"
61
+ },
62
+ "./exception": {
63
+ "types": "./dist/lib/core/exception/index.d.ts",
64
+ "import": "./dist/lib/core/exception/index.js",
65
+ "require": "./dist/lib/core/exception/index.js"
61
66
  }
62
67
  },
63
68
  "engines": {
@@ -67,7 +72,6 @@
67
72
  "busboy": "1.6.0",
68
73
  "fast-querystring": "1.1.2",
69
74
  "mime-types": "2.1.35",
70
- "node-fetch": "2.7.0",
71
75
  "on-finished": "2.4.1",
72
76
  "reflect-metadata": "0.2.2",
73
77
  "swagger-ui-dist": "5.32.0",
@@ -101,9 +105,14 @@
101
105
  "elysia": "1.4.28",
102
106
  "express": "4.19.2",
103
107
  "fastify": "4.28.1",
108
+ "form-data": "4.0.5",
109
+ "graphql": "16.14.0",
110
+ "graphql-http": "1.22.4",
111
+ "graphql-yoga": "5.21.0",
104
112
  "hono": "4.12.9",
105
113
  "mocha": "10.2.0",
106
114
  "mochawesome": "7.1.3",
115
+ "node-fetch": "2.7.0",
107
116
  "ts-mocha": "10.0.0",
108
117
  "ts-node": "10.9.2",
109
118
  "typescript": "5.6.2",