@mionjs/router 0.8.7 → 0.8.8

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 (141) hide show
  1. package/.dist/cjs/index.d.ts +1 -0
  2. package/.dist/cjs/index.d.ts.map +1 -0
  3. package/.dist/cjs/src/aot/aotCacheLoader.d.ts +1 -0
  4. package/.dist/cjs/src/aot/aotCacheLoader.d.ts.map +1 -0
  5. package/.dist/cjs/src/callContext.d.ts +1 -0
  6. package/.dist/cjs/src/callContext.d.ts.map +1 -0
  7. package/.dist/cjs/src/constants.d.ts +1 -0
  8. package/.dist/cjs/src/constants.d.ts.map +1 -0
  9. package/.dist/cjs/src/defaultRoutes.d.ts +1 -0
  10. package/.dist/cjs/src/defaultRoutes.d.ts.map +1 -0
  11. package/.dist/cjs/src/dispatch.d.ts +1 -0
  12. package/.dist/cjs/src/dispatch.d.ts.map +1 -0
  13. package/.dist/cjs/src/lib/aotEmitter.d.ts +1 -0
  14. package/.dist/cjs/src/lib/aotEmitter.d.ts.map +1 -0
  15. package/.dist/cjs/src/lib/dispatchError.d.ts +1 -0
  16. package/.dist/cjs/src/lib/dispatchError.d.ts.map +1 -0
  17. package/.dist/cjs/src/lib/handlers.d.ts +1 -0
  18. package/.dist/cjs/src/lib/handlers.d.ts.map +1 -0
  19. package/.dist/cjs/src/lib/headers.d.ts +1 -0
  20. package/.dist/cjs/src/lib/headers.d.ts.map +1 -0
  21. package/.dist/cjs/src/lib/methodsCache.d.ts +1 -0
  22. package/.dist/cjs/src/lib/methodsCache.d.ts.map +1 -0
  23. package/.dist/cjs/src/lib/queryBody.d.ts +1 -0
  24. package/.dist/cjs/src/lib/queryBody.d.ts.map +1 -0
  25. package/.dist/cjs/src/lib/reflection.d.ts +1 -0
  26. package/.dist/cjs/src/lib/reflection.d.ts.map +1 -0
  27. package/.dist/cjs/src/lib/remoteMethods.d.ts +1 -0
  28. package/.dist/cjs/src/lib/remoteMethods.d.ts.map +1 -0
  29. package/.dist/cjs/src/lib/test/aotEmitter-test-router.d.ts +1 -0
  30. package/.dist/cjs/src/lib/test/aotEmitter-test-router.d.ts.map +1 -0
  31. package/.dist/cjs/src/router.d.ts +1 -0
  32. package/.dist/cjs/src/router.d.ts.map +1 -0
  33. package/.dist/cjs/src/routes/client.routes.d.ts +1 -0
  34. package/.dist/cjs/src/routes/client.routes.d.ts.map +1 -0
  35. package/.dist/cjs/src/routes/errors.routes.d.ts +1 -0
  36. package/.dist/cjs/src/routes/errors.routes.d.ts.map +1 -0
  37. package/.dist/cjs/src/routes/mion.routes.d.ts +1 -0
  38. package/.dist/cjs/src/routes/mion.routes.d.ts.map +1 -0
  39. package/.dist/cjs/src/routes/serializer.routes.d.ts +1 -0
  40. package/.dist/cjs/src/routes/serializer.routes.d.ts.map +1 -0
  41. package/.dist/cjs/src/routesFlow.d.ts +1 -0
  42. package/.dist/cjs/src/routesFlow.d.ts.map +1 -0
  43. package/.dist/cjs/src/types/context.d.ts +1 -0
  44. package/.dist/cjs/src/types/context.d.ts.map +1 -0
  45. package/.dist/cjs/src/types/definitions.d.ts +1 -0
  46. package/.dist/cjs/src/types/definitions.d.ts.map +1 -0
  47. package/.dist/cjs/src/types/general.d.ts +1 -0
  48. package/.dist/cjs/src/types/general.d.ts.map +1 -0
  49. package/.dist/cjs/src/types/guards.d.ts +1 -0
  50. package/.dist/cjs/src/types/guards.d.ts.map +1 -0
  51. package/.dist/cjs/src/types/handlers.d.ts +1 -0
  52. package/.dist/cjs/src/types/handlers.d.ts.map +1 -0
  53. package/.dist/cjs/src/types/publicMethods.d.ts +1 -0
  54. package/.dist/cjs/src/types/publicMethods.d.ts.map +1 -0
  55. package/.dist/cjs/src/types/remoteMethods.d.ts +1 -0
  56. package/.dist/cjs/src/types/remoteMethods.d.ts.map +1 -0
  57. package/.dist/esm/index.d.ts +1 -0
  58. package/.dist/esm/index.d.ts.map +1 -0
  59. package/.dist/esm/src/aot/aotCacheLoader.d.ts +1 -0
  60. package/.dist/esm/src/aot/aotCacheLoader.d.ts.map +1 -0
  61. package/.dist/esm/src/callContext.d.ts +1 -0
  62. package/.dist/esm/src/callContext.d.ts.map +1 -0
  63. package/.dist/esm/src/constants.d.ts +1 -0
  64. package/.dist/esm/src/constants.d.ts.map +1 -0
  65. package/.dist/esm/src/defaultRoutes.d.ts +1 -0
  66. package/.dist/esm/src/defaultRoutes.d.ts.map +1 -0
  67. package/.dist/esm/src/dispatch.d.ts +1 -0
  68. package/.dist/esm/src/dispatch.d.ts.map +1 -0
  69. package/.dist/esm/src/lib/aotEmitter.d.ts +1 -0
  70. package/.dist/esm/src/lib/aotEmitter.d.ts.map +1 -0
  71. package/.dist/esm/src/lib/dispatchError.d.ts +1 -0
  72. package/.dist/esm/src/lib/dispatchError.d.ts.map +1 -0
  73. package/.dist/esm/src/lib/handlers.d.ts +1 -0
  74. package/.dist/esm/src/lib/handlers.d.ts.map +1 -0
  75. package/.dist/esm/src/lib/headers.d.ts +1 -0
  76. package/.dist/esm/src/lib/headers.d.ts.map +1 -0
  77. package/.dist/esm/src/lib/methodsCache.d.ts +1 -0
  78. package/.dist/esm/src/lib/methodsCache.d.ts.map +1 -0
  79. package/.dist/esm/src/lib/queryBody.d.ts +1 -0
  80. package/.dist/esm/src/lib/queryBody.d.ts.map +1 -0
  81. package/.dist/esm/src/lib/reflection.d.ts +1 -0
  82. package/.dist/esm/src/lib/reflection.d.ts.map +1 -0
  83. package/.dist/esm/src/lib/remoteMethods.d.ts +1 -0
  84. package/.dist/esm/src/lib/remoteMethods.d.ts.map +1 -0
  85. package/.dist/esm/src/lib/test/aotEmitter-test-router.d.ts +1 -0
  86. package/.dist/esm/src/lib/test/aotEmitter-test-router.d.ts.map +1 -0
  87. package/.dist/esm/src/router.d.ts +1 -0
  88. package/.dist/esm/src/router.d.ts.map +1 -0
  89. package/.dist/esm/src/routes/client.routes.d.ts +1 -0
  90. package/.dist/esm/src/routes/client.routes.d.ts.map +1 -0
  91. package/.dist/esm/src/routes/errors.routes.d.ts +1 -0
  92. package/.dist/esm/src/routes/errors.routes.d.ts.map +1 -0
  93. package/.dist/esm/src/routes/mion.routes.d.ts +1 -0
  94. package/.dist/esm/src/routes/mion.routes.d.ts.map +1 -0
  95. package/.dist/esm/src/routes/serializer.routes.d.ts +1 -0
  96. package/.dist/esm/src/routes/serializer.routes.d.ts.map +1 -0
  97. package/.dist/esm/src/routesFlow.d.ts +1 -0
  98. package/.dist/esm/src/routesFlow.d.ts.map +1 -0
  99. package/.dist/esm/src/types/context.d.ts +1 -0
  100. package/.dist/esm/src/types/context.d.ts.map +1 -0
  101. package/.dist/esm/src/types/definitions.d.ts +1 -0
  102. package/.dist/esm/src/types/definitions.d.ts.map +1 -0
  103. package/.dist/esm/src/types/general.d.ts +1 -0
  104. package/.dist/esm/src/types/general.d.ts.map +1 -0
  105. package/.dist/esm/src/types/guards.d.ts +1 -0
  106. package/.dist/esm/src/types/guards.d.ts.map +1 -0
  107. package/.dist/esm/src/types/handlers.d.ts +1 -0
  108. package/.dist/esm/src/types/handlers.d.ts.map +1 -0
  109. package/.dist/esm/src/types/publicMethods.d.ts +1 -0
  110. package/.dist/esm/src/types/publicMethods.d.ts.map +1 -0
  111. package/.dist/esm/src/types/remoteMethods.d.ts +1 -0
  112. package/.dist/esm/src/types/remoteMethods.d.ts.map +1 -0
  113. package/index.ts +29 -0
  114. package/package.json +9 -5
  115. package/src/aot/aotCacheLoader.ts +15 -0
  116. package/src/callContext.ts +193 -0
  117. package/src/constants.ts +45 -0
  118. package/src/defaultRoutes.ts +37 -0
  119. package/src/dispatch.ts +204 -0
  120. package/src/lib/aotEmitter.ts +140 -0
  121. package/src/lib/dispatchError.ts +60 -0
  122. package/src/lib/handlers.ts +75 -0
  123. package/src/lib/headers.ts +102 -0
  124. package/src/lib/methodsCache.ts +72 -0
  125. package/src/lib/queryBody.ts +40 -0
  126. package/src/lib/reflection.ts +517 -0
  127. package/src/lib/remoteMethods.ts +180 -0
  128. package/src/lib/test/aotEmitter-test-router.ts +40 -0
  129. package/src/router.ts +656 -0
  130. package/src/routes/client.routes.ts +108 -0
  131. package/src/routes/errors.routes.ts +51 -0
  132. package/src/routes/mion.routes.ts +11 -0
  133. package/src/routes/serializer.routes.ts +225 -0
  134. package/src/routesFlow.ts +320 -0
  135. package/src/types/context.ts +119 -0
  136. package/src/types/definitions.ts +53 -0
  137. package/src/types/general.ts +84 -0
  138. package/src/types/guards.ts +71 -0
  139. package/src/types/handlers.ts +49 -0
  140. package/src/types/publicMethods.ts +83 -0
  141. package/src/types/remoteMethods.ts +54 -0
