@mionjs/client 0.8.4-alpha.0 → 0.8.6

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 (77) hide show
  1. package/.dist/cjs/index.cjs +1 -1
  2. package/.dist/cjs/index.d.ts +1 -1
  3. package/.dist/cjs/src/client.cjs +1 -1
  4. package/.dist/cjs/src/client.cjs.map +1 -1
  5. package/.dist/cjs/src/client.d.ts +8 -6
  6. package/.dist/cjs/src/constants.cjs +1 -1
  7. package/.dist/cjs/src/constants.cjs.map +1 -1
  8. package/.dist/cjs/src/constants.d.ts +1 -1
  9. package/.dist/cjs/src/lib/clientMethodsMetadata.cjs +1 -1
  10. package/.dist/cjs/src/lib/clientMethodsMetadata.cjs.map +1 -1
  11. package/.dist/cjs/src/lib/clientMethodsMetadata.d.ts +7 -3
  12. package/.dist/cjs/src/lib/fetchRemoteMethodsMetadata.cjs +2 -0
  13. package/.dist/cjs/src/lib/fetchRemoteMethodsMetadata.cjs.map +1 -0
  14. package/.dist/cjs/src/lib/fetchRemoteMethodsMetadata.d.ts +2 -0
  15. package/.dist/cjs/src/lib/serializer.cjs +1 -1
  16. package/.dist/cjs/src/lib/serializer.cjs.map +1 -1
  17. package/.dist/cjs/src/lib/serializer.d.ts +2 -1
  18. package/.dist/cjs/src/lib/testUtils.cjs +1 -1
  19. package/.dist/cjs/src/lib/testUtils.cjs.map +1 -1
  20. package/.dist/cjs/src/request.cjs +1 -1
  21. package/.dist/cjs/src/request.cjs.map +1 -1
  22. package/.dist/cjs/src/request.d.ts +10 -4
  23. package/.dist/cjs/src/routesFlow.cjs +1 -1
  24. package/.dist/cjs/src/routesFlow.cjs.map +1 -1
  25. package/.dist/cjs/src/routesFlow.d.ts +2 -2
  26. package/.dist/cjs/src/subRequest.cjs +1 -1
  27. package/.dist/cjs/src/subRequest.cjs.map +1 -1
  28. package/.dist/cjs/src/subRequest.d.ts +4 -5
  29. package/.dist/cjs/src/types.d.ts +54 -26
  30. package/.dist/esm/index.d.ts +1 -1
  31. package/.dist/esm/index.js +5 -4
  32. package/.dist/esm/src/client.d.ts +8 -6
  33. package/.dist/esm/src/client.js +22 -17
  34. package/.dist/esm/src/client.js.map +1 -1
  35. package/.dist/esm/src/constants.d.ts +1 -1
  36. package/.dist/esm/src/constants.js +1 -1
  37. package/.dist/esm/src/constants.js.map +1 -1
  38. package/.dist/esm/src/lib/clientMethodsMetadata.d.ts +7 -3
  39. package/.dist/esm/src/lib/clientMethodsMetadata.js +30 -47
  40. package/.dist/esm/src/lib/clientMethodsMetadata.js.map +1 -1
  41. package/.dist/esm/src/lib/fetchRemoteMethodsMetadata.d.ts +2 -0
  42. package/.dist/esm/src/lib/fetchRemoteMethodsMetadata.js +31 -0
  43. package/.dist/esm/src/lib/fetchRemoteMethodsMetadata.js.map +1 -0
  44. package/.dist/esm/src/lib/serializer.d.ts +2 -1
  45. package/.dist/esm/src/lib/serializer.js +87 -54
  46. package/.dist/esm/src/lib/serializer.js.map +1 -1
  47. package/.dist/esm/src/lib/testUtils.js +3 -37
  48. package/.dist/esm/src/lib/testUtils.js.map +1 -1
  49. package/.dist/esm/src/request.d.ts +10 -4
  50. package/.dist/esm/src/request.js +105 -48
  51. package/.dist/esm/src/request.js.map +1 -1
  52. package/.dist/esm/src/routesFlow.d.ts +2 -2
  53. package/.dist/esm/src/routesFlow.js +9 -5
  54. package/.dist/esm/src/routesFlow.js.map +1 -1
  55. package/.dist/esm/src/subRequest.d.ts +4 -5
  56. package/.dist/esm/src/subRequest.js +7 -13
  57. package/.dist/esm/src/subRequest.js.map +1 -1
  58. package/.dist/esm/src/types.d.ts +54 -26
  59. package/package.json +8 -8
  60. package/.dist/cjs/_virtual/jit-fns.cjs +0 -319
  61. package/.dist/cjs/_virtual/jit-fns.cjs.map +0 -1
  62. package/.dist/cjs/_virtual/pure-fns.cjs +0 -56
  63. package/.dist/cjs/_virtual/pure-fns.cjs.map +0 -1
  64. package/.dist/cjs/_virtual/router-cache.cjs +0 -2
  65. package/.dist/cjs/_virtual/router-cache.cjs.map +0 -1
  66. package/.dist/cjs/src/aot/aotCaches.cjs +0 -2
  67. package/.dist/cjs/src/aot/aotCaches.cjs.map +0 -1
  68. package/.dist/cjs/src/aot/aotCaches.d.ts +0 -5
  69. package/.dist/esm/_virtual/jit-fns.js +0 -1395
  70. package/.dist/esm/_virtual/jit-fns.js.map +0 -1
  71. package/.dist/esm/_virtual/pure-fns.js +0 -109
  72. package/.dist/esm/_virtual/pure-fns.js.map +0 -1
  73. package/.dist/esm/_virtual/router-cache.js +0 -5
  74. package/.dist/esm/_virtual/router-cache.js.map +0 -1
  75. package/.dist/esm/src/aot/aotCaches.d.ts +0 -5
  76. package/.dist/esm/src/aot/aotCaches.js +0 -16
  77. package/.dist/esm/src/aot/aotCaches.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"subRequest.js","sources":["../../../src/subRequest.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 {RunTypeError} from '@mionjs/core';\nimport type {\n CallWithMiddleFnsResult,\n HSubRequest,\n RequestErrors,\n Result,\n RSubRequest,\n SubRequest,\n WorkflowResult,\n} from './types.ts';\nimport type {MapFromServerFnRef} from '@mionjs/core';\nimport type {MionClient} from './client.ts';\nimport {TypedEvent} from './lib/typedEvent.ts';\nimport {isMapFromRef} from './routesFlow.ts';\n\n/** Implementation of both RouteSubRequest and MiddleFnSubRequest interfaces */\nexport class MionSubRequest<S = any, E extends RpcError<string, any> = any> implements RSubRequest<any>, HSubRequest<any> {\n pointer: string[];\n id: string;\n isResolved: boolean = false;\n params: any[];\n resolvedValue?: S;\n error?: E;\n serializedParams?: any[];\n mappings: MapFromServerFnRef[] = [];\n\n constructor(\n parentProps: string[],\n handlerId: string,\n argArray: any[],\n readonly client: MionClient\n ) {\n this.pointer = [...parentProps];\n this.id = handlerId;\n this.params = argArray.map((arg, index) => {\n if (isMapFromRef(arg)) {\n arg.toRequestId = this.id;\n arg.paramIndex = index;\n this.mappings.push(arg);\n return null;\n }\n return arg;\n });\n }\n\n /** Prefills MiddleFn's parameters and returns TypedEvent for event handler registration */\n prefill(): TypedEvent<S, E> {\n const typedEvent = new TypedEvent<S, E>(this.id, this.client.handlersRegistry);\n\n this.client.prefill(this as HSubRequest<any>).catch((errors: RequestErrors) => {\n console.error('Prefill error:', findSubRequestError(this, errors));\n });\n\n return typedEvent;\n }\n\n /** Removes prefilled value and clears any registered error handlers for this middleFn */\n removePrefill(): Promise<void> {\n this.client.handlersRegistry.clearHandlers(this.id);\n return this.client.removePrefill(this as HSubRequest<any>);\n }\n\n /** Calls a remote route and returns a Result 4-tuple with full typing preserved */\n call(): Promise<Result<S, E>> {\n return this.client.executeCall(this as unknown as RSubRequest<any>);\n }\n\n /** Calls a remote route with middleFns and returns a fully-typed 4-tuple result */\n callWithMiddleFns<H extends Record<string, HSubRequest<any>>>(middleFns: H): Promise<CallWithMiddleFnsResult<S, E, H>> {\n if (Object.keys(middleFns).length === 0) {\n throw new Error(\n 'callWithMiddleFns requires at least one middleFn. Use call() instead for requests without middleFns.'\n );\n }\n return this.client.executeCallWithMiddleFns(this as RSubRequest<any>, middleFns) as Promise<\n CallWithMiddleFnsResult<S, E, H>\n >;\n }\n\n /** Calls this route as part of a routesFlow with other routes in a single HTTP request */\n async callWithWorkflow<OtherRoutes extends RSubRequest<any>[], H extends Record<string, HSubRequest<any>>>(\n otherRoutes: [...OtherRoutes],\n middleFns?: H\n ): Promise<WorkflowResult<[RSubRequest<any>, ...OtherRoutes], H>> {\n const allRoutes = [this as unknown as RSubRequest<any>, ...otherRoutes];\n const [results, errors, middleFnResults, middleFnErrors] = await this.client.executeCallWithWorkflow(\n allRoutes,\n middleFns ?? ({} as H)\n );\n const emptyResults = allRoutes.map(() => undefined);\n const emptyErrors = allRoutes.map(() => undefined);\n return [results ?? emptyResults, errors ?? emptyErrors, middleFnResults, middleFnErrors] as WorkflowResult<\n [RSubRequest<any>, ...OtherRoutes],\n H\n >;\n }\n\n /** Validates parameters and returns type errors */\n typeErrors(): Promise<RunTypeError[]> {\n return this.client\n .typeErrors(this as SubRequest<any>)\n .catch((errors: RequestErrors) => Promise.reject(findSubRequestError(this, errors)));\n }\n}\n\n/** Finds the most relevant error from the errors map for a given sub-request */\nexport function findSubRequestError(subRequest: SubRequest<any>, errors: RequestErrors): RpcError<string> {\n const specificError = errors.get(subRequest.id);\n if (specificError) return specificError;\n\n const firstError = errors.values().next().value;\n if (firstError) return firstError;\n\n return new RpcError({\n type: 'unknown-error',\n publicMessage: 'An unknown error occurred',\n });\n}\n"],"names":[],"mappings":";;;MAwBa,eAAc;AAAA,EAcV;AAAA,EAbb;AAAA,EACA;AAAA,EACA,aAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAiC,CAAA;AAAA,EAEjC,YACI,aACA,WACA,UACS,QAAkB;AAAlB,SAAA,SAAA,QAET,KAAK,UAAU,CAAC,GAAG,WAAW,GAC9B,KAAK,KAAK,WACV,KAAK,SAAS,SAAS,IAAI,CAAC,KAAK,UACzB,aAAa,GAAG,KAChB,IAAI,cAAc,KAAK,IACvB,IAAI,aAAa,OACjB,KAAK,SAAS,KAAK,GAAG,GACf,QAEJ,GACV;AAAA,EACL;AAAA;AAAA,EAGA,UAAO;AACH,UAAM,aAAa,IAAI,WAAiB,KAAK,IAAI,KAAK,OAAO,gBAAgB;AAE7E,gBAAK,OAAO,QAAQ,IAAwB,EAAE,MAAM,CAAC,WAAyB;AAC1E,cAAQ,MAAM,kBAAkB,oBAAoB,MAAM,MAAM,CAAC;AAAA,IACrE,CAAC,GAEM;AAAA,EACX;AAAA;AAAA,EAGA,gBAAa;AACT,gBAAK,OAAO,iBAAiB,cAAc,KAAK,EAAE,GAC3C,KAAK,OAAO,cAAc,IAAwB;AAAA,EAC7D;AAAA;AAAA,EAGA,OAAI;AACA,WAAO,KAAK,OAAO,YAAY,IAAmC;AAAA,EACtE;AAAA;AAAA,EAGA,kBAA8D,WAAY;AACtE,QAAI,OAAO,KAAK,SAAS,EAAE,WAAW;AAClC,YAAM,IAAI,MACN,sGAAsG;AAG9G,WAAO,KAAK,OAAO,yBAAyB,MAA0B,SAAS;AAAA,EAGnF;AAAA;AAAA,EAGA,MAAM,iBACF,aACA,WAAa;AAEb,UAAM,YAAY,CAAC,MAAqC,GAAG,WAAW,GAChE,CAAC,SAAS,QAAQ,iBAAiB,cAAc,IAAI,MAAM,KAAK,OAAO,wBACzE,WACA,aAAc,CAAA,CAAQ,GAEpB,eAAe,UAAU,IAAI,MAAA;AAAA,KAAe,GAC5C,cAAc,UAAU,IAAI,MAAA;AAAA,KAAe;AACjD,WAAO,CAAC,WAAW,cAAc,UAAU,aAAa,iBAAiB,cAAc;AAAA,EAI3F;AAAA;AAAA,EAGA,aAAU;AACN,WAAO,KAAK,OACP,WAAW,IAAuB,EAClC,MAAM,CAAC,WAA0B,QAAQ,OAAO,oBAAoB,MAAM,MAAM,CAAC,CAAC;AAAA,EAC3F;AACH;AAGK,SAAU,oBAAoB,YAA6B,QAAqB;AAClF,QAAM,gBAAgB,OAAO,IAAI,WAAW,EAAE;AAC9C,MAAI;AAAe,WAAO;AAE1B,QAAM,aAAa,OAAO,OAAA,EAAS,OAAO;AAC1C,SAAI,cAEG,IAAI,SAAS;AAAA,IAChB,MAAM;AAAA,IACN,eAAe;AAAA,EAAA,CAClB;AACL;"}
