nmtjs 0.15.0-beta.2 → 0.15.0-beta.21

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 (254) hide show
  1. package/dist/cli.d.ts +2 -0
  2. package/dist/cli.js +3 -2
  3. package/dist/cli.js.map +1 -0
  4. package/dist/config.d.ts +51 -0
  5. package/dist/config.js +1 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/entrypoints/cli.d.ts +1 -0
  8. package/dist/entrypoints/cli.js +1 -0
  9. package/dist/entrypoints/cli.js.map +1 -0
  10. package/dist/entrypoints/main.d.ts +5 -0
  11. package/dist/entrypoints/main.js +83 -15
  12. package/dist/entrypoints/main.js.map +1 -0
  13. package/dist/entrypoints/thread.d.ts +14 -0
  14. package/dist/entrypoints/thread.js +130 -24
  15. package/dist/entrypoints/thread.js.map +1 -0
  16. package/dist/entrypoints/worker.d.ts +3 -0
  17. package/dist/entrypoints/worker.js +4 -3
  18. package/dist/entrypoints/worker.js.map +1 -0
  19. package/dist/index.d.ts +69 -0
  20. package/dist/{_exports/index.js → index.js} +9 -5
  21. package/dist/index.js.map +1 -0
  22. package/dist/resolver.d.ts +2 -0
  23. package/dist/resolver.js +1 -0
  24. package/dist/resolver.js.map +1 -0
  25. package/dist/runtime/application/api/api.d.ts +49 -0
  26. package/dist/runtime/application/api/api.js +193 -0
  27. package/dist/runtime/application/api/api.js.map +1 -0
  28. package/dist/runtime/application/api/constants.d.ts +14 -0
  29. package/dist/runtime/application/api/constants.js +8 -0
  30. package/dist/runtime/application/api/constants.js.map +1 -0
  31. package/dist/runtime/application/api/filters.d.ts +14 -0
  32. package/dist/runtime/application/api/filters.js +11 -0
  33. package/dist/runtime/application/api/filters.js.map +1 -0
  34. package/dist/runtime/application/api/guards.d.ts +13 -0
  35. package/dist/runtime/application/api/guards.js +8 -0
  36. package/dist/runtime/application/api/guards.js.map +1 -0
  37. package/dist/runtime/application/api/index.d.ts +8 -0
  38. package/dist/runtime/application/api/index.js +9 -0
  39. package/dist/runtime/application/api/index.js.map +1 -0
  40. package/dist/runtime/application/api/middlewares.d.ts +14 -0
  41. package/dist/runtime/application/api/middlewares.js +12 -0
  42. package/dist/runtime/application/api/middlewares.js.map +1 -0
  43. package/dist/runtime/application/api/procedure.d.ts +67 -0
  44. package/dist/runtime/application/api/procedure.js +50 -0
  45. package/dist/runtime/application/api/procedure.js.map +1 -0
  46. package/dist/runtime/application/api/router.d.ts +71 -0
  47. package/dist/runtime/application/api/router.js +51 -0
  48. package/dist/runtime/application/api/router.js.map +1 -0
  49. package/dist/runtime/application/api/types.d.ts +32 -0
  50. package/dist/runtime/application/api/types.js +2 -0
  51. package/dist/runtime/application/api/types.js.map +1 -0
  52. package/dist/runtime/application/config.d.ts +26 -0
  53. package/dist/runtime/application/config.js +21 -0
  54. package/dist/runtime/application/config.js.map +1 -0
  55. package/dist/runtime/application/constants.d.ts +2 -0
  56. package/dist/runtime/application/constants.js +2 -0
  57. package/dist/runtime/application/constants.js.map +1 -0
  58. package/dist/runtime/application/hook.d.ts +19 -0
  59. package/dist/runtime/application/hook.js +11 -0
  60. package/dist/runtime/application/hook.js.map +1 -0
  61. package/dist/runtime/application/hooks.d.ts +3 -0
  62. package/dist/runtime/application/hooks.js +4 -0
  63. package/dist/runtime/application/hooks.js.map +1 -0
  64. package/dist/runtime/application/index.d.ts +5 -0
  65. package/dist/runtime/application/index.js +6 -0
  66. package/dist/runtime/application/index.js.map +1 -0
  67. package/dist/runtime/constants.d.ts +8 -0
  68. package/dist/runtime/constants.js +5 -0
  69. package/dist/runtime/constants.js.map +1 -0
  70. package/dist/runtime/core/hooks.d.ts +4 -0
  71. package/dist/runtime/core/hooks.js +4 -0
  72. package/dist/runtime/core/hooks.js.map +1 -0
  73. package/dist/runtime/core/plugin.d.ts +8 -0
  74. package/dist/runtime/core/plugin.js +4 -0
  75. package/dist/runtime/core/plugin.js.map +1 -0
  76. package/dist/runtime/core/runtime.d.ts +27 -0
  77. package/dist/runtime/core/runtime.js +81 -0
  78. package/dist/runtime/core/runtime.js.map +1 -0
  79. package/dist/runtime/enums.d.ts +21 -0
  80. package/dist/runtime/enums.js +26 -0
  81. package/dist/runtime/enums.js.map +1 -0
  82. package/dist/runtime/index.d.ts +21 -0
  83. package/dist/runtime/index.js +22 -0
  84. package/dist/runtime/index.js.map +1 -0
  85. package/dist/runtime/injectables.d.ts +23 -0
  86. package/dist/runtime/injectables.js +20 -0
  87. package/dist/runtime/injectables.js.map +1 -0
  88. package/dist/runtime/jobs/job.d.ts +132 -0
  89. package/dist/runtime/jobs/job.js +68 -0
  90. package/dist/runtime/jobs/job.js.map +1 -0
  91. package/dist/runtime/jobs/manager.d.ts +113 -0
  92. package/dist/runtime/jobs/manager.js +210 -0
  93. package/dist/runtime/jobs/manager.js.map +1 -0
  94. package/dist/runtime/jobs/router.d.ts +266 -0
  95. package/dist/runtime/jobs/router.js +432 -0
  96. package/dist/runtime/jobs/router.js.map +1 -0
  97. package/dist/runtime/jobs/runner.d.ts +64 -0
  98. package/dist/runtime/jobs/runner.js +256 -0
  99. package/dist/runtime/jobs/runner.js.map +1 -0
  100. package/dist/runtime/jobs/step.d.ts +23 -0
  101. package/dist/runtime/jobs/step.js +18 -0
  102. package/dist/runtime/jobs/step.js.map +1 -0
  103. package/dist/runtime/jobs/ui.d.ts +3 -0
  104. package/dist/runtime/jobs/ui.js +17 -0
  105. package/dist/runtime/jobs/ui.js.map +1 -0
  106. package/dist/runtime/pubsub/manager.d.ts +48 -0
  107. package/dist/runtime/pubsub/manager.js +119 -0
  108. package/dist/runtime/pubsub/manager.js.map +1 -0
  109. package/dist/runtime/pubsub/redis.d.ts +16 -0
  110. package/dist/runtime/pubsub/redis.js +98 -0
  111. package/dist/runtime/pubsub/redis.js.map +1 -0
  112. package/dist/runtime/scheduler/index.d.ts +22 -0
  113. package/dist/runtime/scheduler/index.js +20 -0
  114. package/dist/runtime/scheduler/index.js.map +1 -0
  115. package/dist/runtime/server/applications.d.ts +52 -0
  116. package/dist/runtime/server/applications.js +133 -0
  117. package/dist/runtime/server/applications.js.map +1 -0
  118. package/dist/runtime/server/config.d.ts +121 -0
  119. package/dist/runtime/server/config.js +33 -0
  120. package/dist/runtime/server/config.js.map +1 -0
  121. package/dist/runtime/server/jobs.d.ts +41 -0
  122. package/dist/runtime/server/jobs.js +181 -0
  123. package/dist/runtime/server/jobs.js.map +1 -0
  124. package/dist/runtime/server/pool.d.ts +54 -0
  125. package/dist/runtime/server/pool.js +194 -0
  126. package/dist/runtime/server/pool.js.map +1 -0
  127. package/dist/runtime/server/proxy.d.ts +21 -0
  128. package/dist/runtime/server/proxy.js +79 -0
  129. package/dist/runtime/server/proxy.js.map +1 -0
  130. package/dist/runtime/server/server.d.ts +53 -0
  131. package/dist/runtime/server/server.js +90 -0
  132. package/dist/runtime/server/server.js.map +1 -0
  133. package/dist/runtime/store/index.d.ts +3 -0
  134. package/dist/runtime/store/index.js +23 -0
  135. package/dist/runtime/store/index.js.map +1 -0
  136. package/dist/runtime/types.d.ts +103 -0
  137. package/dist/runtime/types.js +2 -0
  138. package/dist/runtime/types.js.map +1 -0
  139. package/dist/runtime/workers/application.d.ts +47 -0
  140. package/dist/runtime/workers/application.js +162 -0
  141. package/dist/runtime/workers/application.js.map +1 -0
  142. package/dist/runtime/workers/base.d.ts +16 -0
  143. package/dist/runtime/workers/base.js +46 -0
  144. package/dist/runtime/workers/base.js.map +1 -0
  145. package/dist/runtime/workers/cli.d.ts +1 -0
  146. package/dist/runtime/workers/cli.js +2 -0
  147. package/dist/runtime/workers/cli.js.map +1 -0
  148. package/dist/runtime/workers/job.d.ts +20 -0
  149. package/dist/runtime/workers/job.js +172 -0
  150. package/dist/runtime/workers/job.js.map +1 -0
  151. package/dist/typings.d.ts +5 -0
  152. package/dist/typings.js +4 -3
  153. package/dist/typings.js.map +1 -0
  154. package/dist/vite/builder.d.ts +5 -0
  155. package/dist/vite/builder.js +5 -1
  156. package/dist/vite/builder.js.map +1 -0
  157. package/dist/vite/config.d.ts +28 -0
  158. package/dist/vite/config.js +1 -0
  159. package/dist/vite/config.js.map +1 -0
  160. package/dist/vite/plugins.d.ts +2 -0
  161. package/dist/vite/plugins.js +1 -0
  162. package/dist/vite/plugins.js.map +1 -0
  163. package/dist/vite/runners/worker.d.ts +4 -0
  164. package/dist/vite/runners/worker.js +1 -0
  165. package/dist/vite/runners/worker.js.map +1 -0
  166. package/dist/vite/server.d.ts +3 -0
  167. package/dist/vite/server.js +6 -1
  168. package/dist/vite/server.js.map +1 -0
  169. package/dist/vite/servers/main.d.ts +8 -0
  170. package/dist/vite/servers/main.js +1 -0
  171. package/dist/vite/servers/main.js.map +1 -0
  172. package/dist/vite/servers/worker.d.ts +11 -0
  173. package/dist/vite/servers/worker.js +28 -0
  174. package/dist/vite/servers/worker.js.map +1 -0
  175. package/package.json +31 -18
  176. package/src/cli.ts +144 -0
  177. package/src/config.ts +64 -0
  178. package/src/entrypoints/cli.ts +13 -0
  179. package/src/entrypoints/main.ts +200 -0
  180. package/src/entrypoints/thread.ts +184 -0
  181. package/src/entrypoints/worker.ts +48 -0
  182. package/src/index.ts +82 -0
  183. package/src/resolver.ts +16 -0
  184. package/src/runtime/application/api/api.ts +265 -0
  185. package/src/runtime/application/api/constants.ts +22 -0
  186. package/src/runtime/application/api/filters.ts +39 -0
  187. package/src/runtime/application/api/guards.ts +29 -0
  188. package/src/runtime/application/api/index.ts +8 -0
  189. package/src/runtime/application/api/middlewares.ts +37 -0
  190. package/src/runtime/application/api/procedure.ts +229 -0
  191. package/src/runtime/application/api/router.ts +193 -0
  192. package/src/runtime/application/api/types.ts +124 -0
  193. package/src/runtime/application/config.ts +69 -0
  194. package/src/runtime/application/constants.ts +4 -0
  195. package/src/runtime/application/hook.ts +51 -0
  196. package/src/runtime/application/hooks.ts +3 -0
  197. package/src/runtime/application/index.ts +5 -0
  198. package/src/runtime/constants.ts +13 -0
  199. package/src/runtime/core/hooks.ts +5 -0
  200. package/src/runtime/core/plugin.ts +13 -0
  201. package/src/runtime/core/runtime.ts +109 -0
  202. package/src/runtime/enums.ts +24 -0
  203. package/src/runtime/index.ts +21 -0
  204. package/src/runtime/injectables.ts +61 -0
  205. package/src/runtime/jobs/job.ts +370 -0
  206. package/src/runtime/jobs/manager.ts +348 -0
  207. package/src/runtime/jobs/router.ts +896 -0
  208. package/src/runtime/jobs/runner.ts +320 -0
  209. package/src/runtime/jobs/step.ts +66 -0
  210. package/src/runtime/jobs/ui.ts +21 -0
  211. package/src/runtime/pubsub/manager.ts +211 -0
  212. package/src/runtime/pubsub/redis.ts +108 -0
  213. package/src/runtime/scheduler/index.ts +39 -0
  214. package/src/runtime/server/applications.ts +210 -0
  215. package/src/runtime/server/config.ts +158 -0
  216. package/src/runtime/server/jobs.ts +250 -0
  217. package/src/runtime/server/pool.ts +260 -0
  218. package/src/runtime/server/proxy.ts +118 -0
  219. package/src/runtime/server/server.ts +155 -0
  220. package/src/runtime/store/index.ts +30 -0
  221. package/src/runtime/types.ts +93 -0
  222. package/src/runtime/workers/application.ts +209 -0
  223. package/src/runtime/workers/base.ts +68 -0
  224. package/src/runtime/workers/cli.ts +0 -0
  225. package/src/runtime/workers/job.ts +153 -0
  226. package/src/typings.ts +30 -0
  227. package/src/vite/builder.ts +122 -0
  228. package/src/vite/config.ts +45 -0
  229. package/src/vite/plugins.ts +26 -0
  230. package/src/vite/runners/worker.ts +57 -0
  231. package/src/vite/server.ts +39 -0
  232. package/src/vite/servers/main.ts +34 -0
  233. package/src/vite/servers/worker.ts +143 -0
  234. package/dist/_exports/application.js +0 -1
  235. package/dist/_exports/common.js +0 -1
  236. package/dist/_exports/contract.js +0 -2
  237. package/dist/_exports/core.js +0 -1
  238. package/dist/_exports/gateway.js +0 -1
  239. package/dist/_exports/http-transport/bun.js +0 -1
  240. package/dist/_exports/http-transport/deno.js +0 -1
  241. package/dist/_exports/http-transport/node.js +0 -1
  242. package/dist/_exports/http-transport.js +0 -1
  243. package/dist/_exports/json-format.js +0 -1
  244. package/dist/_exports/protocol/client.js +0 -1
  245. package/dist/_exports/protocol/server.js +0 -1
  246. package/dist/_exports/protocol.js +0 -1
  247. package/dist/_exports/runtime/types.js +0 -1
  248. package/dist/_exports/runtime.js +0 -1
  249. package/dist/_exports/type.js +0 -2
  250. package/dist/_exports/ws-transport/bun.js +0 -1
  251. package/dist/_exports/ws-transport/deno.js +0 -1
  252. package/dist/_exports/ws-transport/node.js +0 -1
  253. package/dist/_exports/ws-transport.js +0 -1
  254. package/dist/command.js +0 -30