@@ -0,0 +1,49 @@
1
+ /* ########
2
+ * 2023 mion
3
+ * Author: Ma-jerez
4
+ * License: MIT
5
+ * The software is provided "as is", without warranty of any kind.
6
+ * ######## */
7
+
8
+ import {HeadersSubset} from '@mionjs/core';
9
+ import {CallContext} from './context.ts';
10
+ import {RouterOptions} from './general.ts';
11
+ import {MayReturnError} from './publicMethods.ts';
12
+
13
+ // ####### Route Handlers #######
14
+
15
+ // type-handler-start
16
+ /** Route or MiddleFn Handler */
17
+ export type Handler<Context extends CallContext = any, Params extends any[] = any[], Ret = any> = (
18
+ /** Call Context */
19
+ context: Context,
20
+ /** Remote Call parameters */
21
+ ...parameters: Params
22
+ ) => Ret | Promise<Ret>;
23
+ // type-handler-end
24
+
25
+ /** Headers MiddleFn Handler, middleFn handler for when params are sent in the header */
26
+ export type HeaderHandler<
27
+ Context extends CallContext = any,
28
+ ExpectedHeaders extends HeadersSubset<any> = any,
29
+ Params extends any[] = any[],
30
+ Ret = any,
31
+ > = (
32
+ /** Call Context */
33
+ context: Context,
34
+ /** Remote Call Headers */
35
+ headers: ExpectedHeaders,
36
+ /** Remote Call parameters */
37
+ ...parameters: Params
38
+ ) => Ret | Promise<Ret>;
39
+
40
+ /** Handler to use with raw middleFns to get access to raw request and response */
41
+ export type RawMiddleFnHandler<
42
+ Context extends CallContext = any,
43
+ RawReq = any,
44
+ RawResp = any,
45
+ Opts extends RouterOptions<RawReq> = RouterOptions<RawReq>,
46
+ > = (ctx: Context, request: RawReq, response: RawResp, opts: Opts) => MayReturnError;
47
+
48
+ // Handler technically covers any of the other handlers
49
+ export type AnyHandler<Context extends CallContext = any, Params extends any[] = any, Ret = any> = Handler<Context, Params, Ret>;
@@ -0,0 +1,83 @@
1
+ /* ########
2
+ * 2023 mion
3
+ * Author: Ma-jerez
4
+ * License: MIT
5
+ * The software is provided "as is", without warranty of any kind.
6
+ * ######## */
7
+
8
+ import type {Prettify, RpcError, MethodMetadata} from '@mionjs/core';
9
+ import type {CallContext} from './context.ts';
10
+ import type {Routes} from './general.ts';
11
+ import type {Handler} from './handlers.ts';
12
+ import type {HeadersMiddleFnDef, MiddleFnDef, RawMiddleFnDef, RouteDef} from './definitions.ts';
13
+ import {HandlerType} from '@mionjs/core'; // do not import type only
14
+
15
+ // ####### Raw MiddleFns #######
16
+
17
+ export type MayReturnError = void | RpcError<string> | Promise<RpcError<string> | void>;
18
+
19
+ export type MiddleFnsCollection = {
20
+ [key: string]: MiddleFnDef | HeadersMiddleFnDef | RawMiddleFnDef;
21
+ };
22
+
23
+ // ####### Private MiddleFns #######
24
+
25
+ export interface PrivateMiddleFnDef extends MiddleFnDef {
26
+ handler: (ctx?: any) => void | never | undefined;
27
+ }
28
+
29
+ export type PrivateDef = PrivateMiddleFnDef | RawMiddleFnDef;
30
+
31
+ // ####### Remote Methods Metadata #######
32
+
33
+ /** Data structure containing all public routes & middleFns.
34
+ * is a Ts Mapped type the remove private middleFns and rawMiddleFns
35
+ */
36
+ // prettier-ignore
37
+ export type PublicApi<Type extends Routes> = Prettify<{
38
+ [Property in keyof Type as Type[Property] extends PrivateDef ? never : Property]
39
+ : Type[Property] extends MiddleFnDef
40
+ ? PublicMiddleFn<PublicHandler<Type[Property]['handler']>>
41
+ : Type[Property] extends HeadersMiddleFnDef
42
+ ? PublicHeadersFn<PublicHandler<Type[Property]['handler']>>
43
+ : Type[Property] extends RouteDef // Routes
44
+ ? PublicRoute<PublicHandler<Type[Property]['handler']>>
45
+ : Type[Property] extends Routes // Routes & PureRoutes (recursion)
46
+ ? PublicApi<Type[Property]>
47
+ : never;
48
+ }>;
49
+
50
+ // type-remote-api-start
51
+ /** Same as Public Api but no type mapping, should be easier to use than PublicApi when non strong types are required. */
52
+ export type RemoteApi = {
53
+ [key: string]: PublicRoute | PublicMiddleFn | PublicHeadersFn | RemoteApi;
54
+ };
55
+ // type-remote-api-end
56
+
57
+ /** Public Routes, handler type is the same as RemoteRoute but does not include the context */
58
+ export interface PublicRoute<H extends Handler = any> extends MethodMetadata {
59
+ type: typeof HandlerType.route;
60
+ middleFnIds: string[];
61
+ headerNames: undefined;
62
+ handler: H;
63
+ }
64
+
65
+ /** Public MiddleFns, handler type is the same as RemoteMiddleFns but does not include the context */
66
+ export interface PublicMiddleFn<H extends Handler = any> extends MethodMetadata {
67
+ type: typeof HandlerType.middleFn;
68
+ handler: H;
69
+ }
70
+
71
+ /** Public HeadersFns, handler type is the same as HeadersFns but does not include the context */
72
+ export interface PublicHeadersFn<H extends Handler = any> extends MethodMetadata {
73
+ type: typeof HandlerType.headersMiddleFn;
74
+ headerNames: string[];
75
+ handler: H;
76
+ }
77
+
78
+ /** Removes the context from handlers */
79
+ // prettier-ignore
80
+ export type PublicHandler<H extends Handler> =
81
+ H extends (ctx: CallContext, ...rest: infer Req) => infer Resp
82
+ ? (...rest: Req) => Promise<Awaited<Resp>>
83
+ : never;
@@ -0,0 +1,54 @@
1
+ // ####### Executables #######
2
+
3
+ import type {HeadersMethodWithJitFns, MethodWithJitFns, RemoteMethodOpts, RouteOnlyOptions, SerializerCode} from '@mionjs/core'; // do not import type only
4
+ import type {AnyHandler, Handler, HeaderHandler, RawMiddleFnHandler} from './handlers.ts'; // do not import type only
5
+ import {HandlerType} from '@mionjs/core'; // do not import type only
6
+
7
+ /** Contains the handlers for middleFns and routes */
8
+ export interface RemoteMethod<H extends AnyHandler = AnyHandler> extends MethodWithJitFns {
9
+ /** router options */
10
+ options: RemoteMethodOpts;
11
+ handler: H;
12
+ methodCaller?: (...args: any[]) => any;
13
+ }
14
+
15
+ export interface RouteMethod<H extends Handler = any> extends RemoteMethod<H> {
16
+ type: typeof HandlerType.route;
17
+ options: RouteOnlyOptions;
18
+ }
19
+ export interface MiddleFnMethod<H extends Handler = any> extends RemoteMethod<H> {
20
+ type: typeof HandlerType.middleFn;
21
+ }
22
+ export interface HeadersMethod<H extends HeaderHandler = any> extends RemoteMethod<H> {
23
+ type: typeof HandlerType.headersMiddleFn;
24
+ headersParam: HeadersMethodWithJitFns;
25
+ }
26
+ export interface RawMethod<H extends RawMiddleFnHandler = any> extends RemoteMethod<H> {
27
+ type: typeof HandlerType.rawMiddleFn;
28
+ options: RemoteMethodOpts & {
29
+ validateParams: false;
30
+ validateReturn?: false;
31
+ };
32
+ }
33
+
34
+ export type RouteOptions = Partial<
35
+ Pick<
36
+ RouteMethod['options'],
37
+ 'description' | 'validateParams' | 'validateReturn' | 'serializer' | 'isMutation' | 'strictTypes'
38
+ >
39
+ >;
40
+ export type MiddleFnOptions = Partial<
41
+ Pick<MiddleFnMethod['options'], 'description' | 'validateParams' | 'validateReturn' | 'runOnError' | 'strictTypes'>
42
+ >;
43
+ export type HeadersMiddleFnOptions = Partial<
44
+ Pick<HeadersMethod['options'], 'description' | 'validateParams' | 'validateReturn' | 'runOnError' | 'strictTypes'>
45
+ >;
46
+ // RawMiddleFnOptions doesn't need encoding - raw middleFns handle their own serialization
47
+ export type RawMiddleFnOptions = Partial<Pick<RawMethod['options'], 'description' | 'runOnError'>>;
48
+
49
+ export interface MethodsExecutionChain {
50
+ routeIndex: number;
51
+ methods: RemoteMethod[];
52
+ /** Precalculated serializer code for the route's response body type */
53
+ serializer: SerializerCode;
54
+ }