@mionjs/router 0.8.0-alpha.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 (172) hide show
  1. package/.dist/cjs/index.cjs +154 -0
  2. package/.dist/cjs/index.cjs.map +1 -0
  3. package/.dist/cjs/index.d.ts +19 -0
  4. package/.dist/cjs/package.json +1 -0
  5. package/.dist/cjs/src/callContext.cjs +125 -0
  6. package/.dist/cjs/src/callContext.cjs.map +1 -0
  7. package/.dist/cjs/src/callContext.d.ts +10 -0
  8. package/.dist/cjs/src/constants.cjs +45 -0
  9. package/.dist/cjs/src/constants.cjs.map +1 -0
  10. package/.dist/cjs/src/constants.d.ts +10 -0
  11. package/.dist/cjs/src/defaultRoutes.cjs +16 -0
  12. package/.dist/cjs/src/defaultRoutes.cjs.map +1 -0
  13. package/.dist/cjs/src/defaultRoutes.d.ts +3 -0
  14. package/.dist/cjs/src/dispatch.cjs +141 -0
  15. package/.dist/cjs/src/dispatch.cjs.map +1 -0
  16. package/.dist/cjs/src/dispatch.d.ts +3 -0
  17. package/.dist/cjs/src/lib/aotCacheLoader.cjs +13 -0
  18. package/.dist/cjs/src/lib/aotCacheLoader.cjs.map +1 -0
  19. package/.dist/cjs/src/lib/aotCacheLoader.d.ts +1 -0
  20. package/.dist/cjs/src/lib/aotEmitter.cjs +70 -0
  21. package/.dist/cjs/src/lib/aotEmitter.cjs.map +1 -0
  22. package/.dist/cjs/src/lib/aotEmitter.d.ts +17 -0
  23. package/.dist/cjs/src/lib/dispatchError.cjs +39 -0
  24. package/.dist/cjs/src/lib/dispatchError.cjs.map +1 -0
  25. package/.dist/cjs/src/lib/dispatchError.d.ts +5 -0
  26. package/.dist/cjs/src/lib/handlers.cjs +52 -0
  27. package/.dist/cjs/src/lib/handlers.cjs.map +1 -0
  28. package/.dist/cjs/src/lib/handlers.d.ts +9 -0
  29. package/.dist/cjs/src/lib/headers.cjs +64 -0
  30. package/.dist/cjs/src/lib/headers.cjs.map +1 -0
  31. package/.dist/cjs/src/lib/headers.d.ts +2 -0
  32. package/.dist/cjs/src/lib/methodsCache.cjs +55 -0
  33. package/.dist/cjs/src/lib/methodsCache.cjs.map +1 -0
  34. package/.dist/cjs/src/lib/methodsCache.d.ts +11 -0
  35. package/.dist/cjs/src/lib/queryBody.cjs +34 -0
  36. package/.dist/cjs/src/lib/queryBody.cjs.map +1 -0
  37. package/.dist/cjs/src/lib/queryBody.d.ts +7 -0
  38. package/.dist/cjs/src/lib/reflection.cjs +342 -0
  39. package/.dist/cjs/src/lib/reflection.cjs.map +1 -0
  40. package/.dist/cjs/src/lib/reflection.d.ts +12 -0
  41. package/.dist/cjs/src/lib/remoteMethods.cjs +109 -0
  42. package/.dist/cjs/src/lib/remoteMethods.cjs.map +1 -0
  43. package/.dist/cjs/src/lib/remoteMethods.d.ts +10 -0
  44. package/.dist/cjs/src/lib/test/aotEmitter-test-router.cjs +24 -0
  45. package/.dist/cjs/src/lib/test/aotEmitter-test-router.cjs.map +1 -0
  46. package/.dist/cjs/src/lib/test/aotEmitter-test-router.d.ts +4 -0
  47. package/.dist/cjs/src/router.cjs +429 -0
  48. package/.dist/cjs/src/router.cjs.map +1 -0
  49. package/.dist/cjs/src/router.d.ts +30 -0
  50. package/.dist/cjs/src/routes/client.routes.cjs +76 -0
  51. package/.dist/cjs/src/routes/client.routes.cjs.map +1 -0
  52. package/.dist/cjs/src/routes/client.routes.d.ts +16 -0
  53. package/.dist/cjs/src/routes/errors.routes.cjs +49 -0
  54. package/.dist/cjs/src/routes/errors.routes.cjs.map +1 -0
  55. package/.dist/cjs/src/routes/errors.routes.d.ts +7 -0
  56. package/.dist/cjs/src/routes/mion.routes.cjs +13 -0
  57. package/.dist/cjs/src/routes/mion.routes.cjs.map +1 -0
  58. package/.dist/cjs/src/routes/mion.routes.d.ts +10 -0
  59. package/.dist/cjs/src/routes/serializer.routes.cjs +191 -0
  60. package/.dist/cjs/src/routes/serializer.routes.cjs.map +1 -0
  61. package/.dist/cjs/src/routes/serializer.routes.d.ts +9 -0
  62. package/.dist/cjs/src/routesFlow.cjs +227 -0
  63. package/.dist/cjs/src/routesFlow.cjs.map +1 -0
  64. package/.dist/cjs/src/routesFlow.d.ts +7 -0
  65. package/.dist/cjs/src/types/context.cjs +31 -0
  66. package/.dist/cjs/src/types/context.cjs.map +1 -0
  67. package/.dist/cjs/src/types/context.d.ts +57 -0
  68. package/.dist/cjs/src/types/definitions.cjs +15 -0
  69. package/.dist/cjs/src/types/definitions.cjs.map +1 -0
  70. package/.dist/cjs/src/types/definitions.d.ts +20 -0
  71. package/.dist/cjs/src/types/general.cjs +14 -0
  72. package/.dist/cjs/src/types/general.cjs.map +1 -0
  73. package/.dist/cjs/src/types/general.d.ts +27 -0
  74. package/.dist/cjs/src/types/guards.cjs +66 -0
  75. package/.dist/cjs/src/types/guards.cjs.map +1 -0
  76. package/.dist/cjs/src/types/guards.d.ts +17 -0
  77. package/.dist/cjs/src/types/handlers.cjs +13 -0
  78. package/.dist/cjs/src/types/handlers.cjs.map +1 -0
  79. package/.dist/cjs/src/types/handlers.d.ts +12 -0
  80. package/.dist/cjs/src/types/publicMethods.cjs +24 -0
  81. package/.dist/cjs/src/types/publicMethods.cjs.map +1 -0
  82. package/.dist/cjs/src/types/publicMethods.d.ts +45 -0
  83. package/.dist/cjs/src/types/remoteMethods.cjs +25 -0
  84. package/.dist/cjs/src/types/remoteMethods.cjs.map +1 -0
  85. package/.dist/cjs/src/types/remoteMethods.d.ts +44 -0
  86. package/.dist/esm/index.d.ts +19 -0
  87. package/.dist/esm/index.js +145 -0
  88. package/.dist/esm/index.js.map +1 -0
  89. package/.dist/esm/src/callContext.d.ts +10 -0
  90. package/.dist/esm/src/callContext.js +125 -0
  91. package/.dist/esm/src/callContext.js.map +1 -0
  92. package/.dist/esm/src/constants.d.ts +10 -0
  93. package/.dist/esm/src/constants.js +45 -0
  94. package/.dist/esm/src/constants.js.map +1 -0
  95. package/.dist/esm/src/defaultRoutes.d.ts +3 -0
  96. package/.dist/esm/src/defaultRoutes.js +16 -0
  97. package/.dist/esm/src/defaultRoutes.js.map +1 -0
  98. package/.dist/esm/src/dispatch.d.ts +3 -0
  99. package/.dist/esm/src/dispatch.js +141 -0
  100. package/.dist/esm/src/dispatch.js.map +1 -0
  101. package/.dist/esm/src/lib/aotCacheLoader.d.ts +1 -0
  102. package/.dist/esm/src/lib/aotCacheLoader.js +13 -0
  103. package/.dist/esm/src/lib/aotCacheLoader.js.map +1 -0
  104. package/.dist/esm/src/lib/aotEmitter.d.ts +17 -0
  105. package/.dist/esm/src/lib/aotEmitter.js +70 -0
  106. package/.dist/esm/src/lib/aotEmitter.js.map +1 -0
  107. package/.dist/esm/src/lib/dispatchError.d.ts +5 -0
  108. package/.dist/esm/src/lib/dispatchError.js +39 -0
  109. package/.dist/esm/src/lib/dispatchError.js.map +1 -0
  110. package/.dist/esm/src/lib/handlers.d.ts +9 -0
  111. package/.dist/esm/src/lib/handlers.js +52 -0
  112. package/.dist/esm/src/lib/handlers.js.map +1 -0
  113. package/.dist/esm/src/lib/headers.d.ts +2 -0
  114. package/.dist/esm/src/lib/headers.js +64 -0
  115. package/.dist/esm/src/lib/headers.js.map +1 -0
  116. package/.dist/esm/src/lib/methodsCache.d.ts +11 -0
  117. package/.dist/esm/src/lib/methodsCache.js +56 -0
  118. package/.dist/esm/src/lib/methodsCache.js.map +1 -0
  119. package/.dist/esm/src/lib/queryBody.d.ts +7 -0
  120. package/.dist/esm/src/lib/queryBody.js +34 -0
  121. package/.dist/esm/src/lib/queryBody.js.map +1 -0
  122. package/.dist/esm/src/lib/reflection.d.ts +12 -0
  123. package/.dist/esm/src/lib/reflection.js +320 -0
  124. package/.dist/esm/src/lib/reflection.js.map +1 -0
  125. package/.dist/esm/src/lib/remoteMethods.d.ts +10 -0
  126. package/.dist/esm/src/lib/remoteMethods.js +109 -0
  127. package/.dist/esm/src/lib/remoteMethods.js.map +1 -0
  128. package/.dist/esm/src/lib/test/aotEmitter-test-router.d.ts +4 -0
  129. package/.dist/esm/src/lib/test/aotEmitter-test-router.js +24 -0
  130. package/.dist/esm/src/lib/test/aotEmitter-test-router.js.map +1 -0
  131. package/.dist/esm/src/router.d.ts +30 -0
  132. package/.dist/esm/src/router.js +431 -0
  133. package/.dist/esm/src/router.js.map +1 -0
  134. package/.dist/esm/src/routes/client.routes.d.ts +16 -0
  135. package/.dist/esm/src/routes/client.routes.js +76 -0
  136. package/.dist/esm/src/routes/client.routes.js.map +1 -0
  137. package/.dist/esm/src/routes/errors.routes.d.ts +7 -0
  138. package/.dist/esm/src/routes/errors.routes.js +49 -0
  139. package/.dist/esm/src/routes/errors.routes.js.map +1 -0
  140. package/.dist/esm/src/routes/mion.routes.d.ts +10 -0
  141. package/.dist/esm/src/routes/mion.routes.js +13 -0
  142. package/.dist/esm/src/routes/mion.routes.js.map +1 -0
  143. package/.dist/esm/src/routes/serializer.routes.d.ts +9 -0
  144. package/.dist/esm/src/routes/serializer.routes.js +191 -0
  145. package/.dist/esm/src/routes/serializer.routes.js.map +1 -0
  146. package/.dist/esm/src/routesFlow.d.ts +7 -0
  147. package/.dist/esm/src/routesFlow.js +227 -0
  148. package/.dist/esm/src/routesFlow.js.map +1 -0
  149. package/.dist/esm/src/types/context.d.ts +57 -0
  150. package/.dist/esm/src/types/context.js +31 -0
  151. package/.dist/esm/src/types/context.js.map +1 -0
  152. package/.dist/esm/src/types/definitions.d.ts +20 -0
  153. package/.dist/esm/src/types/definitions.js +15 -0
  154. package/.dist/esm/src/types/definitions.js.map +1 -0
  155. package/.dist/esm/src/types/general.d.ts +27 -0
  156. package/.dist/esm/src/types/general.js +14 -0
  157. package/.dist/esm/src/types/general.js.map +1 -0
  158. package/.dist/esm/src/types/guards.d.ts +17 -0
  159. package/.dist/esm/src/types/guards.js +66 -0
  160. package/.dist/esm/src/types/guards.js.map +1 -0
  161. package/.dist/esm/src/types/handlers.d.ts +12 -0
  162. package/.dist/esm/src/types/handlers.js +13 -0
  163. package/.dist/esm/src/types/handlers.js.map +1 -0
  164. package/.dist/esm/src/types/publicMethods.d.ts +45 -0
  165. package/.dist/esm/src/types/publicMethods.js +24 -0
  166. package/.dist/esm/src/types/publicMethods.js.map +1 -0
  167. package/.dist/esm/src/types/remoteMethods.d.ts +44 -0
  168. package/.dist/esm/src/types/remoteMethods.js +25 -0
  169. package/.dist/esm/src/types/remoteMethods.js.map +1 -0
  170. package/LICENSE +21 -0
  171. package/README.md +34 -0
  172. package/package.json +67 -0
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const core = require("@mionjs/core");
4
+ const src_lib_methodsCache = require("./methodsCache.cjs");
5
+ const runTypes = require("@mionjs/run-types");
6
+ function __assignType(fn, args) {
7
+ fn.__type = args;
8
+ return fn;
9
+ }
10
+ const __ΩAOTCacheMessage = ["mion-aot-caches", "type", "jitFnsCode", "pureFnsCode", "routerCacheCode", "AOTCacheMessage", 'P.!4"&4#&4$&4%Mw&y'];
11
+ const __ΩSerializedCaches = ["jitFnsCode", "pureFnsCode", "routerCacheCode", "SerializedCaches", 'P&4!&4"&4#Mw$y'];
12
+ const EXCLUDED_JIT_FN_IDS = [core.JIT_FUNCTION_IDS.toJSCode];
13
+ const EXCLUDED_PURE_FN_NAMES = ["sanitizeCompiledFn"];
14
+ async function getSerializedCaches() {
15
+ const { jitFnsCache, pureFnsCache } = core.getJitFnCaches();
16
+ const routerCache = src_lib_methodsCache.getPersistedMethods();
17
+ return serializeCachesToCode(jitFnsCache, pureFnsCache, routerCache);
18
+ }
19
+ getSerializedCaches.__type = [() => __ΩSerializedCaches, "getSerializedCaches", 'Pn!`/"'];
20
+ async function emitAOTCaches() {
21
+ if (!core.isMionAOTEmitMode())
22
+ return;
23
+ if (core.getENV("MION_COMPILE") === "viteSSR")
24
+ return;
25
+ if (typeof process.send !== "function")
26
+ return;
27
+ const { jitFnsCache, pureFnsCache } = core.getJitFnCaches();
28
+ const routerCache = src_lib_methodsCache.getPersistedMethods();
29
+ const serialized = await serializeCachesToCode(jitFnsCache, pureFnsCache, routerCache);
30
+ const message = {
31
+ type: "mion-aot-caches",
32
+ ...serialized
33
+ };
34
+ process.send(message);
35
+ }
36
+ emitAOTCaches.__type = ["emitAOTCaches", "P$`/!"];
37
+ async function serializeCachesToCode(jitFnsCache, pureFnsCache, routerCache) {
38
+ const jitToJSCode = (runTypes.createToJavascriptFn.Ω = [[() => core.__ΩSrcCodeJITCompiledFnsCache, "n!"]], runTypes.createToJavascriptFn());
39
+ const pureToJSCode = (runTypes.createToJavascriptFn.Ω = [[() => core.__ΩSrcCodePureFunctionsCache, "n!"]], runTypes.createToJavascriptFn());
40
+ const routerToJSCode = (runTypes.createToJavascriptFn.Ω = [[() => core.__ΩMethodsCache, "n!"]], runTypes.createToJavascriptFn());
41
+ const finalJitFns = filterExcludedJitFns(jitFnsCache, EXCLUDED_JIT_FN_IDS);
42
+ const finalPureFns = filterExcludedPureFns(pureFnsCache, EXCLUDED_PURE_FN_NAMES);
43
+ return {
44
+ jitFnsCode: jitToJSCode(finalJitFns),
45
+ pureFnsCode: pureToJSCode(finalPureFns),
46
+ routerCacheCode: routerToJSCode(routerCache)
47
+ };
48
+ }
49
+ serializeCachesToCode.__type = [() => core.__ΩJitFunctionsCache, "jitFnsCache", () => core.__ΩPureFunctionsCache, "pureFnsCache", () => core.__ΩMethodsCache, "routerCache", () => __ΩSerializedCaches, "serializeCachesToCode", "Pn!2\"n#2$n%2&n'`/("];
50
+ function filterExcludedJitFns(jitFnsCache, excludedFnIds) {
51
+ if (!excludedFnIds.length)
52
+ return jitFnsCache;
53
+ return Object.fromEntries(Object.entries(jitFnsCache).filter(__assignType(([, value]) => !excludedFnIds.includes(value.fnID), ["param0", "", 'P"2!"/"'])));
54
+ }
55
+ filterExcludedJitFns.__type = [() => core.__ΩJitFunctionsCache, "jitFnsCache", "excludedFnIds", () => core.__ΩJitFunctionsCache, "filterExcludedJitFns", 'Pn!2"&F2#n$/%'];
56
+ function filterExcludedPureFns(pureFnsCache, excludedFnNames) {
57
+ if (!excludedFnNames.length)
58
+ return pureFnsCache;
59
+ return Object.fromEntries(Object.entries(pureFnsCache).map(__assignType(([namespace, nsCache]) => [
60
+ namespace,
61
+ Object.fromEntries(Object.entries(nsCache).filter(__assignType(([, value]) => !excludedFnNames.includes(value.fnName), ["param0", "", 'P"2!"/"'])))
62
+ ], ["param0", "", 'P"2!"/"'])));
63
+ }
64
+ filterExcludedPureFns.__type = [() => core.__ΩPureFunctionsCache, "pureFnsCache", "excludedFnNames", () => core.__ΩPureFunctionsCache, "filterExcludedPureFns", 'Pn!2"&F2#n$/%'];
65
+ exports.__ΩAOTCacheMessage = __ΩAOTCacheMessage;
66
+ exports.__ΩSerializedCaches = __ΩSerializedCaches;
67
+ exports.emitAOTCaches = emitAOTCaches;
68
+ exports.getSerializedCaches = getSerializedCaches;
69
+ exports.serializeCachesToCode = serializeCachesToCode;
70
+ //# sourceMappingURL=aotEmitter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aotEmitter.cjs","sources":["../../../../src/lib/aotEmitter.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 {\n getJitFnCaches,\n getENV,\n isMionAOTEmitMode,\n JitFunctionsCache,\n PureFunctionsCache,\n MethodsCache,\n SrcCodeJITCompiledFnsCache,\n SrcCodePureFunctionsCache,\n JIT_FUNCTION_IDS,\n} from '@mionjs/core';\nimport {getPersistedMethods} from './methodsCache.ts';\nimport {createToJavascriptFn} from '@mionjs/run-types';\n\n/** IPC message type for AOT cache emission */\nexport interface AOTCacheMessage {\n type: 'mion-aot-caches';\n jitFnsCode: string;\n pureFnsCode: string;\n routerCacheCode: string;\n}\n\n/** Serialized cache data before converting to JS code */\nexport interface SerializedCaches {\n jitFnsCode: string;\n pureFnsCode: string;\n routerCacheCode: string;\n}\n\n/** JIT function IDs to exclude from AOT caches (toJSCode is only needed at compile time) */\nconst EXCLUDED_JIT_FN_IDS = [JIT_FUNCTION_IDS.toJSCode];\n\n/** Pure function names to exclude from AOT caches */\nconst EXCLUDED_PURE_FN_NAMES = ['sanitizeCompiledFn'];\n\n/** Returns serialized caches for in-process AOT generation (no IPC needed). Call after initMionRouter(). */\nexport async function getSerializedCaches(): Promise<SerializedCaches> {\n const {jitFnsCache, pureFnsCache} = getJitFnCaches();\n const routerCache = getPersistedMethods();\n return serializeCachesToCode(jitFnsCache, pureFnsCache, routerCache);\n}\n\n/**\n * Emits AOT caches to the parent process via IPC when running in MION_COMPILE mode.\n * This function is called automatically at the end of initMionRouter() and can also\n * be called manually for multi-step route registration patterns.\n */\nexport async function emitAOTCaches(): Promise<void> {\n // Only emit in AOT generation mode (compile, SSR, or serve)\n if (!isMionAOTEmitMode()) return;\n // viteSSR mode: caches remain in global state, read directly via getSerializedCaches()\n if (getENV('MION_COMPILE') === 'viteSSR') return;\n\n // IPC mode: send to parent process\n if (typeof process.send !== 'function') return;\n\n // Get the caches\n const {jitFnsCache, pureFnsCache} = getJitFnCaches();\n const routerCache = getPersistedMethods();\n\n // Serialize caches to JS code (filtering happens inside, after createToJavascriptFn)\n const serialized = await serializeCachesToCode(jitFnsCache, pureFnsCache, routerCache);\n\n // Send to parent process\n const message: AOTCacheMessage = {\n type: 'mion-aot-caches',\n ...serialized,\n };\n\n process.send(message);\n}\n\n/**\n * Serializes the caches to JavaScript code strings using run-types toJSCode.\n * Filtering is done AFTER createToJavascriptFn because it adds compile-time-only JIT functions\n * to the global caches that should be excluded from the serialized output.\n */\nexport async function serializeCachesToCode(\n jitFnsCache: JitFunctionsCache,\n pureFnsCache: PureFunctionsCache,\n routerCache: MethodsCache\n): Promise<SerializedCaches> {\n const jitToJSCode = createToJavascriptFn<SrcCodeJITCompiledFnsCache>();\n const pureToJSCode = createToJavascriptFn<SrcCodePureFunctionsCache>();\n const routerToJSCode = createToJavascriptFn<MethodsCache>();\n // Filter AFTER createToJavascriptFn to exclude compile-time-only items (including those just added)\n const finalJitFns = filterExcludedJitFns(jitFnsCache, EXCLUDED_JIT_FN_IDS);\n const finalPureFns = filterExcludedPureFns(pureFnsCache, EXCLUDED_PURE_FN_NAMES);\n return {\n jitFnsCode: jitToJSCode(finalJitFns as unknown as SrcCodeJITCompiledFnsCache),\n pureFnsCode: pureToJSCode(finalPureFns as unknown as SrcCodePureFunctionsCache),\n routerCacheCode: routerToJSCode(routerCache),\n };\n}\n\n/**\n * Filters out excluded JIT functions by their function ID.\n * toJSCode is excluded because it's only needed at compile time.\n */\nfunction filterExcludedJitFns(jitFnsCache: JitFunctionsCache, excludedFnIds: string[]): JitFunctionsCache {\n if (!excludedFnIds.length) return jitFnsCache;\n return Object.fromEntries(\n Object.entries(jitFnsCache).filter(([, value]) => !excludedFnIds.includes(value.fnID as string))\n ) as JitFunctionsCache;\n}\n\n/**\n * Filters out excluded pure functions by their function name.\n * sanitizeCompiledFn is excluded because it's only needed at compile time.\n */\nfunction filterExcludedPureFns(pureFnsCache: PureFunctionsCache, excludedFnNames: string[]): PureFunctionsCache {\n if (!excludedFnNames.length) return pureFnsCache;\n return Object.fromEntries(\n Object.entries(pureFnsCache).map(([namespace, nsCache]) => [\n namespace,\n Object.fromEntries(Object.entries(nsCache).filter(([, value]) => !excludedFnNames.includes(value.fnName))),\n ])\n ) as PureFunctionsCache;\n}\n"],"names":["JIT_FUNCTION_IDS","getJitFnCaches","getPersistedMethods","isMionAOTEmitMode","getENV","createToJavascriptFn"],"mappings":";;;;;;;;;;;AAqCA,MAAM,sBAAsB,CAACA,KAAAA,iBAAiB,QAAQ;AAGtD,MAAM,yBAAyB,CAAC,oBAAoB;AAGpD,eAAsB,sBAAmB;AACrC,QAAM,EAAC,aAAa,aAAA,IAAgBC,oBAAA;AACpC,QAAM,cAAcC,qBAAAA,oBAAA;AACpB,SAAO,sBAAsB,aAAa,cAAc,WAAW;AACvE;;AAOA,eAAsB,gBAAa;AAE/B,MAAI,CAACC,KAAAA,kBAAA;AAAqB;AAE1B,MAAIC,KAAAA,OAAO,cAAc,MAAM;AAAW;AAG1C,MAAI,OAAO,QAAQ,SAAS;AAAY;AAGxC,QAAM,EAAC,aAAa,aAAA,IAAgBH,oBAAA;AACpC,QAAM,cAAcC,qBAAAA,oBAAA;AAGpB,QAAM,aAAa,MAAM,sBAAsB,aAAa,cAAc,WAAW;AAGrF,QAAM,UAA2B;AAAA,IAC7B,MAAM;AAAA,IACN,GAAG;AAAA,EAAA;AAGP,UAAQ,KAAK,OAAO;AACxB;;AAOA,eAAsB,sBAClB,aACA,cACA,aAAyB;AAEzB,QAAM,eAAcG,sFAAAA,SAAAA;AACpB,QAAM,gBAAeA,qFAAAA,SAAAA;AACrB,QAAM,kBAAiBA,wEAAAA,SAAAA;AAEvB,QAAM,cAAc,qBAAqB,aAAa,mBAAmB;AACzE,QAAM,eAAe,sBAAsB,cAAc,sBAAsB;AAC/E,SAAO;AAAA,IACH,YAAY,YAAY,WAAoD;AAAA,IAC5E,aAAa,aAAa,YAAoD;AAAA,IAC9E,iBAAiB,eAAe,WAAW;AAAA,EAAA;AAEnD;;AAMA,SAAS,qBAAqB,aAAgC,eAAuB;AACjF,MAAI,CAAC,cAAc;AAAQ,WAAO;AAClC,SAAO,OAAO,YACV,OAAO,QAAQ,WAAW,EAAE,OAAM,aAAC,CAAC,GAAG,KAAK,MAAM,CAAC,cAAc,SAAS,MAAM,IAAc,GAAC,CAAA,UAAA,IAAA,SAAA,CAAA,CAAA,CAAC;AAExG;;AAMA,SAAS,sBAAsB,cAAkC,iBAAyB;AACtF,MAAI,CAAC,gBAAgB;AAAQ,WAAO;AACpC,SAAO,OAAO,YACV,OAAO,QAAQ,YAAY,EAAE,IAAG,aAAC,CAAC,CAAC,WAAW,OAAO,MAAM;AAAA,IACvD;AAAA,IACA,OAAO,YAAY,OAAO,QAAQ,OAAO,EAAE,OAAM,aAAC,CAAC,GAAG,KAAK,MAAM,CAAC,gBAAgB,SAAS,MAAM,MAAM,8BAAE;AAAA,EAAA,GAC5G,CAAA,UAAA,IAAA,SAAA,CAAA,CAAA,CAAC;AAEV;;;;;;;"}
@@ -0,0 +1,17 @@
1
+ import { JitFunctionsCache, PureFunctionsCache, MethodsCache } from '@mionjs/core';
2
+ export interface AOTCacheMessage {
3
+ type: 'mion-aot-caches';
4
+ jitFnsCode: string;
5
+ pureFnsCode: string;
6
+ routerCacheCode: string;
7
+ }
8
+ export interface SerializedCaches {
9
+ jitFnsCode: string;
10
+ pureFnsCode: string;
11
+ routerCacheCode: string;
12
+ }
13
+ export declare function getSerializedCaches(): Promise<SerializedCaches>;
14
+ export declare function emitAOTCaches(): Promise<void>;
15
+ export declare function serializeCachesToCode(jitFnsCache: JitFunctionsCache, pureFnsCache: PureFunctionsCache, routerCache: MethodsCache): Promise<SerializedCaches>;
16
+ export declare type __ΩAOTCacheMessage = any[];
17
+ export declare type __ΩSerializedCaches = any[];
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const core = require("@mionjs/core");
4
+ function getRouterFatalErrorResponse(returnErr, respHeaders) {
5
+ const body = {
6
+ "@thrownErrors": { [core.MION_ROUTES.platformError]: returnErr }
7
+ };
8
+ respHeaders.set("content-type", "application/json; charset=utf-8");
9
+ const response = {
10
+ statusCode: returnErr.statusCode || core.StatusCodes.SERVER_ERROR,
11
+ // Global errors are always unexpected
12
+ hasErrors: true,
13
+ headers: respHeaders,
14
+ body,
15
+ rawBody: JSON.stringify(body),
16
+ serializer: core.SerializerModes.json
17
+ // global errors are always json
18
+ };
19
+ return response;
20
+ }
21
+ function onExecutableError(context, executable, err) {
22
+ const response = context.response;
23
+ const path = executable.id;
24
+ const rpcError = err instanceof core.RpcError ? err : new core.RpcError({
25
+ statusCode: core.StatusCodes.UNEXPECTED_ERROR,
26
+ publicMessage: `Unknown error in handler "${path}" of route ExecutionChain.`,
27
+ originalError: err,
28
+ type: "unknown-error"
29
+ });
30
+ if (!response.hasErrors) response.headers.set("x-rpc-error", rpcError.type);
31
+ response.statusCode = rpcError.statusCode ?? core.StatusCodes.UNEXPECTED_ERROR;
32
+ response.hasErrors = true;
33
+ const thrownErrors = context.request.thrownErrors || {};
34
+ thrownErrors[path] = rpcError;
35
+ context.request.thrownErrors = thrownErrors;
36
+ }
37
+ exports.getRouterFatalErrorResponse = getRouterFatalErrorResponse;
38
+ exports.onExecutableError = onExecutableError;
39
+ //# sourceMappingURL=dispatchError.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatchError.cjs","sources":["../../../../src/lib/dispatchError.ts"],"sourcesContent":["import {RpcError, MION_ROUTES, Mutable, StatusCodes, SerializerModes} from '@mionjs/core';\nimport type {CallContext, MionHeaders, MionRequest, MionResponse, ResponseBody} from '../types/context.ts';\nimport type {RemoteMethod} from '../types/remoteMethods.ts';\n\n/**\n * Return a Response mion response for any error that happens before or outside the router.\n * to be used by any adapter layer. ie: node/http, aws/lambda, bun, etc.\n * Uses thrownErrors with a special platformError key to maintain consistency with route errors.\n * @param returnErr\n * @param respHeaders\n * @returns\n */\n\nexport function getRouterFatalErrorResponse(returnErr: RpcError<string>, respHeaders: MionHeaders): MionResponse {\n // Store platform error in thrownErrors with special platformError key\n const body: ResponseBody = {\n '@thrownErrors': {[MION_ROUTES.platformError]: returnErr},\n };\n respHeaders.set('content-type', 'application/json; charset=utf-8');\n const response: Mutable<MionResponse> = {\n statusCode: returnErr.statusCode || StatusCodes.SERVER_ERROR, // Global errors are always unexpected\n hasErrors: true,\n headers: respHeaders,\n body,\n rawBody: JSON.stringify(body),\n serializer: SerializerModes.json, // global errors are always json\n };\n return response;\n}\n\n/**\n * Handles errors during route dispatch.\n * All errors passed to this function are unexpected (thrown errors).\n * Expected errors are returned from handlers and added directly to response.body.\n * @param context\n * @param executable\n * @param err\n * @returns\n */\nexport function onExecutableError(context: CallContext, executable: RemoteMethod, err: any | RpcError<string> | Error) {\n const response = context.response as Mutable<MionResponse>;\n const path = executable.id;\n const rpcError: RpcError<string> =\n err instanceof RpcError\n ? err\n : new RpcError({\n statusCode: StatusCodes.UNEXPECTED_ERROR,\n publicMessage: `Unknown error in handler \"${path}\" of route ExecutionChain.`,\n originalError: err,\n type: 'unknown-error',\n });\n // only first error sets the error header\n if (!response.hasErrors) response.headers.set('x-rpc-error', rpcError.type);\n response.statusCode = rpcError.statusCode ?? StatusCodes.UNEXPECTED_ERROR;\n response.hasErrors = true;\n // Store unexpected errors for serialization\n const thrownErrors = context.request.thrownErrors || ({} as Record<string, RpcError<string>>);\n thrownErrors[path] = rpcError;\n (context.request as Mutable<MionRequest>).thrownErrors = thrownErrors;\n}\n"],"names":["MION_ROUTES","StatusCodes","SerializerModes","RpcError"],"mappings":";;;AAaO,SAAS,4BAA4B,WAA6B,aAAwC;AAE7G,QAAM,OAAqB;AAAA,IACvB,iBAAiB,EAAC,CAACA,iBAAY,aAAa,GAAG,UAAA;AAAA,EAAS;AAE5D,cAAY,IAAI,gBAAgB,iCAAiC;AACjE,QAAM,WAAkC;AAAA,IACpC,YAAY,UAAU,cAAcC,KAAAA,YAAY;AAAA;AAAA,IAChD,WAAW;AAAA,IACX,SAAS;AAAA,IACT;AAAA,IACA,SAAS,KAAK,UAAU,IAAI;AAAA,IAC5B,YAAYC,KAAAA,gBAAgB;AAAA;AAAA,EAAA;AAEhC,SAAO;AACX;AAWO,SAAS,kBAAkB,SAAsB,YAA0B,KAAqC;AACnH,QAAM,WAAW,QAAQ;AACzB,QAAM,OAAO,WAAW;AACxB,QAAM,WACF,eAAeC,KAAAA,WACT,MACA,IAAIA,KAAAA,SAAS;AAAA,IACT,YAAYF,KAAAA,YAAY;AAAA,IACxB,eAAe,6BAA6B,IAAI;AAAA,IAChD,eAAe;AAAA,IACf,MAAM;AAAA,EAAA,CACT;AAEX,MAAI,CAAC,SAAS,UAAW,UAAS,QAAQ,IAAI,eAAe,SAAS,IAAI;AAC1E,WAAS,aAAa,SAAS,cAAcA,KAAAA,YAAY;AACzD,WAAS,YAAY;AAErB,QAAM,eAAe,QAAQ,QAAQ,gBAAiB,CAAA;AACtD,eAAa,IAAI,IAAI;AACpB,UAAQ,QAAiC,eAAe;AAC7D;;;"}
@@ -0,0 +1,5 @@
1
+ import { RpcError } from '@mionjs/core';
2
+ import { CallContext, MionHeaders, MionResponse } from '../types/context.ts';
3
+ import { RemoteMethod } from '../types/remoteMethods.ts';
4
+ export declare function getRouterFatalErrorResponse(returnErr: RpcError<string>, respHeaders: MionHeaders): MionResponse;
5
+ export declare function onExecutableError(context: CallContext, executable: RemoteMethod, err: any | RpcError<string> | Error): void;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const core = require("@mionjs/core");
4
+ function route(handler, opts) {
5
+ return {
6
+ type: core.HandlerType.route,
7
+ handler,
8
+ options: opts
9
+ };
10
+ }
11
+ function query(handler, opts) {
12
+ return {
13
+ type: core.HandlerType.route,
14
+ handler,
15
+ options: { ...opts, isMutation: false }
16
+ };
17
+ }
18
+ function mutation(handler, opts) {
19
+ return {
20
+ type: core.HandlerType.route,
21
+ handler,
22
+ options: { ...opts, isMutation: true }
23
+ };
24
+ }
25
+ function middleFn(handler, opts) {
26
+ return {
27
+ type: core.HandlerType.middleFn,
28
+ handler,
29
+ options: opts
30
+ };
31
+ }
32
+ function headersFn(handler, opts) {
33
+ return {
34
+ type: core.HandlerType.headersMiddleFn,
35
+ handler,
36
+ options: opts
37
+ };
38
+ }
39
+ function rawMiddleFn(handler, opts) {
40
+ return {
41
+ type: core.HandlerType.rawMiddleFn,
42
+ handler,
43
+ options: opts
44
+ };
45
+ }
46
+ exports.headersFn = headersFn;
47
+ exports.middleFn = middleFn;
48
+ exports.mutation = mutation;
49
+ exports.query = query;
50
+ exports.rawMiddleFn = rawMiddleFn;
51
+ exports.route = route;
52
+ //# sourceMappingURL=handlers.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.cjs","sources":["../../../../src/lib/handlers.ts"],"sourcesContent":["/* ########\n * 2024 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {HeadersMiddleFnOptions, MiddleFnOptions, RawMiddleFnOptions, RouteOptions} from '../types/remoteMethods.ts';\nimport {HandlerType} from '@mionjs/core';\nimport {Handler, HeaderHandler, RawMiddleFnHandler} from '../types/handlers.ts';\nimport {HeadersMiddleFnDef, MiddleFnDef, RawMiddleFnDef, RouteDef} from '../types/definitions.ts';\n\n// ############# Route & MiddleFns initialization #############\n// these functions are just helpers to initialize the route & middleFns objects and keep route definitions clean\n\nexport function route<H extends Handler>(handler: H, opts?: RouteOptions): RouteDef<H> {\n return {\n type: HandlerType.route,\n handler,\n options: opts,\n };\n}\n\n/** Route handler for read-only queries. Uses GET with ?data=base64url on the client when payload fits. */\nexport function query<H extends Handler>(handler: H, opts?: RouteOptions): RouteDef<H> {\n return {\n type: HandlerType.route,\n handler,\n options: {...opts, isMutation: false},\n };\n}\n\n/** Route handler for mutations. Explicit alias for route() with isMutation: true. */\nexport function mutation<H extends Handler>(handler: H, opts?: RouteOptions): RouteDef<H> {\n return {\n type: HandlerType.route,\n handler,\n options: {...opts, isMutation: true},\n };\n}\n\nexport function middleFn<H extends Handler>(handler: H, opts?: MiddleFnOptions): MiddleFnDef<H> {\n return {\n type: HandlerType.middleFn,\n handler,\n options: opts,\n };\n}\n\n/**\n * MiddleFn for handling HTTP header parameters\n * Used to define middleFns that receive values from HTTP headers\n *\n * @example\n * ```ts\n * headersFn(['authorization'], (ctx, token: string): void => {\n * // token contains the value of the 'authorization' header\n * })\n * ```\n */\nexport function headersFn<H extends HeaderHandler>(handler: H, opts?: HeadersMiddleFnOptions): HeadersMiddleFnDef<H> {\n return {\n type: HandlerType.headersMiddleFn,\n handler,\n options: opts,\n };\n}\n\nexport function rawMiddleFn<H extends RawMiddleFnHandler>(handler: H, opts?: RawMiddleFnOptions): RawMiddleFnDef<H> {\n return {\n type: HandlerType.rawMiddleFn,\n handler,\n options: opts,\n };\n}\n"],"names":["HandlerType"],"mappings":";;;AAeO,SAAS,MAAyB,SAAY,MAAkC;AACnF,SAAO;AAAA,IACH,MAAMA,KAAAA,YAAY;AAAA,IAClB;AAAA,IACA,SAAS;AAAA,EAAA;AAEjB;AAGO,SAAS,MAAyB,SAAY,MAAkC;AACnF,SAAO;AAAA,IACH,MAAMA,KAAAA,YAAY;AAAA,IAClB;AAAA,IACA,SAAS,EAAC,GAAG,MAAM,YAAY,MAAA;AAAA,EAAK;AAE5C;AAGO,SAAS,SAA4B,SAAY,MAAkC;AACtF,SAAO;AAAA,IACH,MAAMA,KAAAA,YAAY;AAAA,IAClB;AAAA,IACA,SAAS,EAAC,GAAG,MAAM,YAAY,KAAA;AAAA,EAAI;AAE3C;AAEO,SAAS,SAA4B,SAAY,MAAwC;AAC5F,SAAO;AAAA,IACH,MAAMA,KAAAA,YAAY;AAAA,IAClB;AAAA,IACA,SAAS;AAAA,EAAA;AAEjB;AAaO,SAAS,UAAmC,SAAY,MAAsD;AACjH,SAAO;AAAA,IACH,MAAMA,KAAAA,YAAY;AAAA,IAClB;AAAA,IACA,SAAS;AAAA,EAAA;AAEjB;AAEO,SAAS,YAA0C,SAAY,MAA8C;AAChH,SAAO;AAAA,IACH,MAAMA,KAAAA,YAAY;AAAA,IAClB;AAAA,IACA,SAAS;AAAA,EAAA;AAEjB;;;;;;;"}
@@ -0,0 +1,9 @@
1
+ import { HeadersMiddleFnOptions, MiddleFnOptions, RawMiddleFnOptions, RouteOptions } from '../types/remoteMethods.ts';
2
+ import { Handler, HeaderHandler, RawMiddleFnHandler } from '../types/handlers.ts';
3
+ import { HeadersMiddleFnDef, MiddleFnDef, RawMiddleFnDef, RouteDef } from '../types/definitions.ts';
4
+ export declare function route<H extends Handler>(handler: H, opts?: RouteOptions): RouteDef<H>;
5
+ export declare function query<H extends Handler>(handler: H, opts?: RouteOptions): RouteDef<H>;
6
+ export declare function mutation<H extends Handler>(handler: H, opts?: RouteOptions): RouteDef<H>;
7
+ export declare function middleFn<H extends Handler>(handler: H, opts?: MiddleFnOptions): MiddleFnDef<H>;
8
+ export declare function headersFn<H extends HeaderHandler>(handler: H, opts?: HeadersMiddleFnOptions): HeadersMiddleFnDef<H>;
9
+ export declare function rawMiddleFn<H extends RawMiddleFnHandler>(handler: H, opts?: RawMiddleFnOptions): RawMiddleFnDef<H>;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ class MionHeadersImpl {
4
+ constructor(headers) {
5
+ this.headers = headers;
6
+ }
7
+ append(name, value) {
8
+ const nl = name.toLowerCase();
9
+ const existing = this.headers[nl];
10
+ const headerValue = toSingleHeader(value);
11
+ if (existing) {
12
+ this.headers[nl] = `${existing}, ${headerValue}`;
13
+ } else {
14
+ this.headers[nl] = headerValue;
15
+ }
16
+ }
17
+ delete(name) {
18
+ const nl = name.toLowerCase();
19
+ delete this.headers[nl];
20
+ }
21
+ get(name) {
22
+ const nl = name.toLowerCase();
23
+ return this.headers[nl];
24
+ }
25
+ set(name, value) {
26
+ const ln = name.toLowerCase();
27
+ this.headers[ln] = value;
28
+ }
29
+ has(name) {
30
+ const nl = name.toLowerCase();
31
+ return !!this.headers[nl];
32
+ }
33
+ entries() {
34
+ return new Map(Object.entries(this.headers)).entries();
35
+ }
36
+ keys() {
37
+ return new Map(Object.entries(this.headers)).keys();
38
+ }
39
+ values() {
40
+ return new Map(Object.entries(this.headers)).values();
41
+ }
42
+ }
43
+ function headersFromRecord(headersObj, skipToLower = false) {
44
+ const headers = parseHeaders(headersObj, skipToLower);
45
+ return new MionHeadersImpl(headers);
46
+ }
47
+ function toSingleHeader(value) {
48
+ if (Array.isArray(value)) return value.join(", ");
49
+ return value;
50
+ }
51
+ function parseHeaders(headersObj, skipToLower = false) {
52
+ if (skipToLower) return headersObj;
53
+ const entries = Object.entries(headersObj);
54
+ const headers = {};
55
+ for (let i = 0; i < entries.length; i++) {
56
+ const [name, value] = entries[i];
57
+ if (!value) continue;
58
+ const ln = name.toLowerCase();
59
+ headers[ln] = toSingleHeader(value);
60
+ }
61
+ return headers;
62
+ }
63
+ exports.headersFromRecord = headersFromRecord;
64
+ //# sourceMappingURL=headers.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers.cjs","sources":["../../../../src/lib/headers.ts"],"sourcesContent":["/* ########\n * 2022 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport type {MionHeaders} from '../types/context.ts';\n\n// ############# PUBLIC METHODS #############\n\ntype HeadersRecord = Record<string, string>;\n\n/**\n * Reusable class for managing HTTP headers with case-insensitive access\n * Similar to the fetch Headers API but optimized for performance\n * https://developer.mozilla.org/en-US/docs/Web/API/Headers\n */\nclass MionHeadersImpl implements MionHeaders {\n constructor(private headers: HeadersRecord) {}\n\n append(name: string, value: string): void {\n const nl = name.toLowerCase();\n const existing = this.headers[nl];\n const headerValue = toSingleHeader(value);\n if (existing) {\n this.headers[nl] = `${existing}, ${headerValue}`;\n } else {\n this.headers[nl] = headerValue;\n }\n }\n\n delete(name: string): void {\n const nl = name.toLowerCase();\n delete this.headers[nl];\n }\n\n get(name: string): string | undefined | null {\n const nl = name.toLowerCase();\n return this.headers[nl];\n }\n\n set(name: string, value: string): void {\n const ln = name.toLowerCase();\n this.headers[ln] = value as string;\n }\n\n has(name: string): boolean {\n const nl = name.toLowerCase();\n return !!this.headers[nl];\n }\n\n entries(): IterableIterator<[string, string]> {\n return new Map(Object.entries(this.headers)).entries();\n }\n\n keys(): IterableIterator<string> {\n return new Map(Object.entries(this.headers)).keys();\n }\n\n values(): IterableIterator<string> {\n return new Map(Object.entries(this.headers)).values();\n }\n}\n\n/**\n * Return a Headers Like object from a Headers Record structure (Record<string, string | string[]>)\n * Returned Headers object is similar to the fetch Headers object but not exactly the same\n * https://developer.mozilla.org/en-US/docs/Web/API/Headers\n *\n * This is optimized to avoid creating the Headers Map if it's not strictly needed.\n * ie. for incoming header that only use get method, the Headers object is never created and instead the HeadersRecord is used directly.\n *\n * This function can be used to create a Headers object from incoming request that has the headers in an object structure.\n * ie IncomingMessage.headers or ApiGatewayEvent.headers\n *\n * @param headersObj\n * @returns\n */\nexport function headersFromRecord(headersObj: Record<string, string>, skipToLower = false): MionHeaders {\n // lazy load headers map\n const headers = parseHeaders(headersObj, skipToLower);\n return new MionHeadersImpl(headers);\n}\n\nfunction toSingleHeader(value: string | number): string {\n if (Array.isArray(value)) return value.join(', ');\n return value as string;\n}\n\nfunction parseHeaders(headersObj: Record<string, string>, skipToLower = false): HeadersRecord {\n if (skipToLower) return headersObj;\n const entries = Object.entries(headersObj);\n const headers: HeadersRecord = {};\n for (let i = 0; i < entries.length; i++) {\n const [name, value] = entries[i];\n if (!value) continue;\n const ln = name.toLowerCase();\n headers[ln] = toSingleHeader(value);\n }\n return headers;\n}\n"],"names":[],"mappings":";;AAkBA,MAAM,gBAAuC;AAAA,EACzC,YAAoB,SAAwB;AAAxB,SAAA,UAAA;AAAA,EAAyB;AAAA,EAE7C,OAAO,MAAc,OAAqB;AACtC,UAAM,KAAK,KAAK,YAAA;AAChB,UAAM,WAAW,KAAK,QAAQ,EAAE;AAChC,UAAM,cAAc,eAAe,KAAK;AACxC,QAAI,UAAU;AACV,WAAK,QAAQ,EAAE,IAAI,GAAG,QAAQ,KAAK,WAAW;AAAA,IAClD,OAAO;AACH,WAAK,QAAQ,EAAE,IAAI;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,OAAO,MAAoB;AACvB,UAAM,KAAK,KAAK,YAAA;AAChB,WAAO,KAAK,QAAQ,EAAE;AAAA,EAC1B;AAAA,EAEA,IAAI,MAAyC;AACzC,UAAM,KAAK,KAAK,YAAA;AAChB,WAAO,KAAK,QAAQ,EAAE;AAAA,EAC1B;AAAA,EAEA,IAAI,MAAc,OAAqB;AACnC,UAAM,KAAK,KAAK,YAAA;AAChB,SAAK,QAAQ,EAAE,IAAI;AAAA,EACvB;AAAA,EAEA,IAAI,MAAuB;AACvB,UAAM,KAAK,KAAK,YAAA;AAChB,WAAO,CAAC,CAAC,KAAK,QAAQ,EAAE;AAAA,EAC5B;AAAA,EAEA,UAA8C;AAC1C,WAAO,IAAI,IAAI,OAAO,QAAQ,KAAK,OAAO,CAAC,EAAE,QAAA;AAAA,EACjD;AAAA,EAEA,OAAiC;AAC7B,WAAO,IAAI,IAAI,OAAO,QAAQ,KAAK,OAAO,CAAC,EAAE,KAAA;AAAA,EACjD;AAAA,EAEA,SAAmC;AAC/B,WAAO,IAAI,IAAI,OAAO,QAAQ,KAAK,OAAO,CAAC,EAAE,OAAA;AAAA,EACjD;AACJ;AAgBO,SAAS,kBAAkB,YAAoC,cAAc,OAAoB;AAEpG,QAAM,UAAU,aAAa,YAAY,WAAW;AACpD,SAAO,IAAI,gBAAgB,OAAO;AACtC;AAEA,SAAS,eAAe,OAAgC;AACpD,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,KAAK,IAAI;AAChD,SAAO;AACX;AAEA,SAAS,aAAa,YAAoC,cAAc,OAAsB;AAC1F,MAAI,YAAa,QAAO;AACxB,QAAM,UAAU,OAAO,QAAQ,UAAU;AACzC,QAAM,UAAyB,CAAA;AAC/B,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,UAAM,CAAC,MAAM,KAAK,IAAI,QAAQ,CAAC;AAC/B,QAAI,CAAC,MAAO;AACZ,UAAM,KAAK,KAAK,YAAA;AAChB,YAAQ,EAAE,IAAI,eAAe,KAAK;AAAA,EACtC;AACA,SAAO;AACX;;"}
@@ -0,0 +1,2 @@
1
+ import { MionHeaders } from '../types/context.ts';
2
+ export declare function headersFromRecord(headersObj: Record<string, string>, skipToLower?: boolean): MionHeaders;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const core = require("@mionjs/core");
4
+ const src_constants = require("../constants.cjs");
5
+ exports.persistedMethods = {};
6
+ function addToPersistedMethods(id, method) {
7
+ if (!shouldCompile() || !!exports.persistedMethods[id]) return;
8
+ exports.persistedMethods[id] = method;
9
+ }
10
+ function getPersistedMethod(id, handler) {
11
+ const method = exports.persistedMethods?.[id];
12
+ if (!method) return;
13
+ return restorePersistedMethod(method, handler);
14
+ }
15
+ function getPersistedMethodMetadata(id) {
16
+ const method = exports.persistedMethods[id];
17
+ return method;
18
+ }
19
+ function getPersistedMethods() {
20
+ return exports.persistedMethods;
21
+ }
22
+ function setPersistedMethods(newCompiled) {
23
+ exports.persistedMethods = newCompiled;
24
+ }
25
+ function resetPersistedMethods() {
26
+ exports.persistedMethods = {};
27
+ }
28
+ function restorePersistedMethod(method, handler) {
29
+ const restored = method;
30
+ if (restored.paramsJitFns && restored.returnJitFns && restored.paramNames && !!restored.handler)
31
+ return method;
32
+ restored.handler = handler;
33
+ restored.paramsJitFns = core.getJitFunctionsFromHash(method.paramsJitHash);
34
+ restored.returnJitFns = core.getJitFunctionsFromHash(method.returnJitHash);
35
+ if (src_constants.IS_TEST_ENV) restored.isRestored = true;
36
+ return restored;
37
+ }
38
+ function shouldCompile() {
39
+ return core.isMionAOTEmitMode();
40
+ }
41
+ function loadCompiledMethods(compiledMethods) {
42
+ for (const [key, value] of Object.entries(compiledMethods)) {
43
+ if (!(key in exports.persistedMethods)) {
44
+ exports.persistedMethods[key] = value;
45
+ }
46
+ }
47
+ }
48
+ exports.addToPersistedMethods = addToPersistedMethods;
49
+ exports.getPersistedMethod = getPersistedMethod;
50
+ exports.getPersistedMethodMetadata = getPersistedMethodMetadata;
51
+ exports.getPersistedMethods = getPersistedMethods;
52
+ exports.loadCompiledMethods = loadCompiledMethods;
53
+ exports.resetPersistedMethods = resetPersistedMethods;
54
+ exports.setPersistedMethods = setPersistedMethods;
55
+ //# sourceMappingURL=methodsCache.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"methodsCache.cjs","sources":["../../../../src/lib/methodsCache.ts"],"sourcesContent":["/* ########\n * 2024 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {MethodsCache, MethodMetadata, isMionAOTEmitMode, getJitFunctionsFromHash} from '@mionjs/core';\nimport {RemoteMethod} from '../types/remoteMethods.ts';\nimport {AnyHandler} from '../types/handlers.ts';\nimport {IS_TEST_ENV} from '../constants.ts';\n\nexport let persistedMethods: MethodsCache = {};\n\n// ############# PUBLIC METHODS #############\n\nexport function addToPersistedMethods(id: string, method: RemoteMethod) {\n if (!shouldCompile() || !!persistedMethods[id]) return;\n persistedMethods[id] = method;\n}\n\nexport function getPersistedMethod(id: string, handler: AnyHandler): RemoteMethod | undefined {\n const method = persistedMethods?.[id];\n if (!method) return;\n return restorePersistedMethod(method, handler);\n}\n\n/** Gets method metadata from the persisted methods cache by id. */\nexport function getPersistedMethodMetadata(id: string): MethodMetadata | undefined {\n const method = persistedMethods[id];\n return method;\n}\n\nexport function getPersistedMethods(): Readonly<MethodsCache> {\n return persistedMethods;\n}\n\nexport function setPersistedMethods(newCompiled: MethodsCache) {\n persistedMethods = newCompiled;\n}\n\nexport function resetPersistedMethods() {\n persistedMethods = {};\n}\n\nfunction restorePersistedMethod(method: MethodMetadata, handler: AnyHandler): RemoteMethod {\n const restored = method as any as RemoteMethod;\n if (restored.paramsJitFns && restored.returnJitFns && restored.paramNames && !!restored.handler)\n return method as RemoteMethod;\n restored.handler = handler;\n restored.paramsJitFns = getJitFunctionsFromHash(method.paramsJitHash);\n restored.returnJitFns = getJitFunctionsFromHash(method.returnJitHash);\n if (IS_TEST_ENV) (restored as any).isRestored = true;\n return restored;\n}\n\nfunction shouldCompile() {\n return isMionAOTEmitMode();\n}\n\n/**\n * Loads compiled methods data into the persistedMethods cache.\n * This function merges the provided methods data into the existing persistedMethods without overwriting existing entries.\n * @param compiledMethods - Object containing compiled methods data to merge into the cache\n */\nexport function loadCompiledMethods(compiledMethods: MethodsCache) {\n for (const [key, value] of Object.entries(compiledMethods)) {\n if (!(key in persistedMethods)) {\n persistedMethods[key] = value;\n }\n }\n}\n"],"names":["persistedMethods","getJitFunctionsFromHash","IS_TEST_ENV","isMionAOTEmitMode"],"mappings":";;;;AAYWA,QAAAA,mBAAiC,CAAA;AAIrC,SAAS,sBAAsB,IAAY,QAAsB;AACpE,MAAI,CAAC,cAAA,KAAmB,CAAC,CAACA,QAAAA,iBAAiB,EAAE,EAAG;AAChDA,UAAAA,iBAAiB,EAAE,IAAI;AAC3B;AAEO,SAAS,mBAAmB,IAAY,SAA+C;AAC1F,QAAM,SAASA,QAAAA,mBAAmB,EAAE;AACpC,MAAI,CAAC,OAAQ;AACb,SAAO,uBAAuB,QAAQ,OAAO;AACjD;AAGO,SAAS,2BAA2B,IAAwC;AAC/E,QAAM,SAASA,QAAAA,iBAAiB,EAAE;AAClC,SAAO;AACX;AAEO,SAAS,sBAA8C;AAC1D,SAAOA,QAAAA;AACX;AAEO,SAAS,oBAAoB,aAA2B;AAC3DA,UAAAA,mBAAmB;AACvB;AAEO,SAAS,wBAAwB;AACpCA,UAAAA,mBAAmB,CAAA;AACvB;AAEA,SAAS,uBAAuB,QAAwB,SAAmC;AACvF,QAAM,WAAW;AACjB,MAAI,SAAS,gBAAgB,SAAS,gBAAgB,SAAS,cAAc,CAAC,CAAC,SAAS;AACpF,WAAO;AACX,WAAS,UAAU;AACnB,WAAS,eAAeC,6BAAwB,OAAO,aAAa;AACpE,WAAS,eAAeA,6BAAwB,OAAO,aAAa;AACpE,MAAIC,cAAAA,YAAc,UAAiB,aAAa;AAChD,SAAO;AACX;AAEA,SAAS,gBAAgB;AACrB,SAAOC,uBAAA;AACX;AAOO,SAAS,oBAAoB,iBAA+B;AAC/D,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,eAAe,GAAG;AACxD,QAAI,EAAE,OAAOH,QAAAA,mBAAmB;AAC5BA,cAAAA,iBAAiB,GAAG,IAAI;AAAA,IAC5B;AAAA,EACJ;AACJ;;;;;;;;"}
@@ -0,0 +1,11 @@
1
+ import { MethodsCache, MethodMetadata } from '@mionjs/core';
2
+ import { RemoteMethod } from '../types/remoteMethods.ts';
3
+ import { AnyHandler } from '../types/handlers.ts';
4
+ export declare let persistedMethods: MethodsCache;
5
+ export declare function addToPersistedMethods(id: string, method: RemoteMethod): void;
6
+ export declare function getPersistedMethod(id: string, handler: AnyHandler): RemoteMethod | undefined;
7
+ export declare function getPersistedMethodMetadata(id: string): MethodMetadata | undefined;
8
+ export declare function getPersistedMethods(): Readonly<MethodsCache>;
9
+ export declare function setPersistedMethods(newCompiled: MethodsCache): void;
10
+ export declare function resetPersistedMethods(): void;
11
+ export declare function loadCompiledMethods(compiledMethods: MethodsCache): void;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const core = require("@mionjs/core");
4
+ const __ΩQueryBodyResult = ["rawBody", "SerializerCode", "bodyType", "QueryBodyResult", 'P&4!"w"4#Mw$y'];
5
+ function decodeQueryBody(urlQuery, rawBody) {
6
+ if (rawBody)
7
+ return void 0;
8
+ if (!urlQuery)
9
+ return void 0;
10
+ const dataValue = extractDataParam(urlQuery);
11
+ if (!dataValue)
12
+ return void 0;
13
+ return {
14
+ rawBody: core.fromBase64Url(dataValue),
15
+ bodyType: core.SerializerModes.stringifyJson
16
+ };
17
+ }
18
+ decodeQueryBody.__type = ["urlQuery", "rawBody", () => __ΩQueryBodyResult, "decodeQueryBody", 'PP&-J2!#2"Pn#-J/$'];
19
+ function extractDataParam(urlQuery) {
20
+ if (urlQuery.startsWith("data=")) {
21
+ const ampIndex2 = urlQuery.indexOf("&", 5);
22
+ return ampIndex2 === -1 ? urlQuery.slice(5) : urlQuery.slice(5, ampIndex2);
23
+ }
24
+ const idx = urlQuery.indexOf("&data=");
25
+ if (idx === -1)
26
+ return void 0;
27
+ const start = idx + 6;
28
+ const ampIndex = urlQuery.indexOf("&", start);
29
+ return ampIndex === -1 ? urlQuery.slice(start) : urlQuery.slice(start, ampIndex);
30
+ }
31
+ extractDataParam.__type = ["urlQuery", "extractDataParam", 'P&2!P&-J/"'];
32
+ exports.__ΩQueryBodyResult = __ΩQueryBodyResult;
33
+ exports.decodeQueryBody = decodeQueryBody;
34
+ //# sourceMappingURL=queryBody.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryBody.cjs","sources":["../../../../src/lib/queryBody.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 {fromBase64Url, SerializerModes} from '@mionjs/core';\nimport type {SerializerCode} from '@mionjs/core';\n\n/** Result of decoding a base64url query body from ?data= */\nexport interface QueryBodyResult {\n rawBody: string;\n bodyType: SerializerCode;\n}\n\n/** Detects and decodes base64url-encoded request body from ?data= query param.\n * Returns decoded body + bodyType if found, undefined otherwise. */\nexport function decodeQueryBody(urlQuery: string | undefined, rawBody: unknown): QueryBodyResult | undefined {\n if (rawBody) return undefined;\n if (!urlQuery) return undefined;\n const dataValue = extractDataParam(urlQuery);\n if (!dataValue) return undefined;\n return {\n rawBody: fromBase64Url(dataValue),\n bodyType: SerializerModes.stringifyJson,\n };\n}\n\nfunction extractDataParam(urlQuery: string): string | undefined {\n if (urlQuery.startsWith('data=')) {\n const ampIndex = urlQuery.indexOf('&', 5);\n return ampIndex === -1 ? urlQuery.slice(5) : urlQuery.slice(5, ampIndex);\n }\n const idx = urlQuery.indexOf('&data=');\n if (idx === -1) return undefined;\n const start = idx + 6;\n const ampIndex = urlQuery.indexOf('&', start);\n return ampIndex === -1 ? urlQuery.slice(start) : urlQuery.slice(start, ampIndex);\n}\n"],"names":["fromBase64Url","SerializerModes","ampIndex"],"mappings":";;;;AAkBM,SAAU,gBAAgB,UAA8B,SAAgB;AAC1E,MAAI;AAAS,WAAO;AACpB,MAAI,CAAC;AAAU,WAAO;AACtB,QAAM,YAAY,iBAAiB,QAAQ;AAC3C,MAAI,CAAC;AAAW,WAAO;AACvB,SAAO;AAAA,IACH,SAASA,KAAAA,cAAc,SAAS;AAAA,IAChC,UAAUC,KAAAA,gBAAgB;AAAA,EAAA;AAElC;;AAEA,SAAS,iBAAiB,UAAgB;AACtC,MAAI,SAAS,WAAW,OAAO,GAAG;AAC9B,UAAMC,YAAW,SAAS,QAAQ,KAAK,CAAC;AACxC,WAAOA,cAAa,KAAK,SAAS,MAAM,CAAC,IAAI,SAAS,MAAM,GAAGA,SAAQ;AAAA,EAC3E;AACA,QAAM,MAAM,SAAS,QAAQ,QAAQ;AACrC,MAAI,QAAQ;AAAI,WAAO;AACvB,QAAM,QAAQ,MAAM;AACpB,QAAM,WAAW,SAAS,QAAQ,KAAK,KAAK;AAC5C,SAAO,aAAa,KAAK,SAAS,MAAM,KAAK,IAAI,SAAS,MAAM,OAAO,QAAQ;AACnF;;;;"}
@@ -0,0 +1,7 @@
1
+ import { SerializerCode } from '@mionjs/core';
2
+ export interface QueryBodyResult {
3
+ rawBody: string;
4
+ bodyType: SerializerCode;
5
+ }
6
+ export declare function decodeQueryBody(urlQuery: string | undefined, rawBody: unknown): QueryBodyResult | undefined;
7
+ export declare type __ΩQueryBodyResult = any[];