@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.
- package/LICENSE +21 -0
- package/README.md +5 -0
- package/dist/config-loader-deployment.d.ts +7 -0
- package/dist/config-loader-deployment.d.ts.map +1 -0
- package/dist/config-loader-deployment.js +36 -0
- package/dist/config-loader-deployment.js.map +1 -0
- package/dist/config-loader-runtime.d.ts +30 -0
- package/dist/config-loader-runtime.d.ts.map +1 -0
- package/dist/config-loader-runtime.js +105 -0
- package/dist/config-loader-runtime.js.map +1 -0
- package/dist/config-loader-types.d.ts +107 -0
- package/dist/config-loader-types.d.ts.map +1 -0
- package/dist/config-loader-types.js +37 -0
- package/dist/config-loader-types.js.map +1 -0
- package/dist/config-loader-utils.d.ts +10 -0
- package/dist/config-loader-utils.d.ts.map +1 -0
- package/dist/config-loader-utils.js +88 -0
- package/dist/config-loader-utils.js.map +1 -0
- package/dist/config-loader.d.ts +12 -0
- package/dist/config-loader.d.ts.map +1 -0
- package/dist/config-loader.js +89 -0
- package/dist/config-loader.js.map +1 -0
- package/dist/context-registry.d.ts +7 -0
- package/dist/context-registry.d.ts.map +1 -0
- package/dist/context-registry.js +55 -0
- package/dist/context-registry.js.map +1 -0
- package/dist/conventions.d.ts +32 -0
- package/dist/conventions.d.ts.map +1 -0
- package/dist/conventions.js +125 -0
- package/dist/conventions.js.map +1 -0
- package/dist/discovery/ast-prefilter-utils.d.ts +4 -0
- package/dist/discovery/ast-prefilter-utils.d.ts.map +1 -0
- package/dist/discovery/ast-prefilter-utils.js +186 -0
- package/dist/discovery/ast-prefilter-utils.js.map +1 -0
- package/dist/discovery/ast-prefilter.d.ts +36 -0
- package/dist/discovery/ast-prefilter.d.ts.map +1 -0
- package/dist/discovery/ast-prefilter.js +33 -0
- package/dist/discovery/ast-prefilter.js.map +1 -0
- package/dist/discovery/data-model-isolation.d.ts +8 -0
- package/dist/discovery/data-model-isolation.d.ts.map +1 -0
- package/dist/discovery/data-model-isolation.js +52 -0
- package/dist/discovery/data-model-isolation.js.map +1 -0
- package/dist/discovery/evaluator-child-utils.d.ts +4 -0
- package/dist/discovery/evaluator-child-utils.d.ts.map +1 -0
- package/dist/discovery/evaluator-child-utils.js +48 -0
- package/dist/discovery/evaluator-child-utils.js.map +1 -0
- package/dist/discovery/evaluator-child.d.ts +2 -0
- package/dist/discovery/evaluator-child.d.ts.map +1 -0
- package/dist/discovery/evaluator-child.js +139 -0
- package/dist/discovery/evaluator-child.js.map +1 -0
- package/dist/discovery/evaluator-detector-files.d.ts +9 -0
- package/dist/discovery/evaluator-detector-files.d.ts.map +1 -0
- package/dist/discovery/evaluator-detector-files.js +105 -0
- package/dist/discovery/evaluator-detector-files.js.map +1 -0
- package/dist/discovery/evaluator-detector-network.d.ts +6 -0
- package/dist/discovery/evaluator-detector-network.d.ts.map +1 -0
- package/dist/discovery/evaluator-detector-network.js +109 -0
- package/dist/discovery/evaluator-detector-network.js.map +1 -0
- package/dist/discovery/evaluator-detector-timers.d.ts +9 -0
- package/dist/discovery/evaluator-detector-timers.d.ts.map +1 -0
- package/dist/discovery/evaluator-detector-timers.js +105 -0
- package/dist/discovery/evaluator-detector-timers.js.map +1 -0
- package/dist/discovery/evaluator-detectors.d.ts +18 -0
- package/dist/discovery/evaluator-detectors.d.ts.map +1 -0
- package/dist/discovery/evaluator-detectors.js +54 -0
- package/dist/discovery/evaluator-detectors.js.map +1 -0
- package/dist/discovery/evaluator-protocol.d.ts +94 -0
- package/dist/discovery/evaluator-protocol.d.ts.map +1 -0
- package/dist/discovery/evaluator-protocol.js +89 -0
- package/dist/discovery/evaluator-protocol.js.map +1 -0
- package/dist/discovery/evaluator-request.d.ts +18 -0
- package/dist/discovery/evaluator-request.d.ts.map +1 -0
- package/dist/discovery/evaluator-request.js +49 -0
- package/dist/discovery/evaluator-request.js.map +1 -0
- package/dist/discovery/evaluator-snapshot.d.ts +12 -0
- package/dist/discovery/evaluator-snapshot.d.ts.map +1 -0
- package/dist/discovery/evaluator-snapshot.js +87 -0
- package/dist/discovery/evaluator-snapshot.js.map +1 -0
- package/dist/discovery/evaluator.d.ts +8 -0
- package/dist/discovery/evaluator.d.ts.map +1 -0
- package/dist/discovery/evaluator.js +123 -0
- package/dist/discovery/evaluator.js.map +1 -0
- package/dist/discovery/extract.d.ts +21 -0
- package/dist/discovery/extract.d.ts.map +1 -0
- package/dist/discovery/extract.js +60 -0
- package/dist/discovery/extract.js.map +1 -0
- package/dist/discovery/source-facts-factory.d.ts +5 -0
- package/dist/discovery/source-facts-factory.d.ts.map +1 -0
- package/dist/discovery/source-facts-factory.js +109 -0
- package/dist/discovery/source-facts-factory.js.map +1 -0
- package/dist/discovery/source-facts-types.d.ts +52 -0
- package/dist/discovery/source-facts-types.d.ts.map +1 -0
- package/dist/discovery/source-facts-types.js +2 -0
- package/dist/discovery/source-facts-types.js.map +1 -0
- package/dist/discovery/source-facts.d.ts +6 -0
- package/dist/discovery/source-facts.d.ts.map +1 -0
- package/dist/discovery/source-facts.js +141 -0
- package/dist/discovery/source-facts.js.map +1 -0
- package/dist/discovery/source-id-route.d.ts +3 -0
- package/dist/discovery/source-id-route.d.ts.map +1 -0
- package/dist/discovery/source-id-route.js +61 -0
- package/dist/discovery/source-id-route.js.map +1 -0
- package/dist/discovery/source-id.d.ts +36 -0
- package/dist/discovery/source-id.d.ts.map +1 -0
- package/dist/discovery/source-id.js +146 -0
- package/dist/discovery/source-id.js.map +1 -0
- package/dist/discovery/source-map-utils.d.ts +10 -0
- package/dist/discovery/source-map-utils.d.ts.map +1 -0
- package/dist/discovery/source-map-utils.js +29 -0
- package/dist/discovery/source-map-utils.js.map +1 -0
- package/dist/discovery/source-map.d.ts +26 -0
- package/dist/discovery/source-map.d.ts.map +1 -0
- package/dist/discovery/source-map.js +119 -0
- package/dist/discovery/source-map.js.map +1 -0
- package/dist/event-registry.d.ts +9 -0
- package/dist/event-registry.d.ts.map +1 -0
- package/dist/event-registry.js +43 -0
- package/dist/event-registry.js.map +1 -0
- package/dist/generate-manifest-event.d.ts +5 -0
- package/dist/generate-manifest-event.d.ts.map +1 -0
- package/dist/generate-manifest-event.js +81 -0
- package/dist/generate-manifest-event.js.map +1 -0
- package/dist/generate-manifest-expressions.d.ts +12 -0
- package/dist/generate-manifest-expressions.d.ts.map +1 -0
- package/dist/generate-manifest-expressions.js +141 -0
- package/dist/generate-manifest-expressions.js.map +1 -0
- package/dist/generate-manifest-format.d.ts +4 -0
- package/dist/generate-manifest-format.d.ts.map +1 -0
- package/dist/generate-manifest-format.js +74 -0
- package/dist/generate-manifest-format.js.map +1 -0
- package/dist/generate-manifest-identities.d.ts +6 -0
- package/dist/generate-manifest-identities.d.ts.map +1 -0
- package/dist/generate-manifest-identities.js +115 -0
- package/dist/generate-manifest-identities.js.map +1 -0
- package/dist/generate-manifest-utils.d.ts +23 -0
- package/dist/generate-manifest-utils.d.ts.map +1 -0
- package/dist/generate-manifest-utils.js +125 -0
- package/dist/generate-manifest-utils.js.map +1 -0
- package/dist/generate-manifest.d.ts +30 -0
- package/dist/generate-manifest.d.ts.map +1 -0
- package/dist/generate-manifest.js +89 -0
- package/dist/generate-manifest.js.map +1 -0
- package/dist/generated-artifacts.d.ts +69 -0
- package/dist/generated-artifacts.d.ts.map +1 -0
- package/dist/generated-artifacts.js +124 -0
- package/dist/generated-artifacts.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware-coverage.d.ts +12 -0
- package/dist/middleware-coverage.d.ts.map +1 -0
- package/dist/middleware-coverage.js +90 -0
- package/dist/middleware-coverage.js.map +1 -0
- package/dist/normalize-compat.d.ts +26 -0
- package/dist/normalize-compat.d.ts.map +1 -0
- package/dist/normalize-compat.js +155 -0
- package/dist/normalize-compat.js.map +1 -0
- package/dist/normalize-event-listener.d.ts +11 -0
- package/dist/normalize-event-listener.d.ts.map +1 -0
- package/dist/normalize-event-listener.js +123 -0
- package/dist/normalize-event-listener.js.map +1 -0
- package/dist/normalize-event-validation.d.ts +4 -0
- package/dist/normalize-event-validation.d.ts.map +1 -0
- package/dist/normalize-event-validation.js +137 -0
- package/dist/normalize-event-validation.js.map +1 -0
- package/dist/normalize-generated-function.d.ts +10 -0
- package/dist/normalize-generated-function.d.ts.map +1 -0
- package/dist/normalize-generated-function.js +20 -0
- package/dist/normalize-generated-function.js.map +1 -0
- package/dist/normalize-graph-app.d.ts +8 -0
- package/dist/normalize-graph-app.d.ts.map +1 -0
- package/dist/normalize-graph-app.js +71 -0
- package/dist/normalize-graph-app.js.map +1 -0
- package/dist/normalize-graph-config.d.ts +5 -0
- package/dist/normalize-graph-config.d.ts.map +1 -0
- package/dist/normalize-graph-config.js +97 -0
- package/dist/normalize-graph-config.js.map +1 -0
- package/dist/normalize-graph-edges.d.ts +3 -0
- package/dist/normalize-graph-edges.d.ts.map +1 -0
- package/dist/normalize-graph-edges.js +139 -0
- package/dist/normalize-graph-edges.js.map +1 -0
- package/dist/normalize-graph-nodes.d.ts +3 -0
- package/dist/normalize-graph-nodes.d.ts.map +1 -0
- package/dist/normalize-graph-nodes.js +184 -0
- package/dist/normalize-graph-nodes.js.map +1 -0
- package/dist/normalize-graph-providers.d.ts +4 -0
- package/dist/normalize-graph-providers.d.ts.map +1 -0
- package/dist/normalize-graph-providers.js +63 -0
- package/dist/normalize-graph-providers.js.map +1 -0
- package/dist/normalize-graph-services.d.ts +2 -0
- package/dist/normalize-graph-services.d.ts.map +1 -0
- package/dist/normalize-graph-services.js +23 -0
- package/dist/normalize-graph-services.js.map +1 -0
- package/dist/normalize-graph-types.d.ts +26 -0
- package/dist/normalize-graph-types.d.ts.map +1 -0
- package/dist/normalize-graph-types.js +2 -0
- package/dist/normalize-graph-types.js.map +1 -0
- package/dist/normalize-graph-utils.d.ts +4 -0
- package/dist/normalize-graph-utils.d.ts.map +1 -0
- package/dist/normalize-graph-utils.js +29 -0
- package/dist/normalize-graph-utils.js.map +1 -0
- package/dist/normalize-graph.d.ts +4 -0
- package/dist/normalize-graph.d.ts.map +1 -0
- package/dist/normalize-graph.js +21 -0
- package/dist/normalize-graph.js.map +1 -0
- package/dist/normalize-http-validation.d.ts +8 -0
- package/dist/normalize-http-validation.d.ts.map +1 -0
- package/dist/normalize-http-validation.js +86 -0
- package/dist/normalize-http-validation.js.map +1 -0
- package/dist/normalize-identity-rewrite.d.ts +3 -0
- package/dist/normalize-identity-rewrite.d.ts.map +1 -0
- package/dist/normalize-identity-rewrite.js +30 -0
- package/dist/normalize-identity-rewrite.js.map +1 -0
- package/dist/normalize-job-validation.d.ts +3 -0
- package/dist/normalize-job-validation.d.ts.map +1 -0
- package/dist/normalize-job-validation.js +31 -0
- package/dist/normalize-job-validation.js.map +1 -0
- package/dist/normalize-model-selection.d.ts +17 -0
- package/dist/normalize-model-selection.d.ts.map +1 -0
- package/dist/normalize-model-selection.js +103 -0
- package/dist/normalize-model-selection.js.map +1 -0
- package/dist/normalize-output.d.ts +4 -0
- package/dist/normalize-output.d.ts.map +1 -0
- package/dist/normalize-output.js +42 -0
- package/dist/normalize-output.js.map +1 -0
- package/dist/normalize-pass-core.d.ts +9 -0
- package/dist/normalize-pass-core.d.ts.map +1 -0
- package/dist/normalize-pass-core.js +113 -0
- package/dist/normalize-pass-core.js.map +1 -0
- package/dist/normalize-pass-semantic.d.ts +11 -0
- package/dist/normalize-pass-semantic.d.ts.map +1 -0
- package/dist/normalize-pass-semantic.js +149 -0
- package/dist/normalize-pass-semantic.js.map +1 -0
- package/dist/normalize-pass-utils.d.ts +12 -0
- package/dist/normalize-pass-utils.d.ts.map +1 -0
- package/dist/normalize-pass-utils.js +116 -0
- package/dist/normalize-pass-utils.js.map +1 -0
- package/dist/normalize-passes.d.ts +3 -0
- package/dist/normalize-passes.d.ts.map +1 -0
- package/dist/normalize-passes.js +3 -0
- package/dist/normalize-passes.js.map +1 -0
- package/dist/normalize-provider-validation.d.ts +4 -0
- package/dist/normalize-provider-validation.d.ts.map +1 -0
- package/dist/normalize-provider-validation.js +34 -0
- package/dist/normalize-provider-validation.js.map +1 -0
- package/dist/normalize-public-types.d.ts +13 -0
- package/dist/normalize-public-types.d.ts.map +1 -0
- package/dist/normalize-public-types.js +2 -0
- package/dist/normalize-public-types.js.map +1 -0
- package/dist/normalize-rate-limit.d.ts +4 -0
- package/dist/normalize-rate-limit.d.ts.map +1 -0
- package/dist/normalize-rate-limit.js +35 -0
- package/dist/normalize-rate-limit.js.map +1 -0
- package/dist/normalize-reference-index.d.ts +6 -0
- package/dist/normalize-reference-index.d.ts.map +1 -0
- package/dist/normalize-reference-index.js +82 -0
- package/dist/normalize-reference-index.js.map +1 -0
- package/dist/normalize-reference-validation.d.ts +4 -0
- package/dist/normalize-reference-validation.d.ts.map +1 -0
- package/dist/normalize-reference-validation.js +88 -0
- package/dist/normalize-reference-validation.js.map +1 -0
- package/dist/normalize-route-file.d.ts +4 -0
- package/dist/normalize-route-file.d.ts.map +1 -0
- package/dist/normalize-route-file.js +41 -0
- package/dist/normalize-route-file.js.map +1 -0
- package/dist/normalize-route-inference.d.ts +4 -0
- package/dist/normalize-route-inference.d.ts.map +1 -0
- package/dist/normalize-route-inference.js +117 -0
- package/dist/normalize-route-inference.js.map +1 -0
- package/dist/normalize-schema-validation.d.ts +3 -0
- package/dist/normalize-schema-validation.d.ts.map +1 -0
- package/dist/normalize-schema-validation.js +50 -0
- package/dist/normalize-schema-validation.js.map +1 -0
- package/dist/normalize-source-identities.d.ts +3 -0
- package/dist/normalize-source-identities.d.ts.map +1 -0
- package/dist/normalize-source-identities.js +158 -0
- package/dist/normalize-source-identities.js.map +1 -0
- package/dist/normalize-types.d.ts +130 -0
- package/dist/normalize-types.d.ts.map +1 -0
- package/dist/normalize-types.js +99 -0
- package/dist/normalize-types.js.map +1 -0
- package/dist/normalize-utils.d.ts +24 -0
- package/dist/normalize-utils.d.ts.map +1 -0
- package/dist/normalize-utils.js +139 -0
- package/dist/normalize-utils.js.map +1 -0
- package/dist/normalize.d.ts +9 -0
- package/dist/normalize.d.ts.map +1 -0
- package/dist/normalize.js +106 -0
- package/dist/normalize.js.map +1 -0
- package/dist/project-typecheck.d.ts +4 -0
- package/dist/project-typecheck.d.ts.map +1 -0
- package/dist/project-typecheck.js +49 -0
- package/dist/project-typecheck.js.map +1 -0
- package/dist/route-file.d.ts +29 -0
- package/dist/route-file.d.ts.map +1 -0
- package/dist/route-file.js +97 -0
- package/dist/route-file.js.map +1 -0
- package/dist/watch.d.ts +27 -0
- package/dist/watch.d.ts.map +1 -0
- package/dist/watch.js +117 -0
- package/dist/watch.js.map +1 -0
- 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 @@
|
|
|
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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"}
|