1
+ {"version":3,"file":"subRequest.js","sources":["../../../src/subRequest.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 {RunTypeError} from '@mionjs/core';\nimport type {CallSetup, MiddlewareSubRequest, RequestErrors, RouteSubRequest, SubRequest} from './types.ts';\nimport type {MapFromServerFnRef} from '@mionjs/core';\nimport type {MionClient} from './client.ts';\nimport {TypedEvent} from './lib/typedEvent.ts';\nimport {isMapFromRef} from './routesFlow.ts';\n\n/** Implementation of both RouteSubRequest and MiddleFnSubRequest interfaces */\nexport class MionSubRequest<S = any, E extends RpcError<string, any> = any>\n implements RouteSubRequest<any>, MiddlewareSubRequest<any>\n{\n pointer: string[];\n id: string;\n isResolved: boolean = false;\n params: any[];\n resolvedValue?: S;\n error?: E;\n serializedParams?: any[];\n mappings: MapFromServerFnRef[] = [];\n\n constructor(\n parentProps: string[],\n handlerId: string,\n argArray: any[],\n readonly client: MionClient\n ) {\n this.pointer = [...parentProps];\n this.id = handlerId;\n this.params = argArray.map((arg, index) => {\n if (isMapFromRef(arg)) {\n arg.toRequestId = this.id;\n arg.paramIndex = index;\n this.mappings.push(arg);\n return null;\n }\n return arg;\n });\n }\n\n /** Prefills MiddleFn's parameters and returns TypedEvent for event handler registration */\n prefill(): TypedEvent<S, E> {\n const typedEvent = new TypedEvent<S, E>(this.id, this.client.handlersRegistry);\n\n this.client.prefill(this as MiddlewareSubRequest<any>).catch((errors: RequestErrors) => {\n console.error('Prefill error:', findSubRequestError(this, errors));\n });\n\n return typedEvent;\n }\n\n /** Removes prefilled value and clears any registered error handlers for this middleFn */\n removePrefill(): Promise<void> {\n this.client.handlersRegistry.clearHandlers(this.id);\n return this.client.removePrefill(this as MiddlewareSubRequest<any>);\n }\n\n /** Calls a remote route with optional setup (middleFns, otherRoutes, signal, timeout) */\n call(setup?: CallSetup<any, any>): Promise<any> {\n const signal = setup?.signal;\n const timeout = setup?.timeout;\n if (!setup || (!setup.otherRoutes && !setup.middleFns)) {\n return this.client.execute(this as unknown as RouteSubRequest<any>, undefined, undefined, signal, timeout);\n }\n if (setup.otherRoutes && setup.otherRoutes.length > 0) {\n return this.executeWithOtherRoutes(setup.otherRoutes, setup.middleFns, signal, timeout);\n }\n return this.client.execute(this as unknown as RouteSubRequest<any>, undefined, setup.middleFns, signal, timeout);\n }\n\n private async executeWithOtherRoutes(\n otherRoutes: RouteSubRequest<any>[],\n middleFns?: Record<string, MiddlewareSubRequest<any>>,\n signal?: AbortSignal,\n timeout?: number\n ): Promise<any> {\n const allRoutes = [this as unknown as RouteSubRequest<any>, ...otherRoutes];\n const [results, errors, mfR, mfE] = await this.client.execute(undefined, allRoutes, middleFns ?? {}, signal, timeout);\n const emptyResults = allRoutes.map(() => undefined);\n const emptyErrors = allRoutes.map(() => undefined);\n return [results ?? emptyResults, errors ?? emptyErrors, mfR, mfE];\n }\n\n /** Validates parameters and returns type errors */\n typeErrors(): Promise<RunTypeError[]> {\n return this.client\n .typeErrors(this as SubRequest<any>)\n .catch((errors: RequestErrors) => Promise.reject(findSubRequestError(this, errors)));\n }\n}\n\n/** Finds the most relevant error from the errors map for a given sub-request */\nexport function findSubRequestError(subRequest: SubRequest<any>, errors: RequestErrors): RpcError<string> {\n const specificError = errors.get(subRequest.id);\n if (specificError) return specificError;\n\n const firstError = errors.values().next().value;\n if (firstError) return firstError;\n\n return new RpcError({\n type: 'unknown-error',\n publicMessage: 'An unknown error occurred',\n });\n}\n"],"names":[],"mappings":";;;MAgBa,eAAc;AAAA,EAgBV;AAAA,EAbb;AAAA,EACA;AAAA,EACA,aAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAiC,CAAA;AAAA,EAEjC,YACI,aACA,WACA,UACS,QAAkB;AAAlB,SAAA,SAAA,QAET,KAAK,UAAU,CAAC,GAAG,WAAW,GAC9B,KAAK,KAAK,WACV,KAAK,SAAS,SAAS,IAAI,CAAC,KAAK,UACzB,aAAa,GAAG,KAChB,IAAI,cAAc,KAAK,IACvB,IAAI,aAAa,OACjB,KAAK,SAAS,KAAK,GAAG,GACf,QAEJ,GACV;AAAA,EACL;AAAA;AAAA,EAGA,UAAO;AACH,UAAM,aAAa,IAAI,WAAiB,KAAK,IAAI,KAAK,OAAO,gBAAgB;AAE7E,gBAAK,OAAO,QAAQ,IAAiC,EAAE,MAAM,CAAC,WAAyB;AACnF,cAAQ,MAAM,kBAAkB,oBAAoB,MAAM,MAAM,CAAC;AAAA,IACrE,CAAC,GAEM;AAAA,EACX;AAAA;AAAA,EAGA,gBAAa;AACT,gBAAK,OAAO,iBAAiB,cAAc,KAAK,EAAE,GAC3C,KAAK,OAAO,cAAc,IAAiC;AAAA,EACtE;AAAA;AAAA,EAGA,KAAK,OAA2B;AAC5B,UAAM,SAAS,OAAO,QAChB,UAAU,OAAO;AACvB,WAAI,CAAC,SAAU,CAAC,MAAM,eAAe,CAAC,MAAM,YACjC,KAAK,OAAO,QAAQ,MAAyC,QAAW,QAAW,QAAQ,OAAO,IAEzG,MAAM,eAAe,MAAM,YAAY,SAAS,IACzC,KAAK,uBAAuB,MAAM,aAAa,MAAM,WAAW,QAAQ,OAAO,IAEnF,KAAK,OAAO,QAAQ,MAAyC,QAAW,MAAM,WAAW,QAAQ,OAAO;AAAA,EACnH;AAAA,EAEQ,MAAM,uBACV,aACA,WACA,QACA,SAAgB;AAEhB,UAAM,YAAY,CAAC,MAAyC,GAAG,WAAW,GACpE,CAAC,SAAS,QAAQ,KAAK,GAAG,IAAI,MAAM,KAAK,OAAO,QAAQ,QAAW,WAAW,aAAa,CAAA,GAAI,QAAQ,OAAO,GAC9G,eAAe,UAAU,IAAI,MAAA;AAAA,KAAe,GAC5C,cAAc,UAAU,IAAI,MAAA;AAAA,KAAe;AACjD,WAAO,CAAC,WAAW,cAAc,UAAU,aAAa,KAAK,GAAG;AAAA,EACpE;AAAA;AAAA,EAGA,aAAU;AACN,WAAO,KAAK,OACP,WAAW,IAAuB,EAClC,MAAM,CAAC,WAA0B,QAAQ,OAAO,oBAAoB,MAAM,MAAM,CAAC,CAAC;AAAA,EAC3F;AACH;AAGK,SAAU,oBAAoB,YAA6B,QAAqB;AAClF,QAAM,gBAAgB,OAAO,IAAI,WAAW,EAAE;AAC9C,MAAI;AAAe,WAAO;AAE1B,QAAM,aAAa,OAAO,OAAA,EAAS,OAAO;AAC1C,SAAI,cAEG,IAAI,SAAS;AAAA,IAChB,MAAM;AAAA,IACN,eAAe;AAAA,EAAA,CAClB;AACL;"}
@@ -1,20 +1,10 @@
1
1
  import { RpcError, CoreRouterOptions, Prettify, RunTypeError, SerializerMode, ValidationError } from '@mionjs/core';