package/dist/resolver.js CHANGED
@@ -12,3 +12,4 @@ export const resolver = new ResolverFactory({
12
12
  extensions: ['.ts', '.js', '.mjs', '.mts', '.json', '.node'],
13
13
  fallback,
14
14
  });
15
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,MAAM,QAAQ,GAA6B,EAAE,CAAA;AAE7C,IAAI,CAAC;IACH,+DAA+D;IAC/D,MAAM,GAAG,GAAG,gBAAgB,CAAA;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACrC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACxB,CAAC;AAAC,MAAM,CAAC,CAAA,CAAC;AAEV,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC;IAC1C,QAAQ,EAAE,MAAM;IAChB,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;IAC5D,QAAQ;CACT,CAAC,CAAA"}
@@ -0,0 +1,49 @@
1
+ import type { Container, Logger } from '@nmtjs/core';
2
+ import type { GatewayApi, GatewayApiCallOptions, GatewayApiCallResult, GatewayConnection } from '@nmtjs/gateway';
3
+ import { ProtocolError } from '@nmtjs/protocol/server';
4
+ import type { kDefaultProcedure as kDefaultProcedureKey } from './constants.ts';
5
+ import type { AnyFilter } from './filters.ts';
6
+ import type { AnyGuard } from './guards.ts';
7
+ import type { AnyMiddleware } from './middlewares.ts';
8
+ import type { AnyProcedure } from './procedure.ts';
9
+ import type { AnyRouter } from './router.ts';
10
+ export type ApiCallOptions<T extends AnyProcedure = AnyProcedure> = Readonly<{
11
+ connection: GatewayConnection;
12
+ path: AnyRouter[];
13
+ procedure: T;
14
+ container: Container;
15
+ payload: any;
16
+ signal: AbortSignal;
17
+ }>;
18
+ export type ApiOptions = {
19
+ timeout?: number;
20
+ container: Container;
21
+ logger: Logger;
22
+ procedures: Map<string | kDefaultProcedureKey, {
23
+ procedure: AnyProcedure;
24
+ path: AnyRouter[];
25
+ }>;
26
+ guards: Set<AnyGuard>;
27
+ middlewares: Set<AnyMiddleware>;
28
+ filters: Set<AnyFilter>;
29
+ };
30
+ export declare class ApiError extends ProtocolError {
31
+ toString(): string;
32
+ }
33
+ export declare class ApplicationApi implements GatewayApi {
34
+ options: ApiOptions;
35
+ constructor(options: ApiOptions);
36
+ find(procedureName: string): {
37
+ procedure: AnyProcedure;
38
+ path: AnyRouter[];
39
+ };
40
+ call(options: GatewayApiCallOptions): Promise<GatewayApiCallResult>;
41
+ private createProcedureHandler;
42
+ private resolveMiddlewares;
43
+ private withTimeout;
44
+ private handleGuards;
45
+ private handleFilters;
46
+ private handleInput;
47
+ private handleIterableOutput;
48
+ private handleOutput;
49
+ }
@@ -0,0 +1,193 @@
1
+ import assert from 'node:assert';
2
+ import { inspect } from 'node:util';
3
+ import { withTimeout } from '@nmtjs/common';
4
+ import { IsStreamProcedureContract } from '@nmtjs/contract';
5
+ import { Scope } from '@nmtjs/core';
6
+ import { isAsyncIterable, rpcStreamAbortSignal } from '@nmtjs/gateway';
7
+ import { ErrorCode } from '@nmtjs/protocol';
8
+ import { ProtocolError } from '@nmtjs/protocol/server';
9
+ import { NeemataTypeError, registerDefaultLocale, type } from '@nmtjs/type';
10
+ import { prettifyError } from 'zod/mini';
11
+ import { kDefaultProcedure } from "./constants.js";
12
+ registerDefaultLocale();
13
+ export class ApiError extends ProtocolError {
14
+ toString() {
15
+ return `${this.code} ${this.message}: \n${inspect(this.data, true, 10, false)}`;
16
+ }
17
+ }
18
+ const NotFound = () => new ApiError(ErrorCode.NotFound, 'Procedure not found');
19
+ export class ApplicationApi {
20
+ options;
21
+ constructor(options) {
22
+ this.options = options;
23
+ }
24
+ find(procedureName) {
25
+ const procedure = this.options.procedures.get(procedureName);
26
+ if (procedure)
27
+ return procedure;
28
+ const fallback = this.options.procedures.get(kDefaultProcedure);
29
+ if (fallback)
30
+ return fallback;
31
+ throw NotFound();
32
+ }
33
+ async call(options) {
34
+ const { payload, container, signal, connection } = options;
35
+ const { procedure, path } = this.find(options.procedure);
36
+ options.metadata?.(procedure.metadata);
37
+ const callOptions = Object.freeze({
38
+ payload,
39
+ container,
40
+ signal,
41
+ connection,
42
+ procedure,
43
+ path,
44
+ });
45
+ assert(container.scope === Scope.Call, 'Invalid container scope, expected to be Scope.Call');
46
+ const timeout = procedure.contract.timeout ?? this.options.timeout;
47
+ const isIterableProcedure = IsStreamProcedureContract(procedure.contract);
48
+ const streamTimeoutSignal = procedure.streamTimeout
49
+ ? AbortSignal.timeout(procedure.streamTimeout)
50
+ : undefined;
51
+ if (streamTimeoutSignal) {
52
+ container.provide(rpcStreamAbortSignal, streamTimeoutSignal);
53
+ }
54
+ try {
55
+ const handle = await this.createProcedureHandler(callOptions);
56
+ const result = timeout
57
+ ? await this.withTimeout(handle(payload), timeout)
58
+ : await handle(payload);
59
+ if (isIterableProcedure) {
60
+ return this.handleIterableOutput(procedure, result);
61
+ }
62
+ else {
63
+ return this.handleOutput(procedure, result);
64
+ }
65
+ }
66
+ catch (error) {
67
+ const handled = await this.handleFilters(callOptions, error);
68
+ if (handled === error && error instanceof ProtocolError === false) {
69
+ const logError = new Error('Unhandled error', { cause: error });
70
+ this.options.logger.debug(logError);
71
+ throw new ApiError(ErrorCode.InternalServerError, 'Internal Server Error');
72
+ }
73
+ throw handled;
74
+ }
75
+ }
76
+ async createProcedureHandler(callOptions) {
77
+ const { connection, procedure, container, path } = callOptions;
78
+ const callCtx = Object.freeze({
79
+ connection,
80
+ container,
81
+ path,
82
+ procedure,
83
+ });
84
+ const middlewares = await this.resolveMiddlewares(callOptions);
85
+ const handleProcedure = async (payload) => {
86
+ const middleware = middlewares.next().value;
87
+ if (middleware) {
88
+ const next = (...args) => handleProcedure(args.length === 0 ? payload : args[0]);
89
+ return middleware.handle(middleware.ctx, callCtx, next, payload);
90
+ }
91
+ else {
92
+ await this.handleGuards(callOptions, callCtx);
93
+ const { dependencies } = procedure;
94
+ const context = await container.createContext(dependencies);
95
+ const input = this.handleInput(procedure, payload);
96
+ const result = await procedure.handler(context, input);
97
+ return result;
98
+ }
99
+ };
100
+ return handleProcedure;
101
+ }
102
+ async resolveMiddlewares(callOptions) {
103
+ const { path, procedure, container } = callOptions;
104
+ const middlewares = [
105
+ ...this.options.middlewares,
106
+ ...path.flatMap((router) => [...router.middlewares]),
107
+ ...procedure.middlewares,
108
+ ];
109
+ const result = await Promise.all(middlewares.map(async (middleware) => {
110
+ const ctx = await container.createContext(middleware.dependencies);
111
+ return { handle: middleware.handle, ctx };
112
+ }));
113
+ return result[Symbol.iterator]();
114
+ }
115
+ withTimeout(response, timeout) {
116
+ const applyTimeout = response instanceof Promise && timeout > 0;
117
+ if (!applyTimeout)
118
+ return response;
119
+ return withTimeout(response, timeout, new ApiError(ErrorCode.RequestTimeout, 'Request Timeout'));
120
+ }
121
+ async handleGuards(callOptions, callCtx) {
122
+ const { path, procedure, container } = callOptions;
123
+ const guards = [
124
+ ...this.options.guards,
125
+ ...path.flatMap((router) => [...router.guards]),
126
+ ...procedure.guards,
127
+ ];
128
+ for (const guard of guards) {
129
+ const ctx = await container.createContext(guard.dependencies);
130
+ const result = await guard.can(ctx, callCtx);
131
+ if (result === false)
132
+ throw new ApiError(ErrorCode.Forbidden);
133
+ }
134
+ }
135
+ async handleFilters({ container }, error) {
136
+ if (this.options.filters.size) {
137
+ for (const filter of this.options.filters) {
138
+ if (error instanceof filter.errorClass) {
139
+ const ctx = await container.createContext(filter.dependencies);
140
+ const handledError = await filter.catch(ctx, error);
141
+ if (!handledError || handledError instanceof ApiError === false)
142
+ continue;
143
+ return handledError;
144
+ }
145
+ }
146
+ }
147
+ return error;
148
+ }
149
+ handleInput(procedure, payload) {
150
+ if (procedure.contract.input instanceof type.NeverType === false) {
151
+ const type = procedure.contract.input;
152
+ try {
153
+ return type.decode(payload);
154
+ }
155
+ catch (error) {
156
+ if (error instanceof NeemataTypeError)
157
+ throw new ApiError(ErrorCode.ValidationError, `Input validation error: \n${prettifyError(error)}`, error.issues);
158
+ throw error;
159
+ }
160
+ }
161
+ }
162
+ handleIterableOutput(procedure, response) {
163
+ if (!isAsyncIterable(response))
164
+ throw new Error('Response is an async iterable');
165
+ const chunkType = procedure.contract.output;
166
+ if (chunkType instanceof type.NeverType)
167
+ throw new Error('Stream procedure must have a defined output type');
168
+ return async function* (onDone) {
169
+ try {
170
+ if (chunkType instanceof type.AnyType === false) {
171
+ for await (const chunk of response) {
172
+ const encoded = chunkType.encode(chunk);
173
+ yield encoded;
174
+ }
175
+ }
176
+ else {
177
+ yield* response;
178
+ }
179
+ }
180
+ finally {
181
+ onDone?.();
182
+ }
183
+ };
184
+ }
185
+ handleOutput(procedure, response) {
186
+ if (procedure.contract.output instanceof type.NeverType === false) {
187
+ const type = procedure.contract.output;
188
+ return type.encode(response);
189
+ }
190
+ return undefined;
191
+ }
192
+ }
193
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/runtime/application/api/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare const kProcedure: unique symbol;
2
+ export type kProcedure = typeof kProcedure;
3
+ export declare const kDefaultProcedure: unique symbol;
4
+ export type kDefaultProcedure = typeof kDefaultProcedure;
5
+ export declare const kRouter: unique symbol;
6
+ export type kRouter = typeof kRouter;
7
+ export declare const kRootRouter: unique symbol;
8
+ export type kRootRouter = typeof kRootRouter;
9
+ export declare const kMiddleware: unique symbol;
10
+ export type kMiddleware = typeof kMiddleware;
11
+ export declare const kGuard: unique symbol;
12
+ export type kGuard = typeof kGuard;
13
+ export declare const kFilter: unique symbol;
14
+ export type kFilter = typeof kFilter;
@@ -0,0 +1,8 @@
1
+ export const kProcedure = Symbol.for('neemata:ProcedureKey');
2
+ export const kDefaultProcedure = Symbol.for('neemata:DefaultProcedureKey');
3
+ export const kRouter = Symbol.for('neemata:RouterKey');
4
+ export const kRootRouter = Symbol.for('neemata:RootRouterKey');
5
+ export const kMiddleware = Symbol.for('neemata:MiddlewareKey');
6
+ export const kGuard = Symbol.for('neemata:GuardKey');
7
+ export const kFilter = Symbol.for('neemata:FilterKey');
8
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/runtime/application/api/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAkB,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AAG3E,MAAM,CAAC,MAAM,iBAAiB,GAAkB,MAAM,CAAC,GAAG,CACxD,6BAA6B,CAC9B,CAAA;AAGD,MAAM,CAAC,MAAM,OAAO,GAAkB,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;AAGrE,MAAM,CAAC,MAAM,WAAW,GAAkB,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;AAG7E,MAAM,CAAC,MAAM,WAAW,GAAkB,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;AAG7E,MAAM,CAAC,MAAM,MAAM,GAAkB,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;AAGnE,MAAM,CAAC,MAAM,OAAO,GAAkB,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA"}
@@ -0,0 +1,14 @@
1
+ import type { ErrorClass, MaybePromise } from '@nmtjs/common';
2
+ import type { Dependant, Dependencies, DependencyContext } from '@nmtjs/core';
3
+ import { kFilter } from './constants.ts';
4
+ export interface Filter<FilterError extends ErrorClass = ErrorClass, Deps extends Dependencies = Dependencies> extends Dependant<Deps> {
5
+ [kFilter]: true;
6
+ errorClass: FilterError;
7
+ catch: (ctx: DependencyContext<Deps>, error: InstanceType<FilterError>) => MaybePromise<Error>;
8
+ }
9
+ export type AnyFilter<Error extends ErrorClass = ErrorClass> = Filter<Error, any>;
10
+ export declare function createFilter<FilterError extends ErrorClass, Deps extends Dependencies = {}>(params: {
11
+ errorClass: FilterError;
12
+ dependencies?: Deps;
13
+ catch: Filter<FilterError, Deps>['catch'];
14
+ }): Filter<FilterError, Deps>;
@@ -0,0 +1,11 @@
1
+ import { kFilter } from "./constants.js";
2
+ export function createFilter(params) {
3
+ const { errorClass, catch: handler, dependencies = {} } = params;
4
+ return Object.freeze({
5
+ errorClass,
6
+ dependencies,
7
+ catch: handler,
8
+ [kFilter]: true,
9
+ });
10
+ }
11
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../../src/runtime/application/api/filters.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAmBxC,MAAM,UAAU,YAAY,CAG1B,MAID;IACC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,GAAG,EAAU,EAAE,GAAG,MAAM,CAAA;IAExE,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,UAAU;QACV,YAAY;QACZ,KAAK,EAAE,OAAO;QACd,CAAC,OAAO,CAAC,EAAE,IAAI;KAChB,CAA8B,CAAA;AACjC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { MaybePromise } from '@nmtjs/common';
2
+ import type { Dependant, Dependencies, DependencyContext } from '@nmtjs/core';
3
+ import type { ApiCallContext } from './types.ts';
4
+ import { kGuard } from './constants.ts';
5
+ export interface Guard<Deps extends Dependencies = Dependencies> extends Dependant<Deps> {
6
+ [kGuard]: true;
7
+ can: (ctx: DependencyContext<Deps>, call: ApiCallContext) => MaybePromise<boolean>;
8
+ }
9
+ export type AnyGuard = Guard<any>;
10
+ export declare function createGuard<Deps extends Dependencies = {}>(paramsOrHandler: {
11
+ dependencies?: Deps;
12
+ can: Guard<Deps>['can'];
13
+ } | Guard<Deps>['can']): Guard<Deps>;
@@ -0,0 +1,8 @@
1
+ import { kGuard } from "./constants.js";
2
+ export function createGuard(paramsOrHandler) {
3
+ const { dependencies = {}, can } = typeof paramsOrHandler === 'function'
4
+ ? { can: paramsOrHandler }
5
+ : paramsOrHandler;
6
+ return Object.freeze({ dependencies, can, [kGuard]: true });
7
+ }
8
+ //# sourceMappingURL=guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../../../src/runtime/application/api/guards.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAavC,MAAM,UAAU,WAAW,CACzB,eAEsB;IAEtB,MAAM,EAAE,YAAY,GAAG,EAAU,EAAE,GAAG,EAAE,GACtC,OAAO,eAAe,KAAK,UAAU;QACnC,CAAC,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE;QAC1B,CAAC,CAAC,eAAe,CAAA;IAErB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAgB,CAAA;AAC5E,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from './api.ts';
2
+ export * from './constants.ts';
3
+ export * from './filters.ts';
4
+ export * from './guards.ts';
5
+ export * from './middlewares.ts';
6
+ export * from './procedure.ts';
7
+ export * from './router.ts';
8
+ export * from './types.ts';
@@ -0,0 +1,9 @@
1
+ export * from "./api.js";
2
+ export * from "./constants.js";
3
+ export * from "./filters.js";
4
+ export * from "./guards.js";
5
+ export * from "./middlewares.js";
6
+ export * from "./procedure.js";
7
+ export * from "./router.js";
8
+ export * from "./types.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/runtime/application/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA"}
@@ -0,0 +1,14 @@
1
+ import type { MaybePromise } from '@nmtjs/common';
2
+ import type { Dependant, Dependencies, DependencyContext } from '@nmtjs/core';
3
+ import type { ApiCallContext } from './types.ts';
4
+ import { kMiddleware } from './constants.ts';
5
+ export type MiddlewareNext = (payload?: any) => any;
6
+ export interface Middleware<Deps extends Dependencies = Dependencies> extends Dependant<Deps> {
7
+ [kMiddleware]: true;
8
+ handle: (ctx: DependencyContext<Deps>, call: ApiCallContext, next: MiddlewareNext, payload: any) => MaybePromise<any>;
9
+ }
10
+ export type AnyMiddleware = Middleware<any>;
11
+ export declare function createMiddleware<Deps extends Dependencies = {}>(paramsOrHandler: {
12
+ dependencies?: Deps;
13
+ handle: Middleware<Deps>['handle'];
14
+ } | Middleware<Deps>['handle']): Middleware<Deps>;
@@ -0,0 +1,12 @@
1
+ import { kMiddleware } from "./constants.js";
2
+ export function createMiddleware(paramsOrHandler) {
3
+ const { dependencies = {}, handle } = typeof paramsOrHandler === 'function'
4
+ ? { handle: paramsOrHandler }
5
+ : paramsOrHandler;
6
+ return Object.freeze({
7
+ dependencies,
8
+ handle,
9
+ [kMiddleware]: true,
10
+ });
11
+ }
12
+ //# sourceMappingURL=middlewares.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../../../../src/runtime/application/api/middlewares.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAiB5C,MAAM,UAAU,gBAAgB,CAC9B,eAE8B;IAE9B,MAAM,EAAE,YAAY,GAAG,EAAU,EAAE,MAAM,EAAE,GACzC,OAAO,eAAe,KAAK,UAAU;QACnC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE;QAC7B,CAAC,CAAC,eAAe,CAAA;IAErB,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,YAAY;QACZ,MAAM;QACN,CAAC,WAAW,CAAC,EAAE,IAAI;KACpB,CAAqB,CAAA;AACxB,CAAC"}
@@ -0,0 +1,67 @@
1
+ import type { MaybePromise } from '@nmtjs/common';
2
+ import type { TAnyProcedureContract, TProcedureContract } from '@nmtjs/contract';
3
+ import type { Dependant, Dependencies, DependencyContext, Metadata } from '@nmtjs/core';
4
+ import type { InputType } from '@nmtjs/protocol/server';
5
+ import type { BaseType } from '@nmtjs/type';
6
+ import type * as zod from 'zod/mini';
7
+ import { MetadataStore } from '@nmtjs/core';
8
+ import { t } from '@nmtjs/type';
9
+ import type { AnyGuard } from './guards.ts';
10
+ import type { AnyMiddleware } from './middlewares.ts';
11
+ import type { JsonPrimitive } from './types.ts';
12
+ import { kProcedure } from './constants.ts';
13
+ export interface BaseProcedure<ProcedureContract extends TAnyProcedureContract, ProcedureDeps extends Dependencies> extends Dependant<ProcedureDeps> {
14
+ contract: ProcedureContract;
15
+ handler: (...args: any[]) => any;
16
+ metadata: MetadataStore;
17
+ dependencies: ProcedureDeps;
18
+ guards: Set<AnyGuard>;
19
+ middlewares: Set<AnyMiddleware>;
20
+ streamTimeout?: number;
21
+ [kProcedure]: any;
22
+ }
23
+ export type ProcedureHandlerType<Input, Output, Deps extends Dependencies> = (ctx: DependencyContext<Deps>, data: Input) => MaybePromise<Output>;
24
+ export interface Procedure<ProcedureContract extends TAnyProcedureContract, ProcedureDeps extends Dependencies> extends BaseProcedure<ProcedureContract, ProcedureDeps> {
25
+ handler: ProcedureHandlerType<InputType<t.infer.decodeRaw.output<ProcedureContract['input']>>, ProcedureContract['stream'] extends true ? AsyncIterable<t.infer.encode.input<ProcedureContract['output']>> : t.infer.encode.input<ProcedureContract['output']>, ProcedureDeps>;
26
+ }
27
+ export type AnyProcedure<Contract extends TAnyProcedureContract = TAnyProcedureContract> = BaseProcedure<Contract, Dependencies>;
28
+ export type CreateProcedureParams<ProcedureContract extends TAnyProcedureContract, ProcedureDeps extends Dependencies> = {
29
+ dependencies?: ProcedureDeps;
30
+ guards?: AnyGuard[];
31
+ middlewares?: AnyMiddleware[];
32
+ metadata?: Metadata[];
33
+ streamTimeout?: number;
34
+ handler: ProcedureHandlerType<InputType<t.infer.decodeRaw.output<ProcedureContract['input']>>, ProcedureContract['stream'] extends undefined ? t.infer.encode.input<ProcedureContract['output']> : AsyncIterable<Exclude<ProcedureContract['stream'], undefined | boolean>>, ProcedureDeps>;
35
+ } | ProcedureHandlerType<InputType<t.infer.decodeRaw.output<ProcedureContract['input']>>, ProcedureContract['stream'] extends undefined ? t.infer.decode.input<ProcedureContract['output']> : AsyncIterable<Exclude<ProcedureContract['stream'], undefined | boolean>>, ProcedureDeps>;
36
+ export declare function _createBaseProcedure<ProcedureContract extends TAnyProcedureContract, ProcedureDeps extends Dependencies>(contract: ProcedureContract, params: {
37
+ dependencies?: ProcedureDeps;
38
+ middlewares?: AnyMiddleware[];
39
+ guards?: AnyGuard[];
40
+ metadata?: Metadata[];
41
+ streamTimeout?: number;
42
+ }): {
43
+ contract: ProcedureContract;
44
+ dependencies: ProcedureDeps;
45
+ middlewares: Set<AnyMiddleware>;
46
+ guards: Set<AnyGuard>;
47
+ metadata: MetadataStore;
48
+ streamTimeout: number | undefined;
49
+ };
50
+ export declare function createContractProcedure<ProcedureContract extends TAnyProcedureContract, ProcedureDeps extends Dependencies>(contract: ProcedureContract, paramsOrHandler: CreateProcedureParams<ProcedureContract, ProcedureDeps>): Procedure<ProcedureContract, ProcedureDeps>;
51
+ export declare function createProcedure<Return, TInput extends BaseType | undefined = undefined, TOutput extends BaseType | undefined = undefined, TStream extends true | number | undefined = undefined, Deps extends Dependencies = {}>(paramsOrHandler: {
52
+ input?: TInput;
53
+ output?: TOutput;
54
+ /**
55
+ * Whether the procedure is a stream procedure.
56
+ * If set to `true`, the procedure handler should return an `AsyncIterable` of output items.
57
+ * If set to a number, it specifies an explicit stream timeout in milliseconds.
58
+ */
59
+ stream?: TStream;
60
+ dependencies?: Deps;
61
+ guards?: AnyGuard[];
62
+ middlewares?: AnyMiddleware[];
63
+ metadata?: Metadata[];
64
+ timeout?: number;
65
+ handler: ProcedureHandlerType<TInput extends BaseType ? InputType<t.infer.decodeRaw.output<TInput>> : never, TStream extends true | number ? AsyncIterable<TOutput extends BaseType ? t.infer.encode.input<TOutput> : Return> : TOutput extends BaseType ? t.infer.encode.input<TOutput> : Return, Deps>;
66
+ } | ProcedureHandlerType<TInput extends BaseType ? InputType<t.infer.decodeRaw.output<TInput>> : never, Return, Deps>): Procedure<TProcedureContract<TInput extends undefined ? t.NeverType : TInput, TOutput extends undefined ? t.CustomType<JsonPrimitive<Return>, zod.ZodMiniCustom<JsonPrimitive<Return>, JsonPrimitive<Return>>> : TOutput, TStream extends true | number ? true : undefined>, Deps>;
67
+ export declare const isProcedure: (value: any) => value is AnyProcedure;
@@ -0,0 +1,50 @@
1
+ import { c } from '@nmtjs/contract';
2
+ import { MetadataStore } from '@nmtjs/core';
3
+ import { t } from '@nmtjs/type';
4
+ import { kProcedure } from "./constants.js";
5
+ export function _createBaseProcedure(contract, params) {
6
+ const dependencies = params.dependencies ?? {};
7
+ const metadata = new MetadataStore();
8
+ const middlewares = new Set(params.middlewares ?? []);
9
+ const guards = new Set(params.guards ?? []);
10
+ const streamTimeout = params.streamTimeout;
11
+ if (typeof streamTimeout !== 'undefined' && streamTimeout <= 0) {
12
+ throw new Error('Stream timeout must be a positive integer');
13
+ }
14
+ for (const meta of params.metadata ?? []) {
15
+ metadata.set(meta.key, meta.value);
16
+ }
17
+ return {
18
+ contract,
19
+ dependencies,
20
+ middlewares,
21
+ guards,
22
+ metadata,
23
+ streamTimeout,
24
+ };
25
+ }
26
+ export function createContractProcedure(contract, paramsOrHandler) {
27
+ const { handler, ...params } = typeof paramsOrHandler === 'function'
28
+ ? { handler: paramsOrHandler }
29
+ : paramsOrHandler;
30
+ return Object.assign(_createBaseProcedure(contract, params), {
31
+ handler,
32
+ [kProcedure]: true,
33
+ });
34
+ }
35
+ export function createProcedure(paramsOrHandler) {
36
+ const { input = t.never(), output = t.any(), stream = undefined, dependencies = {}, guards = [], middlewares = [], metadata = [], handler, timeout, } = typeof paramsOrHandler === 'function'
37
+ ? { handler: paramsOrHandler }
38
+ : paramsOrHandler;
39
+ // @ts-expect-error
40
+ return createContractProcedure(c.procedure({ input, output, stream, timeout }), {
41
+ dependencies,
42
+ handler: handler,
43
+ guards,
44
+ middlewares,
45
+ metadata,
46
+ streamTimeout: typeof stream === 'number' ? stream : undefined,
47
+ });
48
+ }
49
+ export const isProcedure = (value) => Boolean(value?.[kProcedure]);
50
+ //# sourceMappingURL=procedure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procedure.js","sourceRoot":"","sources":["../../../../src/runtime/application/api/procedure.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,CAAC,EAAE,MAAM,aAAa,CAAA;AAK/B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAoE3C,MAAM,UAAU,oBAAoB,CAIlC,QAA2B,EAC3B,MAMC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAK,EAAoB,CAAA;IACjE,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;IACpC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;IAC3C,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAA;IAE1C,IAAI,OAAO,aAAa,KAAK,WAAW,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACzC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACpC,CAAC;IAED,OAAO;QACL,QAAQ;QACR,YAAY;QACZ,WAAW;QACX,MAAM;QACN,QAAQ;QACR,aAAa;KACd,CAAA;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAIrC,QAA2B,EAC3B,eAAwE;IAExE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,GAC1B,OAAO,eAAe,KAAK,UAAU;QACnC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE;QAC9B,CAAC,CAAC,eAAe,CAAA;IAErB,OAAO,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;QAC3D,OAAO;QACP,CAAC,UAAU,CAAC,EAAE,IAAI;KACnB,CAAQ,CAAA;AACX,CAAC;AAED,MAAM,UAAU,eAAe,CAO7B,eAqCK;IAcL,MAAM,EACJ,KAAK,GAAG,CAAC,CAAC,KAAK,EAAS,EACxB,MAAM,GAAG,CAAC,CAAC,GAAG,EAAS,EACvB,MAAM,GAAG,SAAgB,EACzB,YAAY,GAAG,EAAU,EACzB,MAAM,GAAG,EAAE,EACX,WAAW,GAAG,EAAE,EAChB,QAAQ,GAAG,EAAE,EACb,OAAO,EACP,OAAO,GACR,GAAG,OAAO,eAAe,KAAK,UAAU;QACvC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE;QAC9B,CAAC,CAAC,eAAe,CAAA;IAEnB,mBAAmB;IACnB,OAAO,uBAAuB,CAC5B,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAC/C;QACE,YAAY;QACZ,OAAO,EAAE,OAAc;QACvB,MAAM;QACN,WAAW;QACX,QAAQ;QACR,aAAa,EAAE,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KAC/D,CACF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAU,EAAyB,EAAE,CAC/D,OAAO,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAA"}
@@ -0,0 +1,71 @@
1
+ import type { Callback } from '@nmtjs/common';
2
+ import type { TAnyProcedureContract, TAnyRouterContract, TProcedureContract, TRouteContract, TRouterContract } from '@nmtjs/contract';
3
+ import type { AnyType } from '@nmtjs/type/any';
4
+ import type { AnyGuard } from './guards.ts';
5
+ import type { AnyMiddleware } from './middlewares.ts';
6
+ import type { AnyProcedure } from './procedure.ts';
7
+ import { kRootRouter, kRouter } from './constants.ts';
8
+ export interface AnyRouter {
9
+ contract: TAnyRouterContract;
10
+ routes: Record<string, AnyProcedure<any> | AnyRouter>;
11
+ guards: Set<AnyGuard>;
12
+ middlewares: Set<AnyMiddleware>;
13
+ timeout?: number;
14
+ [kRouter]: any;
15
+ }
16
+ export interface AnyRootRouter extends AnyRouter {
17
+ [kRootRouter]: any;
18
+ contract: TAnyRouterContract<Record<string, TRouteContract>, undefined>;
19
+ default?: AnyProcedure<any>;
20
+ }
21
+ export interface Router<Contract extends TAnyRouterContract> extends AnyRouter {
22
+ contract: Contract;
23
+ routes: {
24
+ [K in keyof Contract['routes']]: Contract['routes'][K] extends TAnyRouterContract ? Router<Contract['routes'][K]> : Contract['routes'][K] extends TAnyProcedureContract ? AnyProcedure<TProcedureContract<Contract['routes'][K]['input'], Contract['routes'][K]['output'], Contract['routes'][K]['stream'], Contract['routes'][K]['name']>> : never;
25
+ };
26
+ guards: Set<AnyGuard>;
27
+ middlewares: Set<AnyMiddleware>;
28
+ timeout?: number;
29
+ [kRouter]: any;
30
+ }
31
+ export interface RootRouter<Contract extends TAnyRouterContract<Record<string, TRouteContract>, undefined>> extends Router<Contract> {
32
+ [kRootRouter]: any;
33
+ default?: AnyProcedure<any>;
34
+ }
35
+ export type MergeRoutersRoutesContracts<Routers extends readonly TAnyRouterContract[]> = Routers extends [
36
+ infer First extends TAnyRouterContract,
37
+ ...infer Rest extends TAnyRouterContract[]
38
+ ] ? {
39
+ [K in keyof First['routes']]: First['routes'][K];
40
+ } & MergeRoutersRoutesContracts<Rest> : {};
41
+ export type ExtractRouterContracts<Routers extends readonly {
42
+ contract: TAnyRouterContract;
43
+ }[]> = Routers extends [
44
+ infer First extends {
45
+ contract: TAnyRouterContract;
46
+ },
47
+ ...infer Rest extends {
48
+ contract: TAnyRouterContract;
49
+ }[]
50
+ ] ? [First['contract'], ...ExtractRouterContracts<Rest>] : [];
51
+ export declare function createRootRouter<Routers extends readonly AnyRouter[]>(routers: Routers, defaultProcedure?: AnyProcedure<TProcedureContract<AnyType, AnyType, true | undefined, string | undefined>>): RootRouter<TRouterContract<MergeRoutersRoutesContracts<ExtractRouterContracts<[...Routers]>>, undefined>>;
52
+ export declare function createRouter<const Options extends {
53
+ name?: string;
54
+ routes?: Record<string, AnyProcedure<any> | AnyRouter>;
55
+ guards?: AnyGuard[];
56
+ middlewares?: AnyMiddleware[];
57
+ hooks?: Record<string, Callback[]>;
58
+ timeout?: number;
59
+ }>(params: Options): Router<TRouterContract<Options['routes'] extends Record<string, AnyProcedure<any> | AnyRouter> ? {
60
+ [K in keyof Options['routes']]: Options['routes'][K] extends AnyRouter ? Options['routes'][K]['contract'] : Options['routes'][K] extends AnyProcedure<any> ? Options['routes'][K]['contract'] : never;
61
+ } : {}, null extends Options['name'] ? undefined : Options['name']>>;
62
+ export declare function createContractRouter<Contract extends TAnyRouterContract>(contract: Contract, params: {
63
+ routes: {
64
+ [K in keyof Contract['routes']]: Contract['routes'][K] extends TAnyRouterContract ? Router<Contract['routes'][K]> : Contract['routes'][K] extends TAnyProcedureContract ? AnyProcedure<Contract['routes'][K]> : never;
65
+ };
66
+ guards?: AnyGuard[];
67
+ middlewares?: AnyMiddleware[];
68
+ timeout?: number;
69
+ }): Router<Contract>;
70
+ export declare const isRouter: (value: any) => value is AnyRouter;
71
+ export declare const isRootRouter: (value: any) => value is AnyRootRouter;