@relkit/compiler 0.0.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 (303) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/config-loader-deployment.d.ts +7 -0
  4. package/dist/config-loader-deployment.d.ts.map +1 -0
  5. package/dist/config-loader-deployment.js +36 -0
  6. package/dist/config-loader-deployment.js.map +1 -0
  7. package/dist/config-loader-runtime.d.ts +30 -0
  8. package/dist/config-loader-runtime.d.ts.map +1 -0
  9. package/dist/config-loader-runtime.js +105 -0
  10. package/dist/config-loader-runtime.js.map +1 -0
  11. package/dist/config-loader-types.d.ts +107 -0
  12. package/dist/config-loader-types.d.ts.map +1 -0
  13. package/dist/config-loader-types.js +37 -0
  14. package/dist/config-loader-types.js.map +1 -0
  15. package/dist/config-loader-utils.d.ts +10 -0
  16. package/dist/config-loader-utils.d.ts.map +1 -0
  17. package/dist/config-loader-utils.js +88 -0
  18. package/dist/config-loader-utils.js.map +1 -0
  19. package/dist/config-loader.d.ts +12 -0
  20. package/dist/config-loader.d.ts.map +1 -0
  21. package/dist/config-loader.js +89 -0
  22. package/dist/config-loader.js.map +1 -0
  23. package/dist/context-registry.d.ts +7 -0
  24. package/dist/context-registry.d.ts.map +1 -0
  25. package/dist/context-registry.js +55 -0
  26. package/dist/context-registry.js.map +1 -0
  27. package/dist/conventions.d.ts +32 -0
  28. package/dist/conventions.d.ts.map +1 -0
  29. package/dist/conventions.js +125 -0
  30. package/dist/conventions.js.map +1 -0
  31. package/dist/discovery/ast-prefilter-utils.d.ts +4 -0
  32. package/dist/discovery/ast-prefilter-utils.d.ts.map +1 -0
  33. package/dist/discovery/ast-prefilter-utils.js +186 -0
  34. package/dist/discovery/ast-prefilter-utils.js.map +1 -0
  35. package/dist/discovery/ast-prefilter.d.ts +36 -0
  36. package/dist/discovery/ast-prefilter.d.ts.map +1 -0
  37. package/dist/discovery/ast-prefilter.js +33 -0
  38. package/dist/discovery/ast-prefilter.js.map +1 -0
  39. package/dist/discovery/data-model-isolation.d.ts +8 -0
  40. package/dist/discovery/data-model-isolation.d.ts.map +1 -0
  41. package/dist/discovery/data-model-isolation.js +52 -0
  42. package/dist/discovery/data-model-isolation.js.map +1 -0
  43. package/dist/discovery/evaluator-child-utils.d.ts +4 -0
  44. package/dist/discovery/evaluator-child-utils.d.ts.map +1 -0
  45. package/dist/discovery/evaluator-child-utils.js +48 -0
  46. package/dist/discovery/evaluator-child-utils.js.map +1 -0
  47. package/dist/discovery/evaluator-child.d.ts +2 -0
  48. package/dist/discovery/evaluator-child.d.ts.map +1 -0
  49. package/dist/discovery/evaluator-child.js +139 -0
  50. package/dist/discovery/evaluator-child.js.map +1 -0
  51. package/dist/discovery/evaluator-detector-files.d.ts +9 -0
  52. package/dist/discovery/evaluator-detector-files.d.ts.map +1 -0
  53. package/dist/discovery/evaluator-detector-files.js +105 -0
  54. package/dist/discovery/evaluator-detector-files.js.map +1 -0
  55. package/dist/discovery/evaluator-detector-network.d.ts +6 -0
  56. package/dist/discovery/evaluator-detector-network.d.ts.map +1 -0
  57. package/dist/discovery/evaluator-detector-network.js +109 -0
  58. package/dist/discovery/evaluator-detector-network.js.map +1 -0
  59. package/dist/discovery/evaluator-detector-timers.d.ts +9 -0
  60. package/dist/discovery/evaluator-detector-timers.d.ts.map +1 -0
  61. package/dist/discovery/evaluator-detector-timers.js +105 -0
  62. package/dist/discovery/evaluator-detector-timers.js.map +1 -0
  63. package/dist/discovery/evaluator-detectors.d.ts +18 -0
  64. package/dist/discovery/evaluator-detectors.d.ts.map +1 -0
  65. package/dist/discovery/evaluator-detectors.js +54 -0
  66. package/dist/discovery/evaluator-detectors.js.map +1 -0
  67. package/dist/discovery/evaluator-protocol.d.ts +94 -0
  68. package/dist/discovery/evaluator-protocol.d.ts.map +1 -0
  69. package/dist/discovery/evaluator-protocol.js +89 -0
  70. package/dist/discovery/evaluator-protocol.js.map +1 -0
  71. package/dist/discovery/evaluator-request.d.ts +18 -0
  72. package/dist/discovery/evaluator-request.d.ts.map +1 -0
  73. package/dist/discovery/evaluator-request.js +49 -0
  74. package/dist/discovery/evaluator-request.js.map +1 -0
  75. package/dist/discovery/evaluator-snapshot.d.ts +12 -0
  76. package/dist/discovery/evaluator-snapshot.d.ts.map +1 -0
  77. package/dist/discovery/evaluator-snapshot.js +87 -0
  78. package/dist/discovery/evaluator-snapshot.js.map +1 -0
  79. package/dist/discovery/evaluator.d.ts +8 -0
  80. package/dist/discovery/evaluator.d.ts.map +1 -0
  81. package/dist/discovery/evaluator.js +123 -0
  82. package/dist/discovery/evaluator.js.map +1 -0
  83. package/dist/discovery/extract.d.ts +21 -0
  84. package/dist/discovery/extract.d.ts.map +1 -0
  85. package/dist/discovery/extract.js +60 -0
  86. package/dist/discovery/extract.js.map +1 -0
  87. package/dist/discovery/source-facts-factory.d.ts +5 -0
  88. package/dist/discovery/source-facts-factory.d.ts.map +1 -0
  89. package/dist/discovery/source-facts-factory.js +109 -0
  90. package/dist/discovery/source-facts-factory.js.map +1 -0
  91. package/dist/discovery/source-facts-types.d.ts +52 -0
  92. package/dist/discovery/source-facts-types.d.ts.map +1 -0
  93. package/dist/discovery/source-facts-types.js +2 -0
  94. package/dist/discovery/source-facts-types.js.map +1 -0
  95. package/dist/discovery/source-facts.d.ts +6 -0
  96. package/dist/discovery/source-facts.d.ts.map +1 -0
  97. package/dist/discovery/source-facts.js +141 -0
  98. package/dist/discovery/source-facts.js.map +1 -0
  99. package/dist/discovery/source-id-route.d.ts +3 -0
  100. package/dist/discovery/source-id-route.d.ts.map +1 -0
  101. package/dist/discovery/source-id-route.js +61 -0
  102. package/dist/discovery/source-id-route.js.map +1 -0
  103. package/dist/discovery/source-id.d.ts +36 -0
  104. package/dist/discovery/source-id.d.ts.map +1 -0
  105. package/dist/discovery/source-id.js +146 -0
  106. package/dist/discovery/source-id.js.map +1 -0
  107. package/dist/discovery/source-map-utils.d.ts +10 -0
  108. package/dist/discovery/source-map-utils.d.ts.map +1 -0
  109. package/dist/discovery/source-map-utils.js +29 -0
  110. package/dist/discovery/source-map-utils.js.map +1 -0
  111. package/dist/discovery/source-map.d.ts +26 -0
  112. package/dist/discovery/source-map.d.ts.map +1 -0
  113. package/dist/discovery/source-map.js +119 -0
  114. package/dist/discovery/source-map.js.map +1 -0
  115. package/dist/event-registry.d.ts +9 -0
  116. package/dist/event-registry.d.ts.map +1 -0
  117. package/dist/event-registry.js +43 -0
  118. package/dist/event-registry.js.map +1 -0
  119. package/dist/generate-manifest-event.d.ts +5 -0
  120. package/dist/generate-manifest-event.d.ts.map +1 -0
  121. package/dist/generate-manifest-event.js +81 -0
  122. package/dist/generate-manifest-event.js.map +1 -0
  123. package/dist/generate-manifest-expressions.d.ts +12 -0
  124. package/dist/generate-manifest-expressions.d.ts.map +1 -0
  125. package/dist/generate-manifest-expressions.js +141 -0
  126. package/dist/generate-manifest-expressions.js.map +1 -0
  127. package/dist/generate-manifest-format.d.ts +4 -0
  128. package/dist/generate-manifest-format.d.ts.map +1 -0
  129. package/dist/generate-manifest-format.js +74 -0
  130. package/dist/generate-manifest-format.js.map +1 -0
  131. package/dist/generate-manifest-identities.d.ts +6 -0
  132. package/dist/generate-manifest-identities.d.ts.map +1 -0
  133. package/dist/generate-manifest-identities.js +115 -0
  134. package/dist/generate-manifest-identities.js.map +1 -0
  135. package/dist/generate-manifest-utils.d.ts +23 -0
  136. package/dist/generate-manifest-utils.d.ts.map +1 -0
  137. package/dist/generate-manifest-utils.js +125 -0
  138. package/dist/generate-manifest-utils.js.map +1 -0
  139. package/dist/generate-manifest.d.ts +30 -0
  140. package/dist/generate-manifest.d.ts.map +1 -0
  141. package/dist/generate-manifest.js +89 -0
  142. package/dist/generate-manifest.js.map +1 -0
  143. package/dist/generated-artifacts.d.ts +69 -0
  144. package/dist/generated-artifacts.d.ts.map +1 -0
  145. package/dist/generated-artifacts.js +124 -0
  146. package/dist/generated-artifacts.js.map +1 -0
  147. package/dist/index.d.ts +17 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +17 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/middleware-coverage.d.ts +12 -0
  152. package/dist/middleware-coverage.d.ts.map +1 -0
  153. package/dist/middleware-coverage.js +90 -0
  154. package/dist/middleware-coverage.js.map +1 -0
  155. package/dist/normalize-compat.d.ts +26 -0
  156. package/dist/normalize-compat.d.ts.map +1 -0
  157. package/dist/normalize-compat.js +155 -0
  158. package/dist/normalize-compat.js.map +1 -0
  159. package/dist/normalize-event-listener.d.ts +11 -0
  160. package/dist/normalize-event-listener.d.ts.map +1 -0
  161. package/dist/normalize-event-listener.js +123 -0
  162. package/dist/normalize-event-listener.js.map +1 -0
  163. package/dist/normalize-event-validation.d.ts +4 -0
  164. package/dist/normalize-event-validation.d.ts.map +1 -0
  165. package/dist/normalize-event-validation.js +137 -0
  166. package/dist/normalize-event-validation.js.map +1 -0
  167. package/dist/normalize-generated-function.d.ts +10 -0
  168. package/dist/normalize-generated-function.d.ts.map +1 -0
  169. package/dist/normalize-generated-function.js +20 -0
  170. package/dist/normalize-generated-function.js.map +1 -0
  171. package/dist/normalize-graph-app.d.ts +8 -0
  172. package/dist/normalize-graph-app.d.ts.map +1 -0
  173. package/dist/normalize-graph-app.js +71 -0
  174. package/dist/normalize-graph-app.js.map +1 -0
  175. package/dist/normalize-graph-config.d.ts +5 -0
  176. package/dist/normalize-graph-config.d.ts.map +1 -0
  177. package/dist/normalize-graph-config.js +97 -0
  178. package/dist/normalize-graph-config.js.map +1 -0
  179. package/dist/normalize-graph-edges.d.ts +3 -0
  180. package/dist/normalize-graph-edges.d.ts.map +1 -0
  181. package/dist/normalize-graph-edges.js +139 -0
  182. package/dist/normalize-graph-edges.js.map +1 -0
  183. package/dist/normalize-graph-nodes.d.ts +3 -0
  184. package/dist/normalize-graph-nodes.d.ts.map +1 -0
  185. package/dist/normalize-graph-nodes.js +184 -0
  186. package/dist/normalize-graph-nodes.js.map +1 -0
  187. package/dist/normalize-graph-providers.d.ts +4 -0
  188. package/dist/normalize-graph-providers.d.ts.map +1 -0
  189. package/dist/normalize-graph-providers.js +63 -0
  190. package/dist/normalize-graph-providers.js.map +1 -0
  191. package/dist/normalize-graph-services.d.ts +2 -0
  192. package/dist/normalize-graph-services.d.ts.map +1 -0
  193. package/dist/normalize-graph-services.js +23 -0
  194. package/dist/normalize-graph-services.js.map +1 -0
  195. package/dist/normalize-graph-types.d.ts +26 -0
  196. package/dist/normalize-graph-types.d.ts.map +1 -0
  197. package/dist/normalize-graph-types.js +2 -0
  198. package/dist/normalize-graph-types.js.map +1 -0
  199. package/dist/normalize-graph-utils.d.ts +4 -0
  200. package/dist/normalize-graph-utils.d.ts.map +1 -0
  201. package/dist/normalize-graph-utils.js +29 -0
  202. package/dist/normalize-graph-utils.js.map +1 -0
  203. package/dist/normalize-graph.d.ts +4 -0
  204. package/dist/normalize-graph.d.ts.map +1 -0
  205. package/dist/normalize-graph.js +21 -0
  206. package/dist/normalize-graph.js.map +1 -0
  207. package/dist/normalize-http-validation.d.ts +8 -0
  208. package/dist/normalize-http-validation.d.ts.map +1 -0
  209. package/dist/normalize-http-validation.js +86 -0
  210. package/dist/normalize-http-validation.js.map +1 -0
  211. package/dist/normalize-identity-rewrite.d.ts +3 -0
  212. package/dist/normalize-identity-rewrite.d.ts.map +1 -0
  213. package/dist/normalize-identity-rewrite.js +30 -0
  214. package/dist/normalize-identity-rewrite.js.map +1 -0
  215. package/dist/normalize-job-validation.d.ts +3 -0
  216. package/dist/normalize-job-validation.d.ts.map +1 -0
  217. package/dist/normalize-job-validation.js +31 -0
  218. package/dist/normalize-job-validation.js.map +1 -0
  219. package/dist/normalize-model-selection.d.ts +17 -0
  220. package/dist/normalize-model-selection.d.ts.map +1 -0
  221. package/dist/normalize-model-selection.js +103 -0
  222. package/dist/normalize-model-selection.js.map +1 -0
  223. package/dist/normalize-output.d.ts +4 -0
  224. package/dist/normalize-output.d.ts.map +1 -0
  225. package/dist/normalize-output.js +42 -0
  226. package/dist/normalize-output.js.map +1 -0
  227. package/dist/normalize-pass-core.d.ts +9 -0
  228. package/dist/normalize-pass-core.d.ts.map +1 -0
  229. package/dist/normalize-pass-core.js +113 -0
  230. package/dist/normalize-pass-core.js.map +1 -0
  231. package/dist/normalize-pass-semantic.d.ts +11 -0
  232. package/dist/normalize-pass-semantic.d.ts.map +1 -0
  233. package/dist/normalize-pass-semantic.js +149 -0
  234. package/dist/normalize-pass-semantic.js.map +1 -0
  235. package/dist/normalize-pass-utils.d.ts +12 -0
  236. package/dist/normalize-pass-utils.d.ts.map +1 -0
  237. package/dist/normalize-pass-utils.js +116 -0
  238. package/dist/normalize-pass-utils.js.map +1 -0
  239. package/dist/normalize-passes.d.ts +3 -0
  240. package/dist/normalize-passes.d.ts.map +1 -0
  241. package/dist/normalize-passes.js +3 -0
  242. package/dist/normalize-passes.js.map +1 -0
  243. package/dist/normalize-provider-validation.d.ts +4 -0
  244. package/dist/normalize-provider-validation.d.ts.map +1 -0
  245. package/dist/normalize-provider-validation.js +34 -0
  246. package/dist/normalize-provider-validation.js.map +1 -0
  247. package/dist/normalize-public-types.d.ts +13 -0
  248. package/dist/normalize-public-types.d.ts.map +1 -0
  249. package/dist/normalize-public-types.js +2 -0
  250. package/dist/normalize-public-types.js.map +1 -0
  251. package/dist/normalize-rate-limit.d.ts +4 -0
  252. package/dist/normalize-rate-limit.d.ts.map +1 -0
  253. package/dist/normalize-rate-limit.js +35 -0
  254. package/dist/normalize-rate-limit.js.map +1 -0
  255. package/dist/normalize-reference-index.d.ts +6 -0
  256. package/dist/normalize-reference-index.d.ts.map +1 -0
  257. package/dist/normalize-reference-index.js +82 -0
  258. package/dist/normalize-reference-index.js.map +1 -0
  259. package/dist/normalize-reference-validation.d.ts +4 -0
  260. package/dist/normalize-reference-validation.d.ts.map +1 -0
  261. package/dist/normalize-reference-validation.js +88 -0
  262. package/dist/normalize-reference-validation.js.map +1 -0
  263. package/dist/normalize-route-file.d.ts +4 -0
  264. package/dist/normalize-route-file.d.ts.map +1 -0
  265. package/dist/normalize-route-file.js +41 -0
  266. package/dist/normalize-route-file.js.map +1 -0
  267. package/dist/normalize-route-inference.d.ts +4 -0
  268. package/dist/normalize-route-inference.d.ts.map +1 -0
  269. package/dist/normalize-route-inference.js +117 -0
  270. package/dist/normalize-route-inference.js.map +1 -0
  271. package/dist/normalize-schema-validation.d.ts +3 -0
  272. package/dist/normalize-schema-validation.d.ts.map +1 -0
  273. package/dist/normalize-schema-validation.js +50 -0
  274. package/dist/normalize-schema-validation.js.map +1 -0
  275. package/dist/normalize-source-identities.d.ts +3 -0
  276. package/dist/normalize-source-identities.d.ts.map +1 -0
  277. package/dist/normalize-source-identities.js +158 -0
  278. package/dist/normalize-source-identities.js.map +1 -0
  279. package/dist/normalize-types.d.ts +130 -0
  280. package/dist/normalize-types.d.ts.map +1 -0
  281. package/dist/normalize-types.js +99 -0
  282. package/dist/normalize-types.js.map +1 -0
  283. package/dist/normalize-utils.d.ts +24 -0
  284. package/dist/normalize-utils.d.ts.map +1 -0
  285. package/dist/normalize-utils.js +139 -0
  286. package/dist/normalize-utils.js.map +1 -0
  287. package/dist/normalize.d.ts +9 -0
  288. package/dist/normalize.d.ts.map +1 -0
  289. package/dist/normalize.js +106 -0
  290. package/dist/normalize.js.map +1 -0
  291. package/dist/project-typecheck.d.ts +4 -0
  292. package/dist/project-typecheck.d.ts.map +1 -0
  293. package/dist/project-typecheck.js +49 -0
  294. package/dist/project-typecheck.js.map +1 -0
  295. package/dist/route-file.d.ts +29 -0
  296. package/dist/route-file.d.ts.map +1 -0
  297. package/dist/route-file.js +97 -0
  298. package/dist/route-file.js.map +1 -0
  299. package/dist/watch.d.ts +27 -0
  300. package/dist/watch.d.ts.map +1 -0
  301. package/dist/watch.js +117 -0
  302. package/dist/watch.js.map +1 -0
  303. package/package.json +45 -0
