@milaboratories/pl-middle-layer 1.65.9 → 1.66.1
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/js_render/column_registry.cjs +56 -0
- package/dist/js_render/column_registry.cjs.map +1 -0
- package/dist/js_render/column_registry.js +55 -0
- package/dist/js_render/column_registry.js.map +1 -0
- package/dist/js_render/computable_context.cjs +80 -12
- package/dist/js_render/computable_context.cjs.map +1 -1
- package/dist/js_render/computable_context.js +81 -13
- package/dist/js_render/computable_context.js.map +1 -1
- package/dist/js_render/service_injectors.cjs +43 -2
- package/dist/js_render/service_injectors.cjs.map +1 -1
- package/dist/js_render/service_injectors.js +43 -2
- package/dist/js_render/service_injectors.js.map +1 -1
- package/dist/js_render/spec_override_collapse.cjs +108 -0
- package/dist/js_render/spec_override_collapse.cjs.map +1 -0
- package/dist/js_render/spec_override_collapse.js +108 -0
- package/dist/js_render/spec_override_collapse.js.map +1 -0
- package/dist/middle_layer/block_ctx.cjs +2 -1
- package/dist/middle_layer/block_ctx.cjs.map +1 -1
- package/dist/middle_layer/block_ctx.js +2 -1
- package/dist/middle_layer/block_ctx.js.map +1 -1
- package/dist/mutator/template/template_cache.cjs.map +1 -1
- package/dist/mutator/template/template_cache.d.ts.map +1 -1
- package/dist/mutator/template/template_cache.js.map +1 -1
- package/dist/pool/data.cjs +2 -9
- package/dist/pool/data.cjs.map +1 -1
- package/dist/pool/data.d.ts.map +1 -1
- package/dist/pool/data.js +3 -10
- package/dist/pool/data.js.map +1 -1
- package/dist/pool/result_pool.cjs +0 -20
- package/dist/pool/result_pool.cjs.map +1 -1
- package/dist/pool/result_pool.js +1 -21
- package/dist/pool/result_pool.js.map +1 -1
- package/dist/pool/upstream_block_ctx.cjs +64 -0
- package/dist/pool/upstream_block_ctx.cjs.map +1 -0
- package/dist/pool/upstream_block_ctx.js +64 -0
- package/dist/pool/upstream_block_ctx.js.map +1 -0
- package/dist/service_factories.cjs +3 -1
- package/dist/service_factories.cjs.map +1 -1
- package/dist/service_factories.js +3 -1
- package/dist/service_factories.js.map +1 -1
- package/package.json +19 -18
- package/src/js_render/column_registry.ts +95 -0
- package/src/js_render/computable_context.ts +109 -26
- package/src/js_render/service_injectors.ts +106 -8
- package/src/js_render/spec_override_collapse.ts +211 -0
- package/src/middle_layer/block_ctx.ts +6 -1
- package/src/mutator/template/template_cache.test.ts +0 -14
- package/src/mutator/template/template_cache.ts +0 -14
- package/src/pool/data.ts +4 -3
- package/src/pool/result_pool.ts +1 -24
- package/src/pool/upstream_block_ctx.ts +85 -0
- package/src/service_factories.ts +2 -0
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import _usingCtx from "../_virtual/_@oxc-project_runtime@0.137.0/helpers/esm/usingCtx.js";
|
|
2
2
|
import { parseFinalPObjectCollection } from "../pool/p_object_collection.js";
|
|
3
|
+
import { collectUpstreamBlockCtx } from "../pool/upstream_block_ctx.js";
|
|
3
4
|
import { getServiceInjectors } from "./service_injectors.js";
|
|
4
|
-
import {
|
|
5
|
+
import { buildColumnRegistry, resolvePColumnById } from "./column_registry.js";
|
|
6
|
+
import { collapseSpecOverrideNode } from "./spec_override_collapse.js";
|
|
7
|
+
import { MainAccessorName, StagingAccessorName, checkBlockFlag, isDataInfo, mapDataInfo, mapPObjectData, mapPTableDef, mapPTableDefV2, mapValueInVOE } from "@platforma-sdk/model";
|
|
5
8
|
import { notEmpty } from "@milaboratories/ts-helpers";
|
|
6
9
|
import { Computable } from "@milaboratories/computable";
|
|
7
10
|
import { randomUUID } from "node:crypto";
|
|
8
11
|
import { Scope } from "quickjs-emscripten";
|
|
9
12
|
import { PoolEntryGuard, ServiceInjectionError, ServiceMethodNotFoundError, Services, resolveRequiredServices, serviceFnKey } from "@milaboratories/pl-model-common";
|
|
10
13
|
//#region src/js_render/computable_context.ts
|
|
11
|
-
function bytesToBase64(data) {
|
|
12
|
-
return data !== void 0 ? Buffer.from(data).toString("base64") : void 0;
|
|
13
|
-
}
|
|
14
14
|
var ComputableContextHelper = class {
|
|
15
15
|
parent;
|
|
16
16
|
blockCtx;
|
|
@@ -37,6 +37,10 @@ var ComputableContextHelper = class {
|
|
|
37
37
|
resetComputableCtx() {
|
|
38
38
|
this.computableCtx = void 0;
|
|
39
39
|
this.accessors.clear();
|
|
40
|
+
this._resultPool = void 0;
|
|
41
|
+
this._upstreamBlockCtx = void 0;
|
|
42
|
+
this._rawUpstreamBlockCtx = void 0;
|
|
43
|
+
this._columnRegistry = void 0;
|
|
40
44
|
}
|
|
41
45
|
get requireComputableCtx() {
|
|
42
46
|
if (this.computableCtx === void 0) throw new Error("computableCtx not available (called from future mapper?)");
|
|
@@ -75,6 +79,9 @@ var ComputableContextHelper = class {
|
|
|
75
79
|
getIsReadyOrError(handle) {
|
|
76
80
|
return this.getAccessor(handle).getIsReadyOrError();
|
|
77
81
|
}
|
|
82
|
+
hasData(handle) {
|
|
83
|
+
return this.getAccessor(handle).hasData();
|
|
84
|
+
}
|
|
78
85
|
getIsFinal(handle) {
|
|
79
86
|
return this.getAccessor(handle).getIsFinal();
|
|
80
87
|
}
|
|
@@ -171,9 +178,6 @@ var ComputableContextHelper = class {
|
|
|
171
178
|
if (this._resultPool === void 0) this._resultPool = notEmpty(this.blockCtx.getResultsPool, "getResultsPool")(this.requireComputableCtx);
|
|
172
179
|
return this._resultPool;
|
|
173
180
|
}
|
|
174
|
-
calculateOptions(predicate) {
|
|
175
|
-
return this.resultPool.calculateOptions(predicate);
|
|
176
|
-
}
|
|
177
181
|
getDataFromResultPool() {
|
|
178
182
|
const collection = this.resultPool.getData();
|
|
179
183
|
if (collection.instabilityMarker !== void 0) this.requireComputableCtx.markUnstable(`incomplete_result_pool:${collection.instabilityMarker}`);
|
|
@@ -211,10 +215,49 @@ var ComputableContextHelper = class {
|
|
|
211
215
|
getDataFromResultPoolByRef(blockId, exportName) {
|
|
212
216
|
return mapPObjectData(this.resultPool.getDataByRef(blockId, exportName), (acc) => this.wrapAccessor(acc));
|
|
213
217
|
}
|
|
218
|
+
/**
|
|
219
|
+
* Single source-of-truth cache of upstream-block ctx pairs as raw
|
|
220
|
+
* `PlTreeNodeAccessor`s. Both the sandbox-facing `getUpstreamBlockCtx()`
|
|
221
|
+
* (string-handle view) and the host column registry are derived from this.
|
|
222
|
+
*/
|
|
223
|
+
_rawUpstreamBlockCtx = void 0;
|
|
224
|
+
/**
|
|
225
|
+
* Raw upstream-block ctx accessors for the current render. Public so the
|
|
226
|
+
* `ColumnsCollection` service injector (`service_injectors.ts`) can build
|
|
227
|
+
* `ColumnsCollectionDriverHost.getUpstreamBlockCtxes` bindings without
|
|
228
|
+
* round-tripping through the handle-shape view.
|
|
229
|
+
*/
|
|
230
|
+
getRawUpstreamBlockCtx() {
|
|
231
|
+
if (this._rawUpstreamBlockCtx === void 0) {
|
|
232
|
+
const prjEntry = notEmpty(this.blockCtx.projectEntry, "projectEntry");
|
|
233
|
+
this._rawUpstreamBlockCtx = collectUpstreamBlockCtx(this.requireComputableCtx, prjEntry, this.blockCtx.blockId);
|
|
234
|
+
}
|
|
235
|
+
return this._rawUpstreamBlockCtx;
|
|
236
|
+
}
|
|
237
|
+
_upstreamBlockCtx = void 0;
|
|
238
|
+
getUpstreamBlockCtx() {
|
|
239
|
+
if (this._upstreamBlockCtx === void 0) this._upstreamBlockCtx = this.getRawUpstreamBlockCtx().map((b) => ({
|
|
240
|
+
blockId: b.blockId,
|
|
241
|
+
prodCtx: this.wrapAccessor(b.prodCtx),
|
|
242
|
+
stagingCtx: this.wrapAccessor(b.stagingCtx),
|
|
243
|
+
prodIncomplete: b.prodIncomplete,
|
|
244
|
+
stagingIncomplete: b.stagingIncomplete
|
|
245
|
+
}));
|
|
246
|
+
return this._upstreamBlockCtx;
|
|
247
|
+
}
|
|
248
|
+
_columnRegistry = void 0;
|
|
249
|
+
getColumnRegistry() {
|
|
250
|
+
if (this._columnRegistry !== void 0) return this._columnRegistry;
|
|
251
|
+
return this._columnRegistry = buildColumnRegistry({
|
|
252
|
+
outputs: this.accessors.get(MainAccessorName) ?? void 0,
|
|
253
|
+
prerun: this.accessors.get(StagingAccessorName) ?? void 0,
|
|
254
|
+
upstreamBlockCtxes: this.getRawUpstreamBlockCtx()
|
|
255
|
+
});
|
|
256
|
+
}
|
|
214
257
|
createPFrame(def) {
|
|
215
258
|
try {
|
|
216
259
|
var _usingCtx$1 = _usingCtx();
|
|
217
|
-
const guard = _usingCtx$1.u(new PoolEntryGuard(this.env.driverKit.pFrameDriver.createPFrame(def.map((c) =>
|
|
260
|
+
const guard = _usingCtx$1.u(new PoolEntryGuard(this.env.driverKit.pFrameDriver.createPFrame(def.map((c) => this.resolvePColumn(c)))));
|
|
218
261
|
this.requireComputableCtx.addOnDestroy(guard.entry.unref);
|
|
219
262
|
return guard.keep().key;
|
|
220
263
|
} catch (_) {
|
|
@@ -226,7 +269,7 @@ var ComputableContextHelper = class {
|
|
|
226
269
|
createPTable(def) {
|
|
227
270
|
try {
|
|
228
271
|
var _usingCtx3 = _usingCtx();
|
|
229
|
-
const guard = _usingCtx3.u(new PoolEntryGuard(this.env.driverKit.pFrameDriver.createPTable(mapPTableDef(def, (c) =>
|
|
272
|
+
const guard = _usingCtx3.u(new PoolEntryGuard(this.env.driverKit.pFrameDriver.createPTable(mapPTableDef(def, (c) => this.resolvePColumn(c)))));
|
|
230
273
|
this.requireComputableCtx.addOnDestroy(guard.entry.unref);
|
|
231
274
|
return guard.keep().key;
|
|
232
275
|
} catch (_) {
|
|
@@ -238,7 +281,10 @@ var ComputableContextHelper = class {
|
|
|
238
281
|
createPTableV2(def) {
|
|
239
282
|
try {
|
|
240
283
|
var _usingCtx4 = _usingCtx();
|
|
241
|
-
const guard = _usingCtx4.u(new PoolEntryGuard(this.env.driverKit.pFrameDriver.createPTableV2(mapPTableDefV2(def,
|
|
284
|
+
const guard = _usingCtx4.u(new PoolEntryGuard(this.env.driverKit.pFrameDriver.createPTableV2(mapPTableDefV2(def, {
|
|
285
|
+
column: (c) => this.resolvePColumn(c),
|
|
286
|
+
node: collapseSpecOverrideNode
|
|
287
|
+
}))));
|
|
242
288
|
this.requireComputableCtx.addOnDestroy(guard.entry.unref);
|
|
243
289
|
return guard.keep().key;
|
|
244
290
|
} catch (_) {
|
|
@@ -248,6 +294,16 @@ var ComputableContextHelper = class {
|
|
|
248
294
|
}
|
|
249
295
|
}
|
|
250
296
|
/**
|
|
297
|
+
* Normalise a def element: pass-through for materialised columns (after
|
|
298
|
+
* mapping their `data` payload via {@link transformInputPData}), or resolve
|
|
299
|
+
* a bare id through the host column registry. `resolvePColumnById` extracts
|
|
300
|
+
* the underlying {@link PObjectId} from any id encoding
|
|
301
|
+
* ({@link ColumnOverriddenId}, etc.).
|
|
302
|
+
*/
|
|
303
|
+
resolvePColumn(item) {
|
|
304
|
+
return typeof item === "string" ? resolvePColumnById(this.getColumnRegistry(), item) : mapPObjectData(item, (d) => this.transformInputPData(d));
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
251
307
|
* Transforms input data for PFrame/PTable creation
|
|
252
308
|
* - Converts string handles to accessors
|
|
253
309
|
* - Maps accessors in DataInfo objects
|
|
@@ -270,6 +326,12 @@ var ComputableContextHelper = class {
|
|
|
270
326
|
logError(message) {
|
|
271
327
|
this.env.blockEventDispatcher.logError(this.blockCtx.blockId, message);
|
|
272
328
|
}
|
|
329
|
+
/**
|
|
330
|
+
* Resolve a sandbox-side `AccessorHandle` string back to its concrete
|
|
331
|
+
* host accessor. Used internally by every `traverse`/`getX(handle)`
|
|
332
|
+
* method and externally by the `ColumnsCollection` service injector
|
|
333
|
+
* for `SerializedColumnsSource` of kind `"accessor"`.
|
|
334
|
+
*/
|
|
273
335
|
getAccessor(handle) {
|
|
274
336
|
const accessor = this.accessors.get(handle);
|
|
275
337
|
if (accessor === void 0) throw new Error("No such accessor");
|
|
@@ -364,6 +426,9 @@ var ComputableContextHelper = class {
|
|
|
364
426
|
exportCtxFunction("getIsFinal", (handle) => {
|
|
365
427
|
return parent.exportSingleValue(this.getIsFinal(vm.getString(handle)), void 0);
|
|
366
428
|
});
|
|
429
|
+
exportCtxFunction("hasData", (handle) => {
|
|
430
|
+
return parent.exportSingleValue(this.hasData(vm.getString(handle)), void 0);
|
|
431
|
+
});
|
|
367
432
|
exportCtxFunction("getError", (handle) => {
|
|
368
433
|
return parent.exportSingleValue(this.getError(vm.getString(handle)), void 0);
|
|
369
434
|
});
|
|
@@ -433,15 +498,15 @@ var ComputableContextHelper = class {
|
|
|
433
498
|
exportCtxFunction("getSpecsFromResultPool", () => {
|
|
434
499
|
return parent.exportObjectUniversal(this.getSpecsFromResultPool(), void 0);
|
|
435
500
|
});
|
|
436
|
-
exportCtxFunction("calculateOptions", (predicate) => {
|
|
437
|
-
return parent.exportObjectUniversal(this.calculateOptions(parent.importObjectViaJson(predicate)), void 0);
|
|
438
|
-
});
|
|
439
501
|
exportCtxFunction("getSpecFromResultPoolByRef", (blockId, exportName) => {
|
|
440
502
|
return parent.exportObjectUniversal(this.getSpecFromResultPoolByRef(vm.getString(blockId), vm.getString(exportName)), void 0);
|
|
441
503
|
});
|
|
442
504
|
exportCtxFunction("getDataFromResultPoolByRef", (blockId, exportName) => {
|
|
443
505
|
return parent.exportObjectUniversal(this.getDataFromResultPoolByRef(vm.getString(blockId), vm.getString(exportName)), void 0);
|
|
444
506
|
});
|
|
507
|
+
exportCtxFunction("getUpstreamBlockCtx", () => {
|
|
508
|
+
return parent.exportObjectUniversal(this.getUpstreamBlockCtx(), void 0);
|
|
509
|
+
});
|
|
445
510
|
exportCtxFunction("createPFrame", (def) => {
|
|
446
511
|
return parent.exportSingleValue(this.createPFrame(parent.importObjectViaJson(def)), void 0);
|
|
447
512
|
});
|
|
@@ -497,6 +562,9 @@ var ComputableContextHelper = class {
|
|
|
497
562
|
});
|
|
498
563
|
}
|
|
499
564
|
};
|
|
565
|
+
function bytesToBase64(data) {
|
|
566
|
+
return data !== void 0 ? Buffer.from(data).toString("base64") : void 0;
|
|
567
|
+
}
|
|
500
568
|
//#endregion
|
|
501
569
|
export { ComputableContextHelper };
|
|
502
570
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computable_context.js","names":[],"sources":["../../src/js_render/computable_context.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport { checkBlockFlag } from \"@platforma-sdk/model\";\nimport type {\n ArchiveFormat,\n CommonFieldTraverseOps as CommonFieldTraverseOpsFromSDK,\n DataInfo,\n FieldTraversalStep as FieldTraversalStepFromSDK,\n Option,\n PColumn,\n PColumnValues,\n PFrameDef,\n PFrameHandle,\n PObject,\n PObjectSpec,\n PSpecPredicate,\n PTableDef,\n PTableDefV2,\n PTableHandle,\n ResourceType as ResourceTypeFromSDK,\n ResultCollection,\n ValueOrError,\n RangeBytes,\n BlockCodeKnownFeatureFlags,\n JsRenderInternal,\n} from \"@platforma-sdk/model\";\nimport {\n isDataInfo,\n mapDataInfo,\n mapPObjectData,\n mapPTableDef,\n mapPTableDefV2,\n mapValueInVOE,\n} from \"@platforma-sdk/model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { PoolEntryGuard } from \"@milaboratories/pl-model-common\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Optional } from \"utility-types\";\nimport type { BlockContextAny } from \"../middle_layer/block_ctx\";\nimport type { MiddleLayerEnvironment } from \"../middle_layer/middle_layer\";\nimport type { Block } from \"../model/project_model\";\nimport { parseFinalPObjectCollection } from \"../pool/p_object_collection\";\nimport type { ResultPool } from \"../pool/result_pool\";\nimport type { JsExecutionContext } from \"./context\";\nimport type { VmFunctionImplementation } from \"quickjs-emscripten\";\nimport { Scope, type QuickJSHandle } from \"quickjs-emscripten\";\nimport {\n resolveRequiredServices,\n serviceFnKey,\n Services,\n ModelServiceRegistry,\n ServiceInjectionError,\n ServiceMethodNotFoundError,\n} from \"@milaboratories/pl-model-common\";\nimport { getServiceInjectors } from \"./service_injectors\";\n\nfunction bytesToBase64(data: Uint8Array | undefined): string | undefined {\n return data !== undefined ? Buffer.from(data).toString(\"base64\") : undefined;\n}\n\nexport class ComputableContextHelper implements JsRenderInternal.GlobalCfgRenderCtxMethods<\n string,\n string\n> {\n public readonly computablesToResolve: Record<string, Computable<unknown>> = {};\n\n private computableCtx: ComputableCtx | undefined;\n private readonly accessors = new Map<string, PlTreeNodeAccessor | undefined>();\n private _meta: Map<string, Block> | undefined;\n private get meta(): Map<string, Block> {\n if (this._meta === undefined) {\n this._meta = this.blockCtx.blockMeta(this.requireComputableCtx);\n }\n return this._meta;\n }\n\n public get serviceRegistry(): ModelServiceRegistry {\n return this.env.serviceRegistry;\n }\n\n constructor(\n private readonly parent: JsExecutionContext,\n private readonly blockCtx: BlockContextAny,\n private readonly env: MiddleLayerEnvironment,\n private readonly featureFlags: BlockCodeKnownFeatureFlags | undefined,\n computableCtx: ComputableCtx,\n ) {\n this.computableCtx = computableCtx;\n }\n\n public resetComputableCtx() {\n this.computableCtx = undefined;\n this.accessors.clear();\n }\n\n private get requireComputableCtx(): ComputableCtx {\n if (this.computableCtx === undefined)\n throw new Error(\"computableCtx not available (called from future mapper?)\");\n return this.computableCtx;\n }\n\n public addOnDestroy(callback: () => void): void {\n this.requireComputableCtx.addOnDestroy(callback);\n }\n\n //\n // Methods for injected ctx object\n //\n\n getAccessorHandleByName(name: string): string | undefined {\n const cCtx = this.requireComputableCtx;\n const wellKnownAccessor = (name: string, ctxKey: \"staging\" | \"prod\"): string | undefined => {\n if (!this.accessors.has(name)) {\n const lambda = this.blockCtx[ctxKey];\n if (lambda === undefined) throw new Error(\"Staging context not available\");\n const entry = lambda(cCtx);\n if (!entry) this.accessors.set(name, undefined);\n else this.accessors.set(name, cCtx.accessor(entry).node({ ignoreError: true }));\n }\n return this.accessors.get(name) ? name : undefined;\n };\n if (name === \"staging\") return wellKnownAccessor(\"staging\", \"staging\");\n else if (name === \"main\") return wellKnownAccessor(\"main\", \"prod\");\n return undefined;\n }\n\n //\n // Accessors\n //\n\n resolveWithCommon(\n handle: string,\n commonOptions: CommonFieldTraverseOpsFromSDK,\n ...steps: (FieldTraversalStepFromSDK | string)[]\n ): string | undefined {\n return this.wrapAccessor(this.getAccessor(handle).traverseWithCommon(commonOptions, ...steps));\n }\n\n getResourceType(handle: string): ResourceTypeFromSDK {\n return this.getAccessor(handle).resourceType;\n }\n\n getInputsLocked(handle: string): boolean {\n return this.getAccessor(handle).getInputsLocked();\n }\n\n getOutputsLocked(handle: string): boolean {\n return this.getAccessor(handle).getOutputsLocked();\n }\n\n getIsReadyOrError(handle: string): boolean {\n return this.getAccessor(handle).getIsReadyOrError();\n }\n\n getIsFinal(handle: string): boolean {\n return this.getAccessor(handle).getIsFinal();\n }\n\n getError(handle: string): string | undefined {\n return this.wrapAccessor(this.getAccessor(handle).getError());\n }\n\n listInputFields(handle: string): string[] {\n return this.getAccessor(handle).listInputFields();\n }\n\n listOutputFields(handle: string): string[] {\n return this.getAccessor(handle).listOutputFields();\n }\n\n listDynamicFields(handle: string): string[] {\n return this.getAccessor(handle).listDynamicFields();\n }\n\n getKeyValueBase64(handle: string, key: string): string | undefined {\n return bytesToBase64(this.getAccessor(handle).getKeyValue(key));\n }\n\n getKeyValueAsString(handle: string, key: string): string | undefined {\n return this.getAccessor(handle).getKeyValueAsString(key);\n }\n\n getDataBase64(handle: string): string | undefined {\n return bytesToBase64(this.getAccessor(handle).getData());\n }\n\n getDataAsString(handle: string): string | undefined {\n return this.getAccessor(handle).getDataAsString();\n }\n\n //\n // Accessor helpers\n //\n\n parsePObjectCollection(\n handle: string,\n errorOnUnknownField: boolean,\n prefix: string,\n ...resolveSteps: string[]\n ): Record<string, PObject<string>> | undefined {\n const acc = this.getAccessor(handle);\n if (!acc.getIsReadyOrError()) return undefined;\n const accResult = parseFinalPObjectCollection(acc, errorOnUnknownField, prefix, resolveSteps);\n const result: Record<string, PObject<string>> = {};\n for (const [key, obj] of Object.entries(accResult)) {\n result[key] = mapPObjectData(obj, (d) => this.wrapAccessor(d));\n }\n return result;\n }\n\n //\n // Blobs\n //\n\n private registerComputable(hPrefix: string, computable: Computable<unknown>): string {\n const fHandle = `${hPrefix}_${randomUUID()}`;\n this.computablesToResolve[fHandle] = computable;\n return fHandle;\n }\n\n public getBlobContentAsString(handle: string, range?: RangeBytes): string {\n const resourceInfo = this.getAccessor(handle).resourceInfo;\n return this.registerComputable(\n \"getBlobContentAsString\",\n Computable.make((ctx) => this.env.driverKit.blobDriver.getDownloadedBlob(resourceInfo, ctx), {\n postprocessValue: async (value) => {\n if (value === undefined) return undefined;\n return Buffer.from(\n await this.env.driverKit.blobDriver.getContent(value.handle, range),\n ).toString(\"utf-8\");\n },\n }),\n );\n }\n\n public getBlobContentAsBase64(handle: string, range?: RangeBytes): string {\n const resourceInfo = this.getAccessor(handle).resourceInfo;\n return this.registerComputable(\n \"getBlobContentAsBase64\",\n Computable.make((ctx) => this.env.driverKit.blobDriver.getDownloadedBlob(resourceInfo, ctx), {\n postprocessValue: async (value) => {\n if (value === undefined) return undefined;\n return Buffer.from(\n await this.env.driverKit.blobDriver.getContent(value.handle, range),\n ).toString(\"base64\");\n },\n }),\n );\n }\n\n public getDownloadedBlobContentHandle(handle: string): string {\n const resourceInfo = this.getAccessor(handle).resourceInfo;\n return this.registerComputable(\n \"getDownloadedBlobContentHandle\",\n this.env.driverKit.blobDriver.getDownloadedBlob(resourceInfo),\n );\n }\n\n public getOnDemandBlobContentHandle(handle: string): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"getOnDemandBlobContentHandle\",\n this.env.driverKit.blobDriver.getOnDemandBlob(resource),\n );\n }\n\n //\n // Blobs to URLs\n //\n\n public extractArchiveAndGetURL(handle: string, format: ArchiveFormat): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"extractArchiveAndGetURL\",\n this.env.driverKit.blobToURLDriver.extractArchiveAndGetURL(resource, format),\n );\n }\n\n //\n // Import progress\n //\n\n getImportProgress(handle: string): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"getImportProgress\",\n this.env.driverKit.uploadDriver.getProgressId(resource),\n );\n }\n\n //\n // Logs\n //\n\n getLastLogs(handle: string, nLines: number): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"getLastLogs\",\n this.env.driverKit.logDriver.getLastLogs(resource, nLines),\n );\n }\n\n getProgressLog(handle: string, patternToSearch: string): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"getProgressLog\",\n this.env.driverKit.logDriver.getProgressLog(resource, patternToSearch),\n );\n }\n\n getProgressLogWithInfo(handle: string, patternToSearch: string): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"getProgressLogWithInfo\",\n this.env.driverKit.logDriver.getProgressLogWithInfo(resource, patternToSearch),\n );\n }\n\n getLogHandle(handle: string): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"getLogHandle\",\n this.env.driverKit.logDriver.getLogHandle(resource),\n );\n }\n\n //\n // Blocks\n //\n\n public getBlockLabel(blockId: string): string {\n const b = this.meta.get(blockId);\n if (b === undefined) throw new Error(`Block ${blockId} not found.`);\n return b.label;\n }\n\n //\n // Result Pool\n //\n\n private _resultPool: ResultPool | undefined = undefined;\n private get resultPool(): ResultPool {\n if (this._resultPool === undefined) {\n this._resultPool = notEmpty(\n this.blockCtx.getResultsPool,\n \"getResultsPool\",\n )(this.requireComputableCtx);\n }\n return this._resultPool;\n }\n\n public calculateOptions(predicate: PSpecPredicate): Option[] {\n return this.resultPool.calculateOptions(predicate);\n }\n\n public getDataFromResultPool(): ResultCollection<PObject<string>> {\n const collection = this.resultPool.getData();\n if (collection.instabilityMarker !== undefined)\n this.requireComputableCtx.markUnstable(\n `incomplete_result_pool:${collection.instabilityMarker}`,\n );\n return {\n isComplete: collection.isComplete,\n entries: collection.entries.map((e) => ({\n ref: e.ref,\n obj: mapPObjectData(e.obj, (d) => this.wrapAccessor(d)),\n })),\n };\n }\n\n public getDataWithErrorsFromResultPool(): ResultCollection<\n Optional<PObject<ValueOrError<string, Error>>, \"id\">\n > {\n const collection = this.resultPool.getDataWithErrors();\n if (collection.instabilityMarker !== undefined)\n this.requireComputableCtx.markUnstable(\n `incomplete_result_pool:${collection.instabilityMarker}`,\n );\n return {\n isComplete: collection.isComplete,\n entries: collection.entries.map((e) => ({\n ref: e.ref,\n obj: {\n id: e.obj.id,\n spec: e.obj.spec,\n data: mapValueInVOE(e.obj.data, (d) => this.wrapAccessor(d)),\n },\n })),\n };\n }\n\n public getSpecsFromResultPool(): ResultCollection<PObjectSpec> {\n const specs = this.resultPool.getSpecs();\n if (specs.instabilityMarker !== undefined)\n this.requireComputableCtx.markUnstable(\n `specs_from_pool_incomplete:${specs.instabilityMarker}`,\n );\n return specs;\n }\n\n getSpecFromResultPoolByRef(blockId: string, exportName: string): PObjectSpec | undefined {\n return this.resultPool.getSpecByRef(blockId, exportName);\n }\n\n getDataFromResultPoolByRef(blockId: string, exportName: string): PObject<string> | undefined {\n return mapPObjectData(this.resultPool.getDataByRef(blockId, exportName), (acc) =>\n this.wrapAccessor(acc),\n );\n }\n\n //\n // PFrames / PTables\n //\n\n public createPFrame(\n def: PFrameDef<PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PFrameHandle {\n using guard = new PoolEntryGuard(\n this.env.driverKit.pFrameDriver.createPFrame(\n def.map((c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n ),\n );\n this.requireComputableCtx.addOnDestroy(guard.entry.unref);\n return guard.keep().key;\n }\n\n public createPTable(\n def: PTableDef<PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PTableHandle {\n using guard = new PoolEntryGuard(\n this.env.driverKit.pFrameDriver.createPTable(\n mapPTableDef(def, (c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n ),\n );\n this.requireComputableCtx.addOnDestroy(guard.entry.unref);\n return guard.keep().key;\n }\n\n public createPTableV2(\n def: PTableDefV2<PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PTableHandle {\n using guard = new PoolEntryGuard(\n this.env.driverKit.pFrameDriver.createPTableV2(\n mapPTableDefV2(def, (c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n ),\n );\n this.requireComputableCtx.addOnDestroy(guard.entry.unref);\n return guard.keep().key;\n }\n\n /**\n * Transforms input data for PFrame/PTable creation\n * - Converts string handles to accessors\n * - Maps accessors in DataInfo objects\n * - Passes through other values\n */\n private transformInputPData(\n d: string | PColumnValues | DataInfo<string>,\n ): PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor> {\n if (typeof d === \"string\") {\n return this.getAccessor(d);\n } else if (isDataInfo(d)) {\n return mapDataInfo(d, (a) => this.getAccessor(a));\n } else {\n return d;\n }\n }\n\n //\n // Computable\n //\n\n public getCurrentUnstableMarker(): string | undefined {\n return this.computableCtx?.unstableMarker;\n }\n\n //\n // Logging\n //\n\n public logInfo(message: string): void {\n this.env.blockEventDispatcher.logInfo(this.blockCtx.blockId, message);\n }\n\n public logWarn(message: string): void {\n this.env.blockEventDispatcher.logWarn(this.blockCtx.blockId, message);\n }\n\n public logError(message: string): void {\n this.env.blockEventDispatcher.logError(this.blockCtx.blockId, message);\n }\n\n //\n // Helpers\n //\n\n private getAccessor(handle: string): PlTreeNodeAccessor {\n const accessor = this.accessors.get(handle);\n if (accessor === undefined) throw new Error(\"No such accessor\");\n return accessor;\n }\n\n private wrapAccessor(accessor: PlTreeNodeAccessor): string;\n private wrapAccessor(accessor: PlTreeNodeAccessor | undefined): string | undefined;\n private wrapAccessor(accessor: PlTreeNodeAccessor | undefined): string | undefined {\n if (accessor === undefined) return undefined;\n else {\n const nextHandle = randomUUID();\n this.accessors.set(nextHandle, accessor);\n return nextHandle;\n }\n }\n\n public injectCtx(configCtx: QuickJSHandle): void {\n const parent = this.parent;\n const vm = parent.vm;\n\n Scope.withScope((localScope) => {\n // Exporting methods\n\n const exportCtxFunction = (\n name: string,\n fn: VmFunctionImplementation<QuickJSHandle>,\n ): void => {\n const withCachedError: VmFunctionImplementation<QuickJSHandle> = (...args) => {\n // QuickJS strips all fields from errors apart from 'name' and 'message'.\n // That's why here we need to store them, and rethrow them when we exit\n // from QuickJS code.\n const t0 = performance.now();\n try {\n return (fn as any)(...args);\n } catch (e: unknown) {\n const newErr = parent.errorRepo.setAndRecreateForQuickJS(e);\n throw vm.newError(newErr);\n } finally {\n parent.stats.ctxMethodCalls++;\n parent.stats.ctxMethodMs += performance.now() - t0;\n }\n };\n\n vm.newFunction(name, withCachedError).consume((fnh) => vm.setProp(configCtx, name, fnh));\n vm.newFunction(name, fn).consume((fnh) =>\n vm.setProp(configCtx, name + \"__internal__\", fnh),\n );\n };\n\n // Check if this is a v1/v2 block (requiresModelAPIVersion !== 2)\n // For v1/v2 blocks, state is {args, uiState} and we need to inject uiState separately\n const isLegacyBlock = !checkBlockFlag(this.featureFlags, \"requiresModelAPIVersion\", 2);\n\n // Helper to extract uiState from legacy state format {args, uiState}\n const extractUiState = (stateJson: string | undefined): string => {\n if (!stateJson) return \"{}\";\n try {\n const parsed = JSON.parse(stateJson);\n return JSON.stringify(parsed?.uiState ?? {});\n } catch {\n return \"{}\";\n }\n };\n\n if (checkBlockFlag(this.featureFlags, \"supportsLazyState\")) {\n // injecting lazy state functions\n exportCtxFunction(\"args\", () => {\n const cCtx = this.requireComputableCtx;\n const args = this.blockCtx.args(cCtx);\n return args === undefined ? vm.undefined : vm.newString(args);\n });\n exportCtxFunction(\"blockStorage\", () => {\n return vm.newString(this.blockCtx.blockStorage(this.requireComputableCtx) ?? \"{}\");\n });\n exportCtxFunction(\"data\", () => {\n return vm.newString(this.blockCtx.data(this.requireComputableCtx) ?? \"{}\");\n });\n exportCtxFunction(\"activeArgs\", () => {\n const cCtx = this.requireComputableCtx;\n const res = this.blockCtx.activeArgs(cCtx);\n return res === undefined ? vm.undefined : vm.newString(res);\n });\n // For v1/v2 blocks, also inject uiState (extracted from state.uiState)\n if (isLegacyBlock) {\n exportCtxFunction(\"uiState\", () => {\n return vm.newString(extractUiState(this.blockCtx.data(this.requireComputableCtx)));\n });\n }\n } else {\n const cCtx = this.requireComputableCtx;\n const args = this.blockCtx.args(cCtx);\n const activeArgs = this.blockCtx.activeArgs(cCtx);\n const data = this.blockCtx.data(cCtx);\n if (args !== undefined) {\n vm.setProp(configCtx, \"args\", localScope.manage(vm.newString(args)));\n }\n vm.setProp(configCtx, \"data\", localScope.manage(vm.newString(data ?? \"{}\")));\n if (activeArgs !== undefined)\n vm.setProp(configCtx, \"activeArgs\", localScope.manage(vm.newString(activeArgs)));\n // For v1/v2 blocks, also inject uiState (extracted from state.uiState)\n if (isLegacyBlock) {\n vm.setProp(configCtx, \"uiState\", localScope.manage(vm.newString(extractUiState(data))));\n }\n }\n\n //\n // Methods for injected ctx object\n //\n\n exportCtxFunction(\"getAccessorHandleByName\", (name) => {\n return parent.exportSingleValue(\n this.getAccessorHandleByName(vm.getString(name)),\n undefined,\n );\n });\n\n //\n // Accessors\n //\n\n exportCtxFunction(\"resolveWithCommon\", (handle, commonOptions, ...steps) => {\n return parent.exportSingleValue(\n this.resolveWithCommon(\n vm.getString(handle),\n parent.importObjectViaJson(commonOptions) as CommonFieldTraverseOpsFromSDK,\n ...steps.map(\n (step) => parent.importObjectViaJson(step) as FieldTraversalStepFromSDK | string,\n ),\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"getResourceType\", (handle) => {\n return parent.exportObjectViaJson(this.getResourceType(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getInputsLocked\", (handle) => {\n return parent.exportSingleValue(this.getInputsLocked(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getOutputsLocked\", (handle) => {\n return parent.exportSingleValue(this.getOutputsLocked(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getIsReadyOrError\", (handle) => {\n return parent.exportSingleValue(this.getIsReadyOrError(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getIsFinal\", (handle) => {\n return parent.exportSingleValue(this.getIsFinal(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getError\", (handle) => {\n return parent.exportSingleValue(this.getError(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"listInputFields\", (handle) => {\n return parent.exportObjectViaJson(this.listInputFields(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"listOutputFields\", (handle) => {\n return parent.exportObjectViaJson(this.listOutputFields(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"listDynamicFields\", (handle) => {\n return parent.exportObjectViaJson(this.listDynamicFields(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getKeyValueBase64\", (handle, key) => {\n return parent.exportSingleValue(\n this.getKeyValueBase64(vm.getString(handle), vm.getString(key)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getKeyValueAsString\", (handle, key) => {\n return parent.exportSingleValue(\n this.getKeyValueAsString(vm.getString(handle), vm.getString(key)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getDataBase64\", (handle) => {\n return parent.exportSingleValue(this.getDataBase64(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getDataAsString\", (handle) => {\n return parent.exportSingleValue(this.getDataAsString(vm.getString(handle)), undefined);\n });\n\n //\n // Accessor helpers\n //\n\n exportCtxFunction(\n \"parsePObjectCollection\",\n (handle, errorOnUnknownField, prefix, ...resolveSteps) => {\n return parent.exportObjectUniversal(\n this.parsePObjectCollection(\n vm.getString(handle),\n vm.dump(errorOnUnknownField) as boolean,\n vm.getString(prefix),\n ...resolveSteps.map((stepHandle) => vm.getString(stepHandle)),\n ),\n undefined,\n );\n },\n );\n\n //\n // Blobs\n //\n\n exportCtxFunction(\"getBlobContentAsBase64\", (handle, range) => {\n return parent.exportSingleValue(\n this.getBlobContentAsBase64(\n vm.getString(handle),\n parent.importObjectUniversal(range) as RangeBytes | undefined,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"getBlobContentAsString\", (handle, range) => {\n return parent.exportSingleValue(\n this.getBlobContentAsString(\n vm.getString(handle),\n parent.importObjectUniversal(range) as RangeBytes | undefined,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"getDownloadedBlobContentHandle\", (handle) => {\n return parent.exportSingleValue(\n this.getDownloadedBlobContentHandle(vm.getString(handle)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getOnDemandBlobContentHandle\", (handle) => {\n return parent.exportSingleValue(\n this.getOnDemandBlobContentHandle(vm.getString(handle)),\n undefined,\n );\n });\n\n //\n // Blobs to URLs\n //\n\n exportCtxFunction(\"extractArchiveAndGetURL\", (handle, format) => {\n return parent.exportSingleValue(\n this.extractArchiveAndGetURL(vm.getString(handle), vm.getString(format) as ArchiveFormat),\n undefined,\n );\n });\n\n //\n // ImportProgress\n //\n\n exportCtxFunction(\"getImportProgress\", (handle) => {\n return parent.exportSingleValue(this.getImportProgress(vm.getString(handle)), undefined);\n });\n\n //\n // Logs\n //\n\n exportCtxFunction(\"getLastLogs\", (handle, nLines) => {\n return parent.exportSingleValue(\n this.getLastLogs(vm.getString(handle), vm.getNumber(nLines)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getProgressLog\", (handle, patternToSearch) => {\n return parent.exportSingleValue(\n this.getProgressLog(vm.getString(handle), vm.getString(patternToSearch)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getProgressLogWithInfo\", (handle, patternToSearch) => {\n return parent.exportSingleValue(\n this.getProgressLogWithInfo(vm.getString(handle), vm.getString(patternToSearch)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getLogHandle\", (handle) => {\n return parent.exportSingleValue(this.getLogHandle(vm.getString(handle)), undefined);\n });\n\n //\n // Blocks\n //\n\n exportCtxFunction(\"getBlockLabel\", (blockId) => {\n return parent.exportSingleValue(this.getBlockLabel(vm.getString(blockId)), undefined);\n });\n\n //\n // Result pool\n //\n\n exportCtxFunction(\"getDataFromResultPool\", () => {\n return parent.exportObjectUniversal(this.getDataFromResultPool(), undefined);\n });\n\n exportCtxFunction(\"getDataWithErrorsFromResultPool\", () => {\n return parent.exportObjectUniversal(this.getDataWithErrorsFromResultPool(), undefined);\n });\n\n exportCtxFunction(\"getSpecsFromResultPool\", () => {\n return parent.exportObjectUniversal(this.getSpecsFromResultPool(), undefined);\n });\n\n exportCtxFunction(\"calculateOptions\", (predicate) => {\n return parent.exportObjectUniversal(\n this.calculateOptions(parent.importObjectViaJson(predicate) as PSpecPredicate),\n undefined,\n );\n });\n\n exportCtxFunction(\"getSpecFromResultPoolByRef\", (blockId, exportName) => {\n return parent.exportObjectUniversal(\n this.getSpecFromResultPoolByRef(vm.getString(blockId), vm.getString(exportName)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getDataFromResultPoolByRef\", (blockId, exportName) => {\n return parent.exportObjectUniversal(\n this.getDataFromResultPoolByRef(vm.getString(blockId), vm.getString(exportName)),\n undefined,\n );\n });\n\n exportCtxFunction(\"createPFrame\", (def) => {\n return parent.exportSingleValue(\n this.createPFrame(\n parent.importObjectViaJson(def) as PFrameDef<PColumn<string | PColumnValues>>,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"createPTable\", (def) => {\n return parent.exportSingleValue(\n this.createPTable(\n parent.importObjectViaJson(def) as PTableDef<PColumn<string | PColumnValues>>,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"createPTableV2\", (def) => {\n return parent.exportSingleValue(\n this.createPTableV2(\n parent.importObjectViaJson(def) as PTableDefV2<PColumn<string | PColumnValues>>,\n ),\n undefined,\n );\n });\n\n //\n // Services\n //\n\n const requiredServiceNames = new Set(resolveRequiredServices(this.featureFlags) as string[]);\n const serviceFunctions = new Map<string, VmFunctionImplementation<QuickJSHandle>>();\n const injectors = getServiceInjectors();\n\n for (const [key, serviceId] of Object.entries(Services)) {\n if (!requiredServiceNames.has(serviceId)) continue;\n const injector = injectors[key as keyof typeof injectors];\n try {\n const methods = injector({ host: this, vm: parent });\n for (const [method, fn] of Object.entries(methods)) {\n serviceFunctions.set(serviceFnKey(serviceId, method), fn);\n }\n } catch (e) {\n throw new ServiceInjectionError(`Failed to inject service \"${serviceId}\"`, { cause: e });\n }\n }\n\n exportCtxFunction(\"getServiceNames\", () => {\n return parent.exportObjectViaJson([...requiredServiceNames]);\n });\n\n exportCtxFunction(\"getServiceMethods\", (serviceIdHandle) => {\n const serviceId = vm.getString(serviceIdHandle);\n const pfx = serviceFnKey(serviceId);\n const methods = [...serviceFunctions.keys()]\n .filter((k) => k.startsWith(pfx))\n .map((k) => k.slice(pfx.length));\n return parent.exportObjectViaJson(methods, undefined);\n });\n\n exportCtxFunction(\n \"callServiceMethod\",\n function (this: QuickJSHandle, serviceIdHandle, methodHandle, ...argHandles) {\n const serviceId = vm.getString(serviceIdHandle);\n const method = vm.getString(methodHandle);\n const fn = serviceFunctions.get(serviceFnKey(serviceId, method));\n if (!fn)\n throw new ServiceMethodNotFoundError(\n `Method \"${method}\" not found on service \"${serviceId}\"`,\n );\n return fn.call(this, ...argHandles);\n },\n );\n\n //\n // Computable\n //\n\n exportCtxFunction(\"getCurrentUnstableMarker\", () => {\n return parent.exportSingleValue(this.getCurrentUnstableMarker(), undefined);\n });\n\n //\n // Logging\n //\n\n exportCtxFunction(\"logInfo\", (message) => {\n this.logInfo(vm.getString(message));\n });\n\n exportCtxFunction(\"logWarn\", (message) => {\n this.logWarn(vm.getString(message));\n });\n\n exportCtxFunction(\"logError\", (message) => {\n this.logError(vm.getString(message));\n });\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"computable_context.js","names":[],"sources":["../../src/js_render/computable_context.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport { checkBlockFlag } from \"@platforma-sdk/model\";\nimport type {\n ArchiveFormat,\n CommonFieldTraverseOps as CommonFieldTraverseOpsFromSDK,\n DataInfo,\n FieldTraversalStep as FieldTraversalStepFromSDK,\n PColumn,\n PColumnValues,\n PFrameDef,\n PFrameHandle,\n PObject,\n PObjectSpec,\n PTableDef,\n PTableDefV2,\n PTableHandle,\n ResourceType as ResourceTypeFromSDK,\n ResultCollection,\n ValueOrError,\n RangeBytes,\n BlockCodeKnownFeatureFlags,\n JsRenderInternal,\n} from \"@platforma-sdk/model\";\nimport {\n isDataInfo,\n mapDataInfo,\n mapPObjectData,\n mapPTableDef,\n mapPTableDefV2,\n mapValueInVOE,\n} from \"@platforma-sdk/model\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { PoolEntryGuard } from \"@milaboratories/pl-model-common\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Optional } from \"utility-types\";\nimport type { BlockContextAny } from \"../middle_layer/block_ctx\";\nimport type { MiddleLayerEnvironment } from \"../middle_layer/middle_layer\";\nimport type { Block } from \"../model/project_model\";\nimport { parseFinalPObjectCollection } from \"../pool/p_object_collection\";\nimport type { ResultPool } from \"../pool/result_pool\";\nimport { collectUpstreamBlockCtx, type UpstreamBlockCtx } from \"../pool/upstream_block_ctx\";\nimport type { JsExecutionContext } from \"./context\";\nimport type { VmFunctionImplementation } from \"quickjs-emscripten\";\nimport { Scope, type QuickJSHandle } from \"quickjs-emscripten\";\nimport {\n resolveRequiredServices,\n serviceFnKey,\n Services,\n ModelServiceRegistry,\n ServiceInjectionError,\n ServiceMethodNotFoundError,\n} from \"@milaboratories/pl-model-common\";\nimport { getServiceInjectors } from \"./service_injectors\";\nimport { MainAccessorName, StagingAccessorName } from \"@platforma-sdk/model\";\nimport { buildColumnRegistry, resolvePColumnById } from \"./column_registry\";\nimport type { ColumnRegistry, PObjectId } from \"@milaboratories/pl-model-common\";\nimport { collapseSpecOverrideNode } from \"./spec_override_collapse\";\n\nexport class ComputableContextHelper implements JsRenderInternal.GlobalCfgRenderCtxMethods<\n string,\n string\n> {\n public readonly computablesToResolve: Record<string, Computable<unknown>> = {};\n\n private computableCtx: ComputableCtx | undefined;\n private readonly accessors = new Map<string, PlTreeNodeAccessor | undefined>();\n private _meta: Map<string, Block> | undefined;\n private get meta(): Map<string, Block> {\n if (this._meta === undefined) {\n this._meta = this.blockCtx.blockMeta(this.requireComputableCtx);\n }\n return this._meta;\n }\n\n public get serviceRegistry(): ModelServiceRegistry {\n return this.env.serviceRegistry;\n }\n\n constructor(\n private readonly parent: JsExecutionContext,\n private readonly blockCtx: BlockContextAny,\n private readonly env: MiddleLayerEnvironment,\n private readonly featureFlags: BlockCodeKnownFeatureFlags | undefined,\n computableCtx: ComputableCtx,\n ) {\n this.computableCtx = computableCtx;\n }\n\n public resetComputableCtx() {\n this.computableCtx = undefined;\n this.accessors.clear();\n this._resultPool = undefined;\n this._upstreamBlockCtx = undefined;\n this._rawUpstreamBlockCtx = undefined;\n this._columnRegistry = undefined;\n }\n\n private get requireComputableCtx(): ComputableCtx {\n if (this.computableCtx === undefined)\n throw new Error(\"computableCtx not available (called from future mapper?)\");\n return this.computableCtx;\n }\n\n public addOnDestroy(callback: () => void): void {\n this.requireComputableCtx.addOnDestroy(callback);\n }\n\n //\n // Methods for injected ctx object\n //\n\n getAccessorHandleByName(name: string): string | undefined {\n const cCtx = this.requireComputableCtx;\n const wellKnownAccessor = (name: string, ctxKey: \"staging\" | \"prod\"): string | undefined => {\n if (!this.accessors.has(name)) {\n const lambda = this.blockCtx[ctxKey];\n if (lambda === undefined) throw new Error(\"Staging context not available\");\n const entry = lambda(cCtx);\n if (!entry) this.accessors.set(name, undefined);\n else this.accessors.set(name, cCtx.accessor(entry).node({ ignoreError: true }));\n }\n return this.accessors.get(name) ? name : undefined;\n };\n if (name === \"staging\") return wellKnownAccessor(\"staging\", \"staging\");\n else if (name === \"main\") return wellKnownAccessor(\"main\", \"prod\");\n return undefined;\n }\n\n //\n // Accessors\n //\n\n resolveWithCommon(\n handle: string,\n commonOptions: CommonFieldTraverseOpsFromSDK,\n ...steps: (FieldTraversalStepFromSDK | string)[]\n ): string | undefined {\n return this.wrapAccessor(this.getAccessor(handle).traverseWithCommon(commonOptions, ...steps));\n }\n\n getResourceType(handle: string): ResourceTypeFromSDK {\n return this.getAccessor(handle).resourceType;\n }\n\n getInputsLocked(handle: string): boolean {\n return this.getAccessor(handle).getInputsLocked();\n }\n\n getOutputsLocked(handle: string): boolean {\n return this.getAccessor(handle).getOutputsLocked();\n }\n\n getIsReadyOrError(handle: string): boolean {\n return this.getAccessor(handle).getIsReadyOrError();\n }\n\n hasData(handle: string): boolean {\n return this.getAccessor(handle).hasData();\n }\n\n getIsFinal(handle: string): boolean {\n return this.getAccessor(handle).getIsFinal();\n }\n\n getError(handle: string): string | undefined {\n return this.wrapAccessor(this.getAccessor(handle).getError());\n }\n\n listInputFields(handle: string): string[] {\n return this.getAccessor(handle).listInputFields();\n }\n\n listOutputFields(handle: string): string[] {\n return this.getAccessor(handle).listOutputFields();\n }\n\n listDynamicFields(handle: string): string[] {\n return this.getAccessor(handle).listDynamicFields();\n }\n\n getKeyValueBase64(handle: string, key: string): string | undefined {\n return bytesToBase64(this.getAccessor(handle).getKeyValue(key));\n }\n\n getKeyValueAsString(handle: string, key: string): string | undefined {\n return this.getAccessor(handle).getKeyValueAsString(key);\n }\n\n getDataBase64(handle: string): string | undefined {\n return bytesToBase64(this.getAccessor(handle).getData());\n }\n\n getDataAsString(handle: string): string | undefined {\n return this.getAccessor(handle).getDataAsString();\n }\n\n //\n // Accessor helpers\n //\n\n parsePObjectCollection(\n handle: string,\n errorOnUnknownField: boolean,\n prefix: string,\n ...resolveSteps: string[]\n ): Record<string, PObject<string>> | undefined {\n const acc = this.getAccessor(handle);\n if (!acc.getIsReadyOrError()) return undefined;\n const accResult = parseFinalPObjectCollection(acc, errorOnUnknownField, prefix, resolveSteps);\n const result: Record<string, PObject<string>> = {};\n for (const [key, obj] of Object.entries(accResult)) {\n result[key] = mapPObjectData(obj, (d) => this.wrapAccessor(d));\n }\n return result;\n }\n\n //\n // Blobs\n //\n\n private registerComputable(hPrefix: string, computable: Computable<unknown>): string {\n const fHandle = `${hPrefix}_${randomUUID()}`;\n this.computablesToResolve[fHandle] = computable;\n return fHandle;\n }\n\n public getBlobContentAsString(handle: string, range?: RangeBytes): string {\n const resourceInfo = this.getAccessor(handle).resourceInfo;\n return this.registerComputable(\n \"getBlobContentAsString\",\n Computable.make((ctx) => this.env.driverKit.blobDriver.getDownloadedBlob(resourceInfo, ctx), {\n postprocessValue: async (value) => {\n if (value === undefined) return undefined;\n return Buffer.from(\n await this.env.driverKit.blobDriver.getContent(value.handle, range),\n ).toString(\"utf-8\");\n },\n }),\n );\n }\n\n public getBlobContentAsBase64(handle: string, range?: RangeBytes): string {\n const resourceInfo = this.getAccessor(handle).resourceInfo;\n return this.registerComputable(\n \"getBlobContentAsBase64\",\n Computable.make((ctx) => this.env.driverKit.blobDriver.getDownloadedBlob(resourceInfo, ctx), {\n postprocessValue: async (value) => {\n if (value === undefined) return undefined;\n return Buffer.from(\n await this.env.driverKit.blobDriver.getContent(value.handle, range),\n ).toString(\"base64\");\n },\n }),\n );\n }\n\n public getDownloadedBlobContentHandle(handle: string): string {\n const resourceInfo = this.getAccessor(handle).resourceInfo;\n return this.registerComputable(\n \"getDownloadedBlobContentHandle\",\n this.env.driverKit.blobDriver.getDownloadedBlob(resourceInfo),\n );\n }\n\n public getOnDemandBlobContentHandle(handle: string): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"getOnDemandBlobContentHandle\",\n this.env.driverKit.blobDriver.getOnDemandBlob(resource),\n );\n }\n\n //\n // Blobs to URLs\n //\n\n public extractArchiveAndGetURL(handle: string, format: ArchiveFormat): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"extractArchiveAndGetURL\",\n this.env.driverKit.blobToURLDriver.extractArchiveAndGetURL(resource, format),\n );\n }\n\n //\n // Import progress\n //\n\n getImportProgress(handle: string): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"getImportProgress\",\n this.env.driverKit.uploadDriver.getProgressId(resource),\n );\n }\n\n //\n // Logs\n //\n\n getLastLogs(handle: string, nLines: number): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"getLastLogs\",\n this.env.driverKit.logDriver.getLastLogs(resource, nLines),\n );\n }\n\n getProgressLog(handle: string, patternToSearch: string): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"getProgressLog\",\n this.env.driverKit.logDriver.getProgressLog(resource, patternToSearch),\n );\n }\n\n getProgressLogWithInfo(handle: string, patternToSearch: string): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"getProgressLogWithInfo\",\n this.env.driverKit.logDriver.getProgressLogWithInfo(resource, patternToSearch),\n );\n }\n\n getLogHandle(handle: string): string {\n const resource = this.getAccessor(handle).persist();\n return this.registerComputable(\n \"getLogHandle\",\n this.env.driverKit.logDriver.getLogHandle(resource),\n );\n }\n\n //\n // Blocks\n //\n\n public getBlockLabel(blockId: string): string {\n const b = this.meta.get(blockId);\n if (b === undefined) throw new Error(`Block ${blockId} not found.`);\n return b.label;\n }\n\n //\n // Result Pool\n //\n\n private _resultPool: ResultPool | undefined = undefined;\n private get resultPool(): ResultPool {\n if (this._resultPool === undefined) {\n this._resultPool = notEmpty(\n this.blockCtx.getResultsPool,\n \"getResultsPool\",\n )(this.requireComputableCtx);\n }\n return this._resultPool;\n }\n\n public getDataFromResultPool(): ResultCollection<PObject<string>> {\n const collection = this.resultPool.getData();\n if (collection.instabilityMarker !== undefined)\n this.requireComputableCtx.markUnstable(\n `incomplete_result_pool:${collection.instabilityMarker}`,\n );\n return {\n isComplete: collection.isComplete,\n entries: collection.entries.map((e) => ({\n ref: e.ref,\n obj: mapPObjectData(e.obj, (d) => this.wrapAccessor(d)),\n })),\n };\n }\n\n public getDataWithErrorsFromResultPool(): ResultCollection<\n Optional<PObject<ValueOrError<string, Error>>, \"id\">\n > {\n const collection = this.resultPool.getDataWithErrors();\n if (collection.instabilityMarker !== undefined)\n this.requireComputableCtx.markUnstable(\n `incomplete_result_pool:${collection.instabilityMarker}`,\n );\n return {\n isComplete: collection.isComplete,\n entries: collection.entries.map((e) => ({\n ref: e.ref,\n obj: {\n id: e.obj.id,\n spec: e.obj.spec,\n data: mapValueInVOE(e.obj.data, (d) => this.wrapAccessor(d)),\n },\n })),\n };\n }\n\n public getSpecsFromResultPool(): ResultCollection<PObjectSpec> {\n const specs = this.resultPool.getSpecs();\n if (specs.instabilityMarker !== undefined)\n this.requireComputableCtx.markUnstable(\n `specs_from_pool_incomplete:${specs.instabilityMarker}`,\n );\n return specs;\n }\n\n getSpecFromResultPoolByRef(blockId: string, exportName: string): PObjectSpec | undefined {\n return this.resultPool.getSpecByRef(blockId, exportName);\n }\n\n getDataFromResultPoolByRef(blockId: string, exportName: string): PObject<string> | undefined {\n return mapPObjectData(this.resultPool.getDataByRef(blockId, exportName), (acc) =>\n this.wrapAccessor(acc),\n );\n }\n\n /**\n * Single source-of-truth cache of upstream-block ctx pairs as raw\n * `PlTreeNodeAccessor`s. Both the sandbox-facing `getUpstreamBlockCtx()`\n * (string-handle view) and the host column registry are derived from this.\n */\n private _rawUpstreamBlockCtx: UpstreamBlockCtx<PlTreeNodeAccessor>[] | undefined = undefined;\n /**\n * Raw upstream-block ctx accessors for the current render. Public so the\n * `ColumnsCollection` service injector (`service_injectors.ts`) can build\n * `ColumnsCollectionDriverHost.getUpstreamBlockCtxes` bindings without\n * round-tripping through the handle-shape view.\n */\n public getRawUpstreamBlockCtx(): UpstreamBlockCtx<PlTreeNodeAccessor>[] {\n if (this._rawUpstreamBlockCtx === undefined) {\n const prjEntry = notEmpty(this.blockCtx.projectEntry, \"projectEntry\");\n this._rawUpstreamBlockCtx = collectUpstreamBlockCtx(\n this.requireComputableCtx,\n prjEntry,\n this.blockCtx.blockId,\n );\n }\n return this._rawUpstreamBlockCtx;\n }\n\n private _upstreamBlockCtx: UpstreamBlockCtx<string>[] | undefined = undefined;\n public getUpstreamBlockCtx(): UpstreamBlockCtx<string>[] {\n if (this._upstreamBlockCtx === undefined) {\n this._upstreamBlockCtx = this.getRawUpstreamBlockCtx().map((b) => ({\n blockId: b.blockId,\n prodCtx: this.wrapAccessor(b.prodCtx),\n stagingCtx: this.wrapAccessor(b.stagingCtx),\n prodIncomplete: b.prodIncomplete,\n stagingIncomplete: b.stagingIncomplete,\n }));\n }\n return this._upstreamBlockCtx;\n }\n\n //\n // Host-side column registry — id → LeafEntry index over outputs/prerun/raw pool.\n // Mirrors the sandbox `ColumnRegistry` so `createPFrame` / `createPTable` can\n // accept `PObjectId` in addition to materialised `PColumn`s.\n //\n private _columnRegistry: ColumnRegistry<PlTreeNodeAccessor> | undefined = undefined;\n public getColumnRegistry(): ColumnRegistry<PlTreeNodeAccessor> {\n if (this._columnRegistry !== undefined) return this._columnRegistry;\n return (this._columnRegistry = buildColumnRegistry({\n outputs: this.accessors.get(MainAccessorName) ?? undefined,\n prerun: this.accessors.get(StagingAccessorName) ?? undefined,\n upstreamBlockCtxes: this.getRawUpstreamBlockCtx(),\n }));\n }\n\n //\n // PFrames / PTables\n //\n\n public createPFrame(\n def: PFrameDef<PObjectId | PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PFrameHandle {\n using guard = new PoolEntryGuard(\n this.env.driverKit.pFrameDriver.createPFrame(def.map((c) => this.resolvePColumn(c))),\n );\n this.requireComputableCtx.addOnDestroy(guard.entry.unref);\n return guard.keep().key;\n }\n\n public createPTable(\n def: PTableDef<PObjectId | PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PTableHandle {\n using guard = new PoolEntryGuard(\n this.env.driverKit.pFrameDriver.createPTable(\n mapPTableDef(def, (c) => this.resolvePColumn(c)),\n ),\n );\n this.requireComputableCtx.addOnDestroy(guard.entry.unref);\n return guard.keep().key;\n }\n\n public createPTableV2(\n def: PTableDefV2<PObjectId | PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PTableHandle {\n using guard = new PoolEntryGuard(\n this.env.driverKit.pFrameDriver.createPTableV2(\n mapPTableDefV2(def, {\n column: (c) => this.resolvePColumn(c),\n node: collapseSpecOverrideNode,\n }),\n ),\n );\n this.requireComputableCtx.addOnDestroy(guard.entry.unref);\n return guard.keep().key;\n }\n\n /**\n * Normalise a def element: pass-through for materialised columns (after\n * mapping their `data` payload via {@link transformInputPData}), or resolve\n * a bare id through the host column registry. `resolvePColumnById` extracts\n * the underlying {@link PObjectId} from any id encoding\n * ({@link ColumnOverriddenId}, etc.).\n */\n private resolvePColumn(\n item: PObjectId | PColumn<string | PColumnValues | DataInfo<string>>,\n ): PColumn<PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor>> {\n return typeof item === \"string\"\n ? resolvePColumnById(this.getColumnRegistry(), item)\n : mapPObjectData(item, (d) => this.transformInputPData(d));\n }\n\n /**\n * Transforms input data for PFrame/PTable creation\n * - Converts string handles to accessors\n * - Maps accessors in DataInfo objects\n * - Passes through other values\n */\n private transformInputPData(\n d: string | PColumnValues | DataInfo<string>,\n ): PlTreeNodeAccessor | PColumnValues | DataInfo<PlTreeNodeAccessor> {\n if (typeof d === \"string\") {\n return this.getAccessor(d);\n } else if (isDataInfo(d)) {\n return mapDataInfo(d, (a) => this.getAccessor(a));\n } else {\n return d;\n }\n }\n\n //\n // Computable\n //\n\n public getCurrentUnstableMarker(): string | undefined {\n return this.computableCtx?.unstableMarker;\n }\n\n //\n // Logging\n //\n\n public logInfo(message: string): void {\n this.env.blockEventDispatcher.logInfo(this.blockCtx.blockId, message);\n }\n\n public logWarn(message: string): void {\n this.env.blockEventDispatcher.logWarn(this.blockCtx.blockId, message);\n }\n\n public logError(message: string): void {\n this.env.blockEventDispatcher.logError(this.blockCtx.blockId, message);\n }\n\n //\n // Helpers\n //\n\n /**\n * Resolve a sandbox-side `AccessorHandle` string back to its concrete\n * host accessor. Used internally by every `traverse`/`getX(handle)`\n * method and externally by the `ColumnsCollection` service injector\n * for `SerializedColumnsSource` of kind `\"accessor\"`.\n */\n public getAccessor(handle: string): PlTreeNodeAccessor {\n const accessor = this.accessors.get(handle);\n if (accessor === undefined) throw new Error(\"No such accessor\");\n return accessor;\n }\n\n private wrapAccessor(accessor: PlTreeNodeAccessor): string;\n private wrapAccessor(accessor: PlTreeNodeAccessor | undefined): string | undefined;\n private wrapAccessor(accessor: PlTreeNodeAccessor | undefined): string | undefined {\n if (accessor === undefined) return undefined;\n else {\n const nextHandle = randomUUID();\n this.accessors.set(nextHandle, accessor);\n return nextHandle;\n }\n }\n\n public injectCtx(configCtx: QuickJSHandle): void {\n const parent = this.parent;\n const vm = parent.vm;\n\n Scope.withScope((localScope) => {\n // Exporting methods\n\n const exportCtxFunction = (\n name: string,\n fn: VmFunctionImplementation<QuickJSHandle>,\n ): void => {\n const withCachedError: VmFunctionImplementation<QuickJSHandle> = (...args) => {\n // QuickJS strips all fields from errors apart from 'name' and 'message'.\n // That's why here we need to store them, and rethrow them when we exit\n // from QuickJS code.\n const t0 = performance.now();\n try {\n return (fn as any)(...args);\n } catch (e: unknown) {\n const newErr = parent.errorRepo.setAndRecreateForQuickJS(e);\n throw vm.newError(newErr);\n } finally {\n parent.stats.ctxMethodCalls++;\n parent.stats.ctxMethodMs += performance.now() - t0;\n }\n };\n\n vm.newFunction(name, withCachedError).consume((fnh) => vm.setProp(configCtx, name, fnh));\n vm.newFunction(name, fn).consume((fnh) =>\n vm.setProp(configCtx, name + \"__internal__\", fnh),\n );\n };\n\n // Check if this is a v1/v2 block (requiresModelAPIVersion !== 2)\n // For v1/v2 blocks, state is {args, uiState} and we need to inject uiState separately\n const isLegacyBlock = !checkBlockFlag(this.featureFlags, \"requiresModelAPIVersion\", 2);\n\n // Helper to extract uiState from legacy state format {args, uiState}\n const extractUiState = (stateJson: string | undefined): string => {\n if (!stateJson) return \"{}\";\n try {\n const parsed = JSON.parse(stateJson);\n return JSON.stringify(parsed?.uiState ?? {});\n } catch {\n return \"{}\";\n }\n };\n\n if (checkBlockFlag(this.featureFlags, \"supportsLazyState\")) {\n // injecting lazy state functions\n exportCtxFunction(\"args\", () => {\n const cCtx = this.requireComputableCtx;\n const args = this.blockCtx.args(cCtx);\n return args === undefined ? vm.undefined : vm.newString(args);\n });\n exportCtxFunction(\"blockStorage\", () => {\n return vm.newString(this.blockCtx.blockStorage(this.requireComputableCtx) ?? \"{}\");\n });\n exportCtxFunction(\"data\", () => {\n return vm.newString(this.blockCtx.data(this.requireComputableCtx) ?? \"{}\");\n });\n exportCtxFunction(\"activeArgs\", () => {\n const cCtx = this.requireComputableCtx;\n const res = this.blockCtx.activeArgs(cCtx);\n return res === undefined ? vm.undefined : vm.newString(res);\n });\n // For v1/v2 blocks, also inject uiState (extracted from state.uiState)\n if (isLegacyBlock) {\n exportCtxFunction(\"uiState\", () => {\n return vm.newString(extractUiState(this.blockCtx.data(this.requireComputableCtx)));\n });\n }\n } else {\n const cCtx = this.requireComputableCtx;\n const args = this.blockCtx.args(cCtx);\n const activeArgs = this.blockCtx.activeArgs(cCtx);\n const data = this.blockCtx.data(cCtx);\n if (args !== undefined) {\n vm.setProp(configCtx, \"args\", localScope.manage(vm.newString(args)));\n }\n vm.setProp(configCtx, \"data\", localScope.manage(vm.newString(data ?? \"{}\")));\n if (activeArgs !== undefined)\n vm.setProp(configCtx, \"activeArgs\", localScope.manage(vm.newString(activeArgs)));\n // For v1/v2 blocks, also inject uiState (extracted from state.uiState)\n if (isLegacyBlock) {\n vm.setProp(configCtx, \"uiState\", localScope.manage(vm.newString(extractUiState(data))));\n }\n }\n\n //\n // Methods for injected ctx object\n //\n\n exportCtxFunction(\"getAccessorHandleByName\", (name) => {\n return parent.exportSingleValue(\n this.getAccessorHandleByName(vm.getString(name)),\n undefined,\n );\n });\n\n //\n // Accessors\n //\n\n exportCtxFunction(\"resolveWithCommon\", (handle, commonOptions, ...steps) => {\n return parent.exportSingleValue(\n this.resolveWithCommon(\n vm.getString(handle),\n parent.importObjectViaJson(commonOptions) as CommonFieldTraverseOpsFromSDK,\n ...steps.map(\n (step) => parent.importObjectViaJson(step) as FieldTraversalStepFromSDK | string,\n ),\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"getResourceType\", (handle) => {\n return parent.exportObjectViaJson(this.getResourceType(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getInputsLocked\", (handle) => {\n return parent.exportSingleValue(this.getInputsLocked(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getOutputsLocked\", (handle) => {\n return parent.exportSingleValue(this.getOutputsLocked(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getIsReadyOrError\", (handle) => {\n return parent.exportSingleValue(this.getIsReadyOrError(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getIsFinal\", (handle) => {\n return parent.exportSingleValue(this.getIsFinal(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"hasData\", (handle) => {\n return parent.exportSingleValue(this.hasData(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getError\", (handle) => {\n return parent.exportSingleValue(this.getError(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"listInputFields\", (handle) => {\n return parent.exportObjectViaJson(this.listInputFields(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"listOutputFields\", (handle) => {\n return parent.exportObjectViaJson(this.listOutputFields(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"listDynamicFields\", (handle) => {\n return parent.exportObjectViaJson(this.listDynamicFields(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getKeyValueBase64\", (handle, key) => {\n return parent.exportSingleValue(\n this.getKeyValueBase64(vm.getString(handle), vm.getString(key)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getKeyValueAsString\", (handle, key) => {\n return parent.exportSingleValue(\n this.getKeyValueAsString(vm.getString(handle), vm.getString(key)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getDataBase64\", (handle) => {\n return parent.exportSingleValue(this.getDataBase64(vm.getString(handle)), undefined);\n });\n\n exportCtxFunction(\"getDataAsString\", (handle) => {\n return parent.exportSingleValue(this.getDataAsString(vm.getString(handle)), undefined);\n });\n\n //\n // Accessor helpers\n //\n\n exportCtxFunction(\n \"parsePObjectCollection\",\n (handle, errorOnUnknownField, prefix, ...resolveSteps) => {\n return parent.exportObjectUniversal(\n this.parsePObjectCollection(\n vm.getString(handle),\n vm.dump(errorOnUnknownField) as boolean,\n vm.getString(prefix),\n ...resolveSteps.map((stepHandle) => vm.getString(stepHandle)),\n ),\n undefined,\n );\n },\n );\n\n //\n // Blobs\n //\n\n exportCtxFunction(\"getBlobContentAsBase64\", (handle, range) => {\n return parent.exportSingleValue(\n this.getBlobContentAsBase64(\n vm.getString(handle),\n parent.importObjectUniversal(range) as RangeBytes | undefined,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"getBlobContentAsString\", (handle, range) => {\n return parent.exportSingleValue(\n this.getBlobContentAsString(\n vm.getString(handle),\n parent.importObjectUniversal(range) as RangeBytes | undefined,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"getDownloadedBlobContentHandle\", (handle) => {\n return parent.exportSingleValue(\n this.getDownloadedBlobContentHandle(vm.getString(handle)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getOnDemandBlobContentHandle\", (handle) => {\n return parent.exportSingleValue(\n this.getOnDemandBlobContentHandle(vm.getString(handle)),\n undefined,\n );\n });\n\n //\n // Blobs to URLs\n //\n\n exportCtxFunction(\"extractArchiveAndGetURL\", (handle, format) => {\n return parent.exportSingleValue(\n this.extractArchiveAndGetURL(vm.getString(handle), vm.getString(format) as ArchiveFormat),\n undefined,\n );\n });\n\n //\n // ImportProgress\n //\n\n exportCtxFunction(\"getImportProgress\", (handle) => {\n return parent.exportSingleValue(this.getImportProgress(vm.getString(handle)), undefined);\n });\n\n //\n // Logs\n //\n\n exportCtxFunction(\"getLastLogs\", (handle, nLines) => {\n return parent.exportSingleValue(\n this.getLastLogs(vm.getString(handle), vm.getNumber(nLines)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getProgressLog\", (handle, patternToSearch) => {\n return parent.exportSingleValue(\n this.getProgressLog(vm.getString(handle), vm.getString(patternToSearch)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getProgressLogWithInfo\", (handle, patternToSearch) => {\n return parent.exportSingleValue(\n this.getProgressLogWithInfo(vm.getString(handle), vm.getString(patternToSearch)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getLogHandle\", (handle) => {\n return parent.exportSingleValue(this.getLogHandle(vm.getString(handle)), undefined);\n });\n\n //\n // Blocks\n //\n\n exportCtxFunction(\"getBlockLabel\", (blockId) => {\n return parent.exportSingleValue(this.getBlockLabel(vm.getString(blockId)), undefined);\n });\n\n //\n // Result pool\n //\n\n exportCtxFunction(\"getDataFromResultPool\", () => {\n return parent.exportObjectUniversal(this.getDataFromResultPool(), undefined);\n });\n\n exportCtxFunction(\"getDataWithErrorsFromResultPool\", () => {\n return parent.exportObjectUniversal(this.getDataWithErrorsFromResultPool(), undefined);\n });\n\n exportCtxFunction(\"getSpecsFromResultPool\", () => {\n return parent.exportObjectUniversal(this.getSpecsFromResultPool(), undefined);\n });\n\n exportCtxFunction(\"getSpecFromResultPoolByRef\", (blockId, exportName) => {\n return parent.exportObjectUniversal(\n this.getSpecFromResultPoolByRef(vm.getString(blockId), vm.getString(exportName)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getDataFromResultPoolByRef\", (blockId, exportName) => {\n return parent.exportObjectUniversal(\n this.getDataFromResultPoolByRef(vm.getString(blockId), vm.getString(exportName)),\n undefined,\n );\n });\n\n exportCtxFunction(\"getUpstreamBlockCtx\", () => {\n return parent.exportObjectUniversal(this.getUpstreamBlockCtx(), undefined);\n });\n\n exportCtxFunction(\"createPFrame\", (def) => {\n return parent.exportSingleValue(\n this.createPFrame(\n parent.importObjectViaJson(def) as PFrameDef<PColumn<string | PColumnValues>>,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"createPTable\", (def) => {\n return parent.exportSingleValue(\n this.createPTable(\n parent.importObjectViaJson(def) as PTableDef<PColumn<string | PColumnValues>>,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"createPTableV2\", (def) => {\n return parent.exportSingleValue(\n this.createPTableV2(\n parent.importObjectViaJson(def) as PTableDefV2<PColumn<string | PColumnValues>>,\n ),\n undefined,\n );\n });\n\n //\n // Services\n //\n\n const requiredServiceNames = new Set(resolveRequiredServices(this.featureFlags) as string[]);\n const serviceFunctions = new Map<string, VmFunctionImplementation<QuickJSHandle>>();\n const injectors = getServiceInjectors();\n\n for (const [key, serviceId] of Object.entries(Services)) {\n if (!requiredServiceNames.has(serviceId)) continue;\n const injector = injectors[key as keyof typeof injectors];\n try {\n const methods = injector({ host: this, vm: parent });\n for (const [method, fn] of Object.entries(methods)) {\n serviceFunctions.set(serviceFnKey(serviceId, method), fn);\n }\n } catch (e) {\n throw new ServiceInjectionError(`Failed to inject service \"${serviceId}\"`, { cause: e });\n }\n }\n\n exportCtxFunction(\"getServiceNames\", () => {\n return parent.exportObjectViaJson([...requiredServiceNames]);\n });\n\n exportCtxFunction(\"getServiceMethods\", (serviceIdHandle) => {\n const serviceId = vm.getString(serviceIdHandle);\n const pfx = serviceFnKey(serviceId);\n const methods = [...serviceFunctions.keys()]\n .filter((k) => k.startsWith(pfx))\n .map((k) => k.slice(pfx.length));\n return parent.exportObjectViaJson(methods, undefined);\n });\n\n exportCtxFunction(\n \"callServiceMethod\",\n function (this: QuickJSHandle, serviceIdHandle, methodHandle, ...argHandles) {\n const serviceId = vm.getString(serviceIdHandle);\n const method = vm.getString(methodHandle);\n const fn = serviceFunctions.get(serviceFnKey(serviceId, method));\n if (!fn)\n throw new ServiceMethodNotFoundError(\n `Method \"${method}\" not found on service \"${serviceId}\"`,\n );\n return fn.call(this, ...argHandles);\n },\n );\n\n //\n // Computable\n //\n\n exportCtxFunction(\"getCurrentUnstableMarker\", () => {\n return parent.exportSingleValue(this.getCurrentUnstableMarker(), undefined);\n });\n\n //\n // Logging\n //\n\n exportCtxFunction(\"logInfo\", (message) => {\n this.logInfo(vm.getString(message));\n });\n\n exportCtxFunction(\"logWarn\", (message) => {\n this.logWarn(vm.getString(message));\n });\n\n exportCtxFunction(\"logError\", (message) => {\n this.logError(vm.getString(message));\n });\n });\n }\n}\n\nfunction bytesToBase64(data: Uint8Array | undefined): string | undefined {\n return data !== undefined ? Buffer.from(data).toString(\"base64\") : undefined;\n}\n"],"mappings":"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"}
|
|
@@ -37,12 +37,53 @@ function getServiceInjectors() {
|
|
|
37
37
|
rewriteLegacyFilters: (request) => vm.exportObjectViaJson(driver.rewriteLegacyFilters(vm.importObjectViaJson(request)))
|
|
38
38
|
};
|
|
39
39
|
},
|
|
40
|
-
Dialog: () => ({}),
|
|
41
40
|
PFrame: ({ host, vm }) => ({
|
|
42
41
|
createPFrame: (def) => vm.exportSingleValue(host.createPFrame(vm.importObjectViaJson(def))),
|
|
43
42
|
createPTable: (def) => vm.exportSingleValue(host.createPTable(vm.importObjectViaJson(def))),
|
|
44
43
|
createPTableV2: (def) => vm.exportSingleValue(host.createPTableV2(vm.importObjectViaJson(def)))
|
|
45
|
-
})
|
|
44
|
+
}),
|
|
45
|
+
Dialog: () => ({}),
|
|
46
|
+
ColumnsCollection: ({ host, vm }) => {
|
|
47
|
+
const driver = host.serviceRegistry.get(_milaboratories_pl_model_common.Services.ColumnsCollection);
|
|
48
|
+
if (!driver) throw new _milaboratories_pl_model_common.ServiceNotRegisteredError(`Service "${_milaboratories_pl_model_common.Services.ColumnsCollection}" has no factory in ModelServiceRegistry. Provide a non-null factory.`);
|
|
49
|
+
const specDriver = host.serviceRegistry.get(_milaboratories_pl_model_common.Services.PFrameSpec);
|
|
50
|
+
if (!specDriver) throw new _milaboratories_pl_model_common.ServiceNotRegisteredError(`Service "${_milaboratories_pl_model_common.Services.PFrameSpec}" has no factory in ModelServiceRegistry. Provide a non-null factory.`);
|
|
51
|
+
const bindings = {
|
|
52
|
+
resolveAccessor: (h) => host.getAccessor(h),
|
|
53
|
+
getUpstreamBlockCtxes: () => host.getRawUpstreamBlockCtx(),
|
|
54
|
+
getSpecDriver: () => specDriver,
|
|
55
|
+
resolveSpec: (id) => {
|
|
56
|
+
const leaf = host.getColumnRegistry().resolve(id);
|
|
57
|
+
if (leaf === void 0) return void 0;
|
|
58
|
+
return leaf.accessor.traverse({
|
|
59
|
+
field: `${leaf.name}.spec`,
|
|
60
|
+
assertFieldType: "Input",
|
|
61
|
+
ignoreError: true
|
|
62
|
+
})?.getDataAsJson();
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const pinHandle = (entry) => {
|
|
66
|
+
try {
|
|
67
|
+
var _usingCtx3 = require_usingCtx.default();
|
|
68
|
+
const guard = _usingCtx3.u(new _milaboratories_pl_model_common.PoolEntryGuard(entry));
|
|
69
|
+
host.addOnDestroy(guard.entry.unref);
|
|
70
|
+
return guard.keep().key;
|
|
71
|
+
} catch (_) {
|
|
72
|
+
_usingCtx3.e = _;
|
|
73
|
+
} finally {
|
|
74
|
+
_usingCtx3.d();
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
create: (sources) => vm.exportSingleValue(pinHandle(driver.create(vm.importObjectViaJson(sources), bindings))),
|
|
79
|
+
isEmpty: (handle) => vm.exportSingleValue(driver.isEmpty(vm.vm.getString(handle))),
|
|
80
|
+
isFinal: (handle) => vm.exportSingleValue(driver.isFinal(vm.vm.getString(handle))),
|
|
81
|
+
getColumns: (handle) => vm.exportObjectViaJson(driver.getColumns(vm.vm.getString(handle), bindings)),
|
|
82
|
+
addSource: (handle, sources) => vm.exportSingleValue(pinHandle(driver.addSource(vm.vm.getString(handle), vm.importObjectViaJson(sources), bindings))),
|
|
83
|
+
discover: (handle, opts) => vm.exportSingleValue(pinHandle(driver.discover(vm.vm.getString(handle), vm.importObjectViaJson(opts), bindings))),
|
|
84
|
+
filter: (handle, opts) => vm.exportSingleValue(pinHandle(driver.filter(vm.vm.getString(handle), vm.importObjectViaJson(opts), bindings)))
|
|
85
|
+
};
|
|
86
|
+
}
|
|
46
87
|
};
|
|
47
88
|
}
|
|
48
89
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service_injectors.cjs","names":["Services","ServiceNotRegisteredError","PoolEntryGuard"],"sources":["../../src/js_render/service_injectors.ts"],"sourcesContent":["import type { QuickJSHandle, VmFunctionImplementation } from \"quickjs-emscripten\";\nimport type { InferServiceModel, ServiceBrand } from \"@milaboratories/pl-model-common\";\nimport { Services, ServiceNotRegisteredError } from \"@milaboratories/pl-model-common\";\nimport type {\n AxesId,\n AxesSpec,\n DataInfo,\n PColumn,\n PColumnSpec,\n PColumnValues,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n SingleAxisSelector,\n BuildQueryInput,\n DeleteColumnRequest,\n DiscoverColumnsRequest,\n PFrameDef,\n SpecQuery,\n PTableDef,\n PTableDefV2,\n SpecFrameHandle,\n} from \"@milaboratories/pl-model-common\";\nimport { PoolEntryGuard } from \"@milaboratories/pl-model-common\";\nimport type { JsExecutionContext } from \"./context\";\nimport type { ComputableContextHelper } from \"./computable_context\";\n\ntype VmMethod = VmFunctionImplementation<QuickJSHandle>;\n\nexport type ServiceInjectorContext = {\n host: ComputableContextHelper;\n vm: JsExecutionContext;\n};\n\n// Each injector returns a record of method name -> VM function implementation.\n// The framework automatically registers them with serviceFnKey(serviceId, methodName).\nexport type ServiceInjector<Methods extends string = string> = (\n ctx: ServiceInjectorContext,\n) => Record<Methods, VmMethod>;\n\n// Type-safe injector for a specific service — must return all methods from the model interface.\ntype ServiceInjectorFor<S extends keyof typeof Services> = ServiceInjector<\n string & keyof InferServiceModel<ServiceBrand<(typeof Services)[S]>>\n>;\n\n// Complete, type-checked injector map.\n// Adding a service to Services without an entry here is a compile-time error.\n// Missing a method from the interface is also a compile-time error.\ntype ServiceInjectorMap = { [K in keyof typeof Services]: ServiceInjectorFor<K> };\n\nexport function getServiceInjectors(): ServiceInjectorMap {\n return {\n PFrameSpec: ({ host, vm }: ServiceInjectorContext) => {\n const driver = host.serviceRegistry.get(Services.PFrameSpec);\n if (!driver)\n throw new ServiceNotRegisteredError(\n `Service \"${Services.PFrameSpec}\" has no factory in ModelServiceRegistry. Provide a non-null factory.`,\n );\n\n return {\n createSpecFrame: (specs: QuickJSHandle) => {\n using guard = new PoolEntryGuard(\n driver.createSpecFrame(vm.importObjectViaJson(specs) as Record<string, PColumnSpec>),\n );\n host.addOnDestroy(guard.entry.unref);\n const entry = guard.keep();\n // TODO: add [Symbol.dispose] once QuickJS supports ES2024 explicit resource management\n const obj = vm.vm.newObject();\n vm.vm.newString(entry.key).consume((k) => vm.vm.setProp(obj, \"key\", k));\n vm.vm\n .newFunction(\"unref\", () => {\n entry.unref();\n })\n .consume((fn) => vm.vm.setProp(obj, \"unref\", fn));\n return obj;\n },\n\n listColumns: (handle: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.listColumns(vm.vm.getString(handle) as SpecFrameHandle)),\n\n discoverColumns: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.discoverColumns(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as DiscoverColumnsRequest,\n ),\n ),\n\n buildQuery: (input: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.buildQuery(vm.importObjectViaJson(input) as BuildQueryInput),\n ),\n\n deleteColumn: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.deleteColumn(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as DeleteColumnRequest,\n ),\n ),\n\n evaluateQuery: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.evaluateQuery(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as SpecQuery,\n ),\n ),\n\n expandAxes: (spec: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.expandAxes(vm.importObjectViaJson(spec) as AxesSpec)),\n\n collapseAxes: (ids: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.collapseAxes(vm.importObjectViaJson(ids) as AxesId)),\n\n findAxis: (spec: QuickJSHandle, selector: QuickJSHandle) =>\n vm.exportSingleValue(\n driver.findAxis(\n vm.importObjectViaJson(spec) as AxesSpec,\n vm.importObjectViaJson(selector) as SingleAxisSelector,\n ),\n ),\n\n findTableColumn: (tableSpec: QuickJSHandle, selector: QuickJSHandle) =>\n vm.exportSingleValue(\n driver.findTableColumn(\n vm.importObjectViaJson(tableSpec) as PTableColumnSpec[],\n vm.importObjectViaJson(selector) as PTableColumnId,\n ),\n ),\n\n rewriteLegacyFilters: (request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.rewriteLegacyFilters(\n vm.importObjectViaJson(request) as {\n tableSpec: PTableColumnSpec[];\n filters: PTableRecordFilter[];\n },\n ),\n ),\n };\n },\n\n // Dialog has no model-side surface — workflow scripts cannot open save dialogs.\n // Declared as an empty injector to satisfy the exhaustive ServiceInjectorMap.\n Dialog: () => ({}) as Record<never, VmMethod>,\n\n PFrame: ({ host, vm }: ServiceInjectorContext) => ({\n createPFrame: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPFrame(\n vm.importObjectViaJson(def) as PFrameDef<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n\n createPTable: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPTable(\n vm.importObjectViaJson(def) as PTableDef<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n\n createPTableV2: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPTableV2(\n vm.importObjectViaJson(def) as PTableDefV2<\n PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n }),\n };\n}\n"],"mappings":";;;AAkDA,SAAgB,sBAA0C;CACxD,OAAO;EACL,aAAa,EAAE,MAAM,SAAiC;GACpD,MAAM,SAAS,KAAK,gBAAgB,IAAIA,gCAAAA,SAAS,UAAU;GAC3D,IAAI,CAAC,QACH,MAAM,IAAIC,gCAAAA,0BACR,YAAYD,gCAAAA,SAAS,WAAW,sEAClC;GAEF,OAAO;IACL,kBAAkB,UAAyB;;;MACzC,MAAM,QAAA,YAAA,EAAQ,IAAIE,gCAAAA,eAChB,OAAO,gBAAgB,GAAG,oBAAoB,KAAK,CAAgC,CACrF,CAAA;MACA,KAAK,aAAa,MAAM,MAAM,KAAK;MACnC,MAAM,QAAQ,MAAM,KAAK;MAEzB,MAAM,MAAM,GAAG,GAAG,UAAU;MAC5B,GAAG,GAAG,UAAU,MAAM,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC;MACtE,GAAG,GACA,YAAY,eAAe;OAC1B,MAAM,MAAM;MACd,CAAC,CAAC,CACD,SAAS,OAAO,GAAG,GAAG,QAAQ,KAAK,SAAS,EAAE,CAAC;MAClD,OAAO;;;;;;IACT;IAEA,cAAc,WACZ,GAAG,oBAAoB,OAAO,YAAY,GAAG,GAAG,UAAU,MAAM,CAAoB,CAAC;IAEvF,kBAAkB,QAAuB,YACvC,GAAG,oBACD,OAAO,gBACL,GAAG,GAAG,UAAU,MAAM,GACtB,GAAG,oBAAoB,OAAO,CAChC,CACF;IAEF,aAAa,UACX,GAAG,oBACD,OAAO,WAAW,GAAG,oBAAoB,KAAK,CAAoB,CACpE;IAEF,eAAe,QAAuB,YACpC,GAAG,oBACD,OAAO,aACL,GAAG,GAAG,UAAU,MAAM,GACtB,GAAG,oBAAoB,OAAO,CAChC,CACF;IAEF,gBAAgB,QAAuB,YACrC,GAAG,oBACD,OAAO,cACL,GAAG,GAAG,UAAU,MAAM,GACtB,GAAG,oBAAoB,OAAO,CAChC,CACF;IAEF,aAAa,SACX,GAAG,oBAAoB,OAAO,WAAW,GAAG,oBAAoB,IAAI,CAAa,CAAC;IAEpF,eAAe,QACb,GAAG,oBAAoB,OAAO,aAAa,GAAG,oBAAoB,GAAG,CAAW,CAAC;IAEnF,WAAW,MAAqB,aAC9B,GAAG,kBACD,OAAO,SACL,GAAG,oBAAoB,IAAI,GAC3B,GAAG,oBAAoB,QAAQ,CACjC,CACF;IAEF,kBAAkB,WAA0B,aAC1C,GAAG,kBACD,OAAO,gBACL,GAAG,oBAAoB,SAAS,GAChC,GAAG,oBAAoB,QAAQ,CACjC,CACF;IAEF,uBAAuB,YACrB,GAAG,oBACD,OAAO,qBACL,GAAG,oBAAoB,OAAO,CAIhC,CACF;GACJ;EACF;EAIA,eAAe,CAAC;EAEhB,SAAS,EAAE,MAAM,UAAkC;GACjD,eAAe,QACb,GAAG,kBACD,KAAK,aACH,GAAG,oBAAoB,GAAG,CAG5B,CACF;GAEF,eAAe,QACb,GAAG,kBACD,KAAK,aACH,GAAG,oBAAoB,GAAG,CAG5B,CACF;GAEF,iBAAiB,QACf,GAAG,kBACD,KAAK,eACH,GAAG,oBAAoB,GAAG,CAG5B,CACF;EACJ;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"service_injectors.cjs","names":["Services","ServiceNotRegisteredError","PoolEntryGuard"],"sources":["../../src/js_render/service_injectors.ts"],"sourcesContent":["import type { QuickJSHandle, VmFunctionImplementation } from \"quickjs-emscripten\";\nimport type {\n CollectionHandle,\n ColumnsCollectionDriverHost,\n DiscoverColumnsOptions,\n InferServiceModel,\n PoolEntry,\n SerializedColumnsSource,\n ServiceBrand,\n} from \"@milaboratories/pl-model-common\";\nimport { Services, ServiceNotRegisteredError } from \"@milaboratories/pl-model-common\";\nimport type { PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport type {\n AxesId,\n AxesSpec,\n DataInfo,\n PColumn,\n PColumnSpec,\n PColumnValues,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n SingleAxisSelector,\n BuildQueryInput,\n DeleteColumnRequest,\n DiscoverColumnsRequest,\n PFrameDef,\n SpecQuery,\n PTableDef,\n PTableDefV2,\n SpecFrameHandle,\n} from \"@milaboratories/pl-model-common\";\nimport { PoolEntryGuard } from \"@milaboratories/pl-model-common\";\nimport type { JsExecutionContext } from \"./context\";\nimport type { ComputableContextHelper } from \"./computable_context\";\n\ntype VmMethod = VmFunctionImplementation<QuickJSHandle>;\n\nexport type ServiceInjectorContext = {\n host: ComputableContextHelper;\n vm: JsExecutionContext;\n};\n\n// Each injector returns a record of method name -> VM function implementation.\n// The framework automatically registers them with serviceFnKey(serviceId, methodName).\nexport type ServiceInjector<Methods extends string = string> = (\n ctx: ServiceInjectorContext,\n) => Record<Methods, VmMethod>;\n\n// Type-safe injector for a specific service — must return all methods from the model interface.\ntype ServiceInjectorFor<S extends keyof typeof Services> = ServiceInjector<\n string & keyof InferServiceModel<ServiceBrand<(typeof Services)[S]>>\n>;\n\n// Complete, type-checked injector map.\n// Adding a service to Services without an entry here is a compile-time error.\n// Missing a method from the interface is also a compile-time error.\ntype ServiceInjectorMap = { [K in keyof typeof Services]: ServiceInjectorFor<K> };\n\nexport function getServiceInjectors(): ServiceInjectorMap {\n return {\n PFrameSpec: ({ host, vm }: ServiceInjectorContext) => {\n const driver = host.serviceRegistry.get(Services.PFrameSpec);\n if (!driver)\n throw new ServiceNotRegisteredError(\n `Service \"${Services.PFrameSpec}\" has no factory in ModelServiceRegistry. Provide a non-null factory.`,\n );\n\n return {\n createSpecFrame: (specs: QuickJSHandle) => {\n using guard = new PoolEntryGuard(\n driver.createSpecFrame(vm.importObjectViaJson(specs) as Record<string, PColumnSpec>),\n );\n host.addOnDestroy(guard.entry.unref);\n const entry = guard.keep();\n // TODO: add [Symbol.dispose] once QuickJS supports ES2024 explicit resource management\n const obj = vm.vm.newObject();\n vm.vm.newString(entry.key).consume((k) => vm.vm.setProp(obj, \"key\", k));\n vm.vm\n .newFunction(\"unref\", () => {\n entry.unref();\n })\n .consume((fn) => vm.vm.setProp(obj, \"unref\", fn));\n return obj;\n },\n\n listColumns: (handle: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.listColumns(vm.vm.getString(handle) as SpecFrameHandle)),\n\n discoverColumns: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.discoverColumns(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as DiscoverColumnsRequest,\n ),\n ),\n\n buildQuery: (input: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.buildQuery(vm.importObjectViaJson(input) as BuildQueryInput),\n ),\n\n deleteColumn: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.deleteColumn(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as DeleteColumnRequest,\n ),\n ),\n\n evaluateQuery: (handle: QuickJSHandle, request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.evaluateQuery(\n vm.vm.getString(handle) as SpecFrameHandle,\n vm.importObjectViaJson(request) as SpecQuery,\n ),\n ),\n\n expandAxes: (spec: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.expandAxes(vm.importObjectViaJson(spec) as AxesSpec)),\n\n collapseAxes: (ids: QuickJSHandle) =>\n vm.exportObjectViaJson(driver.collapseAxes(vm.importObjectViaJson(ids) as AxesId)),\n\n findAxis: (spec: QuickJSHandle, selector: QuickJSHandle) =>\n vm.exportSingleValue(\n driver.findAxis(\n vm.importObjectViaJson(spec) as AxesSpec,\n vm.importObjectViaJson(selector) as SingleAxisSelector,\n ),\n ),\n\n findTableColumn: (tableSpec: QuickJSHandle, selector: QuickJSHandle) =>\n vm.exportSingleValue(\n driver.findTableColumn(\n vm.importObjectViaJson(tableSpec) as PTableColumnSpec[],\n vm.importObjectViaJson(selector) as PTableColumnId,\n ),\n ),\n\n rewriteLegacyFilters: (request: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.rewriteLegacyFilters(\n vm.importObjectViaJson(request) as {\n tableSpec: PTableColumnSpec[];\n filters: PTableRecordFilter[];\n },\n ),\n ),\n };\n },\n\n PFrame: ({ host, vm }: ServiceInjectorContext) => ({\n createPFrame: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPFrame(\n vm.importObjectViaJson(def) as PFrameDef<\n PObjectId | PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n\n createPTable: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPTable(\n vm.importObjectViaJson(def) as PTableDef<\n PObjectId | PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n\n createPTableV2: (def: QuickJSHandle) =>\n vm.exportSingleValue(\n host.createPTableV2(\n vm.importObjectViaJson(def) as PTableDefV2<\n PObjectId | PColumn<string | PColumnValues | DataInfo<string>>\n >,\n ),\n ),\n }),\n\n // Dialog has no model-side surface — workflow scripts cannot open save dialogs.\n // Declared as an empty injector to satisfy the exhaustive ServiceInjectorMap.\n Dialog: () => ({}) as Record<never, VmMethod>,\n\n ColumnsCollection: ({ host, vm }: ServiceInjectorContext) => {\n const driver = host.serviceRegistry.get(Services.ColumnsCollection);\n if (!driver)\n throw new ServiceNotRegisteredError(\n `Service \"${Services.ColumnsCollection}\" has no factory in ModelServiceRegistry. Provide a non-null factory.`,\n );\n const specDriver = host.serviceRegistry.get(Services.PFrameSpec);\n if (!specDriver)\n throw new ServiceNotRegisteredError(\n `Service \"${Services.PFrameSpec}\" has no factory in ModelServiceRegistry. Provide a non-null factory.`,\n );\n\n const bindings: ColumnsCollectionDriverHost<PlTreeNodeAccessor> = {\n resolveAccessor: (h) => host.getAccessor(h),\n getUpstreamBlockCtxes: () => host.getRawUpstreamBlockCtx(),\n getSpecDriver: () => specDriver,\n resolveSpec: (id: PObjectId) => {\n const leaf = host.getColumnRegistry().resolve(id);\n if (leaf === undefined) return undefined;\n const specNode = leaf.accessor.traverse({\n field: `${leaf.name}.spec`,\n assertFieldType: \"Input\",\n ignoreError: true,\n });\n return specNode?.getDataAsJson<PColumnSpec>();\n },\n };\n\n const pinHandle = (entry: PoolEntry<CollectionHandle>): CollectionHandle => {\n using guard = new PoolEntryGuard(entry);\n host.addOnDestroy(guard.entry.unref);\n return guard.keep().key;\n };\n\n return {\n create: (sources: QuickJSHandle) =>\n vm.exportSingleValue(\n pinHandle(\n driver.create(vm.importObjectViaJson(sources) as SerializedColumnsSource[], bindings),\n ),\n ),\n\n isEmpty: (handle: QuickJSHandle) =>\n vm.exportSingleValue(driver.isEmpty(vm.vm.getString(handle) as CollectionHandle)),\n\n isFinal: (handle: QuickJSHandle) =>\n vm.exportSingleValue(driver.isFinal(vm.vm.getString(handle) as CollectionHandle)),\n\n getColumns: (handle: QuickJSHandle) =>\n vm.exportObjectViaJson(\n driver.getColumns(vm.vm.getString(handle) as CollectionHandle, bindings),\n ),\n\n addSource: (handle: QuickJSHandle, sources: QuickJSHandle) =>\n vm.exportSingleValue(\n pinHandle(\n driver.addSource(\n vm.vm.getString(handle) as CollectionHandle,\n vm.importObjectViaJson(sources) as SerializedColumnsSource[],\n bindings,\n ),\n ),\n ),\n\n discover: (handle: QuickJSHandle, opts: QuickJSHandle) =>\n vm.exportSingleValue(\n pinHandle(\n driver.discover(\n vm.vm.getString(handle) as CollectionHandle,\n vm.importObjectViaJson(opts) as DiscoverColumnsOptions,\n bindings,\n ),\n ),\n ),\n\n filter: (handle: QuickJSHandle, opts: QuickJSHandle) =>\n vm.exportSingleValue(\n pinHandle(\n driver.filter(\n vm.vm.getString(handle) as CollectionHandle,\n vm.importObjectViaJson(opts) as DiscoverColumnsOptions,\n bindings,\n ),\n ),\n ),\n };\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -37,12 +37,53 @@ function getServiceInjectors() {
|
|
|
37
37
|
rewriteLegacyFilters: (request) => vm.exportObjectViaJson(driver.rewriteLegacyFilters(vm.importObjectViaJson(request)))
|
|
38
38
|
};
|
|
39
39
|
},
|
|
40
|
-
Dialog: () => ({}),
|
|
41
40
|
PFrame: ({ host, vm }) => ({
|
|
42
41
|
createPFrame: (def) => vm.exportSingleValue(host.createPFrame(vm.importObjectViaJson(def))),
|
|
43
42
|
createPTable: (def) => vm.exportSingleValue(host.createPTable(vm.importObjectViaJson(def))),
|
|
44
43
|
createPTableV2: (def) => vm.exportSingleValue(host.createPTableV2(vm.importObjectViaJson(def)))
|
|
45
|
-
})
|
|
44
|
+
}),
|
|
45
|
+
Dialog: () => ({}),
|
|
46
|
+
ColumnsCollection: ({ host, vm }) => {
|
|
47
|
+
const driver = host.serviceRegistry.get(Services.ColumnsCollection);
|
|
48
|
+
if (!driver) throw new ServiceNotRegisteredError(`Service "${Services.ColumnsCollection}" has no factory in ModelServiceRegistry. Provide a non-null factory.`);
|
|
49
|
+
const specDriver = host.serviceRegistry.get(Services.PFrameSpec);
|
|
50
|
+
if (!specDriver) throw new ServiceNotRegisteredError(`Service "${Services.PFrameSpec}" has no factory in ModelServiceRegistry. Provide a non-null factory.`);
|
|
51
|
+
const bindings = {
|
|
52
|
+
resolveAccessor: (h) => host.getAccessor(h),
|
|
53
|
+
getUpstreamBlockCtxes: () => host.getRawUpstreamBlockCtx(),
|
|
54
|
+
getSpecDriver: () => specDriver,
|
|
55
|
+
resolveSpec: (id) => {
|
|
56
|
+
const leaf = host.getColumnRegistry().resolve(id);
|
|
57
|
+
if (leaf === void 0) return void 0;
|
|
58
|
+
return leaf.accessor.traverse({
|
|
59
|
+
field: `${leaf.name}.spec`,
|
|
60
|
+
assertFieldType: "Input",
|
|
61
|
+
ignoreError: true
|
|
62
|
+
})?.getDataAsJson();
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const pinHandle = (entry) => {
|
|
66
|
+
try {
|
|
67
|
+
var _usingCtx3 = _usingCtx();
|
|
68
|
+
const guard = _usingCtx3.u(new PoolEntryGuard(entry));
|
|
69
|
+
host.addOnDestroy(guard.entry.unref);
|
|
70
|
+
return guard.keep().key;
|
|
71
|
+
} catch (_) {
|
|
72
|
+
_usingCtx3.e = _;
|
|
73
|
+
} finally {
|
|
74
|
+
_usingCtx3.d();
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
create: (sources) => vm.exportSingleValue(pinHandle(driver.create(vm.importObjectViaJson(sources), bindings))),
|
|
79
|
+
isEmpty: (handle) => vm.exportSingleValue(driver.isEmpty(vm.vm.getString(handle))),
|
|
80
|
+
isFinal: (handle) => vm.exportSingleValue(driver.isFinal(vm.vm.getString(handle))),
|
|
81
|
+
getColumns: (handle) => vm.exportObjectViaJson(driver.getColumns(vm.vm.getString(handle), bindings)),
|
|
82
|
+
addSource: (handle, sources) => vm.exportSingleValue(pinHandle(driver.addSource(vm.vm.getString(handle), vm.importObjectViaJson(sources), bindings))),
|
|
83
|
+
discover: (handle, opts) => vm.exportSingleValue(pinHandle(driver.discover(vm.vm.getString(handle), vm.importObjectViaJson(opts), bindings))),
|
|
84
|
+
filter: (handle, opts) => vm.exportSingleValue(pinHandle(driver.filter(vm.vm.getString(handle), vm.importObjectViaJson(opts), bindings)))
|
|
85
|
+
};
|
|
86
|
+
}
|
|
46
87
|
};
|
|
47
88
|
}
|
|
48
89
|
//#endregion
|