@telorun/analyzer 0.63.0 → 0.65.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/analysis-registry.d.ts +24 -0
- package/dist/analysis-registry.d.ts.map +1 -1
- package/dist/analysis-registry.js +35 -0
- package/dist/analyzer.d.ts +3 -37
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +76 -470
- package/dist/cel-scope-query.d.ts +109 -0
- package/dist/cel-scope-query.d.ts.map +1 -0
- package/dist/cel-scope-query.js +270 -0
- package/dist/cel-scope.d.ts +166 -0
- package/dist/cel-scope.d.ts.map +1 -0
- package/dist/cel-scope.js +377 -0
- package/dist/definition-registry.d.ts +38 -6
- package/dist/definition-registry.d.ts.map +1 -1
- package/dist/definition-registry.js +66 -22
- package/dist/find-manifest.d.ts +10 -0
- package/dist/find-manifest.d.ts.map +1 -0
- package/dist/find-manifest.js +12 -0
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/invocation-contract.d.ts +11 -0
- package/dist/invocation-contract.d.ts.map +1 -1
- package/dist/invocation-contract.js +15 -0
- package/dist/manifest-analysis.d.ts +73 -0
- package/dist/manifest-analysis.d.ts.map +1 -0
- package/dist/manifest-analysis.js +78 -0
- package/dist/manifest-path.d.ts +18 -0
- package/dist/manifest-path.d.ts.map +1 -0
- package/dist/manifest-path.js +37 -0
- package/dist/schema-compat.d.ts +59 -22
- package/dist/schema-compat.d.ts.map +1 -1
- package/dist/schema-compat.js +60 -75
- package/dist/schema-error-report.d.ts +68 -0
- package/dist/schema-error-report.d.ts.map +1 -0
- package/dist/schema-error-report.js +356 -0
- package/dist/schema-walk.d.ts +25 -0
- package/dist/schema-walk.d.ts.map +1 -0
- package/dist/schema-walk.js +126 -0
- package/dist/telo-version.d.ts +1 -1
- package/dist/telo-version.js +1 -1
- package/dist/validate-nested-inline.d.ts +22 -1
- package/dist/validate-nested-inline.d.ts.map +1 -1
- package/dist/validate-nested-inline.js +17 -9
- package/dist/validate-step-inputs.d.ts +17 -0
- package/dist/validate-step-inputs.d.ts.map +1 -1
- package/dist/validate-step-inputs.js +108 -9
- package/package.json +2 -2
- package/src/analysis-registry.ts +37 -0
- package/src/analyzer.ts +83 -587
- package/src/cel-scope-query.ts +337 -0
- package/src/cel-scope.ts +570 -0
- package/src/definition-registry.ts +79 -24
- package/src/find-manifest.ts +19 -0
- package/src/index.ts +23 -2
- package/src/invocation-contract.ts +22 -0
- package/src/manifest-analysis.ts +132 -0
- package/src/manifest-path.ts +34 -0
- package/src/schema-compat.ts +92 -79
- package/src/schema-error-report.ts +417 -0
- package/src/schema-walk.ts +144 -0
- package/src/telo-version.ts +1 -1
- package/src/validate-nested-inline.ts +35 -14
- package/src/validate-step-inputs.ts +153 -11
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ResourceDefinition, ResourceManifest } from "@telorun/sdk";
|
|
2
|
+
import { ManifestAnalysis } from "./manifest-analysis.js";
|
|
2
3
|
import { type ManifestVisitor } from "./manifest-visitor.js";
|
|
3
4
|
import type { AnalysisContext } from "./types.js";
|
|
4
5
|
/** One reference field declared by a resource's definition, derived purely from
|
|
@@ -114,6 +115,29 @@ export declare class AnalysisRegistry {
|
|
|
114
115
|
expand?: boolean;
|
|
115
116
|
discoverNestedRefs?: boolean;
|
|
116
117
|
}): void;
|
|
118
|
+
/**
|
|
119
|
+
* Resolves an `x-telo-schema-from` annotation to the schema node it derives,
|
|
120
|
+
* in the scope of the kind that DECLARED it — anchors are alias-qualified, and
|
|
121
|
+
* the declaring definition's module is where those aliases mean something.
|
|
122
|
+
*
|
|
123
|
+
* The seam an IDE walks a schema through: a slot shaped entirely by this
|
|
124
|
+
* annotation (an `Http.Api` route's `request:`) carries no `properties` of its
|
|
125
|
+
* own, so a walker that only reads `properties` finds nothing there and
|
|
126
|
+
* silently offers no keys and no hover — a whole field of the standard library
|
|
127
|
+
* looking like an unknown one.
|
|
128
|
+
*/
|
|
129
|
+
resolveSchemaFrom(schemaFrom: string, declaringKind: string): Record<string, any> | undefined;
|
|
130
|
+
/**
|
|
131
|
+
* The queries that need this registry AND a manifest set: what CEL sees at a
|
|
132
|
+
* site, where a binding was declared, what a reference's contract is.
|
|
133
|
+
*
|
|
134
|
+
* The seam an IDE reaches all of them through, and one object rather than a
|
|
135
|
+
* factory per question — each answer has to be the one the analysis pass
|
|
136
|
+
* computed, or a completion list stops being a claim about what `telo check`
|
|
137
|
+
* accepts. Built per analysis, not per keystroke: the indices behind it are a
|
|
138
|
+
* function of the whole manifest set.
|
|
139
|
+
*/
|
|
140
|
+
analysisOf(manifests: ResourceManifest[]): ManifestAnalysis;
|
|
117
141
|
/**
|
|
118
142
|
* Returns the built-in kernel definitions. The underlying DefinitionRegistry already
|
|
119
143
|
* seeds these on construction; this method exposes them so callers (e.g. the kernel's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis-registry.d.ts","sourceRoot":"","sources":["../src/analysis-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"analysis-registry.d.ts","sourceRoot":"","sources":["../src/analysis-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AliasResolver } from "./alias-resolver.js";
|
|
2
2
|
import { KERNEL_BUILTINS } from "./builtins.js";
|
|
3
|
+
import { ManifestAnalysis } from "./manifest-analysis.js";
|
|
3
4
|
import { DefinitionRegistry } from "./definition-registry.js";
|
|
4
5
|
import { computeSuggestKind, computeValidUserFacingKinds } from "./kind-suggest.js";
|
|
5
6
|
import { visitManifest as runVisitManifest } from "./manifest-visitor.js";
|
|
@@ -191,6 +192,40 @@ export class AnalysisRegistry {
|
|
|
191
192
|
...opts,
|
|
192
193
|
});
|
|
193
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Resolves an `x-telo-schema-from` annotation to the schema node it derives,
|
|
197
|
+
* in the scope of the kind that DECLARED it — anchors are alias-qualified, and
|
|
198
|
+
* the declaring definition's module is where those aliases mean something.
|
|
199
|
+
*
|
|
200
|
+
* The seam an IDE walks a schema through: a slot shaped entirely by this
|
|
201
|
+
* annotation (an `Http.Api` route's `request:`) carries no `properties` of its
|
|
202
|
+
* own, so a walker that only reads `properties` finds nothing there and
|
|
203
|
+
* silently offers no keys and no hover — a whole field of the standard library
|
|
204
|
+
* looking like an unknown one.
|
|
205
|
+
*/
|
|
206
|
+
resolveSchemaFrom(schemaFrom, declaringKind) {
|
|
207
|
+
const def = this.resolveDefinition(declaringKind);
|
|
208
|
+
const ownerModule = def?.metadata?.module;
|
|
209
|
+
const scope = (ownerModule ? this.aliasesByModule.get(ownerModule) : undefined) ?? this.aliases;
|
|
210
|
+
return this.defs.resolveSchemaFromNode(schemaFrom, scope);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* The queries that need this registry AND a manifest set: what CEL sees at a
|
|
214
|
+
* site, where a binding was declared, what a reference's contract is.
|
|
215
|
+
*
|
|
216
|
+
* The seam an IDE reaches all of them through, and one object rather than a
|
|
217
|
+
* factory per question — each answer has to be the one the analysis pass
|
|
218
|
+
* computed, or a completion list stops being a claim about what `telo check`
|
|
219
|
+
* accepts. Built per analysis, not per keystroke: the indices behind it are a
|
|
220
|
+
* function of the whole manifest set.
|
|
221
|
+
*/
|
|
222
|
+
analysisOf(manifests) {
|
|
223
|
+
return new ManifestAnalysis(manifests, {
|
|
224
|
+
defs: this.defs,
|
|
225
|
+
aliases: this.aliases,
|
|
226
|
+
aliasesByModule: this.aliasesByModule,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
194
229
|
/**
|
|
195
230
|
* Returns the built-in kernel definitions. The underlying DefinitionRegistry already
|
|
196
231
|
* seeds these on construction; this method exposes them so callers (e.g. the kernel's
|
package/dist/analyzer.d.ts
CHANGED
|
@@ -1,20 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import { AliasResolver, type ModuleScopes } from "./alias-resolver.js";
|
|
1
|
+
import type { ResourceManifest } from "@telorun/sdk";
|
|
3
2
|
import { AnalysisRegistry } from "./analysis-registry.js";
|
|
4
3
|
import { type CelHandlers } from "./cel-environment.js";
|
|
5
|
-
import { DefinitionRegistry } from "./definition-registry.js";
|
|
6
|
-
import { type ContractScope } from "./invocation-contract.js";
|
|
7
4
|
import { type ZoneExportCache } from "./resolve-zone-requirements.js";
|
|
5
|
+
export { gatherPropertySchemas, resolveLocalRef, walkStepArray } from "./schema-walk.js";
|
|
6
|
+
export { analyzerContractScope } from "./invocation-contract.js";
|
|
8
7
|
import { type AnalysisDiagnostic, type AnalysisOptions } from "./types.js";
|
|
9
|
-
/** The {@link ContractScope} the analyzer resolves invocation contracts in: kinds
|
|
10
|
-
* resolve in the module that declared the definition they were read off (so an
|
|
11
|
-
* `extends` chain crossing module boundaries re-scopes at every hop), and named
|
|
12
|
-
* `telo#Type` references resolve against the flattened manifest list. `resolveIn`
|
|
13
|
-
* is the top-level entry point, where the kind was written by the READING
|
|
14
|
-
* module and there is no declaring definition yet. */
|
|
15
|
-
export declare function analyzerContractScope(defs: DefinitionRegistry, aliases: AliasResolver, scopes: ModuleScopes, allManifests: Record<string, any>[]): ContractScope & {
|
|
16
|
-
resolveIn(kind: string, module?: string): ResourceDefinition | undefined;
|
|
17
|
-
};
|
|
18
8
|
/** True when an issue reports a property that is absent — its path points at a
|
|
19
9
|
* node the manifest does not contain. */
|
|
20
10
|
export declare const missingRequired: (issue: {
|
|
@@ -23,30 +13,6 @@ export declare const missingRequired: (issue: {
|
|
|
23
13
|
/** The path minus its last segment: the node that should have contained the
|
|
24
14
|
* missing property. Empty for a top-level miss, which anchors on the map. */
|
|
25
15
|
export declare function containerOf(path: string): string;
|
|
26
|
-
/** Resolve a local `$ref` (only `#/$defs/<name>` form) against the root schema.
|
|
27
|
-
* Non-refs and unresolved refs pass through unchanged. */
|
|
28
|
-
export declare function resolveLocalRef(schema: Record<string, any> | undefined, root: Record<string, any>): Record<string, any> | undefined;
|
|
29
|
-
/** Gather property schemas from a (possibly variant-bearing) object schema:
|
|
30
|
-
* top-level `properties` plus every `oneOf` / `anyOf` / `allOf` branch.
|
|
31
|
-
*
|
|
32
|
-
* Each branch is resolved through {@link resolveLocalRef} first, so a branch
|
|
33
|
-
* that points at a shared shape — a `oneOf` arm that IS the kernel's dispatch
|
|
34
|
-
* site — contributes its properties like an inline one. Without that, pointing a
|
|
35
|
-
* composer at a shared shape would silently empty every role-driven lookup that
|
|
36
|
-
* reads this (the inputs slot, the retry policy, the eval paths), which is a
|
|
37
|
-
* failure with no diagnostic attached to it. */
|
|
38
|
-
export declare function gatherPropertySchemas(schema: Record<string, any>, root?: Record<string, any>): Array<[string, Record<string, any>]>;
|
|
39
|
-
/**
|
|
40
|
-
* Generic, role-driven walk over a step array. Calls
|
|
41
|
-
* `visit(step, stepPath)` for every step — top-level and nested through the
|
|
42
|
-
* `x-telo-topology-role` forms (`branch`, `branch-list`, `case-map`). This is
|
|
43
|
-
* the single definition of how steps nest, shared by `buildStepContextSchema`
|
|
44
|
-
* (which types `steps.<name>.result`) and `validateStepInvokeReferences` (which
|
|
45
|
-
* checks invoke refs), so the topology contract lives in one place — adding a
|
|
46
|
-
* role or nesting form updates both consumers at once. No resource kind is
|
|
47
|
-
* hardcoded; recursion is driven entirely by the schema annotations.
|
|
48
|
-
*/
|
|
49
|
-
export declare function walkStepArray(steps: unknown[], stepItemSchema: Record<string, any> | undefined, rootSchema: Record<string, any>, basePath: string, visit: (step: Record<string, any>, stepPath: string) => void): void;
|
|
50
16
|
/** A pure-CEL leaf and the schema of the field it sits in. */
|
|
51
17
|
export interface CelValueSlot {
|
|
52
18
|
readonly path: string;
|
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,
|
|
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,EAIL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AA8B9B,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;AAoDjE,OAAO,EAAsB,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AA2F/F;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;IAqxDvB,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"}
|