@telorun/analyzer 0.72.0 → 0.73.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/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +50 -13
- package/dist/builtins.d.ts.map +1 -1
- package/dist/builtins.js +71 -97
- package/dist/cel-scope-query.d.ts.map +1 -1
- package/dist/cel-scope-query.js +32 -11
- package/dist/cel-scope.d.ts.map +1 -1
- package/dist/cel-scope.js +1 -0
- package/dist/eval-paths.d.ts +36 -5
- package/dist/eval-paths.d.ts.map +1 -1
- package/dist/eval-paths.js +47 -6
- package/dist/extends-resolution.d.ts +12 -0
- package/dist/extends-resolution.d.ts.map +1 -1
- package/dist/extends-resolution.js +23 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/nearest-name.d.ts +22 -0
- package/dist/nearest-name.d.ts.map +1 -0
- package/dist/nearest-name.js +43 -0
- package/dist/release/destinations.d.ts +59 -0
- package/dist/release/destinations.d.ts.map +1 -0
- package/dist/release/destinations.js +75 -0
- package/dist/release/index.d.ts +6 -2
- package/dist/release/index.d.ts.map +1 -1
- package/dist/release/index.js +3 -1
- package/dist/release/ledger.d.ts +20 -11
- package/dist/release/ledger.d.ts.map +1 -1
- package/dist/release/ledger.js +43 -14
- package/dist/release/release-plan.d.ts +3 -2
- package/dist/release/release-plan.d.ts.map +1 -1
- package/dist/release/release-plan.js +12 -19
- package/dist/release/workspace-config.d.ts +114 -34
- package/dist/release/workspace-config.d.ts.map +1 -1
- package/dist/release/workspace-config.js +322 -38
- package/dist/release/workspace-schema.d.ts +41 -0
- package/dist/release/workspace-schema.d.ts.map +1 -0
- package/dist/release/workspace-schema.js +77 -0
- package/dist/schema-error-report.d.ts +7 -0
- package/dist/schema-error-report.d.ts.map +1 -1
- package/dist/schema-error-report.js +9 -4
- package/dist/telo-version.d.ts +1 -1
- package/dist/telo-version.js +1 -1
- package/dist/template-body.d.ts +10 -0
- package/dist/template-body.d.ts.map +1 -1
- package/dist/template-body.js +25 -0
- package/dist/validate-cel-context.d.ts +23 -8
- package/dist/validate-cel-context.d.ts.map +1 -1
- package/dist/validate-cel-context.js +48 -16
- package/dist/validate-exports.d.ts +28 -0
- package/dist/validate-exports.d.ts.map +1 -0
- package/dist/validate-exports.js +146 -0
- package/dist/validate-extends.d.ts.map +1 -1
- package/dist/validate-extends.js +37 -1
- package/dist/validate-provider-coherence.d.ts +4 -8
- package/dist/validate-provider-coherence.d.ts.map +1 -1
- package/dist/validate-provider-coherence.js +12 -123
- package/dist/validate-references.d.ts.map +1 -1
- package/dist/validate-references.js +141 -60
- package/dist/validate-template-body.d.ts +36 -0
- package/dist/validate-template-body.d.ts.map +1 -0
- package/dist/validate-template-body.js +246 -0
- package/package.json +3 -2
- package/src/analyzer.ts +64 -11
- package/src/builtins.ts +85 -97
- package/src/cel-scope-query.ts +28 -9
- package/src/cel-scope.ts +1 -0
- package/src/eval-paths.ts +53 -6
- package/src/extends-resolution.ts +24 -0
- package/src/index.ts +1 -0
- package/src/nearest-name.ts +47 -0
- package/src/release/destinations.ts +105 -0
- package/src/release/index.ts +33 -2
- package/src/release/ledger.ts +51 -21
- package/src/release/release-plan.ts +16 -26
- package/src/release/workspace-config.ts +483 -47
- package/src/release/workspace-schema.ts +99 -0
- package/src/schema-error-report.ts +16 -4
- package/src/telo-version.ts +1 -1
- package/src/template-body.ts +25 -0
- package/src/validate-cel-context.ts +57 -16
- package/src/validate-exports.ts +185 -0
- package/src/validate-extends.ts +43 -0
- package/src/validate-provider-coherence.ts +17 -127
- package/src/validate-references.ts +141 -60
- package/src/validate-template-body.ts +274 -0
- package/dist/validate-template-dispatch.d.ts +0 -27
- package/dist/validate-template-dispatch.d.ts.map +0 -1
- package/dist/validate-template-dispatch.js +0 -95
- package/src/validate-template-dispatch.ts +0 -99
package/dist/analyzer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAiBzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAiBzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAsC9B,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAWvF,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AA4DjE,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAoGpB;0CAC0C;AAC1C,eAAO,MAAM,eAAe,GAAI,OAAO;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,KAAG,OACT,CAAC;AAErD;8EAC8E;AAC9E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAqUD,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACtC;AA6DD,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAkFD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAEzB,OAAO,GAAE,qBAA0B;IAI/C;;;;;;;;;;;;;;OAcG;IACH,OAAO,CACL,SAAS,EAAE,gBAAgB,EAAE,EAC7B,OAAO,CAAC,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,eAAe,CAAC,EAAE,eAAe,GAChC,kBAAkB,EAAE;IAmlEvB,aAAa,CACX,SAAS,EAAE,gBAAgB,EAAE,EAC7B,OAAO,CAAC,EAAE,eAAe,EACzB,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,eAAe,CAAC,EAAE,eAAe,GAChC,kBAAkB,EAAE;IAMvB,SAAS,CACP,SAAS,EAAE,gBAAgB,EAAE,EAC7B,QAAQ,EAAE,gBAAgB,EAI1B,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,GACtC,gBAAgB,EAAE;IAyBrB,OAAO,CACL,SAAS,EAAE,gBAAgB,EAAE,EAC7B,QAAQ,EAAE,gBAAgB,GACzB;QAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CAsB5F"}
|
package/dist/analyzer.js
CHANGED
|
@@ -4,7 +4,7 @@ import { AliasResolver, scopeResolverForModule, } from "./alias-resolver.js";
|
|
|
4
4
|
import { buildCelEnvironment, isKindDocument, } from "./cel-environment.js";
|
|
5
5
|
import { DefinitionRegistry } from "./definition-registry.js";
|
|
6
6
|
import { readDeprecation } from "./deprecation.js";
|
|
7
|
-
import { effectiveAuthorSchema } from "./extends-resolution.js";
|
|
7
|
+
import { effectiveAuthorSchema, inheritedCapability, inheritedRequiredFields, } from "./extends-resolution.js";
|
|
8
8
|
import { analyzerContractScope, resolveContract, } from "./invocation-contract.js";
|
|
9
9
|
import { buildCallGraph } from "./call-graph.js";
|
|
10
10
|
import { buildDependencyGraph, formatCycle } from "./dependency-graph.js";
|
|
@@ -47,7 +47,7 @@ import { celTypeSatisfiesJsonSchema, checkSchemaCompatibility, navigateSchemaToE
|
|
|
47
47
|
import { collectValueSchemaIssues } from "./validate-value-schema.js";
|
|
48
48
|
import { DiagnosticSeverity, DiagnosticTag, } from "./types.js";
|
|
49
49
|
import { extractAccessChains, } from "./validate-cel-context.js";
|
|
50
|
-
import { celEvalModeAt, celEvalSites, mergeCelEvalSites, NO_CEL_EVAL_SITES, } from "./eval-paths.js";
|
|
50
|
+
import { celEvalModeAt, celEvalSites, implicitEvalSites, mergeCelEvalSites, NO_CEL_EVAL_SITES, } from "./eval-paths.js";
|
|
51
51
|
import { BINDINGS_ANNOTATION, findBindingSites, resolveBindingOrder, } from "./cel-bindings.js";
|
|
52
52
|
import { CEL_RESERVED_WORDS, checkName } from "./identifier-name.js";
|
|
53
53
|
import { validateIdentifierNames } from "./validate-identifier-names.js";
|
|
@@ -66,7 +66,8 @@ import { kindSatisfies, validateReferences } from "./validate-references.js";
|
|
|
66
66
|
import { validateReferenceForms } from "./validate-reference-forms.js";
|
|
67
67
|
import { isInjectedDeclaration } from "./resource-input.js";
|
|
68
68
|
import { validateResourceInputs } from "./validate-resource-inputs.js";
|
|
69
|
-
import {
|
|
69
|
+
import { validateExports } from "./validate-exports.js";
|
|
70
|
+
import { validateTemplateBody } from "./validate-template-body.js";
|
|
70
71
|
import { validateUnusedDeclarations } from "./validate-unused-declarations.js";
|
|
71
72
|
import { validateThrowsCoverage } from "./validate-throws-coverage.js";
|
|
72
73
|
import { readStepSlot } from "./step-slot.js";
|
|
@@ -1746,12 +1747,37 @@ export class StaticAnalyzer {
|
|
|
1746
1747
|
// is caught here rather than on the one input that selects it.
|
|
1747
1748
|
const valueSchemaIssues = collectValueSchemaIssues(m, schema, allManifests);
|
|
1748
1749
|
const issues = [...ajvIssues, ...valueSchemaIssues];
|
|
1750
|
+
// WHY A FIELD THIS KIND EXISTS TO SUPPLY IS STILL REQUIRED OF ITS
|
|
1751
|
+
// CONSUMER. A child that `extends` and declares no `base:` is authored
|
|
1752
|
+
// against merge(parent, own), so the parent's `required` stays on the
|
|
1753
|
+
// CHILD's surface — and a kind written to wire that field internally
|
|
1754
|
+
// then demands it from the consumer anyway. The `base:` mapping is what
|
|
1755
|
+
// narrows (with it the surface is the child's own schema alone), and
|
|
1756
|
+
// nothing in "is missing required property" points there, which is what
|
|
1757
|
+
// turns one mistake into a three-step dead end.
|
|
1758
|
+
//
|
|
1759
|
+
// Matched against names DERIVED from the parent, never by parsing the
|
|
1760
|
+
// message: which fields are inherited is a fact about the definition,
|
|
1761
|
+
// and a check that reads a validator's prose breaks when the prose does.
|
|
1762
|
+
const inheritedRequired = inheritedRequiredFields(definition, (k) => defs.resolve(aliases.resolveKind(k) ?? k) ?? defs.resolve(k));
|
|
1763
|
+
const parentKind = definition?.extends;
|
|
1749
1764
|
for (const issue of issues) {
|
|
1765
|
+
// Keyed on the STRUCTURED failure, never on the sentence: the field
|
|
1766
|
+
// names are derived from the parent, and matching them against the
|
|
1767
|
+
// validator's prose would break when the prose changes and mis-fire on
|
|
1768
|
+
// any other issue quoting the same name (an `additionalProperties`
|
|
1769
|
+
// rejection, an `enum` listing).
|
|
1770
|
+
const inherited = issue.keyword === "required" && issue.missingProperty !== undefined
|
|
1771
|
+
? inheritedRequired.filter((f) => f === issue.missingProperty)
|
|
1772
|
+
: [];
|
|
1773
|
+
const hint = inherited.length > 0 && parentKind
|
|
1774
|
+
? ` — ${inherited.map((f) => `'${f}'`).join(", ")} ${inherited.length > 1 ? "come" : "comes"} from '${parentKind}', which this kind extends without a 'base:' mapping, so the parent's required fields stay on this kind's author surface. Add 'base:' to set them internally; that also narrows the surface to this kind's own schema.`
|
|
1775
|
+
: "";
|
|
1750
1776
|
diagnostics.push({
|
|
1751
1777
|
severity: DiagnosticSeverity.Error,
|
|
1752
1778
|
code: "SCHEMA_VIOLATION",
|
|
1753
1779
|
source: SOURCE,
|
|
1754
|
-
message: `${m.kind}/${resource.name}: ${issue.message}`,
|
|
1780
|
+
message: `${m.kind}/${resource.name}: ${issue.message}${hint}`,
|
|
1755
1781
|
data: { resource, filePath, path: issue.path },
|
|
1756
1782
|
});
|
|
1757
1783
|
}
|
|
@@ -2116,8 +2142,14 @@ export class StaticAnalyzer {
|
|
|
2116
2142
|
}
|
|
2117
2143
|
// The non-eval-field check only applies to runtime resource instances:
|
|
2118
2144
|
// structural / templating kinds (capability `Telo.Template`, or no
|
|
2119
|
-
// definition) carry CEL the kernel evaluates by other rules.
|
|
2120
|
-
|
|
2145
|
+
// definition) carry CEL the kernel evaluates by other rules. The
|
|
2146
|
+
// capability is INHERITED along `extends` — an inheritance kind
|
|
2147
|
+
// writes none of its own — and reading the declared one left the
|
|
2148
|
+
// rule off for every such kind, and its expressions untyped.
|
|
2149
|
+
const resolveDef = (k) => defs.resolve(aliases.resolveKind(k) ?? k) ?? defs.resolve(k);
|
|
2150
|
+
const capability = e.definition
|
|
2151
|
+
? inheritedCapability(e.definition, resolveDef)
|
|
2152
|
+
: undefined;
|
|
2121
2153
|
celRuleApplies =
|
|
2122
2154
|
!!e.definition?.schema && capability !== undefined && capability !== "Telo.Template";
|
|
2123
2155
|
if (celRuleApplies) {
|
|
@@ -2129,12 +2161,14 @@ export class StaticAnalyzer {
|
|
|
2129
2161
|
// the own schema here reported `CEL_IN_NON_EVAL_FIELD` for an
|
|
2130
2162
|
// expression the runtime evaluates correctly, which is the two halves
|
|
2131
2163
|
// disagreeing about what the manifest means.
|
|
2132
|
-
const ownSchema = effectiveAuthorSchema(e.definition,
|
|
2164
|
+
const ownSchema = effectiveAuthorSchema(e.definition, resolveDef);
|
|
2133
2165
|
const capabilityDef = capability ? defs.resolve(capability) : undefined;
|
|
2134
2166
|
// A `Telo.Provider`'s fields are implicitly compile-eval — the
|
|
2135
2167
|
// capability abstract carries the root annotation — so its reads are
|
|
2136
|
-
// covered here without the provider restating anything.
|
|
2137
|
-
|
|
2168
|
+
// covered here without the provider restating anything. A base-form
|
|
2169
|
+
// child's own fields are too (`implicitEvalSites`): `base:` reads
|
|
2170
|
+
// them once at create().
|
|
2171
|
+
celSites = mergeCelEvalSites(celEvalSites(ownSchema), celEvalSites(capabilityDef?.schema), implicitEvalSites(e.definition));
|
|
2138
2172
|
}
|
|
2139
2173
|
else {
|
|
2140
2174
|
celSites = NO_CEL_EVAL_SITES;
|
|
@@ -2403,10 +2437,13 @@ export class StaticAnalyzer {
|
|
|
2403
2437
|
diagnostics.push(...validateThrowsCoverage(allManifests, defs, aliases, this.celEnv, aliasesByModule, rootModules, libraryManifests));
|
|
2404
2438
|
// Warn about declared variables / secrets / ports that no CEL references.
|
|
2405
2439
|
diagnostics.push(...validateUnusedDeclarations(allManifests, this.celEnv));
|
|
2406
|
-
// A
|
|
2407
|
-
// entry —
|
|
2408
|
-
//
|
|
2409
|
-
diagnostics.push(...
|
|
2440
|
+
// A template body's reference surface — its entry names, its dispatch slots
|
|
2441
|
+
// and the ref slots inside each entry — which no reference pass reaches,
|
|
2442
|
+
// since a `Telo.Definition` is in both skip sets.
|
|
2443
|
+
diagnostics.push(...validateTemplateBody(allManifests, defs, aliases, aliasesByModule, rootModules));
|
|
2444
|
+
// A library's export list, resolved against what it declares — otherwise a
|
|
2445
|
+
// listed name that exists nowhere fails in the consumer's file.
|
|
2446
|
+
diagnostics.push(...validateExports(allManifests, defs, aliases, rootModules));
|
|
2410
2447
|
// A library's declared resource inputs, and every import that supplies them.
|
|
2411
2448
|
diagnostics.push(...validateResourceInputs(allManifests, defs, aliases, rootModules, (supplied, required, isDeclaration) => kindSatisfies(supplied, required, defs, isDeclaration)));
|
|
2412
2449
|
// Reroute diagnostics on synthetic (inline-extracted) resources back to
|
package/dist/builtins.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../src/builtins.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../src/builtins.ts"],"names":[],"mappings":"AAiFA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AA8OvD,eAAO,MAAM,eAAe,EAAE,kBAAkB,EA2pB/C,CAAC"}
|
package/dist/builtins.js
CHANGED
|
@@ -20,6 +20,60 @@ const observedStateSlot = {
|
|
|
20
20
|
description: "What a resource of this kind reports while running, published at `resources.<name>.status.<field>`.",
|
|
21
21
|
$ref: manifestFragmentRef("JsonSchema7"),
|
|
22
22
|
};
|
|
23
|
+
/** The `self`-only CEL scope a dispatch slot's name template is written in. */
|
|
24
|
+
const dispatchSelfContext = {
|
|
25
|
+
type: "object",
|
|
26
|
+
additionalProperties: false,
|
|
27
|
+
properties: { self: { "x-telo-context-from-root": "schema" } },
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* A `Telo.Definition` dispatch slot: which `resources:` entry receives the call.
|
|
31
|
+
*
|
|
32
|
+
* Three shapes, and the union is what keeps the slot CONSTRAINED for manifests
|
|
33
|
+
* no pass walks — `validate-template-body` resolves the target and its
|
|
34
|
+
* capability, but it is entry-scoped, so a dependency's definition would
|
|
35
|
+
* otherwise have nothing checking this slot at all. An array or a number fails
|
|
36
|
+
* every branch here, which is the floor AJV used to provide.
|
|
37
|
+
*
|
|
38
|
+
* `anyOf`, never `oneOf`: a `!ref` sentinel is an object, so it would match both
|
|
39
|
+
* the sentinel branch and any permissive object branch and then fail for
|
|
40
|
+
* matching twice. That is also how the sentinel used to pass — the legacy object
|
|
41
|
+
* branch required nothing, so it accepted one by accident; here it is a branch
|
|
42
|
+
* of its own that says so.
|
|
43
|
+
*/
|
|
44
|
+
function dispatchSlot(title, description) {
|
|
45
|
+
return {
|
|
46
|
+
title,
|
|
47
|
+
description,
|
|
48
|
+
anyOf: [
|
|
49
|
+
// `!ref <entry>` — the spelling to write.
|
|
50
|
+
{
|
|
51
|
+
type: "object",
|
|
52
|
+
required: ["__tagged", "engine", "source"],
|
|
53
|
+
properties: {
|
|
54
|
+
__tagged: { const: true },
|
|
55
|
+
engine: { const: "ref" },
|
|
56
|
+
source: { type: "string", minLength: 1 },
|
|
57
|
+
},
|
|
58
|
+
additionalProperties: false,
|
|
59
|
+
},
|
|
60
|
+
// Legacy: a name template expanded against `self`. Read forever, because
|
|
61
|
+
// published artifacts carry it; `DEPRECATED_TEMPLATE_DISPATCH_FORM` is
|
|
62
|
+
// what moves an author off it.
|
|
63
|
+
{ type: "string", "x-telo-context": dispatchSelfContext },
|
|
64
|
+
// Legacy: `{ kind?, name }`, where `name` is that same template.
|
|
65
|
+
{
|
|
66
|
+
type: "object",
|
|
67
|
+
required: ["name"],
|
|
68
|
+
properties: {
|
|
69
|
+
kind: { type: "string" },
|
|
70
|
+
name: { type: "string", "x-telo-context": dispatchSelfContext },
|
|
71
|
+
},
|
|
72
|
+
additionalProperties: true,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
23
77
|
/** Descriptive provenance a module declares about itself, shared by
|
|
24
78
|
* `Telo.Application` and `Telo.Library`.
|
|
25
79
|
*
|
|
@@ -459,99 +513,19 @@ export const KERNEL_BUILTINS = [
|
|
|
459
513
|
},
|
|
460
514
|
},
|
|
461
515
|
},
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
type: "object",
|
|
476
|
-
additionalProperties: true,
|
|
477
|
-
properties: {
|
|
478
|
-
kind: { type: "string" },
|
|
479
|
-
name: {
|
|
480
|
-
type: "string",
|
|
481
|
-
"x-telo-context": {
|
|
482
|
-
type: "object",
|
|
483
|
-
additionalProperties: false,
|
|
484
|
-
properties: {
|
|
485
|
-
self: { "x-telo-context-from-root": "schema" },
|
|
486
|
-
},
|
|
487
|
-
},
|
|
488
|
-
},
|
|
489
|
-
},
|
|
490
|
-
},
|
|
491
|
-
],
|
|
492
|
-
},
|
|
493
|
-
provide: {
|
|
494
|
-
type: "object",
|
|
495
|
-
additionalProperties: true,
|
|
496
|
-
properties: {
|
|
497
|
-
kind: { type: "string" },
|
|
498
|
-
name: {
|
|
499
|
-
type: "string",
|
|
500
|
-
"x-telo-context": {
|
|
501
|
-
type: "object",
|
|
502
|
-
additionalProperties: false,
|
|
503
|
-
properties: {
|
|
504
|
-
self: { "x-telo-context-from-root": "schema" },
|
|
505
|
-
},
|
|
506
|
-
},
|
|
507
|
-
},
|
|
508
|
-
},
|
|
509
|
-
},
|
|
510
|
-
run: {
|
|
511
|
-
type: "string",
|
|
512
|
-
"x-telo-context": {
|
|
513
|
-
type: "object",
|
|
514
|
-
additionalProperties: false,
|
|
515
|
-
properties: {
|
|
516
|
-
self: { "x-telo-context-from-root": "schema" },
|
|
517
|
-
},
|
|
518
|
-
},
|
|
519
|
-
},
|
|
520
|
-
// Mount dispatch: names the `resources:` entry (a Telo.Mount, e.g. an
|
|
521
|
-
// Http.Api) whose `register()` this definition delegates to. Same
|
|
522
|
-
// string / { kind, name } grammar as `invoke:`. The named child stays
|
|
523
|
-
// persistent so the produced mount's routes can `!ref` its siblings.
|
|
524
|
-
mount: {
|
|
525
|
-
oneOf: [
|
|
526
|
-
{
|
|
527
|
-
type: "string",
|
|
528
|
-
"x-telo-context": {
|
|
529
|
-
type: "object",
|
|
530
|
-
additionalProperties: false,
|
|
531
|
-
properties: {
|
|
532
|
-
self: { "x-telo-context-from-root": "schema" },
|
|
533
|
-
},
|
|
534
|
-
},
|
|
535
|
-
},
|
|
536
|
-
{
|
|
537
|
-
type: "object",
|
|
538
|
-
additionalProperties: true,
|
|
539
|
-
properties: {
|
|
540
|
-
kind: { type: "string" },
|
|
541
|
-
name: {
|
|
542
|
-
type: "string",
|
|
543
|
-
"x-telo-context": {
|
|
544
|
-
type: "object",
|
|
545
|
-
additionalProperties: false,
|
|
546
|
-
properties: {
|
|
547
|
-
self: { "x-telo-context-from-root": "schema" },
|
|
548
|
-
},
|
|
549
|
-
},
|
|
550
|
-
},
|
|
551
|
-
},
|
|
552
|
-
},
|
|
553
|
-
],
|
|
554
|
-
},
|
|
516
|
+
// A dispatch slot names the `resources:` entry that receives the call,
|
|
517
|
+
// as `!ref <entry>` — the one spelling every reference in Telo has. The
|
|
518
|
+
// string and `{ kind, name }` forms it used to admit (a CEL name
|
|
519
|
+
// template matched against CEL-named entries) were the removed
|
|
520
|
+
// reference object surviving in the one place nothing resolved it;
|
|
521
|
+
// `validate-template-body` is what resolves this slot, so the schema
|
|
522
|
+
// stays open here rather than reporting the same defect twice.
|
|
523
|
+
invoke: dispatchSlot("Invoke target", "The `resources:` entry whose `invoke()` this kind dispatches to, as `!ref <entry>`."),
|
|
524
|
+
provide: dispatchSlot("Provide target", "The `resources:` entry whose `invoke()` produces this provider's value, as `!ref <entry>`."),
|
|
525
|
+
run: dispatchSlot("Run target", "The `resources:` entry whose `run()` this kind dispatches to, as `!ref <entry>`."),
|
|
526
|
+
// The named child stays persistent so the produced mount's routes can
|
|
527
|
+
// `!ref` its siblings.
|
|
528
|
+
mount: dispatchSlot("Mount target", "The `resources:` entry (a Telo.Mount, e.g. an Http.Api) whose `register()` this kind delegates to, as `!ref <entry>`."),
|
|
555
529
|
inputs: {
|
|
556
530
|
type: "object",
|
|
557
531
|
additionalProperties: true,
|
|
@@ -572,11 +546,11 @@ export const KERNEL_BUILTINS = [
|
|
|
572
546
|
additionalProperties: false,
|
|
573
547
|
properties: {
|
|
574
548
|
self: { "x-telo-context-from-root": "schema" },
|
|
549
|
+
// Typed from the dispatch target's declared output: the slot
|
|
550
|
+
// holds a `!ref` to a `resources:` entry, resolved to that
|
|
551
|
+
// entry's kind (or its own `outputType`, where it narrows one).
|
|
575
552
|
result: {
|
|
576
|
-
"x-telo-context-from-ref-kind": [
|
|
577
|
-
"provide/kind#outputType",
|
|
578
|
-
"invoke/kind#outputType",
|
|
579
|
-
],
|
|
553
|
+
"x-telo-context-from-ref-kind": ["provide#outputType", "invoke#outputType"],
|
|
580
554
|
},
|
|
581
555
|
},
|
|
582
556
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cel-scope-query.d.ts","sourceRoot":"","sources":["../src/cel-scope-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"cel-scope-query.d.ts","sourceRoot":"","sources":["../src/cel-scope-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAmB9D;;;sCAGsC;AACtC,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb;;;;iEAI6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAoBD;gEACgE;AAChE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IActB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAb5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C;;oDAEgD;IAChD,OAAO,CAAC,OAAO,CAA+B;IAC9C;;;;sEAIkE;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;gBAG9D,SAAS,EAAE,gBAAgB,EAAE,EAC9C,GAAG,EAAE,oBAAoB,EACzB,MAAM,CAAC,EAAE,WAAW;IAgCtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAuB;IAE3C;+DAC2D;IAC3D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,GAAG,SAAS;IAI7F;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;IAe3D;;;;;;;;;;;;;;;;;;OAkBG;IACH,sBAAsB,CACpB,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EAAE,GACd,sBAAsB,GAAG,SAAS;IA0CrC;oFACgF;IAChF,OAAO,CAAC,QAAQ;IAkGhB;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAqBrF;;;;;;;sDAOkD;IAClD,OAAO,CAAC,aAAa;IAOrB;wEACoE;IACpE,OAAO,CAAC,YAAY;CAarB"}
|
package/dist/cel-scope-query.js
CHANGED
|
@@ -4,6 +4,7 @@ import { buildKernelGlobalsIndex } from "./kernel-globals.js";
|
|
|
4
4
|
import { moduleAliasScope } from "./module-alias-scope.js";
|
|
5
5
|
import { isModuleKind } from "./module-kinds.js";
|
|
6
6
|
import { navigateConcretePath } from "./manifest-path.js";
|
|
7
|
+
import { kindAtPath } from "./validate-cel-context.js";
|
|
7
8
|
import { findManifest } from "./find-manifest.js";
|
|
8
9
|
import { resolveLocalRef, walkStepArray } from "./schema-walk.js";
|
|
9
10
|
import { readStepSlot } from "./step-slot.js";
|
|
@@ -200,16 +201,30 @@ export class CelScopeQuery {
|
|
|
200
201
|
return { manifest: target, path: refFrom.slice(slash + 1).split("/").join("."), propertyMap: false };
|
|
201
202
|
}
|
|
202
203
|
// A kind's own declaration: the target is the `Telo.Definition` document,
|
|
203
|
-
// which is an ordinary manifest in the set.
|
|
204
|
+
// which is an ordinary manifest in the set. The slot holds a `!ref` to a
|
|
205
|
+
// `resources:` entry; the entry's own field wins where it narrows one, else
|
|
206
|
+
// the declaration is the entry's KIND. The first slot that resolves to an
|
|
207
|
+
// entry is the one the type resolver reads, so it is the one navigated.
|
|
204
208
|
const fromRefKind = annotated["x-telo-context-from-ref-kind"];
|
|
205
|
-
const
|
|
206
|
-
|
|
207
|
-
|
|
209
|
+
const slots = Array.isArray(fromRefKind) ? fromRefKind : [fromRefKind];
|
|
210
|
+
for (const slotSpec of slots) {
|
|
211
|
+
if (typeof slotSpec !== "string")
|
|
212
|
+
continue;
|
|
213
|
+
const hash = slotSpec.indexOf("#");
|
|
214
|
+
// `continue`, never `return`: a malformed spec is one entry of a list the
|
|
215
|
+
// type resolver walks to the end, and aborting here made the two answer
|
|
216
|
+
// differently for the same annotation.
|
|
208
217
|
if (hash <= 0)
|
|
209
|
-
|
|
210
|
-
const
|
|
211
|
-
|
|
212
|
-
|
|
218
|
+
continue;
|
|
219
|
+
const field = slotSpec.slice(hash + 1);
|
|
220
|
+
const namedKind = kindAtPath(root, slotSpec.slice(0, hash));
|
|
221
|
+
if (!namedKind)
|
|
222
|
+
continue;
|
|
223
|
+
if (namedKind.entry?.[field] !== undefined) {
|
|
224
|
+
const index = root.resources.indexOf(namedKind.entry);
|
|
225
|
+
return { manifest: resource, path: `resources[${index}].${field}`, propertyMap: false };
|
|
226
|
+
}
|
|
227
|
+
const kindValue = namedKind.kind;
|
|
213
228
|
// The kind was read off THIS resource, so it is spelled in the alias scope
|
|
214
229
|
// of the module that declared it — not the entry's.
|
|
215
230
|
const scope = moduleAliasScope(resource.metadata, this.ctx.aliases, this.ctx.aliasesByModule);
|
|
@@ -229,10 +244,16 @@ export class CelScopeQuery {
|
|
|
229
244
|
const target = (owningModule
|
|
230
245
|
? named.find((m) => m.metadata?.module === owningModule)
|
|
231
246
|
: undefined) ?? (owningModule && named.length > 1 ? undefined : named[0]);
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
247
|
+
// Fall through to the next spec when this one names no kind, or names one
|
|
248
|
+
// that does not declare the field — the same order the TYPE resolver
|
|
249
|
+
// takes, so go-to-declaration lands where the type came from instead of on
|
|
250
|
+
// a field the target never had.
|
|
251
|
+
if (!target || target[field] === undefined)
|
|
252
|
+
continue;
|
|
253
|
+
return { manifest: target, path: field, propertyMap: false };
|
|
235
254
|
}
|
|
255
|
+
if (slots.some((s) => typeof s === "string"))
|
|
256
|
+
return undefined;
|
|
236
257
|
// `x-telo-context-element-from` / `-collection-from` type a binding from an
|
|
237
258
|
// EXPRESSION, so there is no declaration to navigate to.
|
|
238
259
|
return undefined;
|
package/dist/cel-scope.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cel-scope.d.ts","sourceRoot":"","sources":["../src/cel-scope.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cel-scope.d.ts","sourceRoot":"","sources":["../src/cel-scope.ts"],"names":[],"mappings":"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"}
|
package/dist/cel-scope.js
CHANGED
|
@@ -444,6 +444,7 @@ export class CelScopeResolver {
|
|
|
444
444
|
manifestRoot: rootForResolver,
|
|
445
445
|
defs,
|
|
446
446
|
aliases,
|
|
447
|
+
aliasesByModule: scopes?.aliasesByModule,
|
|
447
448
|
allManifests: allManifests,
|
|
448
449
|
});
|
|
449
450
|
return mergeKernelGlobalsIntoContext(withBindingNames(resolved, rootManifest),
|
package/dist/eval-paths.d.ts
CHANGED
|
@@ -73,6 +73,32 @@ export interface CelEvalSites {
|
|
|
73
73
|
}
|
|
74
74
|
export declare const NO_CEL_EVAL_SITES: CelEvalSites;
|
|
75
75
|
export declare function celEvalSites(schema: Record<string, any> | undefined): CelEvalSites;
|
|
76
|
+
/**
|
|
77
|
+
* A BASE-FORM CHILD'S OWN FIELDS ARE COMPILE-EVAL WITHOUT ANNOTATION.
|
|
78
|
+
*
|
|
79
|
+
* A definition with `base:` has no controller of its own: the kernel evaluates
|
|
80
|
+
* the mapping once, at `create()`, against `self` — the instance's config — and
|
|
81
|
+
* hands the result to the inherited controller as the parent's config. The
|
|
82
|
+
* child's own schema fields never reach a controller; they exist to be read by
|
|
83
|
+
* `base:`, and the mapping expands whatever compiled value it reads. So every
|
|
84
|
+
* own field is evaluated exactly once at creation against the startup scope,
|
|
85
|
+
* which is what compile-eval IS. Declared here as the rule rather than left as a
|
|
86
|
+
* property of the mapping walk — the `Telo.Provider` posture, where a
|
|
87
|
+
* construction-time-only surface declares compile-eval once for all its fields
|
|
88
|
+
* rather than per field. Without it the rule was off for every inheritance kind
|
|
89
|
+
* (its capability is inherited, so the gate read `undefined`) and the
|
|
90
|
+
* expressions were never typed either: a `!cel "variables.whoo"` passed `telo
|
|
91
|
+
* check` and failed at boot.
|
|
92
|
+
*
|
|
93
|
+
* Read by the kernel's instance production and the analyzer's coverage decision,
|
|
94
|
+
* so the two cannot disagree about which fields a base child evaluates. An
|
|
95
|
+
* explicitly `runtime` own field still wins, through the same overlap rule a
|
|
96
|
+
* root `x-telo-eval: compile` follows.
|
|
97
|
+
*/
|
|
98
|
+
export declare const IMPLICIT_COMPILE_SITES: CelEvalSites;
|
|
99
|
+
export declare function implicitEvalSites(definition: {
|
|
100
|
+
base?: unknown;
|
|
101
|
+
} | undefined): CelEvalSites;
|
|
76
102
|
/** The union of several schemas' sites — a kind's own and its capability
|
|
77
103
|
* abstract's, which is how a `Telo.Provider`'s implicit compile-eval reaches
|
|
78
104
|
* fields the provider never annotated. */
|
|
@@ -81,11 +107,16 @@ export declare function mergeCelEvalSites(...sites: CelEvalSites[]): CelEvalSite
|
|
|
81
107
|
* Whether the value at `path` is evaluated, and when — null for a field whose
|
|
82
108
|
* value is read as a literal.
|
|
83
109
|
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
110
|
+
* An annotated field wins over the region it sits in — a field's own annotation
|
|
111
|
+
* is more specific than an enclosing one, and a region resolves to `runtime`
|
|
112
|
+
* because that is what a region IS, a per-invocation scope naming what its
|
|
113
|
+
* expressions can read. Between the two annotations, `runtime` wins wherever
|
|
114
|
+
* they OVERLAP and `compile` answers everywhere else.
|
|
115
|
+
*
|
|
116
|
+
* That overlap rule is the kernel's, read back: its compile expansion skips any
|
|
117
|
+
* compile path a runtime path contains or is contained by, and under a root
|
|
118
|
+
* `**` it skips per top-level key — so a runtime-annotated field under an
|
|
119
|
+
* implicit compile root stays runtime, here as at dispatch.
|
|
89
120
|
*
|
|
90
121
|
* `path` is the `walkCelExpressions` spelling (`routes[0].returns[1].when`).
|
|
91
122
|
*/
|
package/dist/eval-paths.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval-paths.d.ts","sourceRoot":"","sources":["../src/eval-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAKxE;AAED;+BAC+B;AAC/B,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAcA;AAiCD;;uEAEuE;AACvE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAI1D;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,SAAM,GAAG,MAAM,EAAE,CAqBxF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAoBzE;AAED;yEACyE;AACzE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,iBAAiB,EAAE,YAAwD,CAAC;AAEzF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,YAAY,CAIlF;AAED;;2CAE2C;AAC3C,wBAAgB,iBAAiB,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,CAMxE;AAED
|
|
1
|
+
{"version":3,"file":"eval-paths.d.ts","sourceRoot":"","sources":["../src/eval-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAKxE;AAED;+BAC+B;AAC/B,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAcA;AAiCD;;uEAEuE;AACvE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAI1D;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,SAAM,GAAG,MAAM,EAAE,CAqBxF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAoBzE;AAED;yEACyE;AACzE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,iBAAiB,EAAE,YAAwD,CAAC;AAEzF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,YAAY,CAIlF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,sBAAsB,EAAE,YAA4D,CAAC;AAElG,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GACzC,YAAY,CAEd;AAED;;2CAE2C;AAC3C,wBAAgB,iBAAiB,CAAC,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,CAMxE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,GACX,SAAS,GAAG,SAAS,GAAG,IAAI,CAY9B"}
|
package/dist/eval-paths.js
CHANGED
|
@@ -160,6 +160,32 @@ export function celEvalSites(schema) {
|
|
|
160
160
|
const { compile, runtime } = buildEvalPaths(schema);
|
|
161
161
|
return { compile, runtime, regions: extractCelRegionScopes(schema) };
|
|
162
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* A BASE-FORM CHILD'S OWN FIELDS ARE COMPILE-EVAL WITHOUT ANNOTATION.
|
|
165
|
+
*
|
|
166
|
+
* A definition with `base:` has no controller of its own: the kernel evaluates
|
|
167
|
+
* the mapping once, at `create()`, against `self` — the instance's config — and
|
|
168
|
+
* hands the result to the inherited controller as the parent's config. The
|
|
169
|
+
* child's own schema fields never reach a controller; they exist to be read by
|
|
170
|
+
* `base:`, and the mapping expands whatever compiled value it reads. So every
|
|
171
|
+
* own field is evaluated exactly once at creation against the startup scope,
|
|
172
|
+
* which is what compile-eval IS. Declared here as the rule rather than left as a
|
|
173
|
+
* property of the mapping walk — the `Telo.Provider` posture, where a
|
|
174
|
+
* construction-time-only surface declares compile-eval once for all its fields
|
|
175
|
+
* rather than per field. Without it the rule was off for every inheritance kind
|
|
176
|
+
* (its capability is inherited, so the gate read `undefined`) and the
|
|
177
|
+
* expressions were never typed either: a `!cel "variables.whoo"` passed `telo
|
|
178
|
+
* check` and failed at boot.
|
|
179
|
+
*
|
|
180
|
+
* Read by the kernel's instance production and the analyzer's coverage decision,
|
|
181
|
+
* so the two cannot disagree about which fields a base child evaluates. An
|
|
182
|
+
* explicitly `runtime` own field still wins, through the same overlap rule a
|
|
183
|
+
* root `x-telo-eval: compile` follows.
|
|
184
|
+
*/
|
|
185
|
+
export const IMPLICIT_COMPILE_SITES = { compile: ["**"], runtime: [], regions: [] };
|
|
186
|
+
export function implicitEvalSites(definition) {
|
|
187
|
+
return definition?.base != null ? IMPLICIT_COMPILE_SITES : NO_CEL_EVAL_SITES;
|
|
188
|
+
}
|
|
163
189
|
/** The union of several schemas' sites — a kind's own and its capability
|
|
164
190
|
* abstract's, which is how a `Telo.Provider`'s implicit compile-eval reaches
|
|
165
191
|
* fields the provider never annotated. */
|
|
@@ -174,16 +200,27 @@ export function mergeCelEvalSites(...sites) {
|
|
|
174
200
|
* Whether the value at `path` is evaluated, and when — null for a field whose
|
|
175
201
|
* value is read as a literal.
|
|
176
202
|
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
203
|
+
* An annotated field wins over the region it sits in — a field's own annotation
|
|
204
|
+
* is more specific than an enclosing one, and a region resolves to `runtime`
|
|
205
|
+
* because that is what a region IS, a per-invocation scope naming what its
|
|
206
|
+
* expressions can read. Between the two annotations, `runtime` wins wherever
|
|
207
|
+
* they OVERLAP and `compile` answers everywhere else.
|
|
208
|
+
*
|
|
209
|
+
* That overlap rule is the kernel's, read back: its compile expansion skips any
|
|
210
|
+
* compile path a runtime path contains or is contained by, and under a root
|
|
211
|
+
* `**` it skips per top-level key — so a runtime-annotated field under an
|
|
212
|
+
* implicit compile root stays runtime, here as at dispatch.
|
|
182
213
|
*
|
|
183
214
|
* `path` is the `walkCelExpressions` spelling (`routes[0].returns[1].when`).
|
|
184
215
|
*/
|
|
185
216
|
export function celEvalModeAt(sites, path) {
|
|
186
|
-
|
|
217
|
+
const compiled = sites.compile.some((p) => {
|
|
218
|
+
if (!evalPathCovers(p, path))
|
|
219
|
+
return false;
|
|
220
|
+
const effective = p === "**" ? topLevelKey(path) : p;
|
|
221
|
+
return !sites.runtime.some((rp) => evalPathCovers(rp, effective) || evalPathCovers(effective, rp));
|
|
222
|
+
});
|
|
223
|
+
if (compiled)
|
|
187
224
|
return "compile";
|
|
188
225
|
if (evalPathsCover(sites.runtime, path))
|
|
189
226
|
return "runtime";
|
|
@@ -191,3 +228,7 @@ export function celEvalModeAt(sites, path) {
|
|
|
191
228
|
return "runtime";
|
|
192
229
|
return null;
|
|
193
230
|
}
|
|
231
|
+
function topLevelKey(path) {
|
|
232
|
+
const end = path.search(/[.[]/);
|
|
233
|
+
return end === -1 ? path : path.slice(0, end);
|
|
234
|
+
}
|
|
@@ -36,6 +36,18 @@ export declare function inheritedCapability(def: ResourceDefinition | undefined,
|
|
|
36
36
|
* `mergeTypeSchemas` that `Type.JsonSchema.extends` uses.
|
|
37
37
|
* - no `extends` → the own schema unchanged. */
|
|
38
38
|
export declare function effectiveAuthorSchema(def: ResourceDefinition | undefined, resolve: DefResolver): Record<string, any>;
|
|
39
|
+
/**
|
|
40
|
+
* The parent's required fields that a merge-form child leaves on its OWN author
|
|
41
|
+
* surface — inherited by the rule above, and not redeclared by the child.
|
|
42
|
+
*
|
|
43
|
+
* The one fact behind a confusing diagnostic: a kind written to wire a field
|
|
44
|
+
* internally still demands it from its consumer, because without `base:` the
|
|
45
|
+
* child is authored against merge(parent, own) and the parent's `required` comes
|
|
46
|
+
* along. Empty for a child with `base:` (its surface is its own schema) and for
|
|
47
|
+
* a kind that extends nothing, so a caller can use a non-empty result as the
|
|
48
|
+
* condition itself.
|
|
49
|
+
*/
|
|
50
|
+
export declare function inheritedRequiredFields(def: ResourceDefinition | undefined, resolve: DefResolver): string[];
|
|
39
51
|
/**
|
|
40
52
|
* The fields a merge-form inheriting child publishes over its parent's reading.
|
|
41
53
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extends-resolution.d.ts","sourceRoot":"","sources":["../src/extends-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD;;;;;;;2DAO2D;AAC3D,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,kBAAkB,KACtB,kBAAkB,GAAG,SAAS,CAAC;AA0BpC;sDACsD;AACtD,wBAAgB,aAAa,CAC3B,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,kBAAkB,GAAG,SAAS,CAIhC;AAED;6EAC6E;AAC7E,wBAAgB,aAAa,CAC3B,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,kBAAkB,EAAE,CAUtB;AAED;iFACiF;AACjF,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAUvF;AAED;;mFAEmF;AACnF,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,kBAAkB,GAAG,SAAS,CAMhC;AAED;;sCAEsC;AACtC,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,OAAO,CAGT;AAED;2EAC2E;AAC3E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,SAAS,CAMpB;AAED;;;;;;iDAMiD;AACjD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAOrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,EAAE,CASV;AAED;;eAEe;AACf,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAQT;AAED;;;6BAG6B;AAC7B,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,iBAAiB,GAC3B,kBAAkB,GAAG,SAAS,CAShC;AAED;;;;;8CAK8C;AAC9C,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAKT;AAED;;8EAE8E;AAC9E,wBAAgB,eAAe,CAAC,SAAS,EAAE,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAEjF;AAED;;;;;;;;;gDASgD;AAChD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CASjC"}
|
|
1
|
+
{"version":3,"file":"extends-resolution.d.ts","sourceRoot":"","sources":["../src/extends-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD;;;;;;;2DAO2D;AAC3D,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,kBAAkB,KACtB,kBAAkB,GAAG,SAAS,CAAC;AA0BpC;sDACsD;AACtD,wBAAgB,aAAa,CAC3B,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,kBAAkB,GAAG,SAAS,CAIhC;AAED;6EAC6E;AAC7E,wBAAgB,aAAa,CAC3B,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,kBAAkB,EAAE,CAUtB;AAED;iFACiF;AACjF,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAUvF;AAED;;mFAEmF;AACnF,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,kBAAkB,GAAG,SAAS,CAMhC;AAED;;sCAEsC;AACtC,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,OAAO,CAGT;AAED;2EAC2E;AAC3E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,GAAG,SAAS,CAMpB;AAED;;;;;;iDAMiD;AACjD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAOrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,EAAE,CAQV;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,EAAE,CASV;AAED;;eAEe;AACf,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAQT;AAED;;;6BAG6B;AAC7B,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,iBAAiB,GAC3B,kBAAkB,GAAG,SAAS,CAShC;AAED;;;;;8CAK8C;AAC9C,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAKT;AAED;;8EAE8E;AAC9E,wBAAgB,eAAe,CAAC,SAAS,EAAE,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAEjF;AAED;;;;;;;;;gDASgD;AAChD,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,kBAAkB,GAAG,SAAS,EACnC,OAAO,EAAE,WAAW,GACnB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CASjC"}
|