@telorun/kernel 0.72.0 → 0.74.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/application-env.js +2 -2
- package/dist/application-env.js.map +1 -1
- package/dist/controllers/module/import-controller.d.ts.map +1 -1
- package/dist/controllers/module/import-controller.js +1 -0
- package/dist/controllers/module/import-controller.js.map +1 -1
- package/dist/invocation-contract-binding.d.ts +37 -1
- package/dist/invocation-contract-binding.d.ts.map +1 -1
- package/dist/invocation-contract-binding.js +109 -8
- package/dist/invocation-contract-binding.js.map +1 -1
- package/dist/kernel.d.ts.map +1 -1
- package/dist/kernel.js +14 -3
- package/dist/kernel.js.map +1 -1
- package/dist/manifest-schemas.js +2 -2
- package/dist/manifest-schemas.js.map +1 -1
- package/dist/observed-state.js +2 -2
- package/dist/observed-state.js.map +1 -1
- package/dist/resource-context.d.ts.map +1 -1
- package/dist/resource-context.js +2 -5
- package/dist/resource-context.js.map +1 -1
- package/dist/runtime-seam.d.ts.map +1 -1
- package/dist/runtime-seam.js +24 -4
- package/dist/runtime-seam.js.map +1 -1
- package/dist/schema-compiled-values.d.ts.map +1 -1
- package/dist/schema-compiled-values.js +25 -1
- package/dist/schema-compiled-values.js.map +1 -1
- package/dist/schema-validator.d.ts.map +1 -1
- package/dist/schema-validator.js +20 -35
- package/dist/schema-validator.js.map +1 -1
- package/package.json +4 -4
- package/src/application-env.ts +2 -2
- package/src/controllers/module/import-controller.ts +1 -0
- package/src/invocation-contract-binding.ts +120 -8
- package/src/kernel.ts +17 -3
- package/src/manifest-schemas.ts +2 -2
- package/src/observed-state.ts +2 -2
- package/src/resource-context.ts +2 -5
- package/src/runtime-seam.ts +29 -3
- package/src/schema-compiled-values.ts +28 -1
- package/src/schema-validator.ts +19 -35
package/dist/schema-validator.js
CHANGED
|
@@ -7,7 +7,8 @@ import { createHash } from "node:crypto";
|
|
|
7
7
|
import * as fs from "node:fs";
|
|
8
8
|
import { createRequire } from "node:module";
|
|
9
9
|
import * as path from "node:path";
|
|
10
|
-
import {
|
|
10
|
+
import { registerTeloKeywords } from "@telorun/analyzer";
|
|
11
|
+
import { X_TELO_TYPE } from "@telorun/sdk";
|
|
11
12
|
import { mergeFilledDefaults, withBigIntsAsNumbers } from "./bigint-schema-view.js";
|
|
12
13
|
import { formatAjvErrors } from "./manifest-schemas.js";
|
|
13
14
|
/** Render a value for an error message without ever throwing — the offending
|
|
@@ -21,7 +22,7 @@ function describeValue(data) {
|
|
|
21
22
|
return String(data);
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
|
-
import { EXACT_TEMPLATE_REGEX, isTaggedSentinel, ManifestRootSchema,
|
|
25
|
+
import { EXACT_TEMPLATE_REGEX, isTaggedSentinel, ManifestRootSchema, } from "@telorun/templating";
|
|
25
26
|
const Ajv = AjvModule.default ?? AjvModule;
|
|
26
27
|
// AJV's standalone subpath is CJS — the default export shows up as either
|
|
27
28
|
// the function itself or `.default` depending on how the bundler/loader
|
|
@@ -156,13 +157,19 @@ const NAME_KEYED_SCHEMA_KEYWORDS = new Set([
|
|
|
156
157
|
* two schemas that differ only there hash alike. */
|
|
157
158
|
const DATA_VALUE_KEYWORDS = new Set(["const", "default", "enum", "examples"]);
|
|
158
159
|
/** Annotations that DO emit validation code, and so must survive the strip and stay
|
|
159
|
-
* in the cache key. `x-telo-
|
|
160
|
+
* in the cache key. `x-telo-type` is the only one: bytes have no JSON Schema type,
|
|
160
161
|
* so the keyword is the only thing standing between a byte slot and "accepts any
|
|
161
162
|
* object". Stripping it would silently reduce the slot to an empty schema — the
|
|
162
163
|
* precise regression the annotation was introduced to close — and, because the key
|
|
163
164
|
* is meant to describe the compiled validator, a keyword that changes the validator
|
|
164
|
-
* belongs in it.
|
|
165
|
-
|
|
165
|
+
* belongs in it.
|
|
166
|
+
*
|
|
167
|
+
* Its names need no canonicalization to be safe in a key, unlike `x-telo-ref`'s:
|
|
168
|
+
* the vocabulary is closed and `Telo.`-qualified, so an author writes the
|
|
169
|
+
* canonical name or none, and a named SHAPE reaches the annotation as a `$ref`
|
|
170
|
+
* the loader already resolved. There is nothing here that the analyzer's baked
|
|
171
|
+
* view and the runtime could spell differently. */
|
|
172
|
+
const VALIDATING_ANNOTATIONS = new Set([X_TELO_TYPE]);
|
|
166
173
|
/** Deep-clone `schema` without its `x-telo-*` annotations — applied, like
|
|
167
174
|
* {@link collapseSentinelsToSource}, before both AJV compilation and cache
|
|
168
175
|
* hashing.
|
|
@@ -183,9 +190,7 @@ const VALIDATING_ANNOTATIONS = new Set([X_TELO_BINARY]);
|
|
|
183
190
|
*
|
|
184
191
|
* Stripping is what makes the key describe the compiled validator and nothing
|
|
185
192
|
* else, so the two views converge without either side having to agree on an
|
|
186
|
-
* annotation's spelling.
|
|
187
|
-
* reads `x-telo-ref` to drop a legacy scalar `type` at a ref slot, which does
|
|
188
|
-
* change validation, and it has already done so by the time this runs. */
|
|
193
|
+
* annotation's spelling. */
|
|
189
194
|
function stripTeloAnnotations(value, nameKeyed = false) {
|
|
190
195
|
// An array's items are schema nodes (`allOf`, tuple `items`), never names.
|
|
191
196
|
if (Array.isArray(value))
|
|
@@ -248,27 +253,12 @@ export class SchemaValidator {
|
|
|
248
253
|
code: { source: true },
|
|
249
254
|
});
|
|
250
255
|
addFormats.default(this.ajv);
|
|
251
|
-
for
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
"x-telo-context-ref-from",
|
|
258
|
-
"x-telo-schema-from",
|
|
259
|
-
"x-telo-topology-role",
|
|
260
|
-
"x-telo-step-context",
|
|
261
|
-
"x-telo-widget",
|
|
262
|
-
"x-telo-type",
|
|
263
|
-
"x-telo-inline",
|
|
264
|
-
]) {
|
|
265
|
-
this.ajv.addKeyword(kw);
|
|
266
|
-
}
|
|
267
|
-
// Not a no-op like the rest: bytes have no JSON Schema type, so this keyword IS
|
|
268
|
-
// the check. Defined as codegen in the analyzer so it inlines into the
|
|
269
|
-
// standalone validators compiled and cached below, rather than needing the
|
|
270
|
-
// implementation present at load.
|
|
271
|
-
this.ajv.addKeyword(binaryKeyword());
|
|
256
|
+
// One registration site for every Telo keyword: the annotations as no-ops
|
|
257
|
+
// and `x-telo-type` as the one that actually checks. `x-telo-type` is defined
|
|
258
|
+
// as codegen in the analyzer so it inlines into the standalone validators
|
|
259
|
+
// compiled and cached below, rather than needing the implementation present
|
|
260
|
+
// at load.
|
|
261
|
+
registerTeloKeywords(this.ajv);
|
|
272
262
|
// Register the shared manifest root so module schemas can
|
|
273
263
|
// `$ref: "telo://manifest#/$defs/ResourceRef"` without each manifest
|
|
274
264
|
// bundling its own copy. Mirrors the analyzer's createAjv().
|
|
@@ -342,12 +332,7 @@ export class SchemaValidator {
|
|
|
342
332
|
},
|
|
343
333
|
}
|
|
344
334
|
: normalized;
|
|
345
|
-
|
|
346
|
-
// its `x-telo-ref` slots. Schema validation runs in create() before Phase 5
|
|
347
|
-
// injection, so a ref slot holds the resolved `{kind, name, alias?}` object
|
|
348
|
-
// (or an unresolved sentinel) — both objects the stale `type: "string"`
|
|
349
|
-
// would otherwise reject.
|
|
350
|
-
const injected = normalizeRefSlots(withImplicit);
|
|
335
|
+
const injected = withImplicit;
|
|
351
336
|
// Canonicalize CEL/template carriers (an inline `${{ }}` left in a
|
|
352
337
|
// `description`, a `!cel` tag, …) to their bare source text so AJV can
|
|
353
338
|
// meta-validate the schema it compiles, and so the raw (warm-pass) and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../src/schema-validator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema-validator.js","sourceRoot":"","sources":["../src/schema-validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telorun/kernel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.74.0",
|
|
4
4
|
"description": "Telo Runtime - A lightweight, polyglot execution host.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"telo",
|
|
@@ -61,9 +61,9 @@
|
|
|
61
61
|
"dependencies": {
|
|
62
62
|
"@marcbachmann/cel-js": "^7.6.1",
|
|
63
63
|
"@sinclair/typebox": "^0.34.48",
|
|
64
|
-
"@telorun/analyzer": "0.
|
|
64
|
+
"@telorun/analyzer": "0.59.0",
|
|
65
65
|
"@telorun/glob": "0.2.0",
|
|
66
|
-
"@telorun/templating": "0.
|
|
66
|
+
"@telorun/templating": "0.15.0",
|
|
67
67
|
"ajv": "^8.17.1",
|
|
68
68
|
"ajv-formats": "^3.0.1",
|
|
69
69
|
"packageurl-js": "^2.0.1",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"@types/tar-stream": "^3.1.3",
|
|
76
76
|
"typescript": "^5.0.0",
|
|
77
77
|
"vitest": "^2.1.8",
|
|
78
|
-
"@telorun/sdk": "0.
|
|
78
|
+
"@telorun/sdk": "0.74.0"
|
|
79
79
|
},
|
|
80
80
|
"optionalDependencies": {
|
|
81
81
|
"esbuild": "^0.25.12"
|
package/src/application-env.ts
CHANGED
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
type DefResolver,
|
|
3
3
|
effectiveAuthorSchema,
|
|
4
4
|
residualEntrySchema,
|
|
5
|
-
|
|
5
|
+
withLiveValuesSkipped,
|
|
6
6
|
} from "@telorun/analyzer";
|
|
7
7
|
import type {
|
|
8
8
|
ResourceContext,
|
|
@@ -270,7 +270,7 @@ export function precompileDefinitionSchemas(
|
|
|
270
270
|
try {
|
|
271
271
|
const schema = resolveTypeFieldSchema(declared, lookup);
|
|
272
272
|
if (!schema) return;
|
|
273
|
-
compile(
|
|
273
|
+
compile(withLiveValuesSkipped(schema, (ref) => lookup(ref) as any));
|
|
274
274
|
} catch {
|
|
275
275
|
// An unresolvable contract is a dispatch-time error, not a warm failure.
|
|
276
276
|
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type ContractDirection,
|
|
3
|
+
declaredScalarPaths,
|
|
4
|
+
type DeclaredScalarForm,
|
|
5
|
+
type DeclaredScalarPath,
|
|
3
6
|
defaultBearingPaths,
|
|
4
7
|
effectiveContractField,
|
|
5
8
|
type DefResolver,
|
|
6
|
-
|
|
9
|
+
withLiveValuesSkipped,
|
|
7
10
|
} from "@telorun/analyzer";
|
|
8
11
|
import type { ResourceDefinition, ResourceInstance, ResourceManifest } from "@telorun/sdk";
|
|
9
12
|
import {
|
|
@@ -63,6 +66,10 @@ export interface BoundContract {
|
|
|
63
66
|
/** Paths a default can be written to — how far the caller's value must be
|
|
64
67
|
* copied before validation runs. Empty when the contract declares none. */
|
|
65
68
|
defaultPaths(): string[][];
|
|
69
|
+
/** Paths whose declared type fixes a scalar representation — the leaves a
|
|
70
|
+
* value is normalized at, in either direction. Empty when the contract
|
|
71
|
+
* declares none. */
|
|
72
|
+
scalarPaths(): DeclaredScalarPath[];
|
|
66
73
|
}
|
|
67
74
|
|
|
68
75
|
const CONTRACT_ERROR: Record<ContractDirection, string> = {
|
|
@@ -123,6 +130,7 @@ export function resolveBoundContract(
|
|
|
123
130
|
|
|
124
131
|
let compiled: { validate(value: unknown): void } | undefined;
|
|
125
132
|
let paths: string[][] | undefined;
|
|
133
|
+
let scalars: DeclaredScalarPath[] | undefined;
|
|
126
134
|
|
|
127
135
|
const resolve = (): { validate(value: unknown): void } => {
|
|
128
136
|
if (compiled !== undefined) return compiled;
|
|
@@ -138,8 +146,9 @@ export function resolveBoundContract(
|
|
|
138
146
|
`The type is not registered, so the contract cannot be enforced.`,
|
|
139
147
|
);
|
|
140
148
|
}
|
|
141
|
-
const stripped =
|
|
149
|
+
const stripped = withLiveValuesSkipped(schema, factory.resolveRef);
|
|
142
150
|
paths = defaultBearingPaths(stripped, factory.resolveRef);
|
|
151
|
+
scalars = declaredScalarPaths(stripped, factory.resolveRef);
|
|
143
152
|
// Compile by NAME whenever the declaration is one, so the type's CEL
|
|
144
153
|
// `rules:` are composed in — including when a stream had to be stripped, in
|
|
145
154
|
// which case the stream-bearing properties are dropped from the schema the
|
|
@@ -159,6 +168,10 @@ export function resolveBoundContract(
|
|
|
159
168
|
resolve();
|
|
160
169
|
return paths ?? [];
|
|
161
170
|
},
|
|
171
|
+
scalarPaths: () => {
|
|
172
|
+
resolve();
|
|
173
|
+
return scalars ?? [];
|
|
174
|
+
},
|
|
162
175
|
};
|
|
163
176
|
}
|
|
164
177
|
|
|
@@ -214,6 +227,91 @@ function copyAlong(node: unknown, segments: readonly string[]): unknown {
|
|
|
214
227
|
return node;
|
|
215
228
|
}
|
|
216
229
|
|
|
230
|
+
/**
|
|
231
|
+
* `value` with every leaf normalized to the representation its declaration
|
|
232
|
+
* names, copied along the containers above each one so the producer's own object
|
|
233
|
+
* is not rewritten under it.
|
|
234
|
+
*
|
|
235
|
+
* A declared shape says what the value IS, not only what it must pass — the same
|
|
236
|
+
* service a JSON Schema gives an HTTP response serializer. Telo's CEL layer
|
|
237
|
+
* takes the declaration literally: `integer` types as CEL `int` and a CEL int is
|
|
238
|
+
* a BigInt, so a controller handing back a plain JS number at an `integer` slot
|
|
239
|
+
* makes the contract a lie that surfaces nowhere until an expression composes it
|
|
240
|
+
* — `result.n + 1` type-checking statically and then dying at dispatch with
|
|
241
|
+
* `no such overload: dyn<double> + int`. Normalizing at the boundary that
|
|
242
|
+
* already knows the declared shape closes it for every kind at once, instead of
|
|
243
|
+
* once per module after each report.
|
|
244
|
+
*
|
|
245
|
+
* BOTH DIRECTIONS, deliberately. A controller cannot be written correctly
|
|
246
|
+
* against a slot that hands it a JS number when the manifest wrote a literal and
|
|
247
|
+
* a BigInt when CEL computed the same value — it would have to accept either at
|
|
248
|
+
* every declared-integer field, which is what `typeof x === "number"` guards
|
|
249
|
+
* around the standard library were quietly relying on. One representation per
|
|
250
|
+
* declaration is what makes the declared type something a controller can read.
|
|
251
|
+
*
|
|
252
|
+
* Only an EXACT conversion is performed: an integral number becomes an int64,
|
|
253
|
+
* and a BigInt becomes a double only when the round-trip is lossless. A
|
|
254
|
+
* fractional number at an integer slot, a string, a null, a magnitude no double
|
|
255
|
+
* can hold — all are left exactly as they arrived, so a value that genuinely
|
|
256
|
+
* violates the contract is still rejected rather than quietly repaired into
|
|
257
|
+
* something that passes, and a 64-bit integer is never truncated to reach a
|
|
258
|
+
* `number` slot (which is the `double(...)` defect this whole line of work
|
|
259
|
+
* exists to retire).
|
|
260
|
+
*/
|
|
261
|
+
export function normalizeDeclaredScalars(
|
|
262
|
+
value: unknown,
|
|
263
|
+
paths: readonly DeclaredScalarPath[],
|
|
264
|
+
): unknown {
|
|
265
|
+
if (paths.length === 0 || !value || typeof value !== "object") return value;
|
|
266
|
+
let out: unknown = value;
|
|
267
|
+
for (const { path, form } of paths) out = normalizeAlong(out, path, form);
|
|
268
|
+
return out;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
function normalizeAlong(
|
|
272
|
+
node: unknown,
|
|
273
|
+
segments: readonly string[],
|
|
274
|
+
form: DeclaredScalarForm,
|
|
275
|
+
): unknown {
|
|
276
|
+
if (!node || typeof node !== "object") return node;
|
|
277
|
+
const [head, ...rest] = segments;
|
|
278
|
+
|
|
279
|
+
if (head === "[]") {
|
|
280
|
+
if (!Array.isArray(node)) return node;
|
|
281
|
+
let changed = false;
|
|
282
|
+
const next = node.map((item) => {
|
|
283
|
+
const value = rest.length === 0 ? asForm(item, form) : normalizeAlong(item, rest, form);
|
|
284
|
+
if (value !== item) changed = true;
|
|
285
|
+
return value;
|
|
286
|
+
});
|
|
287
|
+
return changed ? next : node;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const container = node as Record<string, unknown>;
|
|
291
|
+
if (!(head! in container)) return node;
|
|
292
|
+
const child = container[head!];
|
|
293
|
+
const next = rest.length === 0 ? asForm(child, form) : normalizeAlong(child, rest, form);
|
|
294
|
+
if (next === child) return node;
|
|
295
|
+
// Copy-on-write, and only once a leaf actually moved: a producer may hand back
|
|
296
|
+
// an object it retains (a cached record, a live config), and rewriting it in
|
|
297
|
+
// place would change what it holds.
|
|
298
|
+
const copy = shallowCopy(container);
|
|
299
|
+
copy[head!] = next;
|
|
300
|
+
return copy;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
function asForm(value: unknown, form: DeclaredScalarForm): unknown {
|
|
304
|
+
if (form === "int64") {
|
|
305
|
+
return typeof value === "number" && Number.isInteger(value) ? BigInt(value) : value;
|
|
306
|
+
}
|
|
307
|
+
if (typeof value !== "bigint") return value;
|
|
308
|
+
const asNumber = Number(value);
|
|
309
|
+
// Lossless only. Past the safe range a double cannot hold the integer, and
|
|
310
|
+
// handing back a silently-rounded one is the precision loss the int64 work
|
|
311
|
+
// exists to remove.
|
|
312
|
+
return BigInt(asNumber) === value ? asNumber : value;
|
|
313
|
+
}
|
|
314
|
+
|
|
217
315
|
/**
|
|
218
316
|
* Raise a contract violation as a structured {@link InvokeError}.
|
|
219
317
|
*
|
|
@@ -306,11 +404,19 @@ export function bindContract(instance: ResourceInstance, binding: ContractBindin
|
|
|
306
404
|
let effective = inputs;
|
|
307
405
|
if (input) {
|
|
308
406
|
// Copied only so the validator's default-fill cannot mutate what the
|
|
309
|
-
// caller still holds.
|
|
310
|
-
//
|
|
311
|
-
//
|
|
312
|
-
//
|
|
313
|
-
//
|
|
407
|
+
// caller still holds. Making the value READABLE to a JSON Schema
|
|
408
|
+
// validator regardless of representation is the validator's own concern
|
|
409
|
+
// and is applied there (`bigint-schema-view.ts`).
|
|
410
|
+
//
|
|
411
|
+
// Deliberately NOT normalized on this side. Normalization states what a
|
|
412
|
+
// value IS to whoever reads it next, and on the way in that reader is a
|
|
413
|
+
// controller written in the host language — a declared `integer` reaching
|
|
414
|
+
// one as an int64 is a change to the authoring surface of every module,
|
|
415
|
+
// not a repair to a lie. On the way OUT the reader is CEL, which already
|
|
416
|
+
// types the declaration as `int`, so there the declaration and the value
|
|
417
|
+
// genuinely disagree. The asymmetry is the point: a controller still sees
|
|
418
|
+
// whatever the call site produced and must accept both, which is what
|
|
419
|
+
// `bigint-schema-view.ts` documents.
|
|
314
420
|
effective = copyForDefaults(inputs, input.defaultPaths());
|
|
315
421
|
try {
|
|
316
422
|
input.validate(effective);
|
|
@@ -325,6 +431,12 @@ export function bindContract(instance: ResourceInstance, binding: ContractBindin
|
|
|
325
431
|
} catch (error) {
|
|
326
432
|
throw contractViolation("outputType", describeTarget, error);
|
|
327
433
|
}
|
|
434
|
+
// AFTER validation, not before: the validator fills declared defaults,
|
|
435
|
+
// and a default written as a plain YAML number is exactly the leaf that
|
|
436
|
+
// has to come out normalized too. Validation itself is indifferent to
|
|
437
|
+
// which representation arrives (`bigint-schema-view.ts`), so ordering
|
|
438
|
+
// costs nothing there.
|
|
439
|
+
return normalizeDeclaredScalars(result, output.scalarPaths());
|
|
328
440
|
}
|
|
329
441
|
return result;
|
|
330
442
|
};
|
|
@@ -339,7 +451,7 @@ export function bindContract(instance: ResourceInstance, binding: ContractBindin
|
|
|
339
451
|
} catch (error) {
|
|
340
452
|
throw contractViolation("outputType", describeTarget, error);
|
|
341
453
|
}
|
|
342
|
-
return result;
|
|
454
|
+
return normalizeDeclaredScalars(result, output.scalarPaths());
|
|
343
455
|
};
|
|
344
456
|
}
|
|
345
457
|
}
|
package/src/kernel.ts
CHANGED
|
@@ -271,7 +271,7 @@ export class Kernel implements IKernel {
|
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
async loadManifests(url: string): Promise<ResourceManifest[]> {
|
|
274
|
-
const graph = await this.loader.loadGraph(url, { desugarImports: true });
|
|
274
|
+
const graph = await this.loader.loadGraph(url, { desugarImports: true, migrate: true });
|
|
275
275
|
if (graph.errors.length > 0) throw graph.errors[0].error;
|
|
276
276
|
return flattenForAnalyzer(graph);
|
|
277
277
|
}
|
|
@@ -447,7 +447,7 @@ export class Kernel implements IKernel {
|
|
|
447
447
|
// `desugarImports` expands each module's inline `imports:` map into synthetic
|
|
448
448
|
// Telo.Import manifests before discovery walks the graph, so inline imports
|
|
449
449
|
// resolve identically to authored Telo.Import docs.
|
|
450
|
-
const analysisGraph = await this.loader.loadGraph(sourceUrl, { desugarImports: true });
|
|
450
|
+
const analysisGraph = await this.loader.loadGraph(sourceUrl, { desugarImports: true, migrate: true });
|
|
451
451
|
if (analysisGraph.errors.length > 0) {
|
|
452
452
|
throw analysisGraph.errors[0].error;
|
|
453
453
|
}
|
|
@@ -491,6 +491,20 @@ export class Kernel implements IKernel {
|
|
|
491
491
|
this.logging.kernelLogger().warn(d.message, { "telo.diagnostic.code": d.code });
|
|
492
492
|
}
|
|
493
493
|
}
|
|
494
|
+
// A migration rewrites the entry module's own manifest silently otherwise:
|
|
495
|
+
// `telo check`, VS Code and the editor all report the deprecation, and
|
|
496
|
+
// `telo run` — the command an author actually uses — would be the only
|
|
497
|
+
// surface that does not. Already scoped to the entry's own files by the
|
|
498
|
+
// loader, so a published dependency's spelling never appears here.
|
|
499
|
+
for (const d of analysisGraph.migrationDiagnostics) {
|
|
500
|
+
const filePath = (d.data as { filePath?: string } | undefined)?.filePath;
|
|
501
|
+
this.logging
|
|
502
|
+
.kernelLogger()
|
|
503
|
+
.warn(
|
|
504
|
+
filePath ? `${filePath}: ${d.message}` : d.message,
|
|
505
|
+
d.code === undefined ? undefined : { "telo.diagnostic.code": d.code },
|
|
506
|
+
);
|
|
507
|
+
}
|
|
494
508
|
const staticManifests = flattenForAnalyzer(analysisGraph);
|
|
495
509
|
this.staticManifests = staticManifests;
|
|
496
510
|
|
|
@@ -623,7 +637,7 @@ export class Kernel implements IKernel {
|
|
|
623
637
|
// routes them to the import-controller, which actually loads and runs them.
|
|
624
638
|
// Without it (analysis-only desugar) inline imports would pass validation
|
|
625
639
|
// and then never execute.
|
|
626
|
-
const lm = await this.loader.loadModule(sourceUrl, { compile: true, desugarImports: true });
|
|
640
|
+
const lm = await this.loader.loadModule(sourceUrl, { compile: true, desugarImports: true, migrate: true });
|
|
627
641
|
const allManifests = flattenLoadedModule(lm);
|
|
628
642
|
|
|
629
643
|
// Phase 2: normalize inline resources — extract inline values from x-telo-ref slots
|
package/src/manifest-schemas.ts
CHANGED
|
@@ -2,7 +2,7 @@ import AjvModule from "ajv";
|
|
|
2
2
|
import addFormats from "ajv-formats";
|
|
3
3
|
// One definition of the `status:` block's shape, shared with `telo check` — the
|
|
4
4
|
// `required:` restriction is reported by the analyzer, which can name the fix.
|
|
5
|
-
import {
|
|
5
|
+
import { OBSERVED_STATE_SCHEMA, registerTeloKeywords } from "@telorun/analyzer";
|
|
6
6
|
const Ajv = AjvModule.default ?? AjvModule;
|
|
7
7
|
|
|
8
8
|
// Re-export the shared ResourceRef fragment from the templating package
|
|
@@ -177,7 +177,7 @@ export const ResourceAbstractSchema = {
|
|
|
177
177
|
};
|
|
178
178
|
|
|
179
179
|
const ajv = new Ajv({ allErrors: true, strict: false });
|
|
180
|
-
ajv
|
|
180
|
+
registerTeloKeywords(ajv);
|
|
181
181
|
addFormats.default(ajv);
|
|
182
182
|
|
|
183
183
|
// Lazy-compile validator: the AJV codegen cost (≈10–15 ms for these
|
package/src/observed-state.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { registerTeloKeywords } from "@telorun/analyzer";
|
|
2
2
|
import AjvModule from "ajv";
|
|
3
3
|
import { detachSnapshotValue, OBSERVED_STATE_KEY, RuntimeError } from "@telorun/sdk";
|
|
4
4
|
|
|
@@ -58,7 +58,7 @@ function mark(target: Record<string, unknown>, info: ObservedStateInfo): void {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
const ajv = new Ajv({ allErrors: true, strict: false });
|
|
61
|
-
ajv
|
|
61
|
+
registerTeloKeywords(ajv);
|
|
62
62
|
// Compiling a status schema costs ~ms and a resource may report repeatedly, so
|
|
63
63
|
// keep the validator keyed on the schema object it came from. The kind's folded
|
|
64
64
|
// `status:` is stamped once at registration, so this hits.
|
package/src/resource-context.ts
CHANGED
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
type TypeRule,
|
|
29
29
|
type ZoneEntry,
|
|
30
30
|
} from "@telorun/sdk";
|
|
31
|
-
import {
|
|
31
|
+
import { registerTeloKeywords } from "@telorun/analyzer";
|
|
32
32
|
import { isRefSentinel } from "@telorun/templating";
|
|
33
33
|
import { ZoneContext } from "./zone-context.js";
|
|
34
34
|
import * as path from "path";
|
|
@@ -317,10 +317,7 @@ export class ResourceContextImpl implements ResourceContext {
|
|
|
317
317
|
removeAdditional: true,
|
|
318
318
|
});
|
|
319
319
|
addFormats.default(ajv);
|
|
320
|
-
|
|
321
|
-
ajv.addKeyword(kw);
|
|
322
|
-
}
|
|
323
|
-
ajv.addKeyword(binaryKeyword());
|
|
320
|
+
registerTeloKeywords(ajv);
|
|
324
321
|
const validate = ajv.compile(
|
|
325
322
|
"type" in schema && typeof schema.type === "string"
|
|
326
323
|
? schema
|
package/src/runtime-seam.ts
CHANGED
|
@@ -4,8 +4,10 @@ import {
|
|
|
4
4
|
collectZoneModuleDocuments,
|
|
5
5
|
diagnosticFix,
|
|
6
6
|
flattenForAnalyzer,
|
|
7
|
+
remapMigratedPaths,
|
|
7
8
|
type AnalysisDiagnostic,
|
|
8
9
|
type DiagnosticData,
|
|
10
|
+
type LoadedGraph,
|
|
9
11
|
type ManifestSource,
|
|
10
12
|
type ZoneModuleDocuments,
|
|
11
13
|
} from "@telorun/analyzer";
|
|
@@ -224,14 +226,26 @@ export class KernelRuntimeSeam implements RuntimeSeam {
|
|
|
224
226
|
// `analyze()`'s — carried out of the try so the checks below can see them.
|
|
225
227
|
let parseDiagnostics: AnalysisDiagnostic[] = [];
|
|
226
228
|
let versionDiagnostics: AnalysisDiagnostic[] = [];
|
|
229
|
+
let migrationDiagnostics: AnalysisDiagnostic[] = [];
|
|
227
230
|
let moduleDocuments: ZoneModuleDocuments[] = [];
|
|
231
|
+
// Carried out of the try for the same reason the diagnostics are: analysis
|
|
232
|
+
// runs over the MIGRATED tree while every path a caller resolves points at
|
|
233
|
+
// the raw file, so the driver's provenance record has to be in hand below.
|
|
234
|
+
let loadedGraph: LoadedGraph | undefined;
|
|
228
235
|
try {
|
|
236
|
+
// `migrate` unconditionally: this seam answers "does this manifest load
|
|
237
|
+
// and check", and the runtime it stands in for reads a legacy spelling
|
|
238
|
+
// through the same rewrite. A raw view is a round-trip editor's need, not
|
|
239
|
+
// a supervisor's.
|
|
229
240
|
const graph = await loader.loadGraph(source, {
|
|
230
241
|
desugarImports: options?.desugarImports ?? true,
|
|
242
|
+
migrate: true,
|
|
231
243
|
});
|
|
232
244
|
if (graph.errors.length > 0) throw graph.errors[0].error;
|
|
245
|
+
loadedGraph = graph;
|
|
233
246
|
parseDiagnostics = graph.parseDiagnostics;
|
|
234
247
|
versionDiagnostics = graph.versionDiagnostics;
|
|
248
|
+
migrationDiagnostics = graph.migrationDiagnostics;
|
|
235
249
|
manifests = flattenForAnalyzer(graph);
|
|
236
250
|
// The zone stage derives each imported library's export contracts from
|
|
237
251
|
// its own full documents, which the flattened list drops.
|
|
@@ -254,17 +268,29 @@ export class KernelRuntimeSeam implements RuntimeSeam {
|
|
|
254
268
|
// treating a parse failure as fatal before analysis.
|
|
255
269
|
if (parseDiagnostics.length > 0) {
|
|
256
270
|
return {
|
|
257
|
-
diagnostics: [...parseDiagnostics, ...versionDiagnostics].map(
|
|
271
|
+
diagnostics: [...parseDiagnostics, ...migrationDiagnostics, ...versionDiagnostics].map(
|
|
272
|
+
toCheckDiagnostic,
|
|
273
|
+
),
|
|
258
274
|
};
|
|
259
275
|
}
|
|
260
276
|
|
|
261
277
|
// `analyze()` never sees version skew, so without merging these a major
|
|
262
278
|
// mismatch — which `load()` refuses to boot on — would check clean.
|
|
263
|
-
|
|
279
|
+
//
|
|
280
|
+
// The remap is the same call `assembleGraphDiagnostics` makes for the CLI
|
|
281
|
+
// and VS Code, and it is not optional here: a caller acts on `path` (a
|
|
282
|
+
// module's `Assert.Manifest` matches on it), so this seam reporting the
|
|
283
|
+
// MIGRATED spelling while every other surface reports the author's would
|
|
284
|
+
// make one manifest mean two things depending on who asked. A no-op when
|
|
285
|
+
// nothing was migrated.
|
|
286
|
+
const analysis = new StaticAnalyzer({ celHandlers: nodeCelHandlers }).analyze(manifests, {
|
|
264
287
|
moduleDocuments,
|
|
265
288
|
});
|
|
289
|
+
const diagnostics = remapMigratedPaths(loadedGraph, analysis);
|
|
266
290
|
return {
|
|
267
|
-
diagnostics: [...versionDiagnostics, ...diagnostics].map(
|
|
291
|
+
diagnostics: [...migrationDiagnostics, ...versionDiagnostics, ...diagnostics].map(
|
|
292
|
+
toCheckDiagnostic,
|
|
293
|
+
),
|
|
268
294
|
};
|
|
269
295
|
}
|
|
270
296
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isCompiledValue } from "@telorun/sdk";
|
|
2
|
+
import { selectUnionBranch } from "@telorun/analyzer";
|
|
2
3
|
|
|
3
4
|
/** Returns a schema-appropriate placeholder value for a CompiledValue field. */
|
|
4
5
|
function placeholderForSchema(schema: Record<string, unknown>): unknown {
|
|
@@ -9,6 +10,19 @@ function placeholderForSchema(schema: Record<string, unknown>): unknown {
|
|
|
9
10
|
// author never wrote. Mirrors `celPlaceholderForSchema` in the analyzer, which
|
|
10
11
|
// performs the same substitution for the static half.
|
|
11
12
|
if (Array.isArray(schema.enum) && schema.enum.length > 0) return schema.enum[0];
|
|
13
|
+
// A union with no `type` of its own: take the first branch that yields a
|
|
14
|
+
// placeholder, so a whole-field CEL leaf at an `anyOf` slot is not handed the
|
|
15
|
+
// `""` fallback that only a string branch would accept. Mirrors the analyzer's
|
|
16
|
+
// `celPlaceholderForSchema`, which makes the same substitution for the static
|
|
17
|
+
// half — the two must agree or one rejects what the other passes.
|
|
18
|
+
if (schema.type === undefined) {
|
|
19
|
+
const branches = (schema.anyOf ?? schema.oneOf) as Record<string, unknown>[] | undefined;
|
|
20
|
+
if (Array.isArray(branches)) {
|
|
21
|
+
for (const branch of branches) {
|
|
22
|
+
if (branch && typeof branch === "object") return placeholderForSchema(branch);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
12
26
|
switch (schema.type) {
|
|
13
27
|
case "integer":
|
|
14
28
|
case "number":
|
|
@@ -113,7 +127,20 @@ export function stripCompiledValues(
|
|
|
113
127
|
// that merely appears twice is still stripped both times.
|
|
114
128
|
const ancestors = new Set<object>();
|
|
115
129
|
|
|
116
|
-
const walk = (value: unknown,
|
|
130
|
+
const walk = (value: unknown, rawNodeSchema: Record<string, unknown>): unknown => {
|
|
131
|
+
// A UNION carries no `type` / `items` / `properties` of its own, so descending
|
|
132
|
+
// through one hands every CEL leaf underneath the schema-unaware `""`
|
|
133
|
+
// placeholder — which the branches then reject, reporting violations against
|
|
134
|
+
// a value the author never wrote (`/success/1 must be integer` for a `!cel`
|
|
135
|
+
// inside a list). Resolving the branch first is what lets the leaves be
|
|
136
|
+
// placed. Shared with the analyzer rather than reimplemented: the static and
|
|
137
|
+
// dispatch halves must choose the same branch, or one reports what the other
|
|
138
|
+
// accepts.
|
|
139
|
+
const nodeSchema = selectUnionBranch(
|
|
140
|
+
resolveSchemaRef(rawNodeSchema, root),
|
|
141
|
+
value,
|
|
142
|
+
root as Record<string, any>,
|
|
143
|
+
) as Record<string, unknown>;
|
|
117
144
|
const resolved = resolveSchemaRef(nodeSchema, root);
|
|
118
145
|
|
|
119
146
|
if (isCompiledValue(value)) return placeholderForSchema(resolved);
|