2
2
  import { PublicHeadersFn, PublicMiddleFn, RemoteApi, PublicRoute } from '@mionjs/router';
3
3
  import { TypedEvent } from './lib/typedEvent.ts';
4
- export type Result<RouteSuccess, RouteError, MiddleFnsResults extends Record<string, unknown> = Record<string, unknown>, MiddleFnsErrors extends Record<string, RpcError<string, unknown>> = Record<string, RpcError<string, unknown>>> = [RouteSuccess | undefined, RouteError | undefined, MiddleFnsResults | undefined, MiddleFnsErrors | undefined];
5
- export type MiddleFnSuccess<H> = H extends HSubRequest<infer PH> ? HandlerSuccessResponse<PH> : never;
6
- export type MiddleFnError<H> = H extends HSubRequest<infer PH> ? Simplify<HandlerErrors<PH>> : never;
7
- export type CallWithMiddleFnsResult<RouteSuccess, RouteError, MiddleFns extends Record<string, HSubRequest<any>>> = [
8
- RouteSuccess | undefined,
9
- RouteError | ValidationError | undefined,
10
- {
11
- [K in keyof MiddleFns]?: MiddleFnSuccess<MiddleFns[K]>;
12
- } | undefined,
13
- {
14
- [K in keyof MiddleFns]?: MiddleFnError<MiddleFns[K]>;
15
- } | undefined
16
- ];
17
- export type WorkflowResult<Routes extends RSubRequest<any>[], MiddleFns extends Record<string, HSubRequest<any>> = Record<string, HSubRequest<any>>> = [
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>>> = [
18
8
  WorkflowRouteResults<Routes>,
19
9
  WorkflowRouteErrors<Routes>,
20
10
  {
@@ -24,11 +14,11 @@ export type WorkflowResult<Routes extends RSubRequest<any>[], MiddleFns extends
24
14
  [K in keyof MiddleFns]?: MiddleFnError<MiddleFns[K]>;
25
15
  } | undefined
26
16
  ];
27
- export type WorkflowRouteResults<Routes extends RSubRequest<any>[]> = {
28
- [K in keyof Routes]: Routes[K] extends RSubRequest<infer PH> ? HandlerSuccessResponse<PH> | undefined : never;
17
+ export type WorkflowRouteResults<Routes extends RouteSubRequest<any>[]> = {
18
+ [K in keyof Routes]: Routes[K] extends RouteSubRequest<infer PH> ? HandlerSuccessResponse<PH> | undefined : never;
29
19
  };
30
- export type WorkflowRouteErrors<Routes extends RSubRequest<any>[]> = {
31
- [K in keyof Routes]: Routes[K] extends RSubRequest<infer PH> ? Simplify<HandlerErrors<PH>> | undefined : never;
20
+ export type WorkflowRouteErrors<Routes extends RouteSubRequest<any>[]> = {
21
+ [K in keyof Routes]: Routes[K] extends RouteSubRequest<infer PH> ? Simplify<HandlerErrors<PH>> | undefined : never;
32
22
  };
33
23
  export interface ClientOptions extends CoreRouterOptions {
34
24
  baseURL: string;
@@ -38,6 +28,7 @@ export interface ClientOptions extends CoreRouterOptions {
38
28
  fetchOptions: RequestInit;
39
29
  validateParams: boolean;
40
30
  serializer: SerializerMode;
31
+ timeout?: number;
41
32
  }
42
33
  type PublicHandler = (...args: any[]) => Promise<any>;
43
34
  type PublicMethod = PublicRoute | PublicMiddleFn | PublicHeadersFn;
@@ -83,31 +74,68 @@ export interface SubRequest<PH extends PublicHandler> {
83
74
  error?: HandlerFailResponse<PH>;
84
75
  serializedParams?: any[];
85
76
  }
86
- export interface RSubRequest<PH extends PublicHandler> extends SubRequest<PH> {
77
+ export interface CallSetup<H extends Record<string, MiddlewareSubRequest<any>> = Record<string, never>, OtherRoutes extends RouteSubRequest<any>[] = []> {
78
+ middleFns?: H;
79
+ otherRoutes?: [...OtherRoutes];
80
+ signal?: AbortSignal;
81
+ timeout?: number;
82
+ }
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>>;
94
+ }
95
+ export interface RouteSubRequest<PH extends PublicHandler> extends SubRequest<PH> {
87
96
  typeErrors: () => Promise<RunTypeError[]>;
88
- call: () => Promise<Result<HandlerSuccessResponse<PH>, Simplify<HandlerErrors<PH>>, Record<string, unknown>, Record<string, RpcError<string, unknown> | ValidationError>>>;
89
- callWithMiddleFns: <H extends Record<string, HSubRequest<any>>>(middleFns: H) => Promise<CallWithMiddleFnsResult<HandlerSuccessResponse<PH>, Simplify<HandlerErrors<PH>>, H>>;
90
- callWithWorkflow: <OtherRoutes extends RSubRequest<any>[], H extends Record<string, HSubRequest<any>>>(otherRoutes: [...OtherRoutes], middleFns?: H) => Promise<WorkflowResult<any, H>>;
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>>;
91
119
  }
92
- export interface HSubRequest<PH extends PublicHandler> extends SubRequest<PH> {
120
+ export interface MiddlewareSubRequest<PH extends PublicHandler> extends SubRequest<PH> {
93
121
  typeErrors: () => Promise<RunTypeError[]>;
94
122
  prefill: () => TypedEvent<HandlerSuccessResponse<PH>, Simplify<HandlerErrors<PH>>>;
95
123
  removePrefill: () => Promise<void>;
96
124
  }
97
125
  export type NonClientRoute = never | PublicMiddleFn | PublicHeadersFn;
98
126
  export type ClientRoutes<RA extends RemoteApi> = Prettify<{
99
- [Property in keyof RA as RA[Property] extends NonClientRoute ? never : Property]: RA[Property] extends PublicRoute ? (...params: Parameters<RA[Property]['handler']>) => RSubRequest<RA[Property]['handler']> : RA[Property] extends RemoteApi ? ClientRoutes<RA[Property]> : never;
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;
100
128
  }>;
101
129
  export type NonClientMiddleFn = never | PublicRoute | {
102
130
  [key: string]: PublicRoute;
103
131
  };
104
132
  export type ClientMiddleFns<RA extends RemoteApi> = Prettify<{
105
- [Property in keyof RA as RA[Property] extends NonClientMiddleFn ? never : Property]: RA[Property] extends PublicMiddleFn | PublicHeadersFn ? (...params: Parameters<RA[Property]['handler']>) => HSubRequest<RA[Property]['handler']> : RA[Property] extends RemoteApi ? ClientMiddleFns<RA[Property]> : never;
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;
106
134
  }>;
107
135
  export type Cleaned<RMS extends RemoteApi> = {
108
136
  [Property in keyof RMS as RMS[Property] extends never ? never : Property]: RMS[Property];
109
137
  };
110
- export type SuccessClientResponse<RS extends RSubRequest<any>, RHList extends HSubRequest<any>[]> = [
138
+ export type SuccessClientResponse<RS extends RouteSubRequest<any>, RHList extends MiddlewareSubRequest<any>[]> = [
111
139
  SuccessResponse<RS>,
112
140
  ...SuccessResponses<RHList>
113
141
  ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mionjs/client",
3
- "version": "0.8.4-alpha.0",
3
+ "version": "0.8.6",
4
4
  "type": "module",
5
5
  "description": "Browser client for mion Apps.",
6
6
  "keywords": [
@@ -41,7 +41,7 @@
41
41
  },
42
42
  "scripts": {
43
43
  "test": "vitest run && npm run test:e2e:ssr",
44
- "test:e2e:ssr": "node --experimental-strip-types src/aot/aotSSR.e2e.test.ts",
44
+ "test:e2e:ssr": "node --experimental-strip-types src/aotSSR.e2e.test.ts",
45
45
  "dev": "vite build --watch",
46
46
  "dev:test": "vitest watch",
47
47
  "lint": "npx eslint src",
@@ -54,15 +54,15 @@
54
54
  "bugs": {
55
55
  "url": "https://github.com/MionKit/mion/issues"
56
56
  },
57
- "gitHead": "26f07a965e43529d4255e6f2ac8a633513026314",
57
+ "gitHead": "612302e243365c01fadbf3351b857174bf2f3956",
58
58
  "devDependencies": {
59
- "@mionjs/platform-node": "^0.8.4-alpha.0",
60
- "@mionjs/router": "^0.8.4-alpha.0",
61
- "@mionjs/run-types": "^0.8.4-alpha.0",
62
- "@mionjs/test-server": "^0.8.4-alpha.0",
59
+ "@mionjs/platform-node": "0.8.6",
60
+ "@mionjs/router": "0.8.6",
61
+ "@mionjs/run-types": "0.8.6",
62
+ "@mionjs/test-server": "0.8.6",
63
63
  "jest-environment-jsdom": "^29.6.2"
64
64
  },
65
65
  "dependencies": {
66
- "@mionjs/core": "^0.8.4-alpha.0"
66
+ "@mionjs/core": "0.8.6"
67
67
  }
68
68
  }