@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,88 @@
1
+ import { add, targetFields, validateDependencies } from "./normalize-pass-utils.js";
2
+ import { referenceFor } from "./normalize-reference-index.js";
3
+ import { id, isRecord, refId, refKind } from "./normalize-utils.js";
4
+ import { NORMALIZE_CODES, } from "./normalize-types.js";
5
+ import { validateRateLimitStore } from "./normalize-rate-limit.js";
6
+ const SERVICE_OWNERSHIP_CODE = "RELKIT_SERVICE_OWNERSHIP";
7
+ /** Resolves descriptor, middleware, and named-transform references without importing code. */
8
+ export function passReferences(work) {
9
+ const serviceOwners = new Map();
10
+ for (const descriptor of work.descriptors) {
11
+ const value = isRecord(descriptor.value) ? descriptor.value : {};
12
+ for (const [name, kind] of targetFields(descriptor.kind)) {
13
+ if (descriptor.kind === "route" && value.raw === true)
14
+ continue;
15
+ if (referenceFor(work, value[name], kind) === undefined) {
16
+ add(work, descriptor, NORMALIZE_CODES.missingTarget, `${descriptor.kind} target ${name} does not resolve to a ${kind}.`);
17
+ }
18
+ }
19
+ if (descriptor.kind === "function")
20
+ validateDependencies(work, descriptor, value.dependencies);
21
+ if (descriptor.kind === "route") {
22
+ collectTransforms(work, descriptor, value.request);
23
+ validateRateLimitStore(work, descriptor, value.rateLimit);
24
+ }
25
+ if (descriptor.kind === "service")
26
+ validateService(work, descriptor, value, serviceOwners);
27
+ }
28
+ for (const descriptor of work.descriptors.filter((entry) => entry.kind === "transform")) {
29
+ if (!work.transformReferences.has(descriptor.id)) {
30
+ add(work, descriptor, NORMALIZE_CODES.missingTransform, "Named transform is not indexed.");
31
+ }
32
+ }
33
+ }
34
+ function validateService(work, service, value, owners) {
35
+ const functions = isRecord(value.functions) ? value.functions : undefined;
36
+ if (functions === undefined || Object.keys(functions).length === 0) {
37
+ add(work, service, NORMALIZE_CODES.descriptor, "A service must declare at least one function.");
38
+ }
39
+ else {
40
+ for (const target of Object.values(functions)) {
41
+ const resolved = referenceFor(work, target, "function");
42
+ if (resolved === undefined) {
43
+ add(work, service, NORMALIZE_CODES.missingTarget, "Service member does not resolve to a function.");
44
+ continue;
45
+ }
46
+ const previous = owners.get(resolved.id);
47
+ if (previous !== undefined && previous.id !== service.id) {
48
+ add(work, service, SERVICE_OWNERSHIP_CODE, `Function "${resolved.id}" is already owned by service "${previous.id}".`, "error", previous);
49
+ }
50
+ else {
51
+ owners.set(resolved.id, service);
52
+ }
53
+ }
54
+ }
55
+ if (value.middleware === undefined)
56
+ return;
57
+ if (!Array.isArray(value.middleware)) {
58
+ add(work, service, NORMALIZE_CODES.descriptor, "Service middleware must be an array.");
59
+ return;
60
+ }
61
+ for (const entry of value.middleware) {
62
+ if (refKind(entry) !== "service-middleware" || refId(entry) === undefined) {
63
+ add(work, service, NORMALIZE_CODES.descriptor, "Service middleware reference is invalid.");
64
+ }
65
+ }
66
+ }
67
+ function collectTransforms(work, owner, value) {
68
+ if (!isRecord(value))
69
+ return;
70
+ if (value.kind === "transform") {
71
+ const transformId = id(value.transformId);
72
+ if (transformId === undefined || !work.transformReferences.has(transformId)) {
73
+ add(work, owner, NORMALIZE_CODES.missingTransform, `Request transform "${String(value.transformId)}" is missing.`);
74
+ }
75
+ collectTransforms(work, owner, value.value);
76
+ return;
77
+ }
78
+ if (value.kind === "input" || value.kind === "nested") {
79
+ if (isRecord(value.fields)) {
80
+ for (const field of Object.values(value.fields))
81
+ collectTransforms(work, owner, field);
82
+ }
83
+ return;
84
+ }
85
+ if (value.kind === "optional" || value.kind === "default")
86
+ collectTransforms(work, owner, value.value);
87
+ }
88
+ //# sourceMappingURL=normalize-reference-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-reference-validation.js","sourceRoot":"","sources":["../src/normalize-reference-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type NormalizedDescriptor, type NormalizationWork } from "./normalize-types.js";
2
+ /** Adds file- and export-derived transport metadata to one authored route. */
3
+ export declare function bindRouteFile(work: NormalizationWork, descriptor: NormalizedDescriptor, value: Record<string, any>): void;
4
+ //# sourceMappingURL=normalize-route-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-route-file.d.ts","sourceRoot":"","sources":["../src/normalize-route-file.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAE9B,8EAA8E;AAC9E,wBAAgB,aAAa,CAC3B,IAAI,EAAE,iBAAiB,EACvB,UAAU,EAAE,oBAAoB,EAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,IAAI,CAiDN"}
@@ -0,0 +1,41 @@
1
+ import { method, path } from "./normalize-utils.js";
2
+ import { add } from "./normalize-pass-utils.js";
3
+ import { parseRouteFilePath } from "./route-file.js";
4
+ import { NORMALIZE_CODES, } from "./normalize-types.js";
5
+ /** Adds file- and export-derived transport metadata to one authored route. */
6
+ export function bindRouteFile(work, descriptor, value) {
7
+ if (descriptor.reference === undefined) {
8
+ const nextMethod = method(value.method);
9
+ const nextPath = path(value.path);
10
+ if (nextMethod !== undefined)
11
+ value.method = nextMethod;
12
+ if (nextPath !== undefined)
13
+ value.path = nextPath;
14
+ return;
15
+ }
16
+ if (value.method !== undefined || value.path !== undefined) {
17
+ add(work, descriptor, NORMALIZE_CODES.routeTransport, "Remove method and path from defineRoute; export it as GET, POST, PUT, PATCH, DELETE, HEAD, or OPTIONS from src/routes/**/route.ts.");
18
+ }
19
+ try {
20
+ const parsed = parseRouteFilePath(descriptor.source.file);
21
+ value.path = parsed.canonicalPath;
22
+ value.runtimePaths = parsed.runtimePaths;
23
+ }
24
+ catch (error) {
25
+ add(work, descriptor, NORMALIZE_CODES.routeFile, `Move this route to src/routes/**/route.ts. ${error instanceof Error ? error.message : String(error)}`);
26
+ }
27
+ const nextMethod = method(descriptor.exportName);
28
+ if (descriptor.exportKind !== "named" || nextMethod === undefined) {
29
+ add(work, descriptor, NORMALIZE_CODES.routeExport, "Export the route with a named HTTP method such as `export const GET = defineRoute(...)`; default route exports are not supported.");
30
+ }
31
+ else {
32
+ value.method = nextMethod;
33
+ if ((nextMethod === "ALL") !== (value.raw === true)) {
34
+ add(work, descriptor, NORMALIZE_CODES.routeExport, "ALL is reserved for raw-handler routes, and raw-handler routes must use ALL.");
35
+ }
36
+ }
37
+ const nextPath = path(value.path);
38
+ if (nextPath !== undefined)
39
+ value.path = nextPath;
40
+ }
41
+ //# sourceMappingURL=normalize-route-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-route-file.js","sourceRoot":"","sources":["../src/normalize-route-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACL,eAAe,GAGhB,MAAM,sBAAsB,CAAC;AAE9B,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAC3B,IAAuB,EACvB,UAAgC,EAChC,KAA0B;IAE1B,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,UAAU,KAAK,SAAS;YAAE,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;QACxD,IAAI,QAAQ,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;QAClD,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3D,GAAG,CACD,IAAI,EACJ,UAAU,EACV,eAAe,CAAC,cAAc,EAC9B,oIAAoI,CACrI,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;QAClC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CACD,IAAI,EACJ,UAAU,EACV,eAAe,CAAC,SAAS,EACzB,8CAA8C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACvG,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAClE,GAAG,CACD,IAAI,EACJ,UAAU,EACV,eAAe,CAAC,WAAW,EAC3B,mIAAmI,CACpI,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;QAC1B,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC;YACpD,GAAG,CACD,IAAI,EACJ,UAAU,EACV,eAAe,CAAC,WAAW,EAC3B,8EAA8E,CAC/E,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,QAAQ,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;AACpD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type NormalizedDescriptor, type NormalizationWork } from "./normalize-types.js";
2
+ /** Infers the routine route mapping from the target's runtime schemas. */
3
+ export declare function inferRouteContract(work: NormalizationWork, descriptor: NormalizedDescriptor, value: Record<string, any>): void;
4
+ //# sourceMappingURL=normalize-route-inference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-route-inference.d.ts","sourceRoot":"","sources":["../src/normalize-route-inference.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAI9B,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,iBAAiB,EACvB,UAAU,EAAE,oBAAoB,EAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,IAAI,CAKN"}
@@ -0,0 +1,117 @@
1
+ import { schema, schemaProperties } from "./normalize-compat.js";
2
+ import { add } from "./normalize-pass-utils.js";
3
+ import { isErrorDescriptorLike, isRecord } from "./normalize-utils.js";
4
+ import { NORMALIZE_CODES, } from "./normalize-types.js";
5
+ const QUERY_METHODS = new Set(["GET", "HEAD", "DELETE", "OPTIONS"]);
6
+ /** Infers the routine route mapping from the target's runtime schemas. */
7
+ export function inferRouteContract(work, descriptor, value) {
8
+ if (value.raw === true)
9
+ return;
10
+ const target = isRecord(value.target) ? value.target : {};
11
+ if (value.request === undefined)
12
+ value.request = inferRequest(work, descriptor, value, target);
13
+ if (value.responses === undefined)
14
+ value.responses = inferResponses(value, target);
15
+ }
16
+ function inferRequest(work, descriptor, route, target) {
17
+ const projection = schemaProperties(target.input);
18
+ if (projection === undefined) {
19
+ add(work, descriptor, NORMALIZE_CODES.mapping, "Route request inference needs an object input schema; add an explicit request mapping.");
20
+ return { kind: "input", fields: {} };
21
+ }
22
+ const fields = {};
23
+ const parameters = pathParameters(String(route.path ?? ""));
24
+ for (const parameter of parameters) {
25
+ const property = projection.properties[parameter.name];
26
+ if (property === undefined)
27
+ continue;
28
+ if (parameter.catchAll && !allowsArray(property)) {
29
+ add(work, descriptor, NORMALIZE_CODES.mapping, `Catch-all path segment "${parameter.name}" must use an array schema.`);
30
+ }
31
+ const source = {
32
+ kind: parameter.catchAll ? "path-segments" : "path",
33
+ name: parameter.name,
34
+ };
35
+ fields[parameter.name] = parameter.optional ? { kind: "optional", value: source } : source;
36
+ }
37
+ const required = new Set(projection.required);
38
+ const body = !QUERY_METHODS.has(String(route.method));
39
+ for (const name of Object.keys(projection.properties).sort()) {
40
+ if (fields[name] !== undefined)
41
+ continue;
42
+ const property = projection.properties[name];
43
+ const source = body ? bodySource(route.accept, name, property) : { kind: "query", name };
44
+ const defaultValue = schemaDefault(property);
45
+ fields[name] =
46
+ defaultValue === undefined
47
+ ? required.has(name)
48
+ ? source
49
+ : { kind: "optional", value: source }
50
+ : { kind: "default", value: source, default: defaultValue };
51
+ }
52
+ return { kind: "input", fields };
53
+ }
54
+ function bodySource(accept, name, property) {
55
+ if (accept !== "multipart/form-data")
56
+ return { kind: "body", name };
57
+ return { kind: allowsArray(property) ? "multipart-all" : "multipart", name };
58
+ }
59
+ function inferResponses(route, target) {
60
+ const output = schema(target.output);
61
+ const status = route.successStatus ?? (isVoidSchema(output.schema) ? 204 : 200);
62
+ const responses = [
63
+ {
64
+ kind: "success",
65
+ id: `success.${status}`,
66
+ status,
67
+ ...(status === 204 || isVoidSchema(output.schema) ? {} : { schema: target.output }),
68
+ },
69
+ ];
70
+ for (const error of Array.isArray(target.errors) ? target.errors : []) {
71
+ if (!isErrorDescriptorLike(error))
72
+ continue;
73
+ const status = isRecord(error.http) && typeof error.http.status === "number" ? error.http.status : 500;
74
+ responses.push({
75
+ kind: "error",
76
+ id: `error.${String(error.id)}.${status}`,
77
+ status,
78
+ errorId: error.id,
79
+ ...(error.data === undefined ? {} : { schema: error.data }),
80
+ });
81
+ }
82
+ responses.push({ kind: "validation-error", id: "validation.422", status: 422 });
83
+ if (route.rateLimit !== undefined) {
84
+ responses.push({ kind: "response", id: "rate-limit.429", status: 429 });
85
+ }
86
+ return responses;
87
+ }
88
+ function pathParameters(path) {
89
+ const result = [];
90
+ for (const segment of path.split("/")) {
91
+ if (segment.startsWith(":")) {
92
+ result.push({ name: segment.slice(1), catchAll: false, optional: false });
93
+ }
94
+ if (segment.startsWith("*")) {
95
+ result.push({
96
+ name: segment.slice(1).replace(/\?$/, ""),
97
+ catchAll: true,
98
+ optional: segment.endsWith("?"),
99
+ });
100
+ }
101
+ }
102
+ return result;
103
+ }
104
+ function allowsArray(value) {
105
+ if (!isRecord(value))
106
+ return false;
107
+ if (value.type === "array")
108
+ return true;
109
+ return [value.anyOf, value.oneOf].some((variants) => Array.isArray(variants) && variants.some(allowsArray));
110
+ }
111
+ function schemaDefault(value) {
112
+ return isRecord(value) && "default" in value ? value.default : undefined;
113
+ }
114
+ function isVoidSchema(value) {
115
+ return isRecord(value) && value["x-relkit-void"] === true;
116
+ }
117
+ //# sourceMappingURL=normalize-route-inference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-route-inference.js","sourceRoot":"","sources":["../src/normalize-route-inference.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type NormalizationWork } from "./normalize-types.js";
2
+ export declare function passSchemas(work: NormalizationWork): void;
3
+ //# sourceMappingURL=normalize-schema-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-schema-validation.d.ts","sourceRoot":"","sources":["../src/normalize-schema-validation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG/E,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA6BzD"}
@@ -0,0 +1,50 @@
1
+ import { schema, schemaEntries } from "./normalize-compat.js";
2
+ import { add } from "./normalize-pass-utils.js";
3
+ import { NORMALIZE_CODES } from "./normalize-types.js";
4
+ import { schemaKey } from "./normalize-utils.js";
5
+ export function passSchemas(work) {
6
+ const seen = new Set();
7
+ const descriptors = [...work.descriptors, ...work.transformReferences.values()];
8
+ for (const descriptor of descriptors) {
9
+ if (seen.has(descriptor.value))
10
+ continue;
11
+ seen.add(descriptor.value);
12
+ for (const [key, value] of schemaEntries(descriptor)) {
13
+ validateSchema(work, descriptor, key, value);
14
+ }
15
+ const value = isRecord(descriptor.value) ? descriptor.value : {};
16
+ for (const field of requiredSchemaFields(descriptor.kind)) {
17
+ if (value[field] === undefined)
18
+ validateSchema(work, descriptor, schemaKey(descriptor.id, field), value[field]);
19
+ }
20
+ if (descriptor.kind === "transform")
21
+ validateSchema(work, descriptor, `${descriptor.id}:transform`, value.schema);
22
+ if (descriptor.kind === "route" && Array.isArray(value.responses)) {
23
+ for (const response of value.responses) {
24
+ if (isRecord(response) && response.schema !== undefined) {
25
+ validateSchema(work, descriptor, `${descriptor.id}:response:${String(response.id)}`, response.schema);
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
31
+ function requiredSchemaFields(kind) {
32
+ return ({
33
+ function: ["input", "output"],
34
+ job: ["input"],
35
+ event: ["payload"],
36
+ cache: ["key", "value"],
37
+ agent: ["input", "output"],
38
+ }[kind] ?? []);
39
+ }
40
+ function validateSchema(work, descriptor, key, value) {
41
+ const result = schema(value);
42
+ if (!result.ok)
43
+ add(work, descriptor, NORMALIZE_CODES.schema, `${key} cannot produce deterministic JSON Schema: ${result.reason ?? "unavailable"}.`);
44
+ else if (result.schema !== undefined)
45
+ work.schemas.set(key, result.schema);
46
+ }
47
+ function isRecord(value) {
48
+ return value !== null && typeof value === "object" && !Array.isArray(value);
49
+ }
50
+ //# sourceMappingURL=normalize-schema-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-schema-validation.js","sourceRoot":"","sources":["../src/normalize-schema-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type NormalizedDescriptor, type NormalizationWork } from "./normalize-types.js";
2
+ export declare function normalizeSourceIdentities(work: NormalizationWork, descriptors: readonly NormalizedDescriptor[]): NormalizedDescriptor[];
3
+ //# sourceMappingURL=normalize-source-identities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-source-identities.d.ts","sourceRoot":"","sources":["../src/normalize-source-identities.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAgB9B,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,iBAAiB,EACvB,WAAW,EAAE,SAAS,oBAAoB,EAAE,GAC3C,oBAAoB,EAAE,CA6CxB"}
@@ -0,0 +1,158 @@
1
+ import { encodeErrorId, encodeMemberId, encodeSourceId } from "./discovery/source-id.js";
2
+ import { add } from "./normalize-pass-utils.js";
3
+ import { id, isRecord, refId } from "./normalize-utils.js";
4
+ import { rewriteIdentityRef, rewriteIdentityValues } from "./normalize-identity-rewrite.js";
5
+ import { NORMALIZE_CODES, } from "./normalize-types.js";
6
+ const SOURCE_SCOPED_KINDS = new Set([
7
+ "app",
8
+ "constants",
9
+ "prompt",
10
+ "data-model",
11
+ "function",
12
+ "route",
13
+ "service",
14
+ "tool",
15
+ "agent",
16
+ "error",
17
+ "middleware",
18
+ "transform",
19
+ "service-middleware",
20
+ ]);
21
+ export function normalizeSourceIdentities(work, descriptors) {
22
+ const candidates = descriptors.map(candidate);
23
+ const identities = new Map();
24
+ for (const entry of candidates) {
25
+ if (!entry.inferred)
26
+ continue;
27
+ const resolved = derive(entry.descriptor, work);
28
+ if (resolved === undefined) {
29
+ add(work, entry.descriptor, NORMALIZE_CODES.identityAmbiguous, `Cannot infer a stable ${entry.descriptor.kind} ID from this source binding.`, "error", undefined, "Provide an explicit id or export/bind the descriptor in a statically identifiable form.");
30
+ continue;
31
+ }
32
+ entry.resolved = resolved;
33
+ identities.set(entry.originalId, resolved);
34
+ }
35
+ addServiceMemberIdentities(candidates, identities);
36
+ addNestedErrorIdentities(candidates, identities);
37
+ return descriptors.map((descriptor, index) => {
38
+ const entry = candidates[index];
39
+ const resolved = entry.resolved ?? descriptor.id;
40
+ const rewritten = rewriteIdentityValues(descriptor.value, identities, new Set());
41
+ const value = isRecord(rewritten) && entry.resolved !== undefined
42
+ ? {
43
+ ...rewritten,
44
+ id: resolved,
45
+ ref: rewriteIdentityRef(rewritten.ref, identities, descriptor.kind, resolved),
46
+ }
47
+ : rewritten;
48
+ return {
49
+ ...descriptor,
50
+ id: resolved,
51
+ identity: entry.inferred ? "inferred" : "explicit",
52
+ value,
53
+ ...(descriptor.reference === undefined
54
+ ? {}
55
+ : { reference: { ...descriptor.reference, descriptorId: resolved } }),
56
+ };
57
+ });
58
+ }
59
+ function candidate(descriptor) {
60
+ const factory = descriptor.exportFact?.factory;
61
+ const presence = descriptor.exportFact?.errorBinding?.id ?? factory?.id;
62
+ const inferred = SOURCE_SCOPED_KINDS.has(descriptor.kind) &&
63
+ ((descriptor.kind === "data-model" && descriptor.id.startsWith("unbound.")) ||
64
+ presence === "omitted" ||
65
+ ((presence === undefined || descriptor.kind === "middleware") &&
66
+ descriptor.id.startsWith("unbound.")));
67
+ return { descriptor, originalId: descriptor.id, inferred };
68
+ }
69
+ function derive(descriptor, work) {
70
+ const value = isRecord(descriptor.value) ? descriptor.value : {};
71
+ const fact = descriptor.exportFact;
72
+ if (descriptor.kind === "data-model")
73
+ return encodeSourceId({
74
+ kind: "data-model",
75
+ source: descriptor.source.file,
76
+ ...(work.input.projectRoot === undefined ? {} : { projectRoot: work.input.projectRoot }),
77
+ exportName: descriptor.exportName,
78
+ exportKind: descriptor.exportKind,
79
+ });
80
+ if (fact === undefined)
81
+ return undefined;
82
+ if (descriptor.kind === "app")
83
+ return work.input.appId;
84
+ const binding = fact?.binding ?? fact?.factory?.binding;
85
+ if (descriptor.kind === "error" || fact?.errorBinding !== undefined) {
86
+ const errorBinding = fact?.errorBinding?.binding ?? binding;
87
+ return errorBinding === undefined
88
+ ? undefined
89
+ : encodeErrorId(descriptor.source.file, errorBinding, undefined, work.input.projectRoot);
90
+ }
91
+ if (!SOURCE_SCOPED_KINDS.has(descriptor.kind) || fact.factory?.idOptional !== true)
92
+ return undefined;
93
+ const route = descriptor.kind === "route"
94
+ ? {
95
+ ...(typeof value.method === "string" ? { method: value.method } : {}),
96
+ ...(typeof value.path === "string" ? { path: value.path } : {}),
97
+ }
98
+ : {};
99
+ return encodeSourceId({
100
+ kind: descriptor.kind,
101
+ source: descriptor.source.file,
102
+ ...(work.input.projectRoot === undefined ? {} : { projectRoot: work.input.projectRoot }),
103
+ exportName: descriptor.exportName,
104
+ exportKind: descriptor.exportKind,
105
+ ...(binding === undefined ? {} : { binding }),
106
+ ...route,
107
+ });
108
+ }
109
+ function addServiceMemberIdentities(candidates, identities) {
110
+ for (const entry of candidates.filter(({ descriptor }) => descriptor.kind === "service")) {
111
+ const serviceId = entry.resolved ?? (entry.inferred ? undefined : entry.descriptor.id);
112
+ if (serviceId === undefined)
113
+ continue;
114
+ const value = isRecord(entry.descriptor.value) ? entry.descriptor.value : {};
115
+ const functions = isRecord(value.functions) ? value.functions : {};
116
+ for (const [member, target] of Object.entries(functions)) {
117
+ const targetId = id(isRecord(target) ? target.id : refId(target));
118
+ if (targetId === undefined || !targetId.startsWith("unbound."))
119
+ continue;
120
+ const memberId = encodeMemberId(serviceId, member);
121
+ if (memberId !== undefined)
122
+ identities.set(targetId, memberId);
123
+ }
124
+ }
125
+ }
126
+ function addNestedErrorIdentities(candidates, identities) {
127
+ for (const { descriptor } of candidates) {
128
+ const bindings = (descriptor.facts?.errorBindings ?? []).filter(({ id: presence }) => presence === "omitted");
129
+ const errors = collect(descriptor.value, "error").filter(({ id }) => id.startsWith("unbound."));
130
+ for (const [index, binding] of bindings.entries()) {
131
+ const error = errors[index];
132
+ const errorId = error === undefined ? undefined : encodeErrorId(descriptor.source.file, binding.binding);
133
+ if (error !== undefined && errorId !== undefined)
134
+ identities.set(error.id, errorId);
135
+ }
136
+ }
137
+ }
138
+ function collect(value, kind, active = new Set()) {
139
+ if (Array.isArray(value)) {
140
+ if (active.has(value))
141
+ return [];
142
+ active.add(value);
143
+ const result = value.flatMap((child) => collect(child, kind, active));
144
+ active.delete(value);
145
+ return result;
146
+ }
147
+ if (!isRecord(value))
148
+ return [];
149
+ if (active.has(value))
150
+ return [];
151
+ active.add(value);
152
+ const result = value.kind === kind ? [value] : [];
153
+ for (const child of Object.values(value))
154
+ result.push(...collect(child, kind, active));
155
+ active.delete(value);
156
+ return result;
157
+ }
158
+ //# sourceMappingURL=normalize-source-identities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-source-identities.js","sourceRoot":"","sources":["../src/normalize-source-identities.ts"],"names":[],"mappings":"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"}