@telorun/kernel 0.77.0 → 0.79.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/bundle/module-artifact.d.ts +2 -1
- package/dist/bundle/module-artifact.d.ts.map +1 -1
- package/dist/bundle/module-artifact.js +14 -10
- package/dist/bundle/module-artifact.js.map +1 -1
- package/dist/bundle/tar.d.ts +3 -0
- package/dist/bundle/tar.d.ts.map +1 -1
- package/dist/bundle/tar.js +27 -1
- package/dist/bundle/tar.js.map +1 -1
- package/dist/controller-loader.d.ts +62 -9
- package/dist/controller-loader.d.ts.map +1 -1
- package/dist/controller-loader.js +71 -63
- package/dist/controller-loader.js.map +1 -1
- package/dist/controller-loaders/bundle-loader.d.ts +2 -2
- package/dist/controller-loaders/bundle-loader.d.ts.map +1 -1
- package/dist/controller-loaders/bundle-loader.js +9 -3
- package/dist/controller-loaders/bundle-loader.js.map +1 -1
- package/dist/controller-loaders/napi-loader.d.ts +2 -1
- package/dist/controller-loaders/napi-loader.d.ts.map +1 -1
- package/dist/controller-loaders/napi-loader.js +4 -1
- package/dist/controller-loaders/napi-loader.js.map +1 -1
- package/dist/controller-loaders/npm-loader.d.ts +2 -1
- package/dist/controller-loaders/npm-loader.d.ts.map +1 -1
- package/dist/controller-loaders/npm-loader.js +13 -7
- package/dist/controller-loaders/npm-loader.js.map +1 -1
- package/dist/controller-loaders/source-bundle-builder.d.ts +2 -1
- package/dist/controller-loaders/source-bundle-builder.d.ts.map +1 -1
- package/dist/controller-loaders/source-bundle-builder.js +4 -1
- package/dist/controller-loaders/source-bundle-builder.js.map +1 -1
- package/dist/controllers/resource-definition/resource-definition-controller.d.ts.map +1 -1
- package/dist/controllers/resource-definition/resource-definition-controller.js +7 -3
- package/dist/controllers/resource-definition/resource-definition-controller.js.map +1 -1
- package/dist/controllers/resource-definition/resource-template-controller.d.ts.map +1 -1
- package/dist/controllers/resource-definition/resource-template-controller.js +12 -5
- package/dist/controllers/resource-definition/resource-template-controller.js.map +1 -1
- package/dist/dependency-injection.d.ts.map +1 -1
- package/dist/dependency-injection.js +7 -7
- package/dist/dependency-injection.js.map +1 -1
- package/dist/evaluation-context.d.ts +33 -13
- package/dist/evaluation-context.d.ts.map +1 -1
- package/dist/evaluation-context.js +145 -4
- package/dist/evaluation-context.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/instance-declaration.d.ts +8 -0
- package/dist/instance-declaration.d.ts.map +1 -0
- package/dist/instance-declaration.js +34 -0
- package/dist/instance-declaration.js.map +1 -0
- package/dist/invocation-contract-binding.d.ts +15 -2
- package/dist/invocation-contract-binding.d.ts.map +1 -1
- package/dist/invocation-contract-binding.js +39 -4
- package/dist/invocation-contract-binding.js.map +1 -1
- package/dist/kernel.d.ts.map +1 -1
- package/dist/kernel.js +60 -3
- package/dist/kernel.js.map +1 -1
- package/dist/manifest-schemas.d.ts +1 -1
- package/dist/manifest-schemas.d.ts.map +1 -1
- package/dist/manifest-schemas.js +1 -1
- package/dist/manifest-schemas.js.map +1 -1
- package/dist/module-context.d.ts +5 -1
- package/dist/module-context.d.ts.map +1 -1
- package/dist/module-context.js +13 -1
- package/dist/module-context.js.map +1 -1
- package/dist/resource-context.d.ts +12 -1
- package/dist/resource-context.d.ts.map +1 -1
- package/dist/resource-context.js +15 -0
- package/dist/resource-context.js.map +1 -1
- package/dist/transports/oci/oci-client.d.ts +4 -0
- package/dist/transports/oci/oci-client.d.ts.map +1 -1
- package/dist/transports/oci/oci-client.js +7 -1
- package/dist/transports/oci/oci-client.js.map +1 -1
- package/dist/transports/oci/oci-transport.d.ts +8 -3
- package/dist/transports/oci/oci-transport.d.ts.map +1 -1
- package/dist/transports/oci/oci-transport.js +67 -21
- package/dist/transports/oci/oci-transport.js.map +1 -1
- package/dist/transports/registry-transport.d.ts +3 -2
- package/dist/transports/registry-transport.d.ts.map +1 -1
- package/dist/transports/registry-transport.js +10 -0
- package/dist/transports/registry-transport.js.map +1 -1
- package/dist/transports/transport.d.ts +25 -6
- package/dist/transports/transport.d.ts.map +1 -1
- package/dist/zone-context.d.ts +16 -1
- package/dist/zone-context.d.ts.map +1 -1
- package/dist/zone-context.js +61 -1
- package/dist/zone-context.js.map +1 -1
- package/package.json +3 -3
- package/src/bundle/module-artifact.ts +25 -8
- package/src/bundle/tar.ts +28 -1
- package/src/controller-loader.ts +114 -80
- package/src/controller-loaders/bundle-loader.ts +10 -2
- package/src/controller-loaders/napi-loader.ts +6 -0
- package/src/controller-loaders/npm-loader.ts +14 -4
- package/src/controller-loaders/source-bundle-builder.ts +6 -0
- package/src/controllers/resource-definition/resource-definition-controller.ts +7 -3
- package/src/controllers/resource-definition/resource-template-controller.ts +12 -5
- package/src/dependency-injection.ts +7 -7
- package/src/evaluation-context.ts +195 -15
- package/src/index.ts +6 -0
- package/src/instance-declaration.ts +36 -0
- package/src/invocation-contract-binding.ts +49 -1
- package/src/kernel.ts +77 -2
- package/src/manifest-schemas.ts +1 -0
- package/src/module-context.ts +24 -3
- package/src/resource-context.ts +18 -0
- package/src/transports/oci/oci-client.ts +8 -1
- package/src/transports/oci/oci-transport.ts +76 -22
- package/src/transports/registry-transport.ts +14 -0
- package/src/transports/transport.ts +26 -5
- package/src/zone-context.ts +70 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ArtifactLayer, type ArtifactSelector, type PlatformTarget } from "@telorun/analyzer";
|
|
2
2
|
import { type Logger } from "@telorun/sdk";
|
|
3
|
+
import type { ControllerWorkReporter } from "../controller-loader.js";
|
|
3
4
|
import type { TransportRegistry } from "../transports/transport-registry.js";
|
|
4
5
|
/** A materialized layer: the directory its files were extracted into (the
|
|
5
6
|
* module's cache directory) and the manifest-relative paths it wrote. */
|
|
@@ -91,7 +92,7 @@ export declare class ModuleArtifact {
|
|
|
91
92
|
* Returns `undefined` when the artifact ships no code layer for this selector,
|
|
92
93
|
* which is how a loader learns to fall through to the next candidate.
|
|
93
94
|
*/
|
|
94
|
-
materializeController(selector: ArtifactSelector): Promise<ResolvedControllerLayer | undefined>;
|
|
95
|
+
materializeController(selector: ArtifactSelector, report?: ControllerWorkReporter): Promise<ResolvedControllerLayer | undefined>;
|
|
95
96
|
/**
|
|
96
97
|
* Materialize the `library` layer for `selector`, plus `common`.
|
|
97
98
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-artifact.d.ts","sourceRoot":"","sources":["../../src/bundle/module-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA6B,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAG7E;0EAC0E;AAC1E,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;yDAKyD;AACzD,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;CACtB;AA2DD,wBAAgB,kBAAkB,IAAI,cAAc,CAOnD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,cAAc;IACzB;6DACyD;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B;;;;+BAI2B;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuD;gBAEpE,IAAI,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;QACjC,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,iBAAiB,CAAC;QAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd;IAQD;wDACoD;IACpD,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACG,qBAAqB,CACzB,QAAQ,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"module-artifact.d.ts","sourceRoot":"","sources":["../../src/bundle/module-artifact.ts"],"names":[],"mappings":"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"}
|
|
@@ -143,8 +143,8 @@ export class ModuleArtifact {
|
|
|
143
143
|
* Returns `undefined` when the artifact ships no code layer for this selector,
|
|
144
144
|
* which is how a loader learns to fall through to the next candidate.
|
|
145
145
|
*/
|
|
146
|
-
async materializeController(selector) {
|
|
147
|
-
return this.materializeCode(selector, ["controller", "library"]);
|
|
146
|
+
async materializeController(selector, report) {
|
|
147
|
+
return this.materializeCode(selector, ["controller", "library"], report);
|
|
148
148
|
}
|
|
149
149
|
/**
|
|
150
150
|
* Materialize the `library` layer for `selector`, plus `common`.
|
|
@@ -156,20 +156,20 @@ export class ModuleArtifact {
|
|
|
156
156
|
async materializeLibrary(selector) {
|
|
157
157
|
return this.materializeCode(selector, ["library"]);
|
|
158
158
|
}
|
|
159
|
-
async materializeCode(selector, roles) {
|
|
159
|
+
async materializeCode(selector, roles, report) {
|
|
160
160
|
const wanted = roles
|
|
161
161
|
.map((role) => codeLayerFor(this.layers, role, selector))
|
|
162
162
|
.filter((l) => l !== undefined);
|
|
163
163
|
if (wanted.length === 0)
|
|
164
164
|
return undefined;
|
|
165
|
-
const common = await this.materializeCommonTracked();
|
|
165
|
+
const common = await this.materializeCommonTracked(report);
|
|
166
166
|
let transferred = common?.transferred ?? false;
|
|
167
167
|
const files = [];
|
|
168
168
|
for (const layer of wanted) {
|
|
169
169
|
// Every half is a transfer the caller waited on: the common layer's bytes
|
|
170
170
|
// come down on this call too, so they are as much of a wait as the code
|
|
171
171
|
// layer's.
|
|
172
|
-
const resolved = await this.materializeTracked(layer);
|
|
172
|
+
const resolved = await this.materializeTracked(layer, report);
|
|
173
173
|
transferred = resolved.transferred || transferred;
|
|
174
174
|
files.push(...resolved.layer.files);
|
|
175
175
|
}
|
|
@@ -200,9 +200,9 @@ export class ModuleArtifact {
|
|
|
200
200
|
/** As `materializeCommon`, reporting whether this call transferred it — the
|
|
201
201
|
* controller path rides the common layer along and has to count its bytes as
|
|
202
202
|
* part of the wait. One lookup, so "common comes too" is encoded once. */
|
|
203
|
-
async materializeCommonTracked() {
|
|
203
|
+
async materializeCommonTracked(report) {
|
|
204
204
|
const layer = singletonLayer(this.layers, "common");
|
|
205
|
-
return layer ? this.materializeTracked(layer) : undefined;
|
|
205
|
+
return layer ? this.materializeTracked(layer, report) : undefined;
|
|
206
206
|
}
|
|
207
207
|
/**
|
|
208
208
|
* Materialize every layer a `target` platform could need — both singletons and
|
|
@@ -240,11 +240,11 @@ export class ModuleArtifact {
|
|
|
240
240
|
* transfer to all of them would print one progress line per candidate for a
|
|
241
241
|
* single download. The call that started the work owns the report.
|
|
242
242
|
*/
|
|
243
|
-
materializeTracked(layer) {
|
|
243
|
+
materializeTracked(layer, report) {
|
|
244
244
|
const pending = this.inFlight.get(layer.blob);
|
|
245
245
|
if (pending)
|
|
246
246
|
return pending.then((r) => ({ layer: r.layer, transferred: false }));
|
|
247
|
-
const work = this.materializeUncached(layer).catch((err) => {
|
|
247
|
+
const work = this.materializeUncached(layer, report).catch((err) => {
|
|
248
248
|
// Drop the rejection so a transient fetch failure is retried rather than
|
|
249
249
|
// cached for the lifetime of the module.
|
|
250
250
|
this.inFlight.delete(layer.blob);
|
|
@@ -260,7 +260,7 @@ export class ModuleArtifact {
|
|
|
260
260
|
const short = layer.blob.replace(/^sha256:/, "").slice(0, 16);
|
|
261
261
|
return path.join(this.dir, `.telo-layer-${layer.role}-${short}`);
|
|
262
262
|
}
|
|
263
|
-
async materializeUncached(layer) {
|
|
263
|
+
async materializeUncached(layer, report) {
|
|
264
264
|
const marker = this.markerPath(layer);
|
|
265
265
|
if (existsSync(marker)) {
|
|
266
266
|
return { layer: { dir: this.dir, files: await readMarker(marker) }, transferred: false };
|
|
@@ -271,6 +271,10 @@ export class ModuleArtifact {
|
|
|
271
271
|
if (existsSync(marker)) {
|
|
272
272
|
return { layer: { dir: this.dir, files: await readMarker(marker) }, transferred: false };
|
|
273
273
|
}
|
|
274
|
+
// Both re-checks are behind us, so this call really does go to the
|
|
275
|
+
// network — the one point at which a transfer is a fact rather than a
|
|
276
|
+
// possibility, and the same place `transferred: true` is decided.
|
|
277
|
+
await report?.("layer-fetch");
|
|
274
278
|
const files = await this.transports.fetchLayer(this.pinnedRef, layer.blob);
|
|
275
279
|
const actual = await computeFilesIntegrity(files);
|
|
276
280
|
if (actual !== layer.integrity) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-artifact.js","sourceRoot":"","sources":["../../src/bundle/module-artifact.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,eAAe,EACf,cAAc,EACd,cAAc,EACd,gBAAgB,GAIjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAe,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"module-artifact.js","sourceRoot":"","sources":["../../src/bundle/module-artifact.ts"],"names":[],"mappings":"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"}
|
package/dist/bundle/tar.d.ts
CHANGED
|
@@ -13,6 +13,9 @@ export declare function toPayloadFiles(entries: BundleEntry[]): PayloadFile[];
|
|
|
13
13
|
* manifest plus a built frontend), so buffering the whole archive before gzip
|
|
14
14
|
* is fine. (Distinct from `apps/k8s-runner/src/tar.ts`, which is coupled to
|
|
15
15
|
* `@telorun/runner-core`'s `RunBundle`.)
|
|
16
|
+
*
|
|
17
|
+
* Deterministic: identical entries in identical order produce identical bytes
|
|
18
|
+
* (see {@link FIXED_HEADER}).
|
|
16
19
|
*/
|
|
17
20
|
export declare function makeTarGz(entries: BundleEntry[]): Promise<Buffer>;
|
|
18
21
|
/** Decompress + untar a `module.tar.gz` buffer into its file entries. */
|
package/dist/bundle/tar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tar.d.ts","sourceRoot":"","sources":["../../src/bundle/tar.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;4DAC4D;AAC5D,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAKpE;
|
|
1
|
+
{"version":3,"file":"tar.d.ts","sourceRoot":"","sources":["../../src/bundle/tar.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;4DAC4D;AAC5D,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAKpE;AA0BD;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBvE;AAED,yEAAyE;AACzE,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA0BnE"}
|
package/dist/bundle/tar.js
CHANGED
|
@@ -9,12 +9,38 @@ export function toPayloadFiles(entries) {
|
|
|
9
9
|
content: typeof e.content === "string" ? Buffer.from(e.content) : e.content,
|
|
10
10
|
}));
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Every tar header field that is not the file's own name or contents, pinned.
|
|
14
|
+
*
|
|
15
|
+
* **The archive has to be a pure function of the files in it**, because a
|
|
16
|
+
* layer's `blob` digest covers these bytes and that digest is written into the
|
|
17
|
+
* published `telo.yaml` — which a dependent hashes to derive its import pin,
|
|
18
|
+
* before anything is pushed. A header carrying the wall clock (tar-stream
|
|
19
|
+
* defaults `mtime` to `new Date()`) makes the same file set frame to different
|
|
20
|
+
* bytes on every run, so the predicted digest and the pushed one would agree
|
|
21
|
+
* only by accident.
|
|
22
|
+
*
|
|
23
|
+
* Reproducibility is the same property seen from outside: re-running publish on
|
|
24
|
+
* one commit produces byte-identical layers. Node's gzip already writes no
|
|
25
|
+
* timestamp, so the tar header is the whole of it.
|
|
26
|
+
*/
|
|
27
|
+
const FIXED_HEADER = {
|
|
28
|
+
mtime: new Date(0),
|
|
29
|
+
mode: 0o644,
|
|
30
|
+
uid: 0,
|
|
31
|
+
gid: 0,
|
|
32
|
+
uname: "",
|
|
33
|
+
gname: "",
|
|
34
|
+
};
|
|
12
35
|
/**
|
|
13
36
|
* Pack `entries` into a gzipped tar (`module.tar.gz`) — the module-artifact
|
|
14
37
|
* writer shared by `telo publish` and the transports. Artifacts are small (a
|
|
15
38
|
* manifest plus a built frontend), so buffering the whole archive before gzip
|
|
16
39
|
* is fine. (Distinct from `apps/k8s-runner/src/tar.ts`, which is coupled to
|
|
17
40
|
* `@telorun/runner-core`'s `RunBundle`.)
|
|
41
|
+
*
|
|
42
|
+
* Deterministic: identical entries in identical order produce identical bytes
|
|
43
|
+
* (see {@link FIXED_HEADER}).
|
|
18
44
|
*/
|
|
19
45
|
export async function makeTarGz(entries) {
|
|
20
46
|
const pack = tarPack();
|
|
@@ -27,7 +53,7 @@ export async function makeTarGz(entries) {
|
|
|
27
53
|
for (const entry of entries) {
|
|
28
54
|
const buf = typeof entry.content === "string" ? Buffer.from(entry.content, "utf-8") : entry.content;
|
|
29
55
|
await new Promise((resolve, reject) => {
|
|
30
|
-
pack.entry({ name: entry.name }, buf, (err) => (err ? reject(err) : resolve()));
|
|
56
|
+
pack.entry({ name: entry.name, ...FIXED_HEADER }, buf, (err) => (err ? reject(err) : resolve()));
|
|
31
57
|
});
|
|
32
58
|
}
|
|
33
59
|
pack.finalize();
|
package/dist/bundle/tar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tar.js","sourceRoot":"","sources":["../../src/bundle/tar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAUvC;4DAC4D;AAC5D,MAAM,UAAU,cAAc,CAAC,OAAsB;IACnD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;KAC5E,CAAC,CAAC,CAAC;AACN,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"tar.js","sourceRoot":"","sources":["../../src/bundle/tar.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,11 +24,45 @@ export interface ResolvedController {
|
|
|
24
24
|
purl: string;
|
|
25
25
|
source: ControllerResolveSource;
|
|
26
26
|
importInstance: () => Promise<ControllerInstance>;
|
|
27
|
+
/**
|
|
28
|
+
* How long the caller has waited for this controller, measured from the
|
|
29
|
+
* first {@link ControllerWorkKind} branch it entered — or, when it entered
|
|
30
|
+
* none, from the `importInstance()` call. Resolution is what installs,
|
|
31
|
+
* compiles and fetches, so timing only the import reports a 40-second
|
|
32
|
+
* install as a few milliseconds.
|
|
33
|
+
*/
|
|
34
|
+
waitedMs: () => number;
|
|
27
35
|
}
|
|
28
|
-
|
|
36
|
+
/**
|
|
37
|
+
* A branch that makes the caller wait: a registry install, a compile, or a
|
|
38
|
+
* layer transfer. Reported by the sub-loader that is about to enter it, which
|
|
39
|
+
* is the only place that knows — a resolve's `source` is a verdict available
|
|
40
|
+
* only afterwards, and a warm start enters no branch at all, so nothing is
|
|
41
|
+
* announced for it. Reported for work in the resolve *and* the import phase:
|
|
42
|
+
* a dev-mode `pkg:telo` build and a `cargo build` are both paid inside
|
|
43
|
+
* `importInstance`.
|
|
44
|
+
*/
|
|
45
|
+
export type ControllerWorkKind = "npm-install" | "cargo-build" | "source-build" | "layer-fetch";
|
|
46
|
+
/**
|
|
47
|
+
* Sub-loader hook, invoked immediately before entering a {@link
|
|
48
|
+
* ControllerWorkKind} branch. Awaited, so a consumer that renders progress has
|
|
49
|
+
* its line on screen before the wait starts rather than after it.
|
|
50
|
+
*/
|
|
51
|
+
export type ControllerWorkReporter = (work: ControllerWorkKind) => void | Promise<void>;
|
|
52
|
+
export type ControllerLoaderEvent =
|
|
53
|
+
/**
|
|
54
|
+
* A resolved controller is about to be imported. `source` names the branch
|
|
55
|
+
* the resolve took, so a consumer can tell a warm start (`cache` / `local`)
|
|
56
|
+
* from work someone waited for (`npm-install`, `cargo-build`, `bundle`)
|
|
57
|
+
* *before* rendering anything. The event is emitted after resolution
|
|
58
|
+
* precisely so this is known: resolution is what fetches, installs and
|
|
59
|
+
* builds, and an event emitted ahead of it could only speculate.
|
|
60
|
+
*/
|
|
61
|
+
{
|
|
29
62
|
name: "ControllerLoading";
|
|
30
63
|
payload: {
|
|
31
64
|
purl: string;
|
|
65
|
+
source: ControllerResolveSource;
|
|
32
66
|
};
|
|
33
67
|
} | {
|
|
34
68
|
name: "ControllerLoaded";
|
|
@@ -57,6 +91,20 @@ export type ControllerLoaderEvent = {
|
|
|
57
91
|
purl: string;
|
|
58
92
|
reason: string;
|
|
59
93
|
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Real work has started for `purl` — an install, a compile or a transfer is
|
|
97
|
+
* about to run. This is the *only* in-progress signal, and it fires solely
|
|
98
|
+
* on the branch that does the work, so a warm start emits nothing rather
|
|
99
|
+
* than something a consumer has to take back. Closed by the matching
|
|
100
|
+
* `ControllerLoaded` / `ControllerLoadFailed`.
|
|
101
|
+
*/
|
|
102
|
+
| {
|
|
103
|
+
name: "ControllerWorkStarted";
|
|
104
|
+
payload: {
|
|
105
|
+
purl: string;
|
|
106
|
+
work: ControllerWorkKind;
|
|
107
|
+
};
|
|
60
108
|
};
|
|
61
109
|
/**
|
|
62
110
|
* The dispatcher awaits each emission, so the callback may be async without
|
|
@@ -103,9 +151,13 @@ export interface ControllerLoaderOptions {
|
|
|
103
151
|
* next candidate. User-code failures (`RuntimeError("ERR_CONTROLLER_BUILD_FAILED" | "ERR_CONTROLLER_INVALID")`)
|
|
104
152
|
* fail hard regardless of remaining candidates.
|
|
105
153
|
*
|
|
106
|
-
* Lifecycle events
|
|
107
|
-
* `
|
|
108
|
-
* `
|
|
154
|
+
* Lifecycle events follow resolution: a candidate this environment cannot host
|
|
155
|
+
* produces a `ControllerLoadSkipped` and nothing else, and only the candidate
|
|
156
|
+
* that resolved gets a `ControllerLoading` (carrying its resolve `source`)
|
|
157
|
+
* followed by `ControllerLoaded` / `ControllerLoadFailed`. In between, the
|
|
158
|
+
* sub-loader announces each branch that makes the caller wait as
|
|
159
|
+
* `ControllerWorkStarted` — the only in-progress signal, and the only one that
|
|
160
|
+
* cannot be emitted for a warm start.
|
|
109
161
|
*/
|
|
110
162
|
export declare class ControllerLoader {
|
|
111
163
|
private readonly emit;
|
|
@@ -124,13 +176,14 @@ export declare class ControllerLoader {
|
|
|
124
176
|
* registers fine and errors only when a resource of it is declared (matching
|
|
125
177
|
* the Rust kernel's deferral).
|
|
126
178
|
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
179
|
+
* Emits `ControllerWorkStarted` whenever a sub-loader enters a branch that
|
|
180
|
+
* makes the caller wait, and `ControllerLoadSkipped` per candidate this
|
|
181
|
+
* environment cannot host. It does NOT announce the load itself: the caller
|
|
182
|
+
* emits ControllerLoading/Loaded around `importInstance`, so those fire when
|
|
183
|
+
* the load actually happens, with the resolved `source` already in hand. A
|
|
184
|
+
* total resolution failure throws, mirroring {@link load}'s aggregated error.
|
|
131
185
|
*/
|
|
132
186
|
resolve(purlCandidates: string[], baseUri: string, policy?: ControllerPolicy, artifact?: ModuleArtifact, libraries?: SiblingLibraryMap): Promise<ResolvedController>;
|
|
133
|
-
private dispatchOne;
|
|
134
187
|
private dispatchResolveOne;
|
|
135
188
|
}
|
|
136
189
|
//# sourceMappingURL=controller-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller-loader.d.ts","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAgB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,2CAA2C,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAmC,MAAM,uBAAuB,CAAC;AAE1F,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,MAAM,uBAAuB,GAC/B,OAAO,GACP,cAAc,GACd,OAAO,GACP,aAAa,GACb,aAAa,GACb,QAAQ,CAAC;AAEb;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,uBAAuB,CAAC;IAChC,cAAc,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"controller-loader.d.ts","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,9 +17,13 @@ import { DEFAULT_POLICY, POLICY_WILDCARD } from "./runtime-registry.js";
|
|
|
17
17
|
* next candidate. User-code failures (`RuntimeError("ERR_CONTROLLER_BUILD_FAILED" | "ERR_CONTROLLER_INVALID")`)
|
|
18
18
|
* fail hard regardless of remaining candidates.
|
|
19
19
|
*
|
|
20
|
-
* Lifecycle events
|
|
21
|
-
* `
|
|
22
|
-
* `
|
|
20
|
+
* Lifecycle events follow resolution: a candidate this environment cannot host
|
|
21
|
+
* produces a `ControllerLoadSkipped` and nothing else, and only the candidate
|
|
22
|
+
* that resolved gets a `ControllerLoading` (carrying its resolve `source`)
|
|
23
|
+
* followed by `ControllerLoaded` / `ControllerLoadFailed`. In between, the
|
|
24
|
+
* sub-loader announces each branch that makes the caller wait as
|
|
25
|
+
* `ControllerWorkStarted` — the only in-progress signal, and the only one that
|
|
26
|
+
* cannot be emitted for a warm start.
|
|
23
27
|
*/
|
|
24
28
|
export class ControllerLoader {
|
|
25
29
|
emit;
|
|
@@ -38,53 +42,29 @@ export class ControllerLoader {
|
|
|
38
42
|
this.bundleLoader = new BundleControllerLoader(options.cacheRoot, options.log);
|
|
39
43
|
}
|
|
40
44
|
async load(purlCandidates, baseUri, policy, artifact, libraries = NO_SIBLING_LIBRARIES) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
const ordered = orderCandidates(purlCandidates, effectivePolicy);
|
|
46
|
-
if (ordered.length === 0) {
|
|
47
|
-
throw new RuntimeError("ERR_CONTROLLER_NOT_FOUND", `No controllers match runtime selection [${effectivePolicy.load.join(", ")}]; declared: ${purlCandidates.join(", ")}`);
|
|
48
|
-
}
|
|
49
|
-
const errors = [];
|
|
50
|
-
for (const purl of ordered) {
|
|
51
|
-
await this.emit?.({ name: "ControllerLoading", payload: { purl } });
|
|
52
|
-
const startedAt = Date.now();
|
|
53
|
-
try {
|
|
54
|
-
const { instance, source } = await this.dispatchOne(purl, baseUri, artifact, libraries);
|
|
55
|
-
await this.emit?.({
|
|
56
|
-
name: "ControllerLoaded",
|
|
57
|
-
payload: { purl, source, durationMs: Date.now() - startedAt },
|
|
58
|
-
});
|
|
59
|
-
return instance;
|
|
60
|
-
}
|
|
61
|
-
catch (err) {
|
|
62
|
-
if (err instanceof ControllerEnvMissingError) {
|
|
63
|
-
errors.push(`${purl}: ${err.message}`);
|
|
64
|
-
// Env-missing isn't a hard failure — the dispatcher will try the
|
|
65
|
-
// next candidate. We still emit a terminal event for *this* attempt
|
|
66
|
-
// so consumers (notably the CLI progress renderer) can close out
|
|
67
|
-
// the UI state opened by the matching ControllerLoading. Without
|
|
68
|
-
// this, every fallback attempt would leak a pending `⬇` line.
|
|
69
|
-
await this.emit?.({
|
|
70
|
-
name: "ControllerLoadSkipped",
|
|
71
|
-
payload: { purl, reason: err.message },
|
|
72
|
-
});
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
await this.emit?.({
|
|
76
|
-
name: "ControllerLoadFailed",
|
|
77
|
-
payload: { purl, error: err instanceof Error ? err.message : String(err) },
|
|
78
|
-
});
|
|
79
|
-
throw err;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
const aggregated = `No controller resolved. Tried ${ordered.length} candidate(s):\n${errors.join("\n")}`;
|
|
45
|
+
// Resolution — which is what installs, compiles and fetches — reports its
|
|
46
|
+
// own work and its own candidate fallthrough, so this is the import half
|
|
47
|
+
// and the announcement of what resolution decided.
|
|
48
|
+
const resolved = await this.resolve(purlCandidates, baseUri, policy, artifact, libraries);
|
|
83
49
|
await this.emit?.({
|
|
84
|
-
name: "
|
|
85
|
-
payload: { purl:
|
|
50
|
+
name: "ControllerLoading",
|
|
51
|
+
payload: { purl: resolved.purl, source: resolved.source },
|
|
86
52
|
});
|
|
87
|
-
|
|
53
|
+
try {
|
|
54
|
+
const instance = await resolved.importInstance();
|
|
55
|
+
await this.emit?.({
|
|
56
|
+
name: "ControllerLoaded",
|
|
57
|
+
payload: { purl: resolved.purl, source: resolved.source, durationMs: resolved.waitedMs() },
|
|
58
|
+
});
|
|
59
|
+
return instance;
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
await this.emit?.({
|
|
63
|
+
name: "ControllerLoadFailed",
|
|
64
|
+
payload: { purl: resolved.purl, error: err instanceof Error ? err.message : String(err) },
|
|
65
|
+
});
|
|
66
|
+
throw err;
|
|
67
|
+
}
|
|
88
68
|
}
|
|
89
69
|
/**
|
|
90
70
|
* Resolve a controller without importing it: pick the first candidate this
|
|
@@ -96,10 +76,12 @@ export class ControllerLoader {
|
|
|
96
76
|
* registers fine and errors only when a resource of it is declared (matching
|
|
97
77
|
* the Rust kernel's deferral).
|
|
98
78
|
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
79
|
+
* Emits `ControllerWorkStarted` whenever a sub-loader enters a branch that
|
|
80
|
+
* makes the caller wait, and `ControllerLoadSkipped` per candidate this
|
|
81
|
+
* environment cannot host. It does NOT announce the load itself: the caller
|
|
82
|
+
* emits ControllerLoading/Loaded around `importInstance`, so those fire when
|
|
83
|
+
* the load actually happens, with the resolved `source` already in hand. A
|
|
84
|
+
* total resolution failure throws, mirroring {@link load}'s aggregated error.
|
|
103
85
|
*/
|
|
104
86
|
async resolve(purlCandidates, baseUri, policy, artifact, libraries = NO_SIBLING_LIBRARIES) {
|
|
105
87
|
if (!purlCandidates || purlCandidates.length === 0) {
|
|
@@ -112,33 +94,59 @@ export class ControllerLoader {
|
|
|
112
94
|
}
|
|
113
95
|
const errors = [];
|
|
114
96
|
for (const purl of ordered) {
|
|
97
|
+
// First work only: an install followed by a compile is one wait, and the
|
|
98
|
+
// clock the caller reads has to start where that wait did. The reporter
|
|
99
|
+
// outlives resolution because the import phase does work too.
|
|
100
|
+
let workStartedAt;
|
|
101
|
+
const report = async (work) => {
|
|
102
|
+
workStartedAt ??= Date.now();
|
|
103
|
+
await this.emit?.({ name: "ControllerWorkStarted", payload: { purl, work } });
|
|
104
|
+
};
|
|
115
105
|
try {
|
|
116
|
-
const { source, importInstance } = await this.dispatchResolveOne(purl, baseUri, artifact, libraries);
|
|
117
|
-
|
|
106
|
+
const { source, importInstance } = await this.dispatchResolveOne(purl, baseUri, artifact, libraries, report);
|
|
107
|
+
let importStartedAt;
|
|
108
|
+
return {
|
|
109
|
+
purl,
|
|
110
|
+
source,
|
|
111
|
+
importInstance: () => {
|
|
112
|
+
importStartedAt ??= Date.now();
|
|
113
|
+
return importInstance();
|
|
114
|
+
},
|
|
115
|
+
waitedMs: () => Date.now() - (workStartedAt ?? importStartedAt ?? Date.now()),
|
|
116
|
+
};
|
|
118
117
|
}
|
|
119
118
|
catch (err) {
|
|
120
119
|
if (err instanceof ControllerEnvMissingError) {
|
|
121
120
|
errors.push(`${purl}: ${err.message}`);
|
|
121
|
+
await this.emit?.({
|
|
122
|
+
name: "ControllerLoadSkipped",
|
|
123
|
+
payload: { purl, reason: err.message },
|
|
124
|
+
});
|
|
122
125
|
continue;
|
|
123
126
|
}
|
|
127
|
+
await this.emit?.({
|
|
128
|
+
name: "ControllerLoadFailed",
|
|
129
|
+
payload: { purl, error: err instanceof Error ? err.message : String(err) },
|
|
130
|
+
});
|
|
124
131
|
throw err;
|
|
125
132
|
}
|
|
126
133
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
134
|
+
const aggregated = `No controller resolved. Tried ${ordered.length} candidate(s):\n${errors.join("\n")}`;
|
|
135
|
+
await this.emit?.({
|
|
136
|
+
name: "ControllerLoadFailed",
|
|
137
|
+
payload: { purl: ordered[ordered.length - 1], error: aggregated },
|
|
138
|
+
});
|
|
139
|
+
throw new RuntimeError("ERR_CONTROLLER_NOT_FOUND", aggregated);
|
|
132
140
|
}
|
|
133
|
-
async dispatchResolveOne(purl, baseUri, artifact, libraries) {
|
|
141
|
+
async dispatchResolveOne(purl, baseUri, artifact, libraries, report) {
|
|
134
142
|
if (purl.startsWith("pkg:npm")) {
|
|
135
|
-
return this.npmLoader.resolve(purl, baseUri);
|
|
143
|
+
return this.npmLoader.resolve(purl, baseUri, report);
|
|
136
144
|
}
|
|
137
145
|
if (purl.startsWith("pkg:cargo")) {
|
|
138
|
-
return this.napiLoader.resolve(purl, baseUri);
|
|
146
|
+
return this.napiLoader.resolve(purl, baseUri, report);
|
|
139
147
|
}
|
|
140
148
|
if (purl.startsWith("pkg:telo")) {
|
|
141
|
-
return this.bundleLoader.resolve(purl, baseUri, artifact, libraries);
|
|
149
|
+
return this.bundleLoader.resolve(purl, baseUri, artifact, libraries, report);
|
|
142
150
|
}
|
|
143
151
|
throw new ControllerEnvMissingError(`Unsupported PURL scheme: ${purl}`);
|
|
144
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller-loader.js","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAe,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,EACL,oBAAoB,GAErB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AACtG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAoB,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"controller-loader.js","sourceRoot":"","sources":["../src/controller-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ControllerInstance, type Logger } from "@telorun/sdk";
|
|
2
2
|
import { type ModuleArtifact } from "../bundle/module-artifact.js";
|
|
3
|
-
import type { ControllerResolveSource } from "../controller-loader.js";
|
|
3
|
+
import type { ControllerResolveSource, ControllerWorkReporter } from "../controller-loader.js";
|
|
4
4
|
import { type SiblingLibraryMap } from "./sibling-libraries.js";
|
|
5
5
|
/**
|
|
6
6
|
* Loads a `pkg:telo` controller — a controller delivered inside the module's own
|
|
@@ -110,7 +110,7 @@ export declare class BundleControllerLoader {
|
|
|
110
110
|
* bundle `import()` (the eval cost) into the returned `importInstance` thunk.
|
|
111
111
|
* Used by lazy controller loading.
|
|
112
112
|
*/
|
|
113
|
-
resolve(purl: string, baseUri: string, artifact?: ModuleArtifact, libraries?: SiblingLibraryMap): Promise<{
|
|
113
|
+
resolve(purl: string, baseUri: string, artifact?: ModuleArtifact, libraries?: SiblingLibraryMap, report?: ControllerWorkReporter): Promise<{
|
|
114
114
|
source: ControllerResolveSource;
|
|
115
115
|
importInstance: () => Promise<ControllerInstance>;
|
|
116
116
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle-loader.d.ts","sourceRoot":"","sources":["../../src/controller-loaders/bundle-loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAgB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAO7E,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"bundle-loader.d.ts","sourceRoot":"","sources":["../../src/controller-loaders/bundle-loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAgB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAO7E,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAQ/F,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAwQhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,qBAAa,sBAAsB;IAK/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC3B;oFACgF;IAChF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;IAPvB;;wDAEoD;gBAEjC,SAAS,CAAC,EAAE,MAAM,YAAA;IACnC;oFACgF;IAC/D,GAAG,CAAC,EAAE,MAAM,YAAA;IAGzB,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,cAAc,EACzB,SAAS,GAAE,iBAAwC,GAClD,OAAO,CAAC;QAAE,QAAQ,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAA;KAAE,CAAC;IAK7E;;;;;;;;;OASG;YACW,cAAc;IAmB5B;;;;;;;;;OASG;YACW,cAAc;IAkB5B;;;;;;;;;;;;;;;;OAgBG;YACW,gBAAgB;IAkD9B;;;;;;OAMG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,cAAc,EACzB,SAAS,GAAE,iBAAwC,EACnD,MAAM,CAAC,EAAE,sBAAsB,GAC9B,OAAO,CAAC;QAAE,MAAM,EAAE,uBAAuB,CAAC;QAAC,cAAc,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAC;IAyKlG;;uDAEmD;IACnD,OAAO,CAAC,eAAe;IAMvB;2DACuD;IACvD,OAAO,CAAC,SAAS;CAGlB"}
|