@@ -0,0 +1,29 @@
1
+ import { isErrorDescriptorLike } from "./normalize-utils.js";
2
+ /** Replaces executable/non-JSON fields with deterministic nulls for graph data. */
3
+ export function clean(value) {
4
+ if (value === undefined || typeof value === "symbol")
5
+ return null;
6
+ if (typeof value === "function") {
7
+ if (!isErrorDescriptorLike(value))
8
+ return null;
9
+ const descriptor = {};
10
+ const source = value;
11
+ for (const key of Object.keys(source))
12
+ descriptor[key] = source[key];
13
+ return clean(descriptor);
14
+ }
15
+ if (value === null || typeof value === "string" || typeof value === "boolean")
16
+ return value;
17
+ if (typeof value === "number")
18
+ return Number.isFinite(value) ? value : null;
19
+ if (Array.isArray(value))
20
+ return value.map(clean);
21
+ if (typeof value === "object") {
22
+ const output = {};
23
+ for (const key of Object.keys(value).sort())
24
+ output[key] = clean(value[key]);
25
+ return output;
26
+ }
27
+ return null;
28
+ }
29
+ //# sourceMappingURL=normalize-graph-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-graph-utils.js","sourceRoot":"","sources":["../src/normalize-graph-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,mFAAmF;AACnF,MAAM,UAAU,KAAK,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAClE,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/C,MAAM,UAAU,GAA4B,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,KAA2C,CAAC;QAC3D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5F,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;YACzC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAE,KAAiC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { NormalizedGraph, NormalizationWork } from "./normalize-types.js";
2
+ export declare function buildGraph(work: NormalizationWork): NormalizedGraph;
3
+ export declare function hashGraph(graph: NormalizedGraph): string;
4
+ //# sourceMappingURL=normalize-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-graph.d.ts","sourceRoot":"","sources":["../src/normalize-graph.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,wBAAgB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,eAAe,CAenE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAExD"}
@@ -0,0 +1,21 @@
1
+ import { GRAPH_VERSION } from "@relkit/contracts";
2
+ import { canonicalizeGraph, hashGraph as hashCanonicalGraph } from "@relkit/graph";
3
+ import { buildGraphEdges } from "./normalize-graph-edges.js";
4
+ import { buildGraphNodes } from "./normalize-graph-nodes.js";
5
+ export function buildGraph(work) {
6
+ const app = work.descriptors.find((descriptor) => descriptor.kind === "app");
7
+ const nodes = buildGraphNodes(work);
8
+ work.nodes = nodes;
9
+ const edges = buildGraphEdges(work);
10
+ work.edges = edges;
11
+ return canonicalizeGraph({
12
+ contractVersion: GRAPH_VERSION,
13
+ ...(app === undefined ? {} : { appId: app.id }),
14
+ nodes,
15
+ edges,
16
+ }, work.input.projectRoot === undefined ? {} : { projectRoot: work.input.projectRoot });
17
+ }
18
+ export function hashGraph(graph) {
19
+ return hashCanonicalGraph(graph);
20
+ }
21
+ //# sourceMappingURL=normalize-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-graph.js","sourceRoot":"","sources":["../src/normalize-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,MAAM,UAAU,UAAU,CAAC,IAAuB;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACnB,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACnB,OAAO,iBAAiB,CACtB;QACE,eAAe,EAAE,aAAa;QAC9B,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QAC/C,KAAK;QACL,KAAK;KACN,EACD,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CACjE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type NormalizationWork } from "./normalize-types.js";
2
+ /** Checks route inputs, responses, and function-backed middleware contracts. */
3
+ export declare function validateHttpCompatibility(work: NormalizationWork): void;
4
+ /** Canonicalizes path parameters so `/orders/:id` and `/orders/:orderId` collide. */
5
+ export declare function routeCollisionKey(value: unknown): string;
6
+ /** Returns every normalized runtime method/path variant for collision checks. */
7
+ export declare function routeCollisionKeys(value: unknown): readonly string[];
8
+ //# sourceMappingURL=normalize-http-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-http-validation.d.ts","sourceRoot":"","sources":["../src/normalize-http-validation.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAG9B,gFAAgF;AAChF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAavE;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAExD;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CASpE"}
@@ -0,0 +1,86 @@
1
+ import { add } from "./normalize-pass-utils.js";
2
+ import { referenceFor } from "./normalize-reference-index.js";
3
+ import { mappingCompatible, schema, schemaEquivalent } from "./normalize-compat.js";
4
+ import { isErrorDescriptorLike, isRecord } from "./normalize-utils.js";
5
+ import { NORMALIZE_CODES, } from "./normalize-types.js";
6
+ const RESERVED_ROUTE_MESSAGE = 'Routes under "/_relkit" are framework-reserved.';
7
+ /** Checks route inputs, responses, and function-backed middleware contracts. */
8
+ export function validateHttpCompatibility(work) {
9
+ for (const route of work.descriptors.filter((entry) => entry.kind === "route")) {
10
+ const value = isRecord(route.value) ? route.value : {};
11
+ const path = typeof value.path === "string" ? value.path : "";
12
+ if (path === "/_relkit" || path.startsWith("/_relkit/"))
13
+ add(work, route, NORMALIZE_CODES.reservedRoute, RESERVED_ROUTE_MESSAGE);
14
+ if (value.raw === true)
15
+ continue;
16
+ const target = referenceFor(work, value.target, "function");
17
+ const targetValue = isRecord(target?.value) ? target.value : undefined;
18
+ const inputReason = mappingCompatible(value.request, targetValue?.input);
19
+ if (inputReason !== undefined)
20
+ add(work, route, NORMALIZE_CODES.mapping, inputReason);
21
+ validateResponses(work, route, targetValue);
22
+ }
23
+ }
24
+ /** Canonicalizes path parameters so `/orders/:id` and `/orders/:orderId` collide. */
25
+ export function routeCollisionKey(value) {
26
+ return routeCollisionKeys(value)[0] ?? " ";
27
+ }
28
+ /** Returns every normalized runtime method/path variant for collision checks. */
29
+ export function routeCollisionKeys(value) {
30
+ if (!isRecord(value))
31
+ return [" "];
32
+ const method = typeof value.method === "string" ? value.method : "";
33
+ const routePaths = Array.isArray(value.runtimePaths)
34
+ ? value.runtimePaths.filter((entry) => typeof entry === "string")
35
+ : [typeof value.path === "string" ? value.path : ""];
36
+ return [
37
+ ...new Set(routePaths.map((routePath) => `${method} ${normalizeRuntimePath(routePath)}`)),
38
+ ];
39
+ }
40
+ function normalizeRuntimePath(routePath) {
41
+ const pattern = routePath
42
+ .split("/")
43
+ .map((segment) => {
44
+ if (/^:[^{]+\{\.\+\}$/.test(segment) || segment.startsWith("*"))
45
+ return ":*";
46
+ return segment.startsWith(":") ? ":" : segment;
47
+ })
48
+ .join("/");
49
+ return pattern;
50
+ }
51
+ function validateResponses(work, route, target) {
52
+ const responses = isRecord(route.value) && Array.isArray(route.value.responses) ? route.value.responses : [];
53
+ const seen = new Set();
54
+ for (const response of responses) {
55
+ if (!isRecord(response))
56
+ continue;
57
+ const responseId = typeof response.id === "string" ? response.id : "";
58
+ if (seen.has(responseId))
59
+ add(work, route, NORMALIZE_CODES.response, `Route response "${responseId}" is repeated.`);
60
+ seen.add(responseId);
61
+ if (response.kind === "error") {
62
+ const errorId = typeof response.errorId === "string" ? response.errorId : "";
63
+ const errors = Array.isArray(target?.errors) ? target.errors : [];
64
+ const declared = errors.find((error) => isErrorDescriptorLike(error) && error.id === errorId);
65
+ if (declared === undefined) {
66
+ add(work, route, NORMALIZE_CODES.response, `Route response error "${errorId}" is not declared by its target.`);
67
+ }
68
+ else if (response.schema !== undefined &&
69
+ isErrorDescriptorLike(declared) &&
70
+ schema(response.schema).ok &&
71
+ schema(declared.data).ok &&
72
+ !schemaEquivalent(response.schema, declared.data)) {
73
+ add(work, route, NORMALIZE_CODES.response, `Route response "${responseId}" does not match its declared error schema.`);
74
+ }
75
+ }
76
+ else if (response.schema !== undefined &&
77
+ (response.kind === "success" || response.kind === "response") &&
78
+ target?.output !== undefined &&
79
+ schema(response.schema).ok &&
80
+ schema(target.output).ok &&
81
+ !schemaEquivalent(response.schema, target.output)) {
82
+ add(work, route, NORMALIZE_CODES.response, `Route response "${responseId}" does not match target output.`);
83
+ }
84
+ }
85
+ }
86
+ //# sourceMappingURL=normalize-http-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-http-validation.js","sourceRoot":"","sources":["../src/normalize-http-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function rewriteIdentityValues(value: unknown, identities: ReadonlyMap<string, string>, active: Set<object>): unknown;
2
+ export declare function rewriteIdentityRef(value: unknown, identities: ReadonlyMap<string, string>, kind: string, fallback: string): unknown;
3
+ //# sourceMappingURL=normalize-identity-rewrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-identity-rewrite.d.ts","sourceRoot":"","sources":["../src/normalize-identity-rewrite.ts"],"names":[],"mappings":"AAEA,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAClB,OAAO,CAqBT;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAIT"}
@@ -0,0 +1,30 @@
1
+ import { isRecord } from "./normalize-utils.js";
2
+ export function rewriteIdentityValues(value, identities, active) {
3
+ if (Array.isArray(value)) {
4
+ const result = value.map((entry) => rewriteIdentityValues(entry, identities, active));
5
+ return result.some((entry, index) => entry !== value[index]) ? result : value;
6
+ }
7
+ if (!isRecord(value) || active.has(value))
8
+ return value;
9
+ active.add(value);
10
+ let changed = false;
11
+ const result = { ...value };
12
+ for (const [key, child] of Object.entries(value)) {
13
+ const mapped = (key === "id" || key === "transformId" || key === "errorId") && typeof child === "string"
14
+ ? (identities.get(child) ?? child)
15
+ : rewriteIdentityValues(child, identities, active);
16
+ if (mapped !== child) {
17
+ result[key] = mapped;
18
+ changed = true;
19
+ }
20
+ }
21
+ active.delete(value);
22
+ return changed ? result : value;
23
+ }
24
+ export function rewriteIdentityRef(value, identities, kind, fallback) {
25
+ const ref = rewriteIdentityValues(value, identities, new Set());
26
+ if (!isRecord(ref))
27
+ return { kind, id: fallback };
28
+ return { ...ref, kind: typeof ref.kind === "string" ? ref.kind : kind, id: ref.id ?? fallback };
29
+ }
30
+ //# sourceMappingURL=normalize-identity-rewrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-identity-rewrite.js","sourceRoot":"","sources":["../src/normalize-identity-rewrite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,MAAM,UAAU,qBAAqB,CACnC,KAAc,EACd,UAAuC,EACvC,MAAmB;IAEnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QACtF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAChF,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,MAAM,GAA4B,EAAE,GAAG,KAAK,EAAE,CAAC;IACrD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,MAAM,GACV,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,SAAS,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;YACvF,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;YAClC,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACvD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAc,EACd,UAAuC,EACvC,IAAY,EACZ,QAAgB;IAEhB,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;IAClD,OAAO,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;AAClG,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type NormalizedDescriptor, type NormalizationWork } from "./normalize-types.js";
2
+ export declare function validateJob(work: NormalizationWork, descriptor: NormalizedDescriptor, value: Record<string, any>): void;
3
+ //# sourceMappingURL=normalize-job-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-job-validation.d.ts","sourceRoot":"","sources":["../src/normalize-job-validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAG9B,wBAAgB,WAAW,CACzB,IAAI,EAAE,iBAAiB,EACvB,UAAU,EAAE,oBAAoB,EAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,IAAI,CAgCN"}
@@ -0,0 +1,31 @@
1
+ import { cronLike } from "./normalize-compat.js";
2
+ import { add } from "./normalize-pass-utils.js";
3
+ import { NORMALIZE_CODES, } from "./normalize-types.js";
4
+ import { id, isRecord, json, positive, text } from "./normalize-utils.js";
5
+ export function validateJob(work, descriptor, value) {
6
+ if (value.schedule !== undefined) {
7
+ if (!Array.isArray(value.schedule))
8
+ add(work, descriptor, NORMALIZE_CODES.schedule, "Schedules must be an array.");
9
+ const ids = new Set();
10
+ for (const schedule of Array.isArray(value.schedule) ? value.schedule : []) {
11
+ const scheduleId = isRecord(schedule) ? id(schedule.id) : undefined;
12
+ const unique = scheduleId !== undefined && !ids.has(scheduleId);
13
+ if (scheduleId !== undefined)
14
+ ids.add(scheduleId);
15
+ const valid = unique &&
16
+ isRecord(schedule) &&
17
+ cronLike(schedule.cron) &&
18
+ text(schedule.timezone) !== undefined &&
19
+ ["skip", "allow"].includes(schedule.overlap) &&
20
+ json(schedule.input);
21
+ if (!valid)
22
+ add(work, descriptor, NORMALIZE_CODES.schedule, "Schedule must have a five-field cron, timezone, overlap policy, and JSON input.");
23
+ }
24
+ }
25
+ if (value.idempotency !== undefined &&
26
+ (!isRecord(value.idempotency) ||
27
+ text(value.idempotency.key) === undefined ||
28
+ !positive(value.idempotency.retentionMs)))
29
+ add(work, descriptor, NORMALIZE_CODES.idempotency, "Idempotency definition is invalid.");
30
+ }
31
+ //# sourceMappingURL=normalize-job-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-job-validation.js","sourceRoot":"","sources":["../src/normalize-job-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EACL,eAAe,GAGhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,UAAU,WAAW,CACzB,IAAuB,EACvB,UAAgC,EAChC,KAA0B;IAE1B,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;YAChC,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;QACjF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC3E,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpE,MAAM,MAAM,GAAG,UAAU,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAChE,IAAI,UAAU,KAAK,SAAS;gBAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAClD,MAAM,KAAK,GACT,MAAM;gBACN,QAAQ,CAAC,QAAQ,CAAC;gBAClB,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,SAAS;gBACrC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK;gBACR,GAAG,CACD,IAAI,EACJ,UAAU,EACV,eAAe,CAAC,QAAQ,EACxB,iFAAiF,CAClF,CAAC;QACN,CAAC;IACH,CAAC;IACD,IACE,KAAK,CAAC,WAAW,KAAK,SAAS;QAC/B,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,SAAS;YACzC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE3C,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,WAAW,EAAE,oCAAoC,CAAC,CAAC;AAC7F,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { NormalizedDescriptor } from "./normalize-types.js";
2
+ export interface CompileModelConfiguration {
3
+ readonly defaultProvider: string;
4
+ readonly defaultModel: string;
5
+ readonly providers: ReadonlyMap<string, string | undefined>;
6
+ }
7
+ export interface ModelSelectionDiagnostic {
8
+ readonly code: "RELKIT_MODEL_PROVIDER_CONFIGURATION_INVALID" | "RELKIT_MODEL_SELECTOR_INVALID" | "RELKIT_MODEL_PROVIDER_UNKNOWN" | "RELKIT_MODEL_PROVIDER_DEFAULT_MISSING";
9
+ readonly message: string;
10
+ }
11
+ export declare function readModelConfigurations(descriptors: readonly NormalizedDescriptor[]): readonly {
12
+ readonly configuration?: CompileModelConfiguration;
13
+ readonly error?: ModelSelectionDiagnostic;
14
+ }[];
15
+ export declare function resolveCompiledModel(selector: unknown, configuration: CompileModelConfiguration): ModelSelectionDiagnostic | undefined;
16
+ export declare function normalizeSelector(value: unknown): string | undefined;
17
+ //# sourceMappingURL=normalize-model-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-model-selection.d.ts","sourceRoot":"","sources":["../src/normalize-model-selection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EACT,6CAA6C,GAC7C,+BAA+B,GAC/B,+BAA+B,GAC/B,uCAAuC,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,SAAS,oBAAoB,EAAE,GAAG,SAAS;IAC9F,QAAQ,CAAC,aAAa,CAAC,EAAE,yBAAyB,CAAC;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,wBAAwB,CAAC;CAC3C,EAAE,CAYF;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,OAAO,EACjB,aAAa,EAAE,yBAAyB,GACvC,wBAAwB,GAAG,SAAS,CAsBtC;AAyCD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUpE"}
@@ -0,0 +1,103 @@
1
+ import { normalizeId } from "@relkit/contracts";
2
+ import { isRecord } from "./normalize-utils.js";
3
+ export function readModelConfigurations(descriptors) {
4
+ return descriptors
5
+ .filter((descriptor) => descriptor.kind === "app")
6
+ .flatMap((descriptor) => {
7
+ const value = isRecord(descriptor.value) ? descriptor.value : {};
8
+ const models = isRecord(value.models) ? value.models : {};
9
+ return Object.values(models).flatMap((binding) => {
10
+ const adapter = isRecord(binding) && isRecord(binding.adapter) ? binding.adapter : {};
11
+ if (adapter.adapter !== "ai-sdk" || !isRecord(adapter.configuration))
12
+ return [];
13
+ return [parseModelConfiguration(adapter.configuration)];
14
+ });
15
+ });
16
+ }
17
+ export function resolveCompiledModel(selector, configuration) {
18
+ const normalized = normalizeSelector(selector);
19
+ if (selector !== undefined && normalized === undefined) {
20
+ return { code: "RELKIT_MODEL_SELECTOR_INVALID", message: "Model selector is invalid." };
21
+ }
22
+ const selected = normalized ?? `${configuration.defaultProvider}:${configuration.defaultModel}`;
23
+ const separator = selected.indexOf(":");
24
+ const provider = separator < 0 ? selected : selected.slice(0, separator);
25
+ const defaultModel = configuration.providers.get(provider);
26
+ if (defaultModel === undefined && !configuration.providers.has(provider)) {
27
+ return {
28
+ code: "RELKIT_MODEL_PROVIDER_UNKNOWN",
29
+ message: `Model provider "${provider}" is not configured.`,
30
+ };
31
+ }
32
+ if (separator < 0 && defaultModel === undefined) {
33
+ return {
34
+ code: "RELKIT_MODEL_PROVIDER_DEFAULT_MISSING",
35
+ message: `Model provider "${provider}" has no default model.`,
36
+ };
37
+ }
38
+ return undefined;
39
+ }
40
+ function parseModelConfiguration(value) {
41
+ if (!isRecord(value))
42
+ return configurationError("modelProviders must be an object");
43
+ const defaultProvider = text(value.defaultProvider);
44
+ const defaultModel = text(value.defaultModel);
45
+ if (defaultProvider === undefined || defaultModel === undefined) {
46
+ return configurationError("modelProviders requires defaultProvider and defaultModel");
47
+ }
48
+ const providers = new Map();
49
+ for (const name of Object.keys(value).filter((key) => key !== "defaultProvider" && key !== "defaultModel")) {
50
+ const provider = stableId(name);
51
+ if (provider === undefined)
52
+ return configurationError("modelProviders has an invalid provider name");
53
+ const entry = value[name];
54
+ if (!isRecord(entry))
55
+ return configurationError(`modelProviders.${name} must be an object`);
56
+ const model = entry.defaultModel === undefined ? undefined : text(entry.defaultModel);
57
+ if (entry.defaultModel !== undefined && model === undefined) {
58
+ return configurationError(`modelProviders.${name}.defaultModel must be non-empty text`);
59
+ }
60
+ providers.set(provider, model);
61
+ }
62
+ const normalizedDefaultProvider = stableId(defaultProvider);
63
+ if (normalizedDefaultProvider === undefined || !providers.has(normalizedDefaultProvider)) {
64
+ return configurationError("modelProviders.defaultProvider is not configured");
65
+ }
66
+ return {
67
+ configuration: {
68
+ defaultProvider: normalizedDefaultProvider,
69
+ defaultModel,
70
+ providers,
71
+ },
72
+ };
73
+ }
74
+ export function normalizeSelector(value) {
75
+ if (value === undefined)
76
+ return undefined;
77
+ if (typeof value !== "string" || value.trim() === "")
78
+ return undefined;
79
+ const selector = value.trim();
80
+ const separator = selector.indexOf(":");
81
+ if (separator < 0)
82
+ return stableId(selector);
83
+ if (separator === 0 || separator !== selector.lastIndexOf(":"))
84
+ return undefined;
85
+ const provider = stableId(selector.slice(0, separator));
86
+ const model = selector.slice(separator + 1).trim();
87
+ return provider === undefined || model === "" ? undefined : `${provider}:${model}`;
88
+ }
89
+ function configurationError(message) {
90
+ return { error: { code: "RELKIT_MODEL_PROVIDER_CONFIGURATION_INVALID", message } };
91
+ }
92
+ function stableId(value) {
93
+ try {
94
+ return normalizeId(value);
95
+ }
96
+ catch {
97
+ return undefined;
98
+ }
99
+ }
100
+ function text(value) {
101
+ return typeof value === "string" && value.trim() !== "" ? value.trim() : undefined;
102
+ }
103
+ //# sourceMappingURL=normalize-model-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-model-selection.js","sourceRoot":"","sources":["../src/normalize-model-selection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type GeneratedManifest } from "./generate-manifest.js";
2
+ import type { GeneratedOutputs, NormalizedGraph, NormalizationWork } from "./normalize-types.js";
3
+ export declare function makeOutputs(graph: NormalizedGraph, hash: string, diagnostics: readonly unknown[], work: NormalizationWork, manifest?: GeneratedManifest): GeneratedOutputs;
4
+ //# sourceMappingURL=normalize-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-output.d.ts","sourceRoot":"","sources":["../src/normalize-output.ts"],"names":[],"mappings":"AAQA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEjG,wBAAgB,WAAW,CACzB,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,SAAS,OAAO,EAAE,EAC/B,IAAI,EAAE,iBAAiB,EACvB,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,gBAAgB,CA0BlB"}
@@ -0,0 +1,42 @@
1
+ import { generateClient, generateClientContractDocument, generateContract, } from "@relkit/client-generator";
2
+ import { canonicalJson } from "@relkit/contracts";
3
+ import { generateOpenApiJson } from "@relkit/openapi";
4
+ import { canonicalGraphJson } from "@relkit/graph";
5
+ import { generateManifest } from "./generate-manifest.js";
6
+ import { isRecord } from "./normalize-utils.js";
7
+ export function makeOutputs(graph, hash, diagnostics, work, manifest) {
8
+ const generatedManifest = manifest ??
9
+ generateManifest({
10
+ graph,
11
+ graphHash: hash,
12
+ descriptors: work.descriptors,
13
+ middleware: [...work.middlewareReferences.values()],
14
+ transforms: [...work.transformReferences.values()],
15
+ diagnostics: diagnostics.filter(isDiagnostic),
16
+ ...(work.input.projectRoot === undefined ? {} : { projectRoot: work.input.projectRoot }),
17
+ });
18
+ return Object.freeze({
19
+ graph: `${canonicalGraphJson(graph, work.input.projectRoot === undefined ? {} : { projectRoot: work.input.projectRoot })}\n`,
20
+ manifest: generatedManifest.activatable ? generatedManifest.source : "",
21
+ diagnostics: `${canonicalJson(diagnostics)}\n`,
22
+ openapi: generatedOpenApi(graph, diagnostics),
23
+ client: generatedClient(graph, diagnostics),
24
+ contract: hasErrors(diagnostics) ? "" : generateContract(graph),
25
+ clientContract: hasErrors(diagnostics)
26
+ ? ""
27
+ : generateClientContractDocument(graph, hash),
28
+ });
29
+ }
30
+ function isDiagnostic(value) {
31
+ return isRecord(value) && typeof value.code === "string" && typeof value.severity === "string";
32
+ }
33
+ function generatedOpenApi(graph, diagnostics) {
34
+ return hasErrors(diagnostics) ? "" : generateOpenApiJson(graph);
35
+ }
36
+ function generatedClient(graph, diagnostics) {
37
+ return hasErrors(diagnostics) ? "" : generateClient(graph);
38
+ }
39
+ function hasErrors(diagnostics) {
40
+ return diagnostics.some((diagnostic) => isRecord(diagnostic) && diagnostic.severity === "error");
41
+ }
42
+ //# sourceMappingURL=normalize-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-output.js","sourceRoot":"","sources":["../src/normalize-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type NormalizationWork } from "./normalize-types.js";
2
+ export { passSchemas } from "./normalize-schema-validation.js";
3
+ export declare function passExtract(work: NormalizationWork): void;
4
+ export declare function passSources(work: NormalizationWork): void;
5
+ export declare function passNormalize(work: NormalizationWork): void;
6
+ export declare function passLocal(work: NormalizationWork): void;
7
+ export { passIndex } from "./normalize-reference-index.js";
8
+ export { passReferences } from "./normalize-reference-validation.js";
9
+ //# sourceMappingURL=normalize-pass-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-pass-core.d.ts","sourceRoot":"","sources":["../src/normalize-pass-core.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI/E,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAE/D,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAYzD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAKzD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAgD3D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAwCvD;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { extractDescriptors } from "./discovery/extract.js";
2
+ import { id, isRecord, locationFor, method, path, positive, profile, text, } from "./normalize-utils.js";
3
+ import { add, isDescriptorLike, normalizeRetry, normalizeSchedule, toDescriptor, validateRetry, } from "./normalize-pass-utils.js";
4
+ import { validateJob } from "./normalize-job-validation.js";
5
+ import { bindRouteFile } from "./normalize-route-file.js";
6
+ import { inferRouteContract } from "./normalize-route-inference.js";
7
+ import { validateRateLimit } from "./normalize-rate-limit.js";
8
+ import { normalizeEventListeners } from "./normalize-event-listener.js";
9
+ import { normalizeSourceIdentities } from "./normalize-source-identities.js";
10
+ import { NORMALIZE_CODES } from "./normalize-types.js";
11
+ import { normalizeSelector } from "./normalize-model-selection.js";
12
+ import { isMiddlewarePath } from "./middleware-coverage.js";
13
+ export { passSchemas } from "./normalize-schema-validation.js";
14
+ export function passExtract(work) {
15
+ const input = work.input;
16
+ const extracted = input.extracted ??
17
+ (input.evaluator !== undefined
18
+ ? extractDescriptors(input.evaluator, input)
19
+ : input.modules !== undefined
20
+ ? extractDescriptors(input.modules, input)
21
+ : undefined);
22
+ work.descriptors = (extracted ?? input.descriptors ?? []).map((entry, index) => toDescriptor(entry, input, index));
23
+ }
24
+ export function passSources(work) {
25
+ work.descriptors = work.descriptors.map((descriptor) => ({
26
+ ...descriptor,
27
+ source: locationFor(descriptor, work.input),
28
+ }));
29
+ }
30
+ export function passNormalize(work) {
31
+ const prepared = work.descriptors.map((descriptor) => {
32
+ const value = isRecord(descriptor.value) ? { ...descriptor.value } : {};
33
+ if (descriptor.kind === "route")
34
+ bindRouteFile(work, descriptor, value);
35
+ return { ...descriptor, value };
36
+ });
37
+ const identified = normalizeSourceIdentities(work, prepared);
38
+ work.descriptors = normalizeEventListeners(work, identified.map((descriptor) => {
39
+ const value = isRecord(descriptor.value) ? { ...descriptor.value } : {};
40
+ const nextId = id(value.id ?? descriptor.id);
41
+ if (nextId === undefined)
42
+ add(work, descriptor, NORMALIZE_CODES.id, "Descriptor ID is not a valid stable ID.");
43
+ value.id = nextId ?? descriptor.id;
44
+ if (descriptor.kind === "route")
45
+ inferRouteContract(work, descriptor, value);
46
+ for (const key of ["profile"]) {
47
+ if (value[key] !== undefined) {
48
+ const nextProfile = profile(value[key]);
49
+ if (nextProfile === undefined) {
50
+ add(work, descriptor, NORMALIZE_CODES.profile, `${key} is not a valid stable profile ID.`);
51
+ if (key === "profile")
52
+ delete value[key];
53
+ else
54
+ value[key] = "";
55
+ }
56
+ else
57
+ value[key] = nextProfile;
58
+ }
59
+ }
60
+ if (value.model !== undefined) {
61
+ const model = normalizeSelector(value.model);
62
+ if (model === undefined) {
63
+ add(work, descriptor, NORMALIZE_CODES.model, "Model selector is invalid.");
64
+ delete value.model;
65
+ }
66
+ else
67
+ value.model = model;
68
+ }
69
+ if (isRecord(value.retry))
70
+ value.retry = normalizeRetry(value.retry);
71
+ if (Array.isArray(value.schedule))
72
+ value.schedule = value.schedule.map(normalizeSchedule);
73
+ if (isRecord(value.idempotency))
74
+ value.idempotency = {
75
+ ...value.idempotency,
76
+ key: text(value.idempotency.key) ?? value.idempotency.key,
77
+ };
78
+ return { ...descriptor, id: nextId ?? descriptor.id, value };
79
+ }));
80
+ }
81
+ export function passLocal(work) {
82
+ for (const descriptor of work.descriptors) {
83
+ const value = isRecord(descriptor.value) ? descriptor.value : {};
84
+ if (!isDescriptorLike(descriptor)) {
85
+ add(work, descriptor, NORMALIZE_CODES.descriptor, "Exported value is not a RelKit descriptor.");
86
+ continue;
87
+ }
88
+ if (descriptor.kind === "route") {
89
+ if (method(value.method) === undefined)
90
+ add(work, descriptor, NORMALIZE_CODES.method, "HTTP method is invalid.");
91
+ if (path(value.path) === undefined)
92
+ add(work, descriptor, NORMALIZE_CODES.path, "HTTP path is invalid.");
93
+ validateRateLimit(work, descriptor, value.rateLimit);
94
+ }
95
+ if (descriptor.kind === "middleware" && !isMiddlewarePath(value.path)) {
96
+ add(work, descriptor, NORMALIZE_CODES.path, "Middleware path is invalid.");
97
+ }
98
+ if (descriptor.kind === "job" || descriptor.kind === "event-trigger")
99
+ validateRetry(work, descriptor, value, descriptor.kind === "job");
100
+ if (descriptor.kind === "job")
101
+ validateJob(work, descriptor, value);
102
+ if (descriptor.kind === "event" && !positive(value.version))
103
+ add(work, descriptor, NORMALIZE_CODES.descriptor, "Event version must be a positive integer.");
104
+ if (descriptor.kind === "agent" &&
105
+ (!positive(value.limits?.maxSteps) ||
106
+ !positive(value.limits?.maxToolCalls) ||
107
+ !positive(value.limits?.timeoutMs)))
108
+ add(work, descriptor, NORMALIZE_CODES.descriptor, "Agent limits must be positive integers.");
109
+ }
110
+ }
111
+ export { passIndex } from "./normalize-reference-index.js";
112
+ export { passReferences } from "./normalize-reference-validation.js";
113
+ //# sourceMappingURL=normalize-pass-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-pass-core.js","sourceRoot":"","sources":["../src/normalize-pass-core.ts"],"names":[],"mappings":"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"}