@mionjs/client 0.8.8 → 0.13.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 (248) hide show
  1. package/.dist/cjs/index.cjs +1 -2
  2. package/.dist/cjs/index.d.ts +5 -2
  3. package/.dist/cjs/middlewares.cjs +1 -0
  4. package/.dist/cjs/middlewares.d.ts +3 -0
  5. package/.dist/cjs/src/batch.cjs +3 -0
  6. package/.dist/cjs/src/batch.cjs.map +1 -0
  7. package/.dist/cjs/src/batch.d.ts +7 -0
  8. package/.dist/cjs/src/callContext.cjs +3 -0
  9. package/.dist/cjs/src/callContext.cjs.map +1 -0
  10. package/.dist/cjs/src/callContext.d.ts +6 -0
  11. package/.dist/cjs/src/client.cjs +3 -2
  12. package/.dist/cjs/src/client.cjs.map +1 -1
  13. package/.dist/cjs/src/client.d.ts +8 -13
  14. package/.dist/cjs/src/constants.cjs +3 -2
  15. package/.dist/cjs/src/constants.cjs.map +1 -1
  16. package/.dist/cjs/src/constants.d.ts +7 -3
  17. package/.dist/cjs/src/dispatch.cjs +3 -0
  18. package/.dist/cjs/src/dispatch.cjs.map +1 -0
  19. package/.dist/cjs/src/dispatch.d.ts +8 -0
  20. package/.dist/cjs/src/lib/apiBuildVersion.cjs +3 -0
  21. package/.dist/cjs/src/lib/apiBuildVersion.cjs.map +1 -0
  22. package/.dist/cjs/src/lib/apiBuildVersion.d.ts +10 -0
  23. package/.dist/cjs/src/lib/apiVersionRecovery.cjs +3 -0
  24. package/.dist/cjs/src/lib/apiVersionRecovery.cjs.map +1 -0
  25. package/.dist/cjs/src/lib/apiVersionRecovery.d.ts +7 -0
  26. package/.dist/cjs/src/lib/bundledApi.cjs +3 -0
  27. package/.dist/cjs/src/lib/bundledApi.cjs.map +1 -0
  28. package/.dist/cjs/src/lib/bundledApi.d.ts +12 -0
  29. package/.dist/cjs/src/lib/clientMethodsMetadata.cjs +3 -2
  30. package/.dist/cjs/src/lib/clientMethodsMetadata.cjs.map +1 -1
  31. package/.dist/cjs/src/lib/clientMethodsMetadata.d.ts +10 -10
  32. package/.dist/cjs/src/lib/clientResponse.cjs +3 -0
  33. package/.dist/cjs/src/lib/clientResponse.cjs.map +1 -0
  34. package/.dist/cjs/src/lib/clientResponse.d.ts +9 -0
  35. package/.dist/cjs/src/lib/fetchRemoteMethodsMetadata.cjs +3 -2
  36. package/.dist/cjs/src/lib/fetchRemoteMethodsMetadata.cjs.map +1 -1
  37. package/.dist/cjs/src/lib/fetchRemoteMethodsMetadata.d.ts +1 -1
  38. package/.dist/cjs/src/lib/handlersRegistry.cjs +3 -2
  39. package/.dist/cjs/src/lib/handlersRegistry.cjs.map +1 -1
  40. package/.dist/cjs/src/lib/handlersRegistry.d.ts +18 -9
  41. package/.dist/cjs/src/lib/headers.cjs +3 -0
  42. package/.dist/cjs/src/lib/headers.cjs.map +1 -0
  43. package/.dist/cjs/src/lib/headers.d.ts +7 -0
  44. package/.dist/cjs/src/lib/metadataEviction.cjs +3 -0
  45. package/.dist/cjs/src/lib/metadataEviction.cjs.map +1 -0
  46. package/.dist/cjs/src/lib/metadataEviction.d.ts +9 -0
  47. package/.dist/cjs/src/lib/metadataFetcher.cjs +3 -0
  48. package/.dist/cjs/src/lib/metadataFetcher.cjs.map +1 -0
  49. package/.dist/cjs/src/lib/metadataFetcher.d.ts +29 -0
  50. package/.dist/cjs/src/lib/metadataFromServer.cjs +1 -0
  51. package/.dist/cjs/src/lib/metadataFromServer.d.ts +4 -0
  52. package/.dist/cjs/src/lib/metadataFromServerLoader.cjs +3 -0
  53. package/.dist/cjs/src/lib/metadataFromServerLoader.cjs.map +1 -0
  54. package/.dist/cjs/src/lib/metadataFromServerLoader.d.ts +6 -0
  55. package/.dist/cjs/src/lib/metadataStore.cjs +3 -0
  56. package/.dist/cjs/src/lib/metadataStore.cjs.map +1 -0
  57. package/.dist/cjs/src/lib/metadataStore.d.ts +23 -0
  58. package/.dist/cjs/src/lib/methods.cjs +3 -0
  59. package/.dist/cjs/src/lib/methods.cjs.map +1 -0
  60. package/.dist/cjs/src/lib/methods.d.ts +15 -0
  61. package/.dist/cjs/src/lib/persistentStorage.cjs +3 -0
  62. package/.dist/cjs/src/lib/persistentStorage.cjs.map +1 -0
  63. package/.dist/cjs/src/lib/persistentStorage.d.ts +3 -0
  64. package/.dist/cjs/src/lib/sanitize.cjs +3 -0
  65. package/.dist/cjs/src/lib/sanitize.cjs.map +1 -0
  66. package/.dist/cjs/src/lib/sanitize.d.ts +3 -0
  67. package/.dist/cjs/src/lib/serializer.cjs +3 -2
  68. package/.dist/cjs/src/lib/serializer.cjs.map +1 -1
  69. package/.dist/cjs/src/lib/serializer.d.ts +8 -6
  70. package/.dist/cjs/src/lib/storage.cjs +0 -2
  71. package/.dist/cjs/src/lib/storage.d.ts +17 -10
  72. package/.dist/cjs/src/lib/typedEvent.cjs +3 -2
  73. package/.dist/cjs/src/lib/typedEvent.cjs.map +1 -1
  74. package/.dist/cjs/src/lib/typedEvent.d.ts +12 -10
  75. package/.dist/cjs/src/lib/validation.cjs +3 -2
  76. package/.dist/cjs/src/lib/validation.cjs.map +1 -1
  77. package/.dist/cjs/src/lib/validation.d.ts +4 -3
  78. package/.dist/cjs/src/middlewares/fetchMetadata.cjs +3 -0
  79. package/.dist/cjs/src/middlewares/fetchMetadata.cjs.map +1 -0
  80. package/.dist/cjs/src/middlewares/fetchMetadata.d.ts +4 -0
  81. package/.dist/cjs/src/middlewares/syncRoutes.cjs +3 -0
  82. package/.dist/cjs/src/middlewares/syncRoutes.cjs.map +1 -0
  83. package/.dist/cjs/src/middlewares/syncRoutes.d.ts +4 -0
  84. package/.dist/cjs/src/subRequest.cjs +3 -2
  85. package/.dist/cjs/src/subRequest.cjs.map +1 -1
  86. package/.dist/cjs/src/subRequest.d.ts +6 -10
  87. package/.dist/cjs/src/types.cjs +0 -2
  88. package/.dist/cjs/src/types.d.ts +91 -80
  89. package/.dist/esm/index.d.ts +5 -2
  90. package/.dist/esm/index.js +47 -28
  91. package/.dist/esm/middlewares.d.ts +3 -0
  92. package/.dist/esm/middlewares.js +6 -0
  93. package/.dist/esm/src/batch.d.ts +7 -0
  94. package/.dist/esm/src/batch.js +50 -0
  95. package/.dist/esm/src/batch.js.map +1 -0
  96. package/.dist/esm/src/callContext.d.ts +6 -0
  97. package/.dist/esm/src/callContext.js +34 -0
  98. package/.dist/esm/src/callContext.js.map +1 -0
  99. package/.dist/esm/src/client.d.ts +8 -13
  100. package/.dist/esm/src/client.js +54 -108
  101. package/.dist/esm/src/client.js.map +1 -1
  102. package/.dist/esm/src/constants.d.ts +7 -3
  103. package/.dist/esm/src/constants.js +21 -17
  104. package/.dist/esm/src/constants.js.map +1 -1
  105. package/.dist/esm/src/dispatch.d.ts +8 -0
  106. package/.dist/esm/src/dispatch.js +390 -0
  107. package/.dist/esm/src/dispatch.js.map +1 -0
  108. package/.dist/esm/src/lib/apiBuildVersion.d.ts +10 -0
  109. package/.dist/esm/src/lib/apiBuildVersion.js +43 -0
  110. package/.dist/esm/src/lib/apiBuildVersion.js.map +1 -0
  111. package/.dist/esm/src/lib/apiVersionRecovery.d.ts +7 -0
  112. package/.dist/esm/src/lib/apiVersionRecovery.js +43 -0
  113. package/.dist/esm/src/lib/apiVersionRecovery.js.map +1 -0
  114. package/.dist/esm/src/lib/bundledApi.d.ts +12 -0
  115. package/.dist/esm/src/lib/bundledApi.js +52 -0
  116. package/.dist/esm/src/lib/bundledApi.js.map +1 -0
  117. package/.dist/esm/src/lib/clientMethodsMetadata.d.ts +10 -10
  118. package/.dist/esm/src/lib/clientMethodsMetadata.js +257 -101
  119. package/.dist/esm/src/lib/clientMethodsMetadata.js.map +1 -1
  120. package/.dist/esm/src/lib/clientResponse.d.ts +9 -0
  121. package/.dist/esm/src/lib/clientResponse.js +53 -0
  122. package/.dist/esm/src/lib/clientResponse.js.map +1 -0
  123. package/.dist/esm/src/lib/fetchRemoteMethodsMetadata.d.ts +1 -1
  124. package/.dist/esm/src/lib/fetchRemoteMethodsMetadata.js +20 -17
  125. package/.dist/esm/src/lib/fetchRemoteMethodsMetadata.js.map +1 -1
  126. package/.dist/esm/src/lib/handlersRegistry.d.ts +18 -9
  127. package/.dist/esm/src/lib/handlersRegistry.js +53 -38
  128. package/.dist/esm/src/lib/handlersRegistry.js.map +1 -1
  129. package/.dist/esm/src/lib/headers.d.ts +7 -0
  130. package/.dist/esm/src/lib/headers.js +47 -0
  131. package/.dist/esm/src/lib/headers.js.map +1 -0
  132. package/.dist/esm/src/lib/metadataEviction.d.ts +9 -0
  133. package/.dist/esm/src/lib/metadataEviction.js +33 -0
  134. package/.dist/esm/src/lib/metadataEviction.js.map +1 -0
  135. package/.dist/esm/src/lib/metadataFetcher.d.ts +29 -0
  136. package/.dist/esm/src/lib/metadataFetcher.js +24 -0
  137. package/.dist/esm/src/lib/metadataFetcher.js.map +1 -0
  138. package/.dist/esm/src/lib/metadataFromServer.d.ts +4 -0
  139. package/.dist/esm/src/lib/metadataFromServer.js +15 -0
  140. package/.dist/esm/src/lib/metadataFromServerLoader.d.ts +6 -0
  141. package/.dist/esm/src/lib/metadataFromServerLoader.js +27 -0
  142. package/.dist/esm/src/lib/metadataFromServerLoader.js.map +1 -0
  143. package/.dist/esm/src/lib/metadataStore.d.ts +23 -0
  144. package/.dist/esm/src/lib/metadataStore.js +152 -0
  145. package/.dist/esm/src/lib/metadataStore.js.map +1 -0
  146. package/.dist/esm/src/lib/methods.d.ts +15 -0
  147. package/.dist/esm/src/lib/methods.js +41 -0
  148. package/.dist/esm/src/lib/methods.js.map +1 -0
  149. package/.dist/esm/src/lib/persistentStorage.d.ts +3 -0
  150. package/.dist/esm/src/lib/persistentStorage.js +26 -0
  151. package/.dist/esm/src/lib/persistentStorage.js.map +1 -0
  152. package/.dist/esm/src/lib/sanitize.d.ts +3 -0
  153. package/.dist/esm/src/lib/sanitize.js +25 -0
  154. package/.dist/esm/src/lib/sanitize.js.map +1 -0
  155. package/.dist/esm/src/lib/serializer.d.ts +8 -6
  156. package/.dist/esm/src/lib/serializer.js +75 -110
  157. package/.dist/esm/src/lib/serializer.js.map +1 -1
  158. package/.dist/esm/src/lib/storage.d.ts +17 -10
  159. package/.dist/esm/src/lib/storage.js +0 -43
  160. package/.dist/esm/src/lib/typedEvent.d.ts +12 -10
  161. package/.dist/esm/src/lib/typedEvent.js +25 -20
  162. package/.dist/esm/src/lib/typedEvent.js.map +1 -1
  163. package/.dist/esm/src/lib/validation.d.ts +4 -3
  164. package/.dist/esm/src/lib/validation.js +38 -33
  165. package/.dist/esm/src/lib/validation.js.map +1 -1
  166. package/.dist/esm/src/middlewares/fetchMetadata.d.ts +4 -0
  167. package/.dist/esm/src/middlewares/fetchMetadata.js +85 -0
  168. package/.dist/esm/src/middlewares/fetchMetadata.js.map +1 -0
  169. package/.dist/esm/src/middlewares/syncRoutes.d.ts +4 -0
  170. package/.dist/esm/src/middlewares/syncRoutes.js +20 -0
  171. package/.dist/esm/src/middlewares/syncRoutes.js.map +1 -0
  172. package/.dist/esm/src/subRequest.d.ts +6 -10
  173. package/.dist/esm/src/subRequest.js +11 -32
  174. package/.dist/esm/src/subRequest.js.map +1 -1
  175. package/.dist/esm/src/types.d.ts +91 -80
  176. package/.dist/esm/src/types.js +0 -2
  177. package/LICENSE +1 -1
  178. package/README.md +6 -6
  179. package/package.json +38 -26
  180. package/.dist/cjs/index.cjs.map +0 -1
  181. package/.dist/cjs/index.d.ts.map +0 -1
  182. package/.dist/cjs/src/client.d.ts.map +0 -1
  183. package/.dist/cjs/src/constants.d.ts.map +0 -1
  184. package/.dist/cjs/src/lib/clientMethodsMetadata.d.ts.map +0 -1
  185. package/.dist/cjs/src/lib/fetchRemoteMethodsMetadata.d.ts.map +0 -1
  186. package/.dist/cjs/src/lib/handlersRegistry.d.ts.map +0 -1
  187. package/.dist/cjs/src/lib/serializer.d.ts.map +0 -1
  188. package/.dist/cjs/src/lib/storage.cjs.map +0 -1
  189. package/.dist/cjs/src/lib/storage.d.ts.map +0 -1
  190. package/.dist/cjs/src/lib/testUtils.cjs +0 -2
  191. package/.dist/cjs/src/lib/testUtils.cjs.map +0 -1
  192. package/.dist/cjs/src/lib/testUtils.d.ts +0 -2
  193. package/.dist/cjs/src/lib/testUtils.d.ts.map +0 -1
  194. package/.dist/cjs/src/lib/typedEvent.d.ts.map +0 -1
  195. package/.dist/cjs/src/lib/validation.d.ts.map +0 -1
  196. package/.dist/cjs/src/request.cjs +0 -2
  197. package/.dist/cjs/src/request.cjs.map +0 -1
  198. package/.dist/cjs/src/request.d.ts +0 -37
  199. package/.dist/cjs/src/request.d.ts.map +0 -1
  200. package/.dist/cjs/src/routesFlow.cjs +0 -2
  201. package/.dist/cjs/src/routesFlow.cjs.map +0 -1
  202. package/.dist/cjs/src/routesFlow.d.ts +0 -7
  203. package/.dist/cjs/src/routesFlow.d.ts.map +0 -1
  204. package/.dist/cjs/src/subRequest.d.ts.map +0 -1
  205. package/.dist/cjs/src/types.cjs.map +0 -1
  206. package/.dist/cjs/src/types.d.ts.map +0 -1
  207. package/.dist/esm/index.d.ts.map +0 -1
  208. package/.dist/esm/index.js.map +0 -1
  209. package/.dist/esm/src/client.d.ts.map +0 -1
  210. package/.dist/esm/src/constants.d.ts.map +0 -1
  211. package/.dist/esm/src/lib/clientMethodsMetadata.d.ts.map +0 -1
  212. package/.dist/esm/src/lib/fetchRemoteMethodsMetadata.d.ts.map +0 -1
  213. package/.dist/esm/src/lib/handlersRegistry.d.ts.map +0 -1
  214. package/.dist/esm/src/lib/serializer.d.ts.map +0 -1
  215. package/.dist/esm/src/lib/storage.d.ts.map +0 -1
  216. package/.dist/esm/src/lib/storage.js.map +0 -1
  217. package/.dist/esm/src/lib/testUtils.d.ts +0 -2
  218. package/.dist/esm/src/lib/testUtils.d.ts.map +0 -1
  219. package/.dist/esm/src/lib/testUtils.js +0 -11
  220. package/.dist/esm/src/lib/testUtils.js.map +0 -1
  221. package/.dist/esm/src/lib/typedEvent.d.ts.map +0 -1
  222. package/.dist/esm/src/lib/validation.d.ts.map +0 -1
  223. package/.dist/esm/src/request.d.ts +0 -37
  224. package/.dist/esm/src/request.d.ts.map +0 -1
  225. package/.dist/esm/src/request.js +0 -334
  226. package/.dist/esm/src/request.js.map +0 -1
  227. package/.dist/esm/src/routesFlow.d.ts +0 -7
  228. package/.dist/esm/src/routesFlow.d.ts.map +0 -1
  229. package/.dist/esm/src/routesFlow.js +0 -60
  230. package/.dist/esm/src/routesFlow.js.map +0 -1
  231. package/.dist/esm/src/subRequest.d.ts.map +0 -1
  232. package/.dist/esm/src/types.d.ts.map +0 -1
  233. package/.dist/esm/src/types.js.map +0 -1
  234. package/index.ts +0 -19
  235. package/src/client.ts +0 -290
  236. package/src/constants.ts +0 -37
  237. package/src/lib/clientMethodsMetadata.ts +0 -187
  238. package/src/lib/fetchRemoteMethodsMetadata.ts +0 -44
  239. package/src/lib/handlersRegistry.ts +0 -101
  240. package/src/lib/serializer.ts +0 -245
  241. package/src/lib/storage.ts +0 -57
  242. package/src/lib/testUtils.ts +0 -16
  243. package/src/lib/typedEvent.ts +0 -57
  244. package/src/lib/validation.ts +0 -72
  245. package/src/request.ts +0 -563
  246. package/src/routesFlow.ts +0 -101
  247. package/src/subRequest.ts +0 -111
  248. package/src/types.ts +0 -237
@@ -1,37 +1,32 @@
1
- import { RpcError, CoreRouterOptions, Prettify, RunTypeError, SerializerMode, ValidationError } from '@mionjs/core';
2
- import { PublicHeadersFn, PublicMiddleFn, RemoteApi, PublicRoute } from '@mionjs/router';
1
+ import { HandlerType, RpcError, InputFromRef, Prettify, RunTypeError, ValidationError } from '@mionjs/core';
2
+ import { PublicHeadersMiddleware, PublicMiddleware, RemoteApi, PublicRoute } from '@mionjs/router';
3
+ import { InjectApiMetadata } from '@mionjs/run-types';
3
4
  import { TypedEvent } from './lib/typedEvent.ts';
4
- export type Result<RouteSuccess, RouteError, MiddleFnsResults extends Record<string, unknown> = Record<string, unknown>, MiddleFnsErrors extends Record<string, unknown> = Record<string, RpcError<string, unknown>>> = [RouteSuccess | undefined, RouteError | undefined, MiddleFnsResults | undefined, MiddleFnsErrors | undefined];
5
- export type MiddleFnSuccess<H> = H extends MiddlewareSubRequest<infer PH> ? HandlerSuccessResponse<PH> : never;
6
- export type MiddleFnError<H> = H extends MiddlewareSubRequest<infer PH> ? Simplify<HandlerErrors<PH>> : never;
7
- export type WorkflowResult<Routes extends RouteSubRequest<any>[], MiddleFns extends Record<string, MiddlewareSubRequest<any>> = Record<string, MiddlewareSubRequest<any>>> = [
8
- WorkflowRouteResults<Routes>,
9
- WorkflowRouteErrors<Routes>,
10
- {
11
- [K in keyof MiddleFns]?: MiddleFnSuccess<MiddleFns[K]>;
12
- } | undefined,
13
- {
14
- [K in keyof MiddleFns]?: MiddleFnError<MiddleFns[K]>;
15
- } | undefined
5
+ import { MIDDLEWARE_HOOKS } from './constants.ts';
6
+ import { StorageEngine } from './lib/storage.ts';
7
+ export type Result<RouteSuccess, RouteError, RA = RemoteApi> = [
8
+ RouteSuccess | undefined,
9
+ RouteError | undefined,
10
+ ClientResponse<RA>
16
11
  ];
17
- export type WorkflowRouteResults<Routes extends RouteSubRequest<any>[]> = {
18
- [K in keyof Routes]: Routes[K] extends RouteSubRequest<infer PH> ? HandlerSuccessResponse<PH> | undefined : never;
12
+ export type BatchResult<Routes extends RouteSubRequest<any>[]> = {
13
+ [K in keyof Routes]: Routes[K] extends RouteSubRequest<any> ? Awaited<ReturnType<Routes[K]['call']>> : never;
19
14
  };
20
- export type WorkflowRouteErrors<Routes extends RouteSubRequest<any>[]> = {
21
- [K in keyof Routes]: Routes[K] extends RouteSubRequest<infer PH> ? Simplify<HandlerErrors<PH>> | undefined : never;
22
- };
23
- export interface ClientOptions extends CoreRouterOptions {
15
+ export type ClientFetchOptions = Omit<RequestInit, 'method' | 'body' | 'signal'>;
16
+ export interface ClientOptions {
24
17
  baseURL: string;
25
18
  basePath: string;
26
19
  suffix: string;
27
- autoGenerateErrorId: boolean;
28
- fetchOptions: RequestInit;
20
+ fetchOptions: ClientFetchOptions;
29
21
  validateParams: boolean;
30
- serializer: SerializerMode;
22
+ validateServerResponses: boolean;
23
+ sanitizeParams: boolean;
24
+ storageEngine: StorageEngine;
31
25
  timeout?: number;
32
26
  }
27
+ export type InjectedApiMetadata = InjectApiMetadata<RemoteApi, string>;
33
28
  type PublicHandler = (...args: any[]) => Promise<any>;
34
- type PublicMethod = PublicRoute | PublicMiddleFn | PublicHeadersFn;
29
+ type PublicMethod = PublicRoute | PublicMiddleware | PublicHeadersMiddleware;
35
30
  type ExtractHandler<PM extends PublicMethod> = PM extends {
36
31
  handler: infer H;
37
32
  } ? H : never;
@@ -46,7 +41,7 @@ export type RequestBody = {
46
41
  };
47
42
  export type RouteParamsType<PM extends PublicMethod> = Parameters<ExtractHandler<PM>>;
48
43
  export type RouteParamType<PM extends PublicMethod, Index extends number> = Parameters<ExtractHandler<PM>>[Index];
49
- export type HeadersParamsType<PM extends PublicHeadersFn> = Parameters<ExtractHandler<PM>>[0];
44
+ export type HeadersParamsType<PM extends PublicHeadersMiddleware> = Parameters<ExtractHandler<PM>>[0];
50
45
  export type RouteReturnType<PM extends PublicMethod> = HandlerSuccessResponse<ExtractHandler<PM>>;
51
46
  export type HandlerResponse<PH extends PublicHandler> = Awaited<ReturnType<PH>>;
52
47
  export type HandlerSuccessResponse<PH extends PublicHandler> = Exclude<HandlerResponse<PH>, RpcError<string>>;
@@ -60,78 +55,95 @@ export type FailResponses<List extends SubRequest<any>[]> = {
60
55
  [P in keyof List]: FailResponse<List[P]>;
61
56
  };
62
57
  export type RequestErrors = Map<string, RpcError<string>>;
63
- export type ErrorHandler<E extends RpcError<string, any>> = (error: E) => void;
64
- export type UnknownErrorHandler = (error: RpcError<string, any>) => void;
65
- export type SuccessHandler<S> = (result: S) => void;
58
+ export type ErrorOfType<E extends RpcError<string, any>, T extends E['type']> = E extends any ? T extends E['type'] ? E : never : never;
59
+ export type ErrorHandler<E extends RpcError<string, any>> = (error: E, context: MiddlewareContext) => unknown;
60
+ export type ResponseHandler<S> = (result: S, context: MiddlewareContext) => unknown;
61
+ export interface MiddlewareContext extends CallContext {
62
+ retry(): boolean;
63
+ }
64
+ export type RequestHandler<P extends any[] = any[]> = (call: (...params: P) => void, context: CallContext) => void | Promise<void>;
65
+ export interface CallContext {
66
+ readonly route?: RouteSubRequest<any>;
67
+ readonly batchSubRequests?: RouteSubRequest<any>[];
68
+ readonly subRequestList: Readonly<Record<string, SubRequest<any>>>;
69
+ readonly options: ClientOptions;
70
+ readonly signal?: AbortSignal;
71
+ }
72
+ export interface ClientCallContext extends CallContext {
73
+ readonly path: string;
74
+ readonly requestId: string;
75
+ readonly subRequestList: Record<string, SubRequest<any>>;
76
+ readonly thrownErrorIds: Set<string>;
77
+ httpResponse: Response | undefined;
78
+ response: ClientResponse<RemoteApi>;
79
+ }
66
80
  type Simplify<T> = T extends any ? T : never;
67
81
  export type HandlerErrors<PH extends (...args: any[]) => Promise<any>> = Simplify<Extract<HandlerResponse<PH>, RpcError<string, any>> | ValidationError>;
68
- export interface SubRequest<PH extends PublicHandler> {
82
+ export interface SubRequest<PH extends PublicHandler, Id extends string = string> {
69
83
  pointer: string[];
70
- id: string;
84
+ id: Id;
71
85
  isResolved: boolean;
72
86
  params: Parameters<PH>;
73
87
  resolvedValue?: HandlerSuccessResponse<PH>;
74
88
  error?: HandlerFailResponse<PH>;
75
89
  serializedParams?: any[];
90
+ mappings?: InputFromRef[];
76
91
  }
77
- export interface CallSetup<H extends Record<string, MiddlewareSubRequest<any>> = Record<string, never>, OtherRoutes extends RouteSubRequest<any>[] = []> {
78
- middleFns?: H;
79
- otherRoutes?: [...OtherRoutes];
92
+ export interface CallSetup {
80
93
  signal?: AbortSignal;
81
94
  timeout?: number;
82
95
  }
83
- export interface RoutesFlowBuilder<Routes extends RouteSubRequest<any>[]> {
84
- call(setup?: {
85
- middleFns?: never;
86
- signal?: AbortSignal;
87
- timeout?: number;
88
- }): Promise<WorkflowResult<Routes>>;
89
- call<H extends Record<string, MiddlewareSubRequest<any>>>(setup: {
90
- middleFns: H;
91
- signal?: AbortSignal;
92
- timeout?: number;
93
- }): Promise<WorkflowResult<Routes, H>>;
96
+ export type ApiOf<Routes extends SubRequest<any>[]> = Routes[number] extends RouteSubRequest<any, any, infer RA> ? RA : never;
97
+ export interface BatchBuilder<Routes extends RouteSubRequest<any>[]> {
98
+ call(setup?: CallSetup, apiMetadata?: InjectApiMetadata<ApiOf<Routes>, Routes[number]['id']>): Promise<BatchResult<Routes>>;
94
99
  }
95
- export interface RouteSubRequest<PH extends PublicHandler> extends SubRequest<PH> {
96
- typeErrors: () => Promise<RunTypeError[]>;
97
- call(setup?: {
98
- middleFns?: never;
99
- otherRoutes?: never;
100
- signal?: AbortSignal;
101
- timeout?: number;
102
- }): Promise<Result<HandlerSuccessResponse<PH>, Simplify<HandlerErrors<PH>>>>;
103
- call<H extends Record<string, MiddlewareSubRequest<any>>>(setup: {
104
- middleFns: H;
105
- otherRoutes?: never;
106
- signal?: AbortSignal;
107
- timeout?: number;
108
- }): Promise<Result<HandlerSuccessResponse<PH>, Simplify<HandlerErrors<PH>>, {
109
- [K in keyof H]?: MiddleFnSuccess<H[K]>;
110
- }, {
111
- [K in keyof H]?: MiddleFnError<H[K]>;
112
- }>>;
113
- call<OtherRoutes extends RouteSubRequest<any>[], H extends Record<string, MiddlewareSubRequest<any>> = Record<string, never>>(setup: {
114
- otherRoutes: [...OtherRoutes];
115
- middleFns?: H;
116
- signal?: AbortSignal;
117
- timeout?: number;
118
- }): Promise<WorkflowResult<any, H>>;
100
+ export interface RouteSubRequest<PH extends PublicHandler, Id extends string = string, RA extends RemoteApi = any> extends SubRequest<PH, Id> {
101
+ typeErrors(apiMetadata?: InjectApiMetadata<RA, Id>): Promise<RunTypeError[]>;
102
+ call(setup?: CallSetup, apiMetadata?: InjectApiMetadata<RA, Id>): Promise<Result<HandlerSuccessResponse<PH>, Simplify<HandlerErrors<PH>>, RA>>;
119
103
  }
120
- export interface MiddlewareSubRequest<PH extends PublicHandler> extends SubRequest<PH> {
121
- typeErrors: () => Promise<RunTypeError[]>;
122
- prefill: () => TypedEvent<HandlerSuccessResponse<PH>, Simplify<HandlerErrors<PH>>>;
123
- removePrefill: () => Promise<void>;
104
+ export type MiddlewareSubRequest<PH extends PublicHandler, Id extends string = string> = SubRequest<PH, Id>;
105
+ export type MiddlewareEvents<PH extends PublicHandler> = TypedEvent<HandlerSuccessResponse<PH>, Simplify<HandlerErrors<PH>>, Parameters<PH>>;
106
+ export interface ClientMiddleware<PH extends PublicHandler, Id extends string = string> extends Pick<MiddlewareEvents<PH>, (typeof MIDDLEWARE_HOOKS)[number]> {
124
107
  }
125
- export type NonClientRoute = never | PublicMiddleFn | PublicHeadersFn;
126
- export type ClientRoutes<RA extends RemoteApi> = Prettify<{
127
- [Property in keyof RA as RA[Property] extends NonClientRoute ? never : Property]: RA[Property] extends PublicRoute ? (...params: Parameters<RA[Property]['handler']>) => RouteSubRequest<RA[Property]['handler']> : RA[Property] extends RemoteApi ? ClientRoutes<RA[Property]> : never;
108
+ export type ClientMiddlewareOf<H extends (ctx: any, ...params: any[]) => any> = H extends (ctx: any, ...params: infer P) => infer R ? ClientMiddleware<(...params: P) => Promise<Awaited<R>>> : never;
109
+ type RouteLeaf = {
110
+ type: typeof HandlerType.route;
111
+ handler: PublicHandler;
112
+ };
113
+ type MiddlewareLeaf = {
114
+ type: typeof HandlerType.middleware | typeof HandlerType.headersMiddleware;
115
+ handler: PublicHandler;
116
+ };
117
+ type AnyLeaf = {
118
+ type: number;
119
+ };
120
+ export type NonClientRoute = MiddlewareLeaf;
121
+ export type ClientRoutes<RA, Prefix extends string = '', Root extends RemoteApi = RA extends RemoteApi ? RA : RemoteApi> = Prettify<{
122
+ [Property in keyof RA & string as RA[Property] extends NonClientRoute ? never : Property]: RA[Property] extends {
123
+ type: typeof HandlerType.route;
124
+ handler: infer H extends PublicHandler;
125
+ } ? (...params: Parameters<H>) => RouteSubRequest<H, `${Prefix}${Property & string}`, Root> : RA[Property] extends AnyLeaf ? never : ClientRoutes<RA[Property], `${Prefix}${Property & string}/`, Root>;
128
126
  }>;
129
- export type NonClientMiddleFn = never | PublicRoute | {
130
- [key: string]: PublicRoute;
127
+ export type NonClientMiddleware = RouteLeaf | {
128
+ [key: string]: RouteLeaf;
131
129
  };
132
- export type ClientMiddleFns<RA extends RemoteApi> = Prettify<{
133
- [Property in keyof RA as RA[Property] extends NonClientMiddleFn ? never : Property]: RA[Property] extends PublicMiddleFn | PublicHeadersFn ? (...params: Parameters<RA[Property]['handler']>) => MiddlewareSubRequest<RA[Property]['handler']> : RA[Property] extends RemoteApi ? ClientMiddleFns<RA[Property]> : never;
130
+ export type ClientMiddlewares<RA, Prefix extends string = ''> = Prettify<{
131
+ [Property in keyof RA & string as RA[Property] extends NonClientMiddleware ? never : Property]: RA[Property] extends {
132
+ type: typeof HandlerType.middleware | typeof HandlerType.headersMiddleware;
133
+ handler: infer H extends PublicHandler;
134
+ } ? ClientMiddleware<H, `${Prefix}${Property & string}`> : RA[Property] extends AnyLeaf ? never : ClientMiddlewares<RA[Property], `${Prefix}${Property & string}/`>;
134
135
  }>;
136
+ export type ClientResponse<RA> = (string extends keyof RA ? {
137
+ [key: string]: unknown;
138
+ } : ClientMiddlewareResponses<RA>) & {
139
+ '@thrownErrors'?: RpcError<string>[];
140
+ };
141
+ type ClientMiddlewareResponses<RA> = {
142
+ [Property in keyof RA & string as RA[Property] extends NonClientMiddleware ? never : Property]?: RA[Property] extends {
143
+ type: typeof HandlerType.middleware | typeof HandlerType.headersMiddleware;
144
+ handler: infer H extends PublicHandler;
145
+ } ? HandlerResponse<H> | ValidationError : RA[Property] extends AnyLeaf ? never : ClientMiddlewareResponses<RA[Property]>;
146
+ };
135
147
  export type Cleaned<RMS extends RemoteApi> = {
136
148
  [Property in keyof RMS as RMS[Property] extends never ? never : Property]: RMS[Property];
137
149
  };
@@ -139,6 +151,5 @@ export type SuccessClientResponse<RS extends RouteSubRequest<any>, RHList extend
139
151
  SuccessResponse<RS>,
140
152
  ...SuccessResponses<RHList>
141
153
  ];
142
- export type PrefilledMiddleFnsCache = Map<string, SubRequest<any>>;
143
154
  export {};
144
155
  //# sourceMappingURL=types.d.ts.map
@@ -1,13 +1,16 @@
1
1
  export * from './src/types.ts';
2
2
  export * from './src/constants.ts';
3
3
  export * from './src/lib/storage.ts';
4
+ export * from './src/lib/metadataStore.ts';
5
+ export * from './src/lib/persistentStorage.ts';
4
6
  export * from './src/lib/validation.ts';
5
7
  export * from './src/lib/serializer.ts';
6
8
  export * from './src/lib/clientMethodsMetadata.ts';
7
9
  export * from './src/lib/fetchRemoteMethodsMetadata.ts';
8
- export * from './src/request.ts';
10
+ export * from './src/callContext.ts';
11
+ export * from './src/dispatch.ts';
9
12
  export * from './src/client.ts';
10
13
  export * from './src/lib/typedEvent.ts';
11
14
  export * from './src/lib/handlersRegistry.ts';
12
- export * from './src/routesFlow.ts';
15
+ export * from './src/batch.ts';
13
16
  //# sourceMappingURL=index.d.ts.map
@@ -1,42 +1,61 @@
1
- import { DEFAULT_PREFILL_OPTIONS, MAX_GET_URL_LENGTH, ROUTES_FLOW_KEY, ROUTES_FLOW_PATH, STORAGE_KEY } from "./src/constants.js";
2
- import { MemoryStorage, getStorage, resetStorageInstance } from "./src/lib/storage.js";
3
- import { validateSubRequest, validateSubRequests } from "./src/lib/validation.js";
4
- import { deserializeResponseBody, serializeRequestBody } from "./src/lib/serializer.js";
5
- import { createMetadataSubRequest, extractAndProcessMetadata, restoreAllDependencies, restoreFromLocalStorage, storeDependencies, storeMethodsMetadata } from "./src/lib/clientMethodsMetadata.js";
1
+ import { CLIENT_REQUEST_ERROR_ID, DEFAULT_CLIENT_OPTIONS, DEFAULT_STORAGE_ENGINE, MAX_GET_URL_LENGTH, METADATA_CACHE_EVICTION_ROUNDS, METADATA_CACHE_MAX_BYTES, MIDDLEWARE_HOOKS, STORAGE_KEY } from "./src/constants.js";
2
+ import { IdbMetadataStore, MemoryMetadataStore, getMetadataStore, resetMetadataStore, setMetadataStoreForTesting } from "./src/lib/metadataStore.js";
3
+ import { requestPersistenceWhenSilent, requestPersistentStorage } from "./src/lib/persistentStorage.js";
4
+ import { getResponseError, validateSubRequest, validateSubRequests } from "./src/lib/validation.js";
5
+ import { deserializeResponseBody, serializeRequestBody, wireFormReplacer } from "./src/lib/serializer.js";
6
+ import { flushMetadataCache, forgetFetchedMetadata, hydrateMetadataCache, installMethodRows, purgeHydratedMetadata, resetMetadataCacheState, takeMetadataCacheError, wasHydratedFromCache } from "./src/lib/clientMethodsMetadata.js";
6
7
  import { fetchRemoteMethodsMetadata } from "./src/lib/fetchRemoteMethodsMetadata.js";
7
- import { MionClientRequest } from "./src/request.js";
8
- import { MionClient, initClient } from "./src/client.js";
9
- import { TypedEvent } from "./src/lib/typedEvent.js";
8
+ import { addSubRequest, createCallContext, getRouteIds, getRoutePointers } from "./src/callContext.js";
9
+ import { dispatchCall, dispatchTypeErrors, isMiddlewareInScope, routeSucceeded } from "./src/dispatch.js";
10
10
  import { HandlersRegistry } from "./src/lib/handlersRegistry.js";
11
- import { isMapFromRef, mapFrom, mapFromSymbol, routesFlow } from "./src/routesFlow.js";
11
+ import { TypedEvent } from "./src/lib/typedEvent.js";
12
+ import { batch, inputFrom, isInputFromRef } from "./src/batch.js";
13
+ import { MionClient, initClient, setApiBundled } from "./src/client.js";
12
14
  export {
13
- DEFAULT_PREFILL_OPTIONS,
15
+ CLIENT_REQUEST_ERROR_ID,
16
+ DEFAULT_CLIENT_OPTIONS,
17
+ DEFAULT_STORAGE_ENGINE,
14
18
  HandlersRegistry,
19
+ IdbMetadataStore,
15
20
  MAX_GET_URL_LENGTH,
16
- MemoryStorage,
21
+ METADATA_CACHE_EVICTION_ROUNDS,
22
+ METADATA_CACHE_MAX_BYTES,
23
+ MIDDLEWARE_HOOKS,
24
+ MemoryMetadataStore,
17
25
  MionClient,
18
- MionClientRequest,
19
- ROUTES_FLOW_KEY,
20
- ROUTES_FLOW_PATH,
21
26
  STORAGE_KEY,
22
27
  TypedEvent,
23
- createMetadataSubRequest,
28
+ addSubRequest,
29
+ batch,
30
+ createCallContext,
24
31
  deserializeResponseBody,
25
- extractAndProcessMetadata,
32
+ dispatchCall,
33
+ dispatchTypeErrors,
26
34
  fetchRemoteMethodsMetadata,
27
- getStorage,
35
+ flushMetadataCache,
36
+ forgetFetchedMetadata,
37
+ getMetadataStore,
38
+ getResponseError,
39
+ getRouteIds,
40
+ getRoutePointers,
41
+ hydrateMetadataCache,
28
42
  initClient,
29
- isMapFromRef,
30
- mapFrom,
31
- mapFromSymbol,
32
- resetStorageInstance,
33
- restoreAllDependencies,
34
- restoreFromLocalStorage,
35
- routesFlow,
43
+ inputFrom,
44
+ installMethodRows,
45
+ isInputFromRef,
46
+ isMiddlewareInScope,
47
+ purgeHydratedMetadata,
48
+ requestPersistenceWhenSilent,
49
+ requestPersistentStorage,
50
+ resetMetadataCacheState,
51
+ resetMetadataStore,
52
+ routeSucceeded,
36
53
  serializeRequestBody,
37
- storeDependencies,
38
- storeMethodsMetadata,
54
+ setApiBundled,
55
+ setMetadataStoreForTesting,
56
+ takeMetadataCacheError,
39
57
  validateSubRequest,
40
- validateSubRequests
58
+ validateSubRequests,
59
+ wasHydratedFromCache,
60
+ wireFormReplacer
41
61
  };
42
- //# sourceMappingURL=index.js.map
@@ -0,0 +1,3 @@
1
+ export { useFetchMetadata } from './src/middlewares/fetchMetadata.ts';
2
+ export { useSyncRoutes } from './src/middlewares/syncRoutes.ts';
3
+ //# sourceMappingURL=middlewares.d.ts.map
@@ -0,0 +1,6 @@
1
+ import { useFetchMetadata } from "./src/middlewares/fetchMetadata.js";
2
+ import { useSyncRoutes } from "./src/middlewares/syncRoutes.js";
3
+ export {
4
+ useFetchMetadata,
5
+ useSyncRoutes
6
+ };
@@ -0,0 +1,7 @@
1
+ import { PureFunction, InjectPureFnId, InjectBatchId } from '@mionjs/run-types';
2
+ import { RouteSubRequest, BatchBuilder, SubRequest } from './types.ts';
3
+ import { InputFromRef } from '@mionjs/core';
4
+ export declare function batch<Routes extends RouteSubRequest<any>[]>(routes: [...Routes], batchId?: InjectBatchId<Routes>): BatchBuilder<Routes>;
5
+ export declare function inputFrom<FromSR extends SubRequest<any>, MappedInput = any>(source: FromSR, mapper: PureFunction<(value: FromSR['resolvedValue']) => MappedInput>, id?: InjectPureFnId<(value: FromSR['resolvedValue']) => MappedInput>): InputFromRef<(value: FromSR['resolvedValue']) => MappedInput>;
6
+ export declare function isInputFromRef(ref: any): ref is InputFromRef<any>;
7
+ //# sourceMappingURL=batch.d.ts.map
@@ -0,0 +1,50 @@
1
+ import { RpcError } from "@mionjs/core";
2
+ function batch(routes, batchId) {
3
+ if (!routes || routes.length === 0) throw new RpcError({
4
+ type: "batch-empty-routes",
5
+ publicMessage: "batch() requires at least one route subrequest."
6
+ });
7
+ if (!batchId) throw new RpcError({
8
+ type: "batch-missing-id",
9
+ publicMessage: "batch() needs the mion build plugin (vite or next preset) to inject the batch id. Batches are compiled into the server at build time, so a client without the build cannot send one."
10
+ });
11
+ const firstSubRequest = routes[0];
12
+ if (!firstSubRequest.client) throw new RpcError({
13
+ type: "batch-missing-client",
14
+ publicMessage: "Could not extract MionClient from subrequest. Ensure subrequests are created via routes proxy."
15
+ });
16
+ const client = firstSubRequest.client;
17
+ for (let i = 1; i < routes.length; i++) if (routes[i].client !== client) throw new RpcError({
18
+ type: "batch-client-mismatch",
19
+ publicMessage: `All subrequests in a batch must use the same client instance. Subrequest at index ${i} has a different client.`
20
+ });
21
+ return { async call(setup, apiMetadata) {
22
+ return client.useBundledApi(apiMetadata), client.execute(void 0, routes, batchId, setup?.signal, setup?.timeout);
23
+ } };
24
+ }
25
+ var inputFromSymbol = /* @__PURE__ */ Symbol("InputFromRef");
26
+ function inputFrom(source, mapper, id) {
27
+ if (mapper == null) throw new Error("inputFrom() requires an inline mapper function");
28
+ if (!id) throw new Error("inputFrom() requires the mion build plugin: no pure-fn id was injected at build time, so the server has no way to know which mapper to run.");
29
+ const ref = {
30
+ inputFromSymbol,
31
+ mapperKey: id,
32
+ fromRequestId: source.id,
33
+ toRequestId: "",
34
+ paramIndex: -1,
35
+ asArg() {
36
+ return ref;
37
+ }
38
+ };
39
+ return ref;
40
+ }
41
+ function isInputFromRef(ref) {
42
+ return ref && ref.inputFromSymbol === inputFromSymbol;
43
+ }
44
+ export {
45
+ batch,
46
+ inputFrom,
47
+ isInputFromRef
48
+ };
49
+
50
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","names":[],"sources":["../../../src/batch.ts"],"sourcesContent":["/* ########\n * 2025 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {RpcError} from '@mionjs/core';\nimport type {PureFunction, InjectPureFnId, InjectBatchId} from '@mionjs/run-types';\nimport type {CallSetup, RouteSubRequest, BatchBuilder, SubRequest} from './types.ts';\nimport type {InjectedApiMetadata} from './types.ts';\nimport type {MionSubRequest} from './subRequest.ts';\nimport type {InputFromRef} from '@mionjs/core';\n\n/** Runs several routes in ONE HTTP request. The build hashes the ordered route ids into `batchId`, which\n * names the batch in the table it compiled into the server; the request carries only that id. */\nexport function batch<Routes extends RouteSubRequest<any>[]>(\n routes: [...Routes],\n batchId?: InjectBatchId<Routes>\n): BatchBuilder<Routes> {\n if (!routes || routes.length === 0) {\n throw new RpcError({\n type: 'batch-empty-routes',\n publicMessage: 'batch() requires at least one route subrequest.',\n });\n }\n if (!batchId) {\n throw new RpcError({\n type: 'batch-missing-id',\n publicMessage:\n 'batch() needs the mion build plugin (vite or next preset) to inject the batch id. ' +\n 'Batches are compiled into the server at build time, so a client without the build cannot send one.',\n });\n }\n\n const firstSubRequest = routes[0] as MionSubRequest;\n if (!firstSubRequest.client) {\n throw new RpcError({\n type: 'batch-missing-client',\n publicMessage: 'Could not extract MionClient from subrequest. Ensure subrequests are created via routes proxy.',\n });\n }\n\n const client = firstSubRequest.client;\n\n for (let i = 1; i < routes.length; i++) {\n const subRequest = routes[i] as MionSubRequest;\n if (subRequest.client !== client) {\n throw new RpcError({\n type: 'batch-client-mismatch',\n publicMessage: `All subrequests in a batch must use the same client instance. Subrequest at index ${i} has a different client.`,\n });\n }\n }\n\n return {\n // `apiMetadata` is filled by the build when routes are bundled, never by hand\n async call(setup?: CallSetup, apiMetadata?: InjectedApiMetadata) {\n client.useBundledApi(apiMetadata);\n return client.execute(undefined, routes, batchId, setup?.signal, setup?.timeout);\n },\n };\n}\n\nconst inputFromSymbol = Symbol('InputFromRef');\n\n/** Feeds the output of one route SubRequest into the input of another within a batch. The mapper EXECUTES\n * ON THE SERVER, which only runs functions its own build baked in, so nothing about the mapper travels: the\n * build extracts the inline mapper, gives the call site its registration id and ships the body in the\n * batches manifest. */\nexport function inputFrom<FromSR extends SubRequest<any>, MappedInput = any>(\n source: FromSR,\n mapper: PureFunction<(value: FromSR['resolvedValue']) => MappedInput>,\n id?: InjectPureFnId<(value: FromSR['resolvedValue']) => MappedInput>\n): InputFromRef<(value: FromSR['resolvedValue']) => MappedInput> {\n // The build rewrites this argument into the mapper's generated entry tuple, not the function the caller wrote.\n if (mapper == null) throw new Error('inputFrom() requires an inline mapper function');\n if (!id)\n throw new Error(\n 'inputFrom() requires the mion build plugin: no pure-fn id was injected at build time, ' +\n 'so the server has no way to know which mapper to run.'\n );\n const ref = {\n inputFromSymbol,\n mapperKey: id,\n fromRequestId: source.id,\n toRequestId: '',\n paramIndex: -1, // set by MionSubRequest constructor when passed as a parameter\n asArg() {\n return ref as unknown as MappedInput;\n },\n } as unknown as InputFromRef<(value: FromSR['resolvedValue']) => MappedInput>;\n return ref;\n}\n\nexport function isInputFromRef(ref: any): ref is InputFromRef<any> {\n return ref && ref.inputFromSymbol === inputFromSymbol;\n}\n"],"mappings":";AAgBA,SAAgB,MACd,QACA,SACsB;AACtB,MAAI,CAAC,UAAU,OAAO,WAAW,EAC/B,OAAM,IAAI,SAAS;AAAA,IACjB,MAAM;AAAA,IACN,eAAe;AAAA,EACjB,CAAC;AAEH,MAAI,CAAC,QACH,OAAM,IAAI,SAAS;AAAA,IACjB,MAAM;AAAA,IACN,eACE;AAAA,EAEJ,CAAC;AAGH,QAAM,kBAAkB,OAAO,CAAA;AAC/B,MAAI,CAAC,gBAAgB,OACnB,OAAM,IAAI,SAAS;AAAA,IACjB,MAAM;AAAA,IACN,eAAe;AAAA,EACjB,CAAC;AAGH,QAAM,SAAS,gBAAgB;AAE/B,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,IAEjC,KADmB,OAAO,CAAA,EACX,WAAW,OACxB,OAAM,IAAI,SAAS;AAAA,IACjB,MAAM;AAAA,IACN,eAAe,qFAAqF,CAAA;AAAA,EACtG,CAAC;AAIL,SAAO,EAEL,MAAM,KAAK,OAAmB,aAAmC;AAC/D,kBAAO,cAAc,WAAW,GACzB,OAAO,QAAQ,QAAW,QAAQ,SAAS,OAAO,QAAQ,OAAO,OAAO;AAAA,EACjF,EACF;AACF;AAEA,IAAM,kBAAkB,uBAAO,cAAc;AAM7C,SAAgB,UACd,QACA,QACA,IAC+D;AAE/D,MAAI,UAAU,KAAM,OAAM,IAAI,MAAM,gDAAgD;AACpF,MAAI,CAAC,GACH,OAAM,IAAI,MACR,6IAEF;AACF,QAAM,MAAM;AAAA,IACV;AAAA,IACA,WAAW;AAAA,IACX,eAAe,OAAO;AAAA,IACtB,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAgB,eAAe,KAAoC;AACjE,SAAO,OAAO,IAAI,oBAAoB;AACxC"}
@@ -0,0 +1,6 @@
1
+ import { ClientCallContext, ClientOptions, RouteSubRequest, SubRequest } from './types.ts';
2
+ export declare function createCallContext(options: ClientOptions, route?: RouteSubRequest<any>, batchSubRequests?: RouteSubRequest<any>[], batchId?: string, signal?: AbortSignal): ClientCallContext;
3
+ export declare function addSubRequest(context: ClientCallContext, subRequest: SubRequest<any>): void;
4
+ export declare function getRouteIds(context: ClientCallContext): string[];
5
+ export declare function getRoutePointers(context: ClientCallContext): string[][];
6
+ //# sourceMappingURL=callContext.d.ts.map
@@ -0,0 +1,34 @@
1
+ import { MION_BATCH_KEY, getRoutePath } from "@mionjs/core";
2
+ function createCallContext(options, route, batchSubRequests, batchId, signal) {
3
+ const isBatch = !!batchSubRequests && batchSubRequests.length > 0, context = {
4
+ path: isBatch ? `${getRoutePath([MION_BATCH_KEY], options)}?id=${encodeURIComponent(batchId ?? "")}` : route ? getRoutePath(route.pointer, options) : "no-route",
5
+ requestId: isBatch ? MION_BATCH_KEY : route ? route.id : "no-route",
6
+ route,
7
+ batchSubRequests,
8
+ subRequestList: {},
9
+ options,
10
+ signal,
11
+ httpResponse: void 0,
12
+ response: {},
13
+ thrownErrorIds: /* @__PURE__ */ new Set()
14
+ };
15
+ return isBatch ? batchSubRequests.forEach((subRequest) => addSubRequest(context, subRequest)) : route && addSubRequest(context, route), context;
16
+ }
17
+ function addSubRequest(context, subRequest) {
18
+ if (subRequest.isResolved) throw new Error(`SubRequest ${subRequest.id} is already resolved`);
19
+ context.subRequestList[subRequest.id] = subRequest;
20
+ }
21
+ function getRouteIds(context) {
22
+ return context.batchSubRequests && context.batchSubRequests.length > 0 ? context.batchSubRequests.map((sr) => sr.id) : [context.requestId];
23
+ }
24
+ function getRoutePointers(context) {
25
+ return context.batchSubRequests && context.batchSubRequests.length > 0 ? context.batchSubRequests.map((sr) => sr.pointer) : context.route ? [context.route.pointer] : [];
26
+ }
27
+ export {
28
+ addSubRequest,
29
+ createCallContext,
30
+ getRouteIds,
31
+ getRoutePointers
32
+ };
33
+
34
+ //# sourceMappingURL=callContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"callContext.js","names":[],"sources":["../../../src/callContext.ts"],"sourcesContent":["/* ########\n * 2026 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {MION_BATCH_KEY, getRoutePath} from '@mionjs/core';\nimport type {ClientCallContext, ClientOptions, RouteSubRequest, SubRequest} from './types.ts';\n\n/** `batchId` is build-injected and only ends up in the batch path */\nexport function createCallContext(\n options: ClientOptions,\n route?: RouteSubRequest<any>,\n batchSubRequests?: RouteSubRequest<any>[],\n batchId?: string,\n signal?: AbortSignal\n): ClientCallContext {\n const isBatch = !!batchSubRequests && batchSubRequests.length > 0;\n const context: ClientCallContext = {\n path: isBatch\n ? `${getRoutePath([MION_BATCH_KEY], options)}?id=${encodeURIComponent(batchId ?? '')}`\n : route\n ? getRoutePath(route.pointer, options)\n : 'no-route',\n requestId: isBatch ? MION_BATCH_KEY : route ? route.id : 'no-route',\n route,\n batchSubRequests,\n subRequestList: {},\n options,\n signal,\n httpResponse: undefined,\n response: {},\n thrownErrorIds: new Set<string>(),\n };\n if (isBatch) batchSubRequests.forEach((subRequest) => addSubRequest(context, subRequest));\n else if (route) addSubRequest(context, route);\n return context;\n}\n\nexport function addSubRequest(context: ClientCallContext, subRequest: SubRequest<any>): void {\n if (subRequest.isResolved) throw new Error(`SubRequest ${subRequest.id} is already resolved`);\n context.subRequestList[subRequest.id] = subRequest;\n}\n\nexport function getRouteIds(context: ClientCallContext): string[] {\n if (context.batchSubRequests && context.batchSubRequests.length > 0) return context.batchSubRequests.map((sr) => sr.id);\n return [context.requestId];\n}\n\n/** Same order as getRouteIds() */\nexport function getRoutePointers(context: ClientCallContext): string[][] {\n if (context.batchSubRequests && context.batchSubRequests.length > 0) return context.batchSubRequests.map((sr) => sr.pointer);\n return context.route ? [context.route.pointer] : [];\n}\n"],"mappings":";AAWA,SAAgB,kBACd,SACA,OACA,kBACA,SACA,QACmB;AACnB,QAAM,UAAU,CAAC,CAAC,oBAAoB,iBAAiB,SAAS,GAC1D,UAA6B;AAAA,IACjC,MAAM,UACF,GAAG,aAAa,CAAC,cAAc,GAAG,OAAO,CAAA,OAAQ,mBAAmB,WAAW,EAAE,CAAA,KACjF,QACE,aAAa,MAAM,SAAS,OAAO,IACnC;AAAA,IACN,WAAW,UAAU,iBAAiB,QAAQ,MAAM,KAAK;AAAA,IACzD;AAAA,IACA;AAAA,IACA,gBAAgB,CAAC;AAAA,IACjB;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,UAAU,CAAC;AAAA,IACX,gBAAgB,oBAAI,IAAY;AAAA,EAClC;AACA,SAAI,UAAS,iBAAiB,QAAA,CAAS,eAAe,cAAc,SAAS,UAAU,CAAC,IAC/E,SAAO,cAAc,SAAS,KAAK,GACrC;AACT;AAEA,SAAgB,cAAc,SAA4B,YAAmC;AAC3F,MAAI,WAAW,WAAY,OAAM,IAAI,MAAM,cAAc,WAAW,EAAA,sBAAwB;AAC5F,UAAQ,eAAe,WAAW,EAAA,IAAM;AAC1C;AAEA,SAAgB,YAAY,SAAsC;AAChE,SAAI,QAAQ,oBAAoB,QAAQ,iBAAiB,SAAS,IAAU,QAAQ,iBAAiB,IAAA,CAAK,OAAO,GAAG,EAAE,IAC/G,CAAC,QAAQ,SAAS;AAC3B;AAGA,SAAgB,iBAAiB,SAAwC;AACvE,SAAI,QAAQ,oBAAoB,QAAQ,iBAAiB,SAAS,IAAU,QAAQ,iBAAiB,IAAA,CAAK,OAAO,GAAG,OAAO,IACpH,QAAQ,QAAQ,CAAC,QAAQ,MAAM,OAAO,IAAI,CAAC;AACpD"}
@@ -1,31 +1,26 @@
1
- import { ClientOptions, MiddlewareSubRequest, InitClientOptions, RouteSubRequest, SubRequest, ClientRoutes, ClientMiddleFns } from './types.ts';
1
+ import { ClientOptions, InjectedApiMetadata, InitClientOptions, RouteSubRequest, SubRequest, ClientRoutes, ClientMiddlewares } from './types.ts';
2
2
  import { RemoteApi } from '@mionjs/router';
3
+ import { InjectBuildVersion } from '@mionjs/run-types';
3
4
  import { RunTypeError } from '@mionjs/core';
4
5
  import { HandlersRegistry } from './lib/handlersRegistry.ts';
5
- export declare function initClient<RM extends RemoteApi>(options: InitClientOptions): {
6
+ export declare function setApiBundled(): void;
7
+ export declare function initClient<RM extends RemoteApi>(options: InitClientOptions, buildVersion?: InjectBuildVersion<RM>): {
6
8
  client: MionClient;
7
9
  routes: ClientRoutes<RM>;
8
- middleFns: ClientMiddleFns<RM>;
10
+ middlewares: ClientMiddlewares<RM>;
9
11
  };
10
12
  export declare class MionClient {
11
13
  private clientOptions;
12
14
  readonly handlersRegistry: HandlersRegistry;
13
- readonly prefilledMiddleFnsCache: Map<string, SubRequest<any>>;
14
- private pendingPrefills;
15
15
  private globalAbortController;
16
16
  private get globalSignal();
17
17
  constructor(clientOptions: ClientOptions);
18
+ get isApiBundled(): boolean;
19
+ useBundledApi(apiMetadata: InjectedApiMetadata | undefined): void;
18
20
  abort(): void;
19
21
  private composeSignal;
20
- execute(routeSubRequest?: RouteSubRequest<any>, workflowSubRequests?: RouteSubRequest<any>[], middleFnsRecord?: Record<string, MiddlewareSubRequest<any>>, signal?: AbortSignal, timeout?: number): Promise<any>;
21
- private executeRequest;
22
- private getRouteIds;
23
- private getAllMiddleFnsFromRequest;
24
- private processMiddleFnsResponses;
25
- private buildResult;
22
+ execute(routeSubRequest?: RouteSubRequest<any>, batchSubRequests?: RouteSubRequest<any>[], batchId?: string, signal?: AbortSignal, timeout?: number): Promise<any>;
26
23
  typeErrors<List extends SubRequest<any>[]>(...subRequest: List): Promise<RunTypeError[]>;
27
- prefill<List extends MiddlewareSubRequest<any>[]>(...subRequest: List): Promise<void>;
28
- removePrefill<List extends MiddlewareSubRequest<any>[]>(...subRequest: List): Promise<void>;
29
24
  destroy(): void;
30
25
  }
31
26
  //# sourceMappingURL=client.d.ts.map