@milaboratories/pl-middle-layer 1.52.1 → 1.53.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.
@@ -1,11 +1,12 @@
1
1
  const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
2
  const require_p_object_collection = require('../pool/p_object_collection.cjs');
3
- const require_spec_driver = require('./spec_driver.cjs');
3
+ require('./spec_driver.cjs');
4
4
  let _platforma_sdk_model = require("@platforma-sdk/model");
5
5
  let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
6
6
  let _milaboratories_computable = require("@milaboratories/computable");
7
7
  let node_crypto = require("node:crypto");
8
8
  let quickjs_emscripten = require("quickjs-emscripten");
9
+ let _milaboratories_pf_spec_driver = require("@milaboratories/pf-spec-driver");
9
10
 
10
11
  //#region src/js_render/computable_context.ts
11
12
  function bytesToBase64(data) {
@@ -15,7 +16,7 @@ var ComputableContextHelper = class {
15
16
  computablesToResolve = {};
16
17
  computableCtx;
17
18
  accessors = /* @__PURE__ */ new Map();
18
- specDriver = new require_spec_driver.SpecDriver();
19
+ specDriver = new _milaboratories_pf_spec_driver.SpecDriver();
19
20
  _meta;
20
21
  get meta() {
21
22
  if (this._meta === void 0) {
@@ -230,9 +231,21 @@ var ComputableContextHelper = class {
230
231
  specFrameDiscoverColumns(handle, request) {
231
232
  return this.specDriver.specFrameDiscoverColumns(handle, request);
232
233
  }
233
- specFrameDispose(handle) {
234
+ disposeSpecFrame(handle) {
234
235
  this.specDriver.disposeSpecFrame(handle);
235
236
  }
237
+ expandAxes(spec) {
238
+ return this.specDriver.expandAxes(spec);
239
+ }
240
+ collapseAxes(ids) {
241
+ return this.specDriver.collapseAxes(ids);
242
+ }
243
+ findAxis(spec, selector) {
244
+ return this.specDriver.findAxis(spec, selector);
245
+ }
246
+ findTableColumn(tableSpec, selector) {
247
+ return this.specDriver.findTableColumn(tableSpec, selector);
248
+ }
236
249
  /**
237
250
  * Transforms input data for PFrame/PTable creation
238
251
  * - Converts string handles to accessors
@@ -445,8 +458,20 @@ var ComputableContextHelper = class {
445
458
  exportCtxFunction("specFrameDiscoverColumns", (handle, request) => {
446
459
  return parent.exportObjectViaJson(this.specFrameDiscoverColumns(vm.getString(handle), parent.importObjectViaJson(request)), void 0);
447
460
  });
448
- exportCtxFunction("specFrameDispose", (handle) => {
449
- this.specFrameDispose(vm.getString(handle));
461
+ exportCtxFunction("disposeSpecFrame", (handle) => {
462
+ this.disposeSpecFrame(vm.getString(handle));
463
+ });
464
+ exportCtxFunction("expandAxes", (spec) => {
465
+ return parent.exportObjectViaJson(this.expandAxes(parent.importObjectViaJson(spec)), void 0);
466
+ });
467
+ exportCtxFunction("collapseAxes", (ids) => {
468
+ return parent.exportObjectViaJson(this.collapseAxes(parent.importObjectViaJson(ids)), void 0);
469
+ });
470
+ exportCtxFunction("findAxis", (spec, selector) => {
471
+ return parent.exportSingleValue(this.findAxis(parent.importObjectViaJson(spec), parent.importObjectViaJson(selector)), void 0);
472
+ });
473
+ exportCtxFunction("findTableColumn", (tableSpec, selector) => {
474
+ return parent.exportSingleValue(this.findTableColumn(parent.importObjectViaJson(tableSpec), parent.importObjectViaJson(selector)), void 0);
450
475
  });
451
476
  exportCtxFunction("getCurrentUnstableMarker", () => {
452
477
  return parent.exportSingleValue(this.getCurrentUnstableMarker(), void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"computable_context.cjs","names":["SpecDriver","parseFinalPObjectCollection","Computable"],"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 { 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 type {\n DiscoverColumnsRequest,\n DiscoverColumnsResponse,\n PColumnSpec,\n SpecFrameHandle,\n} from \"@milaboratories/pl-model-common\";\nimport { SpecDriver } from \"./spec_driver\";\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 readonly specDriver = new SpecDriver();\n\n private _meta: Map<string, Block> | undefined;\n private get meta(): Map<string, Block> {\n if (this._meta === undefined) {\n if (this.computableCtx === undefined)\n throw new Error(\"blockMeta can't be resolved in this context\");\n this._meta = this.blockCtx.blockMeta(this.computableCtx);\n }\n return this._meta;\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 //\n // Methods for injected ctx object\n //\n\n getAccessorHandleByName(name: string): string | undefined {\n if (this.computableCtx === undefined)\n throw new Error(\"Accessors can't be used in this context\");\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(this.computableCtx!);\n if (!entry) this.accessors.set(name, undefined);\n else\n this.accessors.set(name, this.computableCtx!.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 if (this.computableCtx === undefined)\n throw new Error(\n \"can't use result pool in this context (most porbably called from the future mapper)\",\n );\n this._resultPool = notEmpty(\n this.blockCtx.getResultsPool,\n \"getResultsPool\",\n )(this.computableCtx);\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.computableCtx!.markUnstable(`incomplete_result_pool:${collection.instabilityMarker}`);\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.computableCtx!.markUnstable(`incomplete_result_pool:${collection.instabilityMarker}`);\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.computableCtx!.markUnstable(`specs_from_pool_incomplete:${specs.instabilityMarker}`);\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 if (this.computableCtx === undefined)\n throw new Error(\n \"can't instantiate PFrames from this context (most porbably called from the future mapper)\",\n );\n const { key, unref } = this.env.driverKit.pFrameDriver.createPFrame(\n def.map((c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n );\n this.computableCtx.addOnDestroy(unref);\n return key;\n }\n\n public createPTable(\n def: PTableDef<PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PTableHandle {\n if (this.computableCtx === undefined)\n throw new Error(\n \"can't instantiate PTable from this context (most porbably called from the future mapper)\",\n );\n const { key, unref } = this.env.driverKit.pFrameDriver.createPTable(\n mapPTableDef(def, (c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n );\n this.computableCtx.addOnDestroy(unref);\n return key;\n }\n public createPTableV2(\n def: PTableDefV2<PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PTableHandle {\n if (this.computableCtx === undefined)\n throw new Error(\n \"can't instantiate PTable from this context (most porbably called from the future mapper)\",\n );\n const { key, unref } = this.env.driverKit.pFrameDriver.createPTableV2(\n mapPTableDefV2(def, (c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n );\n this.computableCtx.addOnDestroy(unref);\n return key;\n }\n\n //\n // Spec Frames\n //\n\n public createSpecFrame(specs: Record<string, PColumnSpec>): SpecFrameHandle {\n const handle = this.specDriver.createSpecFrame(specs);\n this.computableCtx?.addOnDestroy(() => this.specDriver.disposeSpecFrame(handle));\n return handle;\n }\n\n public specFrameDiscoverColumns(\n handle: SpecFrameHandle,\n request: DiscoverColumnsRequest,\n ): DiscoverColumnsResponse {\n return this.specDriver.specFrameDiscoverColumns(handle as SpecFrameHandle, request);\n }\n\n public specFrameDispose(handle: SpecFrameHandle): void {\n this.specDriver.disposeSpecFrame(handle as SpecFrameHandle);\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 if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.args outside the future lambda. Can't be directly used in this context.`,\n );\n const args = this.blockCtx.args(this.computableCtx);\n return args === undefined ? vm.undefined : vm.newString(args);\n });\n exportCtxFunction(\"blockStorage\", () => {\n if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.blockStorage outside the future lambda. Can't be directly used in this context.`,\n );\n return vm.newString(this.blockCtx.blockStorage(this.computableCtx) ?? \"{}\");\n });\n exportCtxFunction(\"data\", () => {\n if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.data outside the future lambda. Can't be directly used in this context.`,\n );\n return vm.newString(this.blockCtx.data(this.computableCtx) ?? \"{}\");\n });\n exportCtxFunction(\"activeArgs\", () => {\n if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.activeArgs outside the future lambda. Can't be directly used in this context.`,\n );\n const res = this.blockCtx.activeArgs(this.computableCtx);\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 if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.uiState outside the future lambda. Can't be directly used in this context.`,\n );\n return vm.newString(extractUiState(this.blockCtx.data(this.computableCtx)));\n });\n }\n } else {\n const args = this.blockCtx.args(this.computableCtx!);\n const activeArgs = this.blockCtx.activeArgs(this.computableCtx!);\n const data = this.blockCtx.data(this.computableCtx!);\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 //\n // PFrames / PTables\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 // Spec Frames\n //\n\n exportCtxFunction(\"createSpecFrame\", (specs) => {\n return parent.exportSingleValue(\n this.createSpecFrame(parent.importObjectViaJson(specs) as Record<string, PColumnSpec>),\n undefined,\n );\n });\n\n exportCtxFunction(\"specFrameDiscoverColumns\", (handle, request) => {\n return parent.exportObjectViaJson(\n this.specFrameDiscoverColumns(\n vm.getString(handle) as SpecFrameHandle,\n parent.importObjectViaJson(request) as DiscoverColumnsRequest,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"specFrameDispose\", (handle) => {\n this.specFrameDispose(vm.getString(handle) as SpecFrameHandle);\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.cjs","names":["SpecDriver","parseFinalPObjectCollection","Computable"],"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 { 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 type {\n AxesId,\n AxesSpec,\n DiscoverColumnsRequest,\n DiscoverColumnsResponse,\n PColumnSpec,\n PTableColumnId,\n PTableColumnSpec,\n SingleAxisSelector,\n SpecFrameHandle,\n} from \"@milaboratories/pl-model-common\";\nimport { SpecDriver } from \"./spec_driver\";\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 readonly specDriver = new SpecDriver();\n\n private _meta: Map<string, Block> | undefined;\n private get meta(): Map<string, Block> {\n if (this._meta === undefined) {\n if (this.computableCtx === undefined)\n throw new Error(\"blockMeta can't be resolved in this context\");\n this._meta = this.blockCtx.blockMeta(this.computableCtx);\n }\n return this._meta;\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 //\n // Methods for injected ctx object\n //\n\n getAccessorHandleByName(name: string): string | undefined {\n if (this.computableCtx === undefined)\n throw new Error(\"Accessors can't be used in this context\");\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(this.computableCtx!);\n if (!entry) this.accessors.set(name, undefined);\n else\n this.accessors.set(name, this.computableCtx!.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 if (this.computableCtx === undefined)\n throw new Error(\n \"can't use result pool in this context (most porbably called from the future mapper)\",\n );\n this._resultPool = notEmpty(\n this.blockCtx.getResultsPool,\n \"getResultsPool\",\n )(this.computableCtx);\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.computableCtx!.markUnstable(`incomplete_result_pool:${collection.instabilityMarker}`);\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.computableCtx!.markUnstable(`incomplete_result_pool:${collection.instabilityMarker}`);\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.computableCtx!.markUnstable(`specs_from_pool_incomplete:${specs.instabilityMarker}`);\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 if (this.computableCtx === undefined)\n throw new Error(\n \"can't instantiate PFrames from this context (most porbably called from the future mapper)\",\n );\n const { key, unref } = this.env.driverKit.pFrameDriver.createPFrame(\n def.map((c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n );\n this.computableCtx.addOnDestroy(unref);\n return key;\n }\n\n public createPTable(\n def: PTableDef<PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PTableHandle {\n if (this.computableCtx === undefined)\n throw new Error(\n \"can't instantiate PTable from this context (most porbably called from the future mapper)\",\n );\n const { key, unref } = this.env.driverKit.pFrameDriver.createPTable(\n mapPTableDef(def, (c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n );\n this.computableCtx.addOnDestroy(unref);\n return key;\n }\n public createPTableV2(\n def: PTableDefV2<PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PTableHandle {\n if (this.computableCtx === undefined)\n throw new Error(\n \"can't instantiate PTable from this context (most porbably called from the future mapper)\",\n );\n const { key, unref } = this.env.driverKit.pFrameDriver.createPTableV2(\n mapPTableDefV2(def, (c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n );\n this.computableCtx.addOnDestroy(unref);\n return key;\n }\n\n //\n // Spec Frames\n //\n\n public createSpecFrame(specs: Record<string, PColumnSpec>): SpecFrameHandle {\n const handle = this.specDriver.createSpecFrame(specs);\n this.computableCtx?.addOnDestroy(() => this.specDriver.disposeSpecFrame(handle));\n return handle;\n }\n\n public specFrameDiscoverColumns(\n handle: SpecFrameHandle,\n request: DiscoverColumnsRequest,\n ): DiscoverColumnsResponse {\n return this.specDriver.specFrameDiscoverColumns(handle as SpecFrameHandle, request);\n }\n\n public disposeSpecFrame(handle: SpecFrameHandle): void {\n this.specDriver.disposeSpecFrame(handle as SpecFrameHandle);\n }\n\n public expandAxes(spec: AxesSpec): AxesId {\n return this.specDriver.expandAxes(spec);\n }\n\n public collapseAxes(ids: AxesId): AxesSpec {\n return this.specDriver.collapseAxes(ids);\n }\n\n public findAxis(spec: AxesSpec, selector: SingleAxisSelector): number {\n return this.specDriver.findAxis(spec, selector);\n }\n\n public findTableColumn(tableSpec: PTableColumnSpec[], selector: PTableColumnId): number {\n return this.specDriver.findTableColumn(tableSpec, selector);\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 if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.args outside the future lambda. Can't be directly used in this context.`,\n );\n const args = this.blockCtx.args(this.computableCtx);\n return args === undefined ? vm.undefined : vm.newString(args);\n });\n exportCtxFunction(\"blockStorage\", () => {\n if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.blockStorage outside the future lambda. Can't be directly used in this context.`,\n );\n return vm.newString(this.blockCtx.blockStorage(this.computableCtx) ?? \"{}\");\n });\n exportCtxFunction(\"data\", () => {\n if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.data outside the future lambda. Can't be directly used in this context.`,\n );\n return vm.newString(this.blockCtx.data(this.computableCtx) ?? \"{}\");\n });\n exportCtxFunction(\"activeArgs\", () => {\n if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.activeArgs outside the future lambda. Can't be directly used in this context.`,\n );\n const res = this.blockCtx.activeArgs(this.computableCtx);\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 if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.uiState outside the future lambda. Can't be directly used in this context.`,\n );\n return vm.newString(extractUiState(this.blockCtx.data(this.computableCtx)));\n });\n }\n } else {\n const args = this.blockCtx.args(this.computableCtx!);\n const activeArgs = this.blockCtx.activeArgs(this.computableCtx!);\n const data = this.blockCtx.data(this.computableCtx!);\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 //\n // PFrames / PTables\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 // Spec Frames\n //\n\n exportCtxFunction(\"createSpecFrame\", (specs) => {\n return parent.exportSingleValue(\n this.createSpecFrame(parent.importObjectViaJson(specs) as Record<string, PColumnSpec>),\n undefined,\n );\n });\n\n exportCtxFunction(\"specFrameDiscoverColumns\", (handle, request) => {\n return parent.exportObjectViaJson(\n this.specFrameDiscoverColumns(\n vm.getString(handle) as SpecFrameHandle,\n parent.importObjectViaJson(request) as DiscoverColumnsRequest,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"disposeSpecFrame\", (handle) => {\n this.disposeSpecFrame(vm.getString(handle) as SpecFrameHandle);\n });\n\n exportCtxFunction(\"expandAxes\", (spec) => {\n return parent.exportObjectViaJson(\n this.expandAxes(parent.importObjectViaJson(spec) as AxesSpec),\n undefined,\n );\n });\n\n exportCtxFunction(\"collapseAxes\", (ids) => {\n return parent.exportObjectViaJson(\n this.collapseAxes(parent.importObjectViaJson(ids) as AxesId),\n undefined,\n );\n });\n\n exportCtxFunction(\"findAxis\", (spec, selector) => {\n return parent.exportSingleValue(\n this.findAxis(\n parent.importObjectViaJson(spec) as AxesSpec,\n parent.importObjectViaJson(selector) as SingleAxisSelector,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"findTableColumn\", (tableSpec, selector) => {\n return parent.exportSingleValue(\n this.findTableColumn(\n parent.importObjectViaJson(tableSpec) as PTableColumnSpec[],\n parent.importObjectViaJson(selector) as PTableColumnId,\n ),\n undefined,\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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"}
@@ -229,9 +229,21 @@ var ComputableContextHelper = class {
229
229
  specFrameDiscoverColumns(handle, request) {
230
230
  return this.specDriver.specFrameDiscoverColumns(handle, request);
231
231
  }
232
- specFrameDispose(handle) {
232
+ disposeSpecFrame(handle) {
233
233
  this.specDriver.disposeSpecFrame(handle);
234
234
  }
235
+ expandAxes(spec) {
236
+ return this.specDriver.expandAxes(spec);
237
+ }
238
+ collapseAxes(ids) {
239
+ return this.specDriver.collapseAxes(ids);
240
+ }
241
+ findAxis(spec, selector) {
242
+ return this.specDriver.findAxis(spec, selector);
243
+ }
244
+ findTableColumn(tableSpec, selector) {
245
+ return this.specDriver.findTableColumn(tableSpec, selector);
246
+ }
235
247
  /**
236
248
  * Transforms input data for PFrame/PTable creation
237
249
  * - Converts string handles to accessors
@@ -444,8 +456,20 @@ var ComputableContextHelper = class {
444
456
  exportCtxFunction("specFrameDiscoverColumns", (handle, request) => {
445
457
  return parent.exportObjectViaJson(this.specFrameDiscoverColumns(vm.getString(handle), parent.importObjectViaJson(request)), void 0);
446
458
  });
447
- exportCtxFunction("specFrameDispose", (handle) => {
448
- this.specFrameDispose(vm.getString(handle));
459
+ exportCtxFunction("disposeSpecFrame", (handle) => {
460
+ this.disposeSpecFrame(vm.getString(handle));
461
+ });
462
+ exportCtxFunction("expandAxes", (spec) => {
463
+ return parent.exportObjectViaJson(this.expandAxes(parent.importObjectViaJson(spec)), void 0);
464
+ });
465
+ exportCtxFunction("collapseAxes", (ids) => {
466
+ return parent.exportObjectViaJson(this.collapseAxes(parent.importObjectViaJson(ids)), void 0);
467
+ });
468
+ exportCtxFunction("findAxis", (spec, selector) => {
469
+ return parent.exportSingleValue(this.findAxis(parent.importObjectViaJson(spec), parent.importObjectViaJson(selector)), void 0);
470
+ });
471
+ exportCtxFunction("findTableColumn", (tableSpec, selector) => {
472
+ return parent.exportSingleValue(this.findTableColumn(parent.importObjectViaJson(tableSpec), parent.importObjectViaJson(selector)), void 0);
449
473
  });
450
474
  exportCtxFunction("getCurrentUnstableMarker", () => {
451
475
  return parent.exportSingleValue(this.getCurrentUnstableMarker(), void 0);
@@ -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 { 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 type {\n DiscoverColumnsRequest,\n DiscoverColumnsResponse,\n PColumnSpec,\n SpecFrameHandle,\n} from \"@milaboratories/pl-model-common\";\nimport { SpecDriver } from \"./spec_driver\";\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 readonly specDriver = new SpecDriver();\n\n private _meta: Map<string, Block> | undefined;\n private get meta(): Map<string, Block> {\n if (this._meta === undefined) {\n if (this.computableCtx === undefined)\n throw new Error(\"blockMeta can't be resolved in this context\");\n this._meta = this.blockCtx.blockMeta(this.computableCtx);\n }\n return this._meta;\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 //\n // Methods for injected ctx object\n //\n\n getAccessorHandleByName(name: string): string | undefined {\n if (this.computableCtx === undefined)\n throw new Error(\"Accessors can't be used in this context\");\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(this.computableCtx!);\n if (!entry) this.accessors.set(name, undefined);\n else\n this.accessors.set(name, this.computableCtx!.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 if (this.computableCtx === undefined)\n throw new Error(\n \"can't use result pool in this context (most porbably called from the future mapper)\",\n );\n this._resultPool = notEmpty(\n this.blockCtx.getResultsPool,\n \"getResultsPool\",\n )(this.computableCtx);\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.computableCtx!.markUnstable(`incomplete_result_pool:${collection.instabilityMarker}`);\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.computableCtx!.markUnstable(`incomplete_result_pool:${collection.instabilityMarker}`);\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.computableCtx!.markUnstable(`specs_from_pool_incomplete:${specs.instabilityMarker}`);\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 if (this.computableCtx === undefined)\n throw new Error(\n \"can't instantiate PFrames from this context (most porbably called from the future mapper)\",\n );\n const { key, unref } = this.env.driverKit.pFrameDriver.createPFrame(\n def.map((c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n );\n this.computableCtx.addOnDestroy(unref);\n return key;\n }\n\n public createPTable(\n def: PTableDef<PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PTableHandle {\n if (this.computableCtx === undefined)\n throw new Error(\n \"can't instantiate PTable from this context (most porbably called from the future mapper)\",\n );\n const { key, unref } = this.env.driverKit.pFrameDriver.createPTable(\n mapPTableDef(def, (c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n );\n this.computableCtx.addOnDestroy(unref);\n return key;\n }\n public createPTableV2(\n def: PTableDefV2<PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PTableHandle {\n if (this.computableCtx === undefined)\n throw new Error(\n \"can't instantiate PTable from this context (most porbably called from the future mapper)\",\n );\n const { key, unref } = this.env.driverKit.pFrameDriver.createPTableV2(\n mapPTableDefV2(def, (c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n );\n this.computableCtx.addOnDestroy(unref);\n return key;\n }\n\n //\n // Spec Frames\n //\n\n public createSpecFrame(specs: Record<string, PColumnSpec>): SpecFrameHandle {\n const handle = this.specDriver.createSpecFrame(specs);\n this.computableCtx?.addOnDestroy(() => this.specDriver.disposeSpecFrame(handle));\n return handle;\n }\n\n public specFrameDiscoverColumns(\n handle: SpecFrameHandle,\n request: DiscoverColumnsRequest,\n ): DiscoverColumnsResponse {\n return this.specDriver.specFrameDiscoverColumns(handle as SpecFrameHandle, request);\n }\n\n public specFrameDispose(handle: SpecFrameHandle): void {\n this.specDriver.disposeSpecFrame(handle as SpecFrameHandle);\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 if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.args outside the future lambda. Can't be directly used in this context.`,\n );\n const args = this.blockCtx.args(this.computableCtx);\n return args === undefined ? vm.undefined : vm.newString(args);\n });\n exportCtxFunction(\"blockStorage\", () => {\n if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.blockStorage outside the future lambda. Can't be directly used in this context.`,\n );\n return vm.newString(this.blockCtx.blockStorage(this.computableCtx) ?? \"{}\");\n });\n exportCtxFunction(\"data\", () => {\n if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.data outside the future lambda. Can't be directly used in this context.`,\n );\n return vm.newString(this.blockCtx.data(this.computableCtx) ?? \"{}\");\n });\n exportCtxFunction(\"activeArgs\", () => {\n if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.activeArgs outside the future lambda. Can't be directly used in this context.`,\n );\n const res = this.blockCtx.activeArgs(this.computableCtx);\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 if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.uiState outside the future lambda. Can't be directly used in this context.`,\n );\n return vm.newString(extractUiState(this.blockCtx.data(this.computableCtx)));\n });\n }\n } else {\n const args = this.blockCtx.args(this.computableCtx!);\n const activeArgs = this.blockCtx.activeArgs(this.computableCtx!);\n const data = this.blockCtx.data(this.computableCtx!);\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 //\n // PFrames / PTables\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 // Spec Frames\n //\n\n exportCtxFunction(\"createSpecFrame\", (specs) => {\n return parent.exportSingleValue(\n this.createSpecFrame(parent.importObjectViaJson(specs) as Record<string, PColumnSpec>),\n undefined,\n );\n });\n\n exportCtxFunction(\"specFrameDiscoverColumns\", (handle, request) => {\n return parent.exportObjectViaJson(\n this.specFrameDiscoverColumns(\n vm.getString(handle) as SpecFrameHandle,\n parent.importObjectViaJson(request) as DiscoverColumnsRequest,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"specFrameDispose\", (handle) => {\n this.specFrameDispose(vm.getString(handle) as SpecFrameHandle);\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 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 { 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 type {\n AxesId,\n AxesSpec,\n DiscoverColumnsRequest,\n DiscoverColumnsResponse,\n PColumnSpec,\n PTableColumnId,\n PTableColumnSpec,\n SingleAxisSelector,\n SpecFrameHandle,\n} from \"@milaboratories/pl-model-common\";\nimport { SpecDriver } from \"./spec_driver\";\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 readonly specDriver = new SpecDriver();\n\n private _meta: Map<string, Block> | undefined;\n private get meta(): Map<string, Block> {\n if (this._meta === undefined) {\n if (this.computableCtx === undefined)\n throw new Error(\"blockMeta can't be resolved in this context\");\n this._meta = this.blockCtx.blockMeta(this.computableCtx);\n }\n return this._meta;\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 //\n // Methods for injected ctx object\n //\n\n getAccessorHandleByName(name: string): string | undefined {\n if (this.computableCtx === undefined)\n throw new Error(\"Accessors can't be used in this context\");\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(this.computableCtx!);\n if (!entry) this.accessors.set(name, undefined);\n else\n this.accessors.set(name, this.computableCtx!.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 if (this.computableCtx === undefined)\n throw new Error(\n \"can't use result pool in this context (most porbably called from the future mapper)\",\n );\n this._resultPool = notEmpty(\n this.blockCtx.getResultsPool,\n \"getResultsPool\",\n )(this.computableCtx);\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.computableCtx!.markUnstable(`incomplete_result_pool:${collection.instabilityMarker}`);\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.computableCtx!.markUnstable(`incomplete_result_pool:${collection.instabilityMarker}`);\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.computableCtx!.markUnstable(`specs_from_pool_incomplete:${specs.instabilityMarker}`);\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 if (this.computableCtx === undefined)\n throw new Error(\n \"can't instantiate PFrames from this context (most porbably called from the future mapper)\",\n );\n const { key, unref } = this.env.driverKit.pFrameDriver.createPFrame(\n def.map((c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n );\n this.computableCtx.addOnDestroy(unref);\n return key;\n }\n\n public createPTable(\n def: PTableDef<PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PTableHandle {\n if (this.computableCtx === undefined)\n throw new Error(\n \"can't instantiate PTable from this context (most porbably called from the future mapper)\",\n );\n const { key, unref } = this.env.driverKit.pFrameDriver.createPTable(\n mapPTableDef(def, (c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n );\n this.computableCtx.addOnDestroy(unref);\n return key;\n }\n public createPTableV2(\n def: PTableDefV2<PColumn<string | PColumnValues | DataInfo<string>>>,\n ): PTableHandle {\n if (this.computableCtx === undefined)\n throw new Error(\n \"can't instantiate PTable from this context (most porbably called from the future mapper)\",\n );\n const { key, unref } = this.env.driverKit.pFrameDriver.createPTableV2(\n mapPTableDefV2(def, (c) => mapPObjectData(c, (d) => this.transformInputPData(d))),\n );\n this.computableCtx.addOnDestroy(unref);\n return key;\n }\n\n //\n // Spec Frames\n //\n\n public createSpecFrame(specs: Record<string, PColumnSpec>): SpecFrameHandle {\n const handle = this.specDriver.createSpecFrame(specs);\n this.computableCtx?.addOnDestroy(() => this.specDriver.disposeSpecFrame(handle));\n return handle;\n }\n\n public specFrameDiscoverColumns(\n handle: SpecFrameHandle,\n request: DiscoverColumnsRequest,\n ): DiscoverColumnsResponse {\n return this.specDriver.specFrameDiscoverColumns(handle as SpecFrameHandle, request);\n }\n\n public disposeSpecFrame(handle: SpecFrameHandle): void {\n this.specDriver.disposeSpecFrame(handle as SpecFrameHandle);\n }\n\n public expandAxes(spec: AxesSpec): AxesId {\n return this.specDriver.expandAxes(spec);\n }\n\n public collapseAxes(ids: AxesId): AxesSpec {\n return this.specDriver.collapseAxes(ids);\n }\n\n public findAxis(spec: AxesSpec, selector: SingleAxisSelector): number {\n return this.specDriver.findAxis(spec, selector);\n }\n\n public findTableColumn(tableSpec: PTableColumnSpec[], selector: PTableColumnId): number {\n return this.specDriver.findTableColumn(tableSpec, selector);\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 if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.args outside the future lambda. Can't be directly used in this context.`,\n );\n const args = this.blockCtx.args(this.computableCtx);\n return args === undefined ? vm.undefined : vm.newString(args);\n });\n exportCtxFunction(\"blockStorage\", () => {\n if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.blockStorage outside the future lambda. Can't be directly used in this context.`,\n );\n return vm.newString(this.blockCtx.blockStorage(this.computableCtx) ?? \"{}\");\n });\n exportCtxFunction(\"data\", () => {\n if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.data outside the future lambda. Can't be directly used in this context.`,\n );\n return vm.newString(this.blockCtx.data(this.computableCtx) ?? \"{}\");\n });\n exportCtxFunction(\"activeArgs\", () => {\n if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.activeArgs outside the future lambda. Can't be directly used in this context.`,\n );\n const res = this.blockCtx.activeArgs(this.computableCtx);\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 if (this.computableCtx === undefined)\n throw new Error(\n `Add dummy call to ctx.uiState outside the future lambda. Can't be directly used in this context.`,\n );\n return vm.newString(extractUiState(this.blockCtx.data(this.computableCtx)));\n });\n }\n } else {\n const args = this.blockCtx.args(this.computableCtx!);\n const activeArgs = this.blockCtx.activeArgs(this.computableCtx!);\n const data = this.blockCtx.data(this.computableCtx!);\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 //\n // PFrames / PTables\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 // Spec Frames\n //\n\n exportCtxFunction(\"createSpecFrame\", (specs) => {\n return parent.exportSingleValue(\n this.createSpecFrame(parent.importObjectViaJson(specs) as Record<string, PColumnSpec>),\n undefined,\n );\n });\n\n exportCtxFunction(\"specFrameDiscoverColumns\", (handle, request) => {\n return parent.exportObjectViaJson(\n this.specFrameDiscoverColumns(\n vm.getString(handle) as SpecFrameHandle,\n parent.importObjectViaJson(request) as DiscoverColumnsRequest,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"disposeSpecFrame\", (handle) => {\n this.disposeSpecFrame(vm.getString(handle) as SpecFrameHandle);\n });\n\n exportCtxFunction(\"expandAxes\", (spec) => {\n return parent.exportObjectViaJson(\n this.expandAxes(parent.importObjectViaJson(spec) as AxesSpec),\n undefined,\n );\n });\n\n exportCtxFunction(\"collapseAxes\", (ids) => {\n return parent.exportObjectViaJson(\n this.collapseAxes(parent.importObjectViaJson(ids) as AxesId),\n undefined,\n );\n });\n\n exportCtxFunction(\"findAxis\", (spec, selector) => {\n return parent.exportSingleValue(\n this.findAxis(\n parent.importObjectViaJson(spec) as AxesSpec,\n parent.importObjectViaJson(selector) as SingleAxisSelector,\n ),\n undefined,\n );\n });\n\n exportCtxFunction(\"findTableColumn\", (tableSpec, selector) => {\n return parent.exportSingleValue(\n this.findTableColumn(\n parent.importObjectViaJson(tableSpec) as PTableColumnSpec[],\n parent.importObjectViaJson(selector) as PTableColumnId,\n ),\n undefined,\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":";;;;;;;;;AA2DA,SAAS,cAAc,MAAkD;AACvE,QAAO,SAAS,SAAY,OAAO,KAAK,KAAK,CAAC,SAAS,SAAS,GAAG;;AAGrE,IAAa,0BAAb,MAGE;CACA,AAAgB,uBAA4D,EAAE;CAE9E,AAAQ;CACR,AAAiB,4BAAY,IAAI,KAA6C;CAC9E,AAAiB,aAAa,IAAI,YAAY;CAE9C,AAAQ;CACR,IAAY,OAA2B;AACrC,MAAI,KAAK,UAAU,QAAW;AAC5B,OAAI,KAAK,kBAAkB,OACzB,OAAM,IAAI,MAAM,8CAA8C;AAChE,QAAK,QAAQ,KAAK,SAAS,UAAU,KAAK,cAAc;;AAE1D,SAAO,KAAK;;CAGd,YACE,AAAiB,QACjB,AAAiB,UACjB,AAAiB,KACjB,AAAiB,cACjB,eACA;EALiB;EACA;EACA;EACA;AAGjB,OAAK,gBAAgB;;CAGvB,AAAO,qBAAqB;AAC1B,OAAK,gBAAgB;AACrB,OAAK,UAAU,OAAO;;CAOxB,wBAAwB,MAAkC;AACxD,MAAI,KAAK,kBAAkB,OACzB,OAAM,IAAI,MAAM,0CAA0C;EAC5D,MAAM,qBAAqB,MAAc,WAAmD;AAC1F,OAAI,CAAC,KAAK,UAAU,IAAI,KAAK,EAAE;IAC7B,MAAM,SAAS,KAAK,SAAS;AAC7B,QAAI,WAAW,OAAW,OAAM,IAAI,MAAM,gCAAgC;IAC1E,MAAM,QAAQ,OAAO,KAAK,cAAe;AACzC,QAAI,CAAC,MAAO,MAAK,UAAU,IAAI,MAAM,OAAU;QAE7C,MAAK,UAAU,IAAI,MAAM,KAAK,cAAe,SAAS,MAAM,CAAC,KAAK,EAAE,aAAa,MAAM,CAAC,CAAC;;AAE7F,UAAO,KAAK,UAAU,IAAI,KAAK,GAAG,OAAO;;AAE3C,MAAI,SAAS,UAAW,QAAO,kBAAkB,WAAW,UAAU;WAC7D,SAAS,OAAQ,QAAO,kBAAkB,QAAQ,OAAO;;CAQpE,kBACE,QACA,eACA,GAAG,OACiB;AACpB,SAAO,KAAK,aAAa,KAAK,YAAY,OAAO,CAAC,mBAAmB,eAAe,GAAG,MAAM,CAAC;;CAGhG,gBAAgB,QAAqC;AACnD,SAAO,KAAK,YAAY,OAAO,CAAC;;CAGlC,gBAAgB,QAAyB;AACvC,SAAO,KAAK,YAAY,OAAO,CAAC,iBAAiB;;CAGnD,iBAAiB,QAAyB;AACxC,SAAO,KAAK,YAAY,OAAO,CAAC,kBAAkB;;CAGpD,kBAAkB,QAAyB;AACzC,SAAO,KAAK,YAAY,OAAO,CAAC,mBAAmB;;CAGrD,WAAW,QAAyB;AAClC,SAAO,KAAK,YAAY,OAAO,CAAC,YAAY;;CAG9C,SAAS,QAAoC;AAC3C,SAAO,KAAK,aAAa,KAAK,YAAY,OAAO,CAAC,UAAU,CAAC;;CAG/D,gBAAgB,QAA0B;AACxC,SAAO,KAAK,YAAY,OAAO,CAAC,iBAAiB;;CAGnD,iBAAiB,QAA0B;AACzC,SAAO,KAAK,YAAY,OAAO,CAAC,kBAAkB;;CAGpD,kBAAkB,QAA0B;AAC1C,SAAO,KAAK,YAAY,OAAO,CAAC,mBAAmB;;CAGrD,kBAAkB,QAAgB,KAAiC;AACjE,SAAO,cAAc,KAAK,YAAY,OAAO,CAAC,YAAY,IAAI,CAAC;;CAGjE,oBAAoB,QAAgB,KAAiC;AACnE,SAAO,KAAK,YAAY,OAAO,CAAC,oBAAoB,IAAI;;CAG1D,cAAc,QAAoC;AAChD,SAAO,cAAc,KAAK,YAAY,OAAO,CAAC,SAAS,CAAC;;CAG1D,gBAAgB,QAAoC;AAClD,SAAO,KAAK,YAAY,OAAO,CAAC,iBAAiB;;CAOnD,uBACE,QACA,qBACA,QACA,GAAG,cAC0C;EAC7C,MAAM,MAAM,KAAK,YAAY,OAAO;AACpC,MAAI,CAAC,IAAI,mBAAmB,CAAE,QAAO;EACrC,MAAM,YAAY,4BAA4B,KAAK,qBAAqB,QAAQ,aAAa;EAC7F,MAAM,SAA0C,EAAE;AAClD,OAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,UAAU,CAChD,QAAO,OAAO,eAAe,MAAM,MAAM,KAAK,aAAa,EAAE,CAAC;AAEhE,SAAO;;CAOT,AAAQ,mBAAmB,SAAiB,YAAyC;EACnF,MAAM,UAAU,GAAG,QAAQ,GAAG,YAAY;AAC1C,OAAK,qBAAqB,WAAW;AACrC,SAAO;;CAGT,AAAO,uBAAuB,QAAgB,OAA4B;EACxE,MAAM,eAAe,KAAK,YAAY,OAAO,CAAC;AAC9C,SAAO,KAAK,mBACV,0BACA,WAAW,MAAM,QAAQ,KAAK,IAAI,UAAU,WAAW,kBAAkB,cAAc,IAAI,EAAE,EAC3F,kBAAkB,OAAO,UAAU;AACjC,OAAI,UAAU,OAAW,QAAO;AAChC,UAAO,OAAO,KACZ,MAAM,KAAK,IAAI,UAAU,WAAW,WAAW,MAAM,QAAQ,MAAM,CACpE,CAAC,SAAS,QAAQ;KAEtB,CAAC,CACH;;CAGH,AAAO,uBAAuB,QAAgB,OAA4B;EACxE,MAAM,eAAe,KAAK,YAAY,OAAO,CAAC;AAC9C,SAAO,KAAK,mBACV,0BACA,WAAW,MAAM,QAAQ,KAAK,IAAI,UAAU,WAAW,kBAAkB,cAAc,IAAI,EAAE,EAC3F,kBAAkB,OAAO,UAAU;AACjC,OAAI,UAAU,OAAW,QAAO;AAChC,UAAO,OAAO,KACZ,MAAM,KAAK,IAAI,UAAU,WAAW,WAAW,MAAM,QAAQ,MAAM,CACpE,CAAC,SAAS,SAAS;KAEvB,CAAC,CACH;;CAGH,AAAO,+BAA+B,QAAwB;EAC5D,MAAM,eAAe,KAAK,YAAY,OAAO,CAAC;AAC9C,SAAO,KAAK,mBACV,kCACA,KAAK,IAAI,UAAU,WAAW,kBAAkB,aAAa,CAC9D;;CAGH,AAAO,6BAA6B,QAAwB;EAC1D,MAAM,WAAW,KAAK,YAAY,OAAO,CAAC,SAAS;AACnD,SAAO,KAAK,mBACV,gCACA,KAAK,IAAI,UAAU,WAAW,gBAAgB,SAAS,CACxD;;CAOH,AAAO,wBAAwB,QAAgB,QAA+B;EAC5E,MAAM,WAAW,KAAK,YAAY,OAAO,CAAC,SAAS;AACnD,SAAO,KAAK,mBACV,2BACA,KAAK,IAAI,UAAU,gBAAgB,wBAAwB,UAAU,OAAO,CAC7E;;CAOH,kBAAkB,QAAwB;EACxC,MAAM,WAAW,KAAK,YAAY,OAAO,CAAC,SAAS;AACnD,SAAO,KAAK,mBACV,qBACA,KAAK,IAAI,UAAU,aAAa,cAAc,SAAS,CACxD;;CAOH,YAAY,QAAgB,QAAwB;EAClD,MAAM,WAAW,KAAK,YAAY,OAAO,CAAC,SAAS;AACnD,SAAO,KAAK,mBACV,eACA,KAAK,IAAI,UAAU,UAAU,YAAY,UAAU,OAAO,CAC3D;;CAGH,eAAe,QAAgB,iBAAiC;EAC9D,MAAM,WAAW,KAAK,YAAY,OAAO,CAAC,SAAS;AACnD,SAAO,KAAK,mBACV,kBACA,KAAK,IAAI,UAAU,UAAU,eAAe,UAAU,gBAAgB,CACvE;;CAGH,uBAAuB,QAAgB,iBAAiC;EACtE,MAAM,WAAW,KAAK,YAAY,OAAO,CAAC,SAAS;AACnD,SAAO,KAAK,mBACV,0BACA,KAAK,IAAI,UAAU,UAAU,uBAAuB,UAAU,gBAAgB,CAC/E;;CAGH,aAAa,QAAwB;EACnC,MAAM,WAAW,KAAK,YAAY,OAAO,CAAC,SAAS;AACnD,SAAO,KAAK,mBACV,gBACA,KAAK,IAAI,UAAU,UAAU,aAAa,SAAS,CACpD;;CAOH,AAAO,cAAc,SAAyB;EAC5C,MAAM,IAAI,KAAK,KAAK,IAAI,QAAQ;AAChC,MAAI,MAAM,OAAW,OAAM,IAAI,MAAM,SAAS,QAAQ,aAAa;AACnE,SAAO,EAAE;;CAOX,AAAQ,cAAsC;CAC9C,IAAY,aAAyB;AACnC,MAAI,KAAK,gBAAgB,QAAW;AAClC,OAAI,KAAK,kBAAkB,OACzB,OAAM,IAAI,MACR,sFACD;AACH,QAAK,cAAc,SACjB,KAAK,SAAS,gBACd,iBACD,CAAC,KAAK,cAAc;;AAEvB,SAAO,KAAK;;CAGd,AAAO,iBAAiB,WAAqC;AAC3D,SAAO,KAAK,WAAW,iBAAiB,UAAU;;CAGpD,AAAO,wBAA2D;EAChE,MAAM,aAAa,KAAK,WAAW,SAAS;AAC5C,MAAI,WAAW,sBAAsB,OACnC,MAAK,cAAe,aAAa,0BAA0B,WAAW,oBAAoB;AAC5F,SAAO;GACL,YAAY,WAAW;GACvB,SAAS,WAAW,QAAQ,KAAK,OAAO;IACtC,KAAK,EAAE;IACP,KAAK,eAAe,EAAE,MAAM,MAAM,KAAK,aAAa,EAAE,CAAC;IACxD,EAAE;GACJ;;CAGH,AAAO,kCAEL;EACA,MAAM,aAAa,KAAK,WAAW,mBAAmB;AACtD,MAAI,WAAW,sBAAsB,OACnC,MAAK,cAAe,aAAa,0BAA0B,WAAW,oBAAoB;AAC5F,SAAO;GACL,YAAY,WAAW;GACvB,SAAS,WAAW,QAAQ,KAAK,OAAO;IACtC,KAAK,EAAE;IACP,KAAK;KACH,IAAI,EAAE,IAAI;KACV,MAAM,EAAE,IAAI;KACZ,MAAM,cAAc,EAAE,IAAI,OAAO,MAAM,KAAK,aAAa,EAAE,CAAC;KAC7D;IACF,EAAE;GACJ;;CAGH,AAAO,yBAAwD;EAC7D,MAAM,QAAQ,KAAK,WAAW,UAAU;AACxC,MAAI,MAAM,sBAAsB,OAC9B,MAAK,cAAe,aAAa,8BAA8B,MAAM,oBAAoB;AAC3F,SAAO;;CAGT,2BAA2B,SAAiB,YAA6C;AACvF,SAAO,KAAK,WAAW,aAAa,SAAS,WAAW;;CAG1D,2BAA2B,SAAiB,YAAiD;AAC3F,SAAO,eAAe,KAAK,WAAW,aAAa,SAAS,WAAW,GAAG,QACxE,KAAK,aAAa,IAAI,CACvB;;CAOH,AAAO,aACL,KACc;AACd,MAAI,KAAK,kBAAkB,OACzB,OAAM,IAAI,MACR,4FACD;EACH,MAAM,EAAE,KAAK,UAAU,KAAK,IAAI,UAAU,aAAa,aACrD,IAAI,KAAK,MAAM,eAAe,IAAI,MAAM,KAAK,oBAAoB,EAAE,CAAC,CAAC,CACtE;AACD,OAAK,cAAc,aAAa,MAAM;AACtC,SAAO;;CAGT,AAAO,aACL,KACc;AACd,MAAI,KAAK,kBAAkB,OACzB,OAAM,IAAI,MACR,2FACD;EACH,MAAM,EAAE,KAAK,UAAU,KAAK,IAAI,UAAU,aAAa,aACrD,aAAa,MAAM,MAAM,eAAe,IAAI,MAAM,KAAK,oBAAoB,EAAE,CAAC,CAAC,CAChF;AACD,OAAK,cAAc,aAAa,MAAM;AACtC,SAAO;;CAET,AAAO,eACL,KACc;AACd,MAAI,KAAK,kBAAkB,OACzB,OAAM,IAAI,MACR,2FACD;EACH,MAAM,EAAE,KAAK,UAAU,KAAK,IAAI,UAAU,aAAa,eACrD,eAAe,MAAM,MAAM,eAAe,IAAI,MAAM,KAAK,oBAAoB,EAAE,CAAC,CAAC,CAClF;AACD,OAAK,cAAc,aAAa,MAAM;AACtC,SAAO;;CAOT,AAAO,gBAAgB,OAAqD;EAC1E,MAAM,SAAS,KAAK,WAAW,gBAAgB,MAAM;AACrD,OAAK,eAAe,mBAAmB,KAAK,WAAW,iBAAiB,OAAO,CAAC;AAChF,SAAO;;CAGT,AAAO,yBACL,QACA,SACyB;AACzB,SAAO,KAAK,WAAW,yBAAyB,QAA2B,QAAQ;;CAGrF,AAAO,iBAAiB,QAA+B;AACrD,OAAK,WAAW,iBAAiB,OAA0B;;CAG7D,AAAO,WAAW,MAAwB;AACxC,SAAO,KAAK,WAAW,WAAW,KAAK;;CAGzC,AAAO,aAAa,KAAuB;AACzC,SAAO,KAAK,WAAW,aAAa,IAAI;;CAG1C,AAAO,SAAS,MAAgB,UAAsC;AACpE,SAAO,KAAK,WAAW,SAAS,MAAM,SAAS;;CAGjD,AAAO,gBAAgB,WAA+B,UAAkC;AACtF,SAAO,KAAK,WAAW,gBAAgB,WAAW,SAAS;;;;;;;;CAS7D,AAAQ,oBACN,GACmE;AACnE,MAAI,OAAO,MAAM,SACf,QAAO,KAAK,YAAY,EAAE;WACjB,WAAW,EAAE,CACtB,QAAO,YAAY,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;MAEjD,QAAO;;CAQX,AAAO,2BAA+C;AACpD,SAAO,KAAK,eAAe;;CAO7B,AAAO,QAAQ,SAAuB;AACpC,OAAK,IAAI,qBAAqB,QAAQ,KAAK,SAAS,SAAS,QAAQ;;CAGvE,AAAO,QAAQ,SAAuB;AACpC,OAAK,IAAI,qBAAqB,QAAQ,KAAK,SAAS,SAAS,QAAQ;;CAGvE,AAAO,SAAS,SAAuB;AACrC,OAAK,IAAI,qBAAqB,SAAS,KAAK,SAAS,SAAS,QAAQ;;CAOxE,AAAQ,YAAY,QAAoC;EACtD,MAAM,WAAW,KAAK,UAAU,IAAI,OAAO;AAC3C,MAAI,aAAa,OAAW,OAAM,IAAI,MAAM,mBAAmB;AAC/D,SAAO;;CAKT,AAAQ,aAAa,UAA8D;AACjF,MAAI,aAAa,OAAW,QAAO;OAC9B;GACH,MAAM,aAAa,YAAY;AAC/B,QAAK,UAAU,IAAI,YAAY,SAAS;AACxC,UAAO;;;CAIX,AAAO,UAAU,WAAgC;EAC/C,MAAM,SAAS,KAAK;EACpB,MAAM,KAAK,OAAO;AAElB,QAAM,WAAW,eAAe;GAG9B,MAAM,qBACJ,MACA,OACS;IACT,MAAM,mBAA4D,GAAG,SAAS;KAI5E,MAAM,KAAK,YAAY,KAAK;AAC5B,SAAI;AACF,aAAQ,GAAW,GAAG,KAAK;cACpB,GAAY;MACnB,MAAM,SAAS,OAAO,UAAU,yBAAyB,EAAE;AAC3D,YAAM,GAAG,SAAS,OAAO;eACjB;AACR,aAAO,MAAM;AACb,aAAO,MAAM,eAAe,YAAY,KAAK,GAAG;;;AAIpD,OAAG,YAAY,MAAM,gBAAgB,CAAC,SAAS,QAAQ,GAAG,QAAQ,WAAW,MAAM,IAAI,CAAC;AACxF,OAAG,YAAY,MAAM,GAAG,CAAC,SAAS,QAChC,GAAG,QAAQ,WAAW,OAAO,gBAAgB,IAAI,CAClD;;GAKH,MAAM,gBAAgB,CAAC,eAAe,KAAK,cAAc,2BAA2B,EAAE;GAGtF,MAAM,kBAAkB,cAA0C;AAChE,QAAI,CAAC,UAAW,QAAO;AACvB,QAAI;KACF,MAAM,SAAS,KAAK,MAAM,UAAU;AACpC,YAAO,KAAK,UAAU,QAAQ,WAAW,EAAE,CAAC;YACtC;AACN,YAAO;;;AAIX,OAAI,eAAe,KAAK,cAAc,oBAAoB,EAAE;AAE1D,sBAAkB,cAAc;AAC9B,SAAI,KAAK,kBAAkB,OACzB,OAAM,IAAI,MACR,gGACD;KACH,MAAM,OAAO,KAAK,SAAS,KAAK,KAAK,cAAc;AACnD,YAAO,SAAS,SAAY,GAAG,YAAY,GAAG,UAAU,KAAK;MAC7D;AACF,sBAAkB,sBAAsB;AACtC,SAAI,KAAK,kBAAkB,OACzB,OAAM,IAAI,MACR,wGACD;AACH,YAAO,GAAG,UAAU,KAAK,SAAS,aAAa,KAAK,cAAc,IAAI,KAAK;MAC3E;AACF,sBAAkB,cAAc;AAC9B,SAAI,KAAK,kBAAkB,OACzB,OAAM,IAAI,MACR,gGACD;AACH,YAAO,GAAG,UAAU,KAAK,SAAS,KAAK,KAAK,cAAc,IAAI,KAAK;MACnE;AACF,sBAAkB,oBAAoB;AACpC,SAAI,KAAK,kBAAkB,OACzB,OAAM,IAAI,MACR,sGACD;KACH,MAAM,MAAM,KAAK,SAAS,WAAW,KAAK,cAAc;AACxD,YAAO,QAAQ,SAAY,GAAG,YAAY,GAAG,UAAU,IAAI;MAC3D;AAEF,QAAI,cACF,mBAAkB,iBAAiB;AACjC,SAAI,KAAK,kBAAkB,OACzB,OAAM,IAAI,MACR,mGACD;AACH,YAAO,GAAG,UAAU,eAAe,KAAK,SAAS,KAAK,KAAK,cAAc,CAAC,CAAC;MAC3E;UAEC;IACL,MAAM,OAAO,KAAK,SAAS,KAAK,KAAK,cAAe;IACpD,MAAM,aAAa,KAAK,SAAS,WAAW,KAAK,cAAe;IAChE,MAAM,OAAO,KAAK,SAAS,KAAK,KAAK,cAAe;AACpD,QAAI,SAAS,OACX,IAAG,QAAQ,WAAW,QAAQ,WAAW,OAAO,GAAG,UAAU,KAAK,CAAC,CAAC;AAEtE,OAAG,QAAQ,WAAW,QAAQ,WAAW,OAAO,GAAG,UAAU,QAAQ,KAAK,CAAC,CAAC;AAC5E,QAAI,eAAe,OACjB,IAAG,QAAQ,WAAW,cAAc,WAAW,OAAO,GAAG,UAAU,WAAW,CAAC,CAAC;AAElF,QAAI,cACF,IAAG,QAAQ,WAAW,WAAW,WAAW,OAAO,GAAG,UAAU,eAAe,KAAK,CAAC,CAAC,CAAC;;AAQ3F,qBAAkB,4BAA4B,SAAS;AACrD,WAAO,OAAO,kBACZ,KAAK,wBAAwB,GAAG,UAAU,KAAK,CAAC,EAChD,OACD;KACD;AAMF,qBAAkB,sBAAsB,QAAQ,eAAe,GAAG,UAAU;AAC1E,WAAO,OAAO,kBACZ,KAAK,kBACH,GAAG,UAAU,OAAO,EACpB,OAAO,oBAAoB,cAAc,EACzC,GAAG,MAAM,KACN,SAAS,OAAO,oBAAoB,KAAK,CAC3C,CACF,EACD,OACD;KACD;AAEF,qBAAkB,oBAAoB,WAAW;AAC/C,WAAO,OAAO,oBAAoB,KAAK,gBAAgB,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KACxF;AAEF,qBAAkB,oBAAoB,WAAW;AAC/C,WAAO,OAAO,kBAAkB,KAAK,gBAAgB,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KACtF;AAEF,qBAAkB,qBAAqB,WAAW;AAChD,WAAO,OAAO,kBAAkB,KAAK,iBAAiB,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KACvF;AAEF,qBAAkB,sBAAsB,WAAW;AACjD,WAAO,OAAO,kBAAkB,KAAK,kBAAkB,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KACxF;AAEF,qBAAkB,eAAe,WAAW;AAC1C,WAAO,OAAO,kBAAkB,KAAK,WAAW,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KACjF;AAEF,qBAAkB,aAAa,WAAW;AACxC,WAAO,OAAO,kBAAkB,KAAK,SAAS,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KAC/E;AAEF,qBAAkB,oBAAoB,WAAW;AAC/C,WAAO,OAAO,oBAAoB,KAAK,gBAAgB,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KACxF;AAEF,qBAAkB,qBAAqB,WAAW;AAChD,WAAO,OAAO,oBAAoB,KAAK,iBAAiB,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KACzF;AAEF,qBAAkB,sBAAsB,WAAW;AACjD,WAAO,OAAO,oBAAoB,KAAK,kBAAkB,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KAC1F;AAEF,qBAAkB,sBAAsB,QAAQ,QAAQ;AACtD,WAAO,OAAO,kBACZ,KAAK,kBAAkB,GAAG,UAAU,OAAO,EAAE,GAAG,UAAU,IAAI,CAAC,EAC/D,OACD;KACD;AAEF,qBAAkB,wBAAwB,QAAQ,QAAQ;AACxD,WAAO,OAAO,kBACZ,KAAK,oBAAoB,GAAG,UAAU,OAAO,EAAE,GAAG,UAAU,IAAI,CAAC,EACjE,OACD;KACD;AAEF,qBAAkB,kBAAkB,WAAW;AAC7C,WAAO,OAAO,kBAAkB,KAAK,cAAc,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KACpF;AAEF,qBAAkB,oBAAoB,WAAW;AAC/C,WAAO,OAAO,kBAAkB,KAAK,gBAAgB,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KACtF;AAMF,qBACE,2BACC,QAAQ,qBAAqB,QAAQ,GAAG,iBAAiB;AACxD,WAAO,OAAO,sBACZ,KAAK,uBACH,GAAG,UAAU,OAAO,EACpB,GAAG,KAAK,oBAAoB,EAC5B,GAAG,UAAU,OAAO,EACpB,GAAG,aAAa,KAAK,eAAe,GAAG,UAAU,WAAW,CAAC,CAC9D,EACD,OACD;KAEJ;AAMD,qBAAkB,2BAA2B,QAAQ,UAAU;AAC7D,WAAO,OAAO,kBACZ,KAAK,uBACH,GAAG,UAAU,OAAO,EACpB,OAAO,sBAAsB,MAAM,CACpC,EACD,OACD;KACD;AAEF,qBAAkB,2BAA2B,QAAQ,UAAU;AAC7D,WAAO,OAAO,kBACZ,KAAK,uBACH,GAAG,UAAU,OAAO,EACpB,OAAO,sBAAsB,MAAM,CACpC,EACD,OACD;KACD;AAEF,qBAAkB,mCAAmC,WAAW;AAC9D,WAAO,OAAO,kBACZ,KAAK,+BAA+B,GAAG,UAAU,OAAO,CAAC,EACzD,OACD;KACD;AAEF,qBAAkB,iCAAiC,WAAW;AAC5D,WAAO,OAAO,kBACZ,KAAK,6BAA6B,GAAG,UAAU,OAAO,CAAC,EACvD,OACD;KACD;AAMF,qBAAkB,4BAA4B,QAAQ,WAAW;AAC/D,WAAO,OAAO,kBACZ,KAAK,wBAAwB,GAAG,UAAU,OAAO,EAAE,GAAG,UAAU,OAAO,CAAkB,EACzF,OACD;KACD;AAMF,qBAAkB,sBAAsB,WAAW;AACjD,WAAO,OAAO,kBAAkB,KAAK,kBAAkB,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KACxF;AAMF,qBAAkB,gBAAgB,QAAQ,WAAW;AACnD,WAAO,OAAO,kBACZ,KAAK,YAAY,GAAG,UAAU,OAAO,EAAE,GAAG,UAAU,OAAO,CAAC,EAC5D,OACD;KACD;AAEF,qBAAkB,mBAAmB,QAAQ,oBAAoB;AAC/D,WAAO,OAAO,kBACZ,KAAK,eAAe,GAAG,UAAU,OAAO,EAAE,GAAG,UAAU,gBAAgB,CAAC,EACxE,OACD;KACD;AAEF,qBAAkB,2BAA2B,QAAQ,oBAAoB;AACvE,WAAO,OAAO,kBACZ,KAAK,uBAAuB,GAAG,UAAU,OAAO,EAAE,GAAG,UAAU,gBAAgB,CAAC,EAChF,OACD;KACD;AAEF,qBAAkB,iBAAiB,WAAW;AAC5C,WAAO,OAAO,kBAAkB,KAAK,aAAa,GAAG,UAAU,OAAO,CAAC,EAAE,OAAU;KACnF;AAMF,qBAAkB,kBAAkB,YAAY;AAC9C,WAAO,OAAO,kBAAkB,KAAK,cAAc,GAAG,UAAU,QAAQ,CAAC,EAAE,OAAU;KACrF;AAMF,qBAAkB,+BAA+B;AAC/C,WAAO,OAAO,sBAAsB,KAAK,uBAAuB,EAAE,OAAU;KAC5E;AAEF,qBAAkB,yCAAyC;AACzD,WAAO,OAAO,sBAAsB,KAAK,iCAAiC,EAAE,OAAU;KACtF;AAEF,qBAAkB,gCAAgC;AAChD,WAAO,OAAO,sBAAsB,KAAK,wBAAwB,EAAE,OAAU;KAC7E;AAEF,qBAAkB,qBAAqB,cAAc;AACnD,WAAO,OAAO,sBACZ,KAAK,iBAAiB,OAAO,oBAAoB,UAAU,CAAmB,EAC9E,OACD;KACD;AAEF,qBAAkB,+BAA+B,SAAS,eAAe;AACvE,WAAO,OAAO,sBACZ,KAAK,2BAA2B,GAAG,UAAU,QAAQ,EAAE,GAAG,UAAU,WAAW,CAAC,EAChF,OACD;KACD;AAEF,qBAAkB,+BAA+B,SAAS,eAAe;AACvE,WAAO,OAAO,sBACZ,KAAK,2BAA2B,GAAG,UAAU,QAAQ,EAAE,GAAG,UAAU,WAAW,CAAC,EAChF,OACD;KACD;AAMF,qBAAkB,iBAAiB,QAAQ;AACzC,WAAO,OAAO,kBACZ,KAAK,aACH,OAAO,oBAAoB,IAAI,CAChC,EACD,OACD;KACD;AAEF,qBAAkB,iBAAiB,QAAQ;AACzC,WAAO,OAAO,kBACZ,KAAK,aACH,OAAO,oBAAoB,IAAI,CAChC,EACD,OACD;KACD;AAEF,qBAAkB,mBAAmB,QAAQ;AAC3C,WAAO,OAAO,kBACZ,KAAK,eACH,OAAO,oBAAoB,IAAI,CAChC,EACD,OACD;KACD;AAMF,qBAAkB,oBAAoB,UAAU;AAC9C,WAAO,OAAO,kBACZ,KAAK,gBAAgB,OAAO,oBAAoB,MAAM,CAAgC,EACtF,OACD;KACD;AAEF,qBAAkB,6BAA6B,QAAQ,YAAY;AACjE,WAAO,OAAO,oBACZ,KAAK,yBACH,GAAG,UAAU,OAAO,EACpB,OAAO,oBAAoB,QAAQ,CACpC,EACD,OACD;KACD;AAEF,qBAAkB,qBAAqB,WAAW;AAChD,SAAK,iBAAiB,GAAG,UAAU,OAAO,CAAoB;KAC9D;AAEF,qBAAkB,eAAe,SAAS;AACxC,WAAO,OAAO,oBACZ,KAAK,WAAW,OAAO,oBAAoB,KAAK,CAAa,EAC7D,OACD;KACD;AAEF,qBAAkB,iBAAiB,QAAQ;AACzC,WAAO,OAAO,oBACZ,KAAK,aAAa,OAAO,oBAAoB,IAAI,CAAW,EAC5D,OACD;KACD;AAEF,qBAAkB,aAAa,MAAM,aAAa;AAChD,WAAO,OAAO,kBACZ,KAAK,SACH,OAAO,oBAAoB,KAAK,EAChC,OAAO,oBAAoB,SAAS,CACrC,EACD,OACD;KACD;AAEF,qBAAkB,oBAAoB,WAAW,aAAa;AAC5D,WAAO,OAAO,kBACZ,KAAK,gBACH,OAAO,oBAAoB,UAAU,EACrC,OAAO,oBAAoB,SAAS,CACrC,EACD,OACD;KACD;AAMF,qBAAkB,kCAAkC;AAClD,WAAO,OAAO,kBAAkB,KAAK,0BAA0B,EAAE,OAAU;KAC3E;AAMF,qBAAkB,YAAY,YAAY;AACxC,SAAK,QAAQ,GAAG,UAAU,QAAQ,CAAC;KACnC;AAEF,qBAAkB,YAAY,YAAY;AACxC,SAAK,QAAQ,GAAG,UAAU,QAAQ,CAAC;KACnC;AAEF,qBAAkB,aAAa,YAAY;AACzC,SAAK,SAAS,GAAG,UAAU,QAAQ,CAAC;KACpC;IACF"}
@@ -1,43 +1,2 @@
1
1
  const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
- let node_crypto = require("node:crypto");
3
- let _milaboratories_pframes_rs_wasm = require("@milaboratories/pframes-rs-wasm");
4
-
5
- //#region src/js_render/spec_driver.ts
6
- /**
7
- * Manages spec-only PFrame instances (WASM) with handle-based lifecycle.
8
- *
9
- * All operations are synchronous — WASM computes results immediately.
10
- */
11
- var SpecDriver = class {
12
- frames = /* @__PURE__ */ new Map();
13
- createSpecFrame(specs) {
14
- const frame = (0, _milaboratories_pframes_rs_wasm.createPFrame)(specs);
15
- const handle = (0, node_crypto.randomUUID)();
16
- this.frames.set(handle, frame);
17
- return handle;
18
- }
19
- specFrameDiscoverColumns(handle, request) {
20
- return this.getFrame(handle).discoverColumns(request);
21
- }
22
- disposeSpecFrame(handle) {
23
- const frame = this.frames.get(handle);
24
- if (frame) {
25
- frame[Symbol.dispose]();
26
- this.frames.delete(handle);
27
- }
28
- }
29
- /** Dispose all managed spec frames. */
30
- disposeAll() {
31
- for (const frame of this.frames.values()) frame[Symbol.dispose]();
32
- this.frames.clear();
33
- }
34
- getFrame(handle) {
35
- const frame = this.frames.get(handle);
36
- if (frame === void 0) throw new Error(`No such spec frame: ${handle}`);
37
- return frame;
38
- }
39
- };
40
-
41
- //#endregion
42
- exports.SpecDriver = SpecDriver;
43
- //# sourceMappingURL=spec_driver.cjs.map
2
+ let _milaboratories_pf_spec_driver = require("@milaboratories/pf-spec-driver");
@@ -1,42 +1,3 @@
1
- import { randomUUID } from "node:crypto";
2
- import { createPFrame } from "@milaboratories/pframes-rs-wasm";
1
+ import { SpecDriver } from "@milaboratories/pf-spec-driver";
3
2
 
4
- //#region src/js_render/spec_driver.ts
5
- /**
6
- * Manages spec-only PFrame instances (WASM) with handle-based lifecycle.
7
- *
8
- * All operations are synchronous — WASM computes results immediately.
9
- */
10
- var SpecDriver = class {
11
- frames = /* @__PURE__ */ new Map();
12
- createSpecFrame(specs) {
13
- const frame = createPFrame(specs);
14
- const handle = randomUUID();
15
- this.frames.set(handle, frame);
16
- return handle;
17
- }
18
- specFrameDiscoverColumns(handle, request) {
19
- return this.getFrame(handle).discoverColumns(request);
20
- }
21
- disposeSpecFrame(handle) {
22
- const frame = this.frames.get(handle);
23
- if (frame) {
24
- frame[Symbol.dispose]();
25
- this.frames.delete(handle);
26
- }
27
- }
28
- /** Dispose all managed spec frames. */
29
- disposeAll() {
30
- for (const frame of this.frames.values()) frame[Symbol.dispose]();
31
- this.frames.clear();
32
- }
33
- getFrame(handle) {
34
- const frame = this.frames.get(handle);
35
- if (frame === void 0) throw new Error(`No such spec frame: ${handle}`);
36
- return frame;
37
- }
38
- };
39
-
40
- //#endregion
41
- export { SpecDriver };
42
- //# sourceMappingURL=spec_driver.js.map
3
+ export { SpecDriver };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/pl-middle-layer",
3
- "version": "1.52.1",
3
+ "version": "1.53.1",
4
4
  "description": "Pl Middle Layer",
5
5
  "keywords": [],
6
6
  "license": "UNLICENSED",
@@ -19,8 +19,8 @@
19
19
  }
20
20
  },
21
21
  "dependencies": {
22
- "@milaboratories/pframes-rs-node": "1.1.14",
23
- "@milaboratories/pframes-rs-wasm": "1.1.14",
22
+ "@milaboratories/pframes-rs-node": "1.1.15",
23
+ "@milaboratories/pframes-rs-wasm": "1.1.15",
24
24
  "canonicalize": "~2.1.0",
25
25
  "denque": "^2.1.0",
26
26
  "es-toolkit": "^1.39.10",
@@ -30,22 +30,23 @@
30
30
  "utility-types": "^3.11.0",
31
31
  "yaml": "^2.8.0",
32
32
  "zod": "~3.23.8",
33
- "@milaboratories/pf-driver": "1.1.1",
34
33
  "@milaboratories/computable": "2.9.0",
35
- "@milaboratories/pl-client": "2.18.1",
36
- "@milaboratories/pl-deployments": "2.16.1",
37
- "@milaboratories/pl-errors": "1.2.1",
34
+ "@milaboratories/pl-deployments": "2.16.2",
35
+ "@milaboratories/pf-spec-driver": "1.1.0",
36
+ "@milaboratories/pl-client": "2.18.2",
37
+ "@milaboratories/pf-driver": "1.2.0",
38
+ "@milaboratories/pl-errors": "1.2.2",
39
+ "@milaboratories/pl-drivers": "1.12.3",
40
+ "@milaboratories/pl-model-common": "1.29.0",
38
41
  "@milaboratories/pl-http": "1.2.4",
39
- "@milaboratories/pl-drivers": "1.12.2",
40
- "@milaboratories/pl-model-common": "1.28.0",
41
- "@milaboratories/pl-model-backend": "1.2.1",
42
- "@milaboratories/pl-model-middle-layer": "1.15.0",
43
- "@milaboratories/pl-tree": "1.9.2",
44
- "@milaboratories/ts-helpers": "1.7.3",
42
+ "@milaboratories/pl-model-backend": "1.2.2",
43
+ "@milaboratories/pl-model-middle-layer": "1.16.0",
45
44
  "@milaboratories/resolve-helper": "1.1.3",
46
- "@platforma-sdk/block-tools": "2.7.1",
45
+ "@platforma-sdk/model": "1.61.1",
46
+ "@milaboratories/pl-tree": "1.9.3",
47
+ "@platforma-sdk/block-tools": "2.7.2",
47
48
  "@platforma-sdk/workflow-tengo": "5.11.0",
48
- "@platforma-sdk/model": "1.60.2"
49
+ "@milaboratories/ts-helpers": "1.7.3"
49
50
  },
50
51
  "devDependencies": {
51
52
  "@types/node": "~24.5.2",
@@ -54,8 +55,8 @@
54
55
  "semver": "^7.7.2",
55
56
  "typescript": "~5.9.3",
56
57
  "vitest": "^4.0.18",
57
- "@milaboratories/ts-configs": "1.2.2",
58
58
  "@milaboratories/build-configs": "1.5.2",
59
+ "@milaboratories/ts-configs": "1.2.2",
59
60
  "@milaboratories/ts-builder": "1.3.0"
60
61
  },
61
62
  "engines": {
@@ -45,9 +45,14 @@ import type { JsExecutionContext } from "./context";
45
45
  import type { VmFunctionImplementation } from "quickjs-emscripten";
46
46
  import { Scope, type QuickJSHandle } from "quickjs-emscripten";
47
47
  import type {
48
+ AxesId,
49
+ AxesSpec,
48
50
  DiscoverColumnsRequest,
49
51
  DiscoverColumnsResponse,
50
52
  PColumnSpec,
53
+ PTableColumnId,
54
+ PTableColumnSpec,
55
+ SingleAxisSelector,
51
56
  SpecFrameHandle,
52
57
  } from "@milaboratories/pl-model-common";
53
58
  import { SpecDriver } from "./spec_driver";
@@ -458,10 +463,26 @@ export class ComputableContextHelper implements JsRenderInternal.GlobalCfgRender
458
463
  return this.specDriver.specFrameDiscoverColumns(handle as SpecFrameHandle, request);
459
464
  }
460
465
 
461
- public specFrameDispose(handle: SpecFrameHandle): void {
466
+ public disposeSpecFrame(handle: SpecFrameHandle): void {
462
467
  this.specDriver.disposeSpecFrame(handle as SpecFrameHandle);
463
468
  }
464
469
 
470
+ public expandAxes(spec: AxesSpec): AxesId {
471
+ return this.specDriver.expandAxes(spec);
472
+ }
473
+
474
+ public collapseAxes(ids: AxesId): AxesSpec {
475
+ return this.specDriver.collapseAxes(ids);
476
+ }
477
+
478
+ public findAxis(spec: AxesSpec, selector: SingleAxisSelector): number {
479
+ return this.specDriver.findAxis(spec, selector);
480
+ }
481
+
482
+ public findTableColumn(tableSpec: PTableColumnSpec[], selector: PTableColumnId): number {
483
+ return this.specDriver.findTableColumn(tableSpec, selector);
484
+ }
485
+
465
486
  /**
466
487
  * Transforms input data for PFrame/PTable creation
467
488
  * - Converts string handles to accessors
@@ -919,8 +940,42 @@ export class ComputableContextHelper implements JsRenderInternal.GlobalCfgRender
919
940
  );
920
941
  });
921
942
 
922
- exportCtxFunction("specFrameDispose", (handle) => {
923
- this.specFrameDispose(vm.getString(handle) as SpecFrameHandle);
943
+ exportCtxFunction("disposeSpecFrame", (handle) => {
944
+ this.disposeSpecFrame(vm.getString(handle) as SpecFrameHandle);
945
+ });
946
+
947
+ exportCtxFunction("expandAxes", (spec) => {
948
+ return parent.exportObjectViaJson(
949
+ this.expandAxes(parent.importObjectViaJson(spec) as AxesSpec),
950
+ undefined,
951
+ );
952
+ });
953
+
954
+ exportCtxFunction("collapseAxes", (ids) => {
955
+ return parent.exportObjectViaJson(
956
+ this.collapseAxes(parent.importObjectViaJson(ids) as AxesId),
957
+ undefined,
958
+ );
959
+ });
960
+
961
+ exportCtxFunction("findAxis", (spec, selector) => {
962
+ return parent.exportSingleValue(
963
+ this.findAxis(
964
+ parent.importObjectViaJson(spec) as AxesSpec,
965
+ parent.importObjectViaJson(selector) as SingleAxisSelector,
966
+ ),
967
+ undefined,
968
+ );
969
+ });
970
+
971
+ exportCtxFunction("findTableColumn", (tableSpec, selector) => {
972
+ return parent.exportSingleValue(
973
+ this.findTableColumn(
974
+ parent.importObjectViaJson(tableSpec) as PTableColumnSpec[],
975
+ parent.importObjectViaJson(selector) as PTableColumnId,
976
+ ),
977
+ undefined,
978
+ );
924
979
  });
925
980
 
926
981
  //
@@ -1,55 +1 @@
1
- import { createPFrame } from "@milaboratories/pframes-rs-wasm";
2
- import type { PFrameInternal } from "@milaboratories/pl-model-middle-layer";
3
- import type {
4
- PColumnSpec,
5
- PSpecDriver,
6
- SpecFrameHandle,
7
- DiscoverColumnsRequest,
8
- DiscoverColumnsResponse,
9
- } from "@milaboratories/pl-model-common";
10
- import { randomUUID } from "node:crypto";
11
-
12
- /**
13
- * Manages spec-only PFrame instances (WASM) with handle-based lifecycle.
14
- *
15
- * All operations are synchronous — WASM computes results immediately.
16
- */
17
- export class SpecDriver implements PSpecDriver {
18
- private readonly frames = new Map<string, PFrameInternal.PFrameWasm>();
19
-
20
- createSpecFrame(specs: Record<string, PColumnSpec>): SpecFrameHandle {
21
- const frame = createPFrame(specs);
22
- const handle = randomUUID() as SpecFrameHandle;
23
- this.frames.set(handle, frame);
24
- return handle;
25
- }
26
-
27
- specFrameDiscoverColumns(
28
- handle: SpecFrameHandle,
29
- request: DiscoverColumnsRequest,
30
- ): DiscoverColumnsResponse {
31
- return this.getFrame(handle).discoverColumns(request);
32
- }
33
-
34
- disposeSpecFrame(handle: SpecFrameHandle): void {
35
- const frame = this.frames.get(handle);
36
- if (frame) {
37
- frame[Symbol.dispose]();
38
- this.frames.delete(handle);
39
- }
40
- }
41
-
42
- /** Dispose all managed spec frames. */
43
- disposeAll(): void {
44
- for (const frame of this.frames.values()) {
45
- frame[Symbol.dispose]();
46
- }
47
- this.frames.clear();
48
- }
49
-
50
- private getFrame(handle: string): PFrameInternal.PFrameWasm {
51
- const frame = this.frames.get(handle);
52
- if (frame === undefined) throw new Error(`No such spec frame: ${handle}`);
53
- return frame;
54
- }
55
- }
1
+ export { SpecDriver } from "@milaboratories/pf-spec-driver";
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec_driver.cjs","names":[],"sources":["../../src/js_render/spec_driver.ts"],"sourcesContent":["import { createPFrame } from \"@milaboratories/pframes-rs-wasm\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport type {\n PColumnSpec,\n PSpecDriver,\n SpecFrameHandle,\n DiscoverColumnsRequest,\n DiscoverColumnsResponse,\n} from \"@milaboratories/pl-model-common\";\nimport { randomUUID } from \"node:crypto\";\n\n/**\n * Manages spec-only PFrame instances (WASM) with handle-based lifecycle.\n *\n * All operations are synchronous — WASM computes results immediately.\n */\nexport class SpecDriver implements PSpecDriver {\n private readonly frames = new Map<string, PFrameInternal.PFrameWasm>();\n\n createSpecFrame(specs: Record<string, PColumnSpec>): SpecFrameHandle {\n const frame = createPFrame(specs);\n const handle = randomUUID() as SpecFrameHandle;\n this.frames.set(handle, frame);\n return handle;\n }\n\n specFrameDiscoverColumns(\n handle: SpecFrameHandle,\n request: DiscoverColumnsRequest,\n ): DiscoverColumnsResponse {\n return this.getFrame(handle).discoverColumns(request);\n }\n\n disposeSpecFrame(handle: SpecFrameHandle): void {\n const frame = this.frames.get(handle);\n if (frame) {\n frame[Symbol.dispose]();\n this.frames.delete(handle);\n }\n }\n\n /** Dispose all managed spec frames. */\n disposeAll(): void {\n for (const frame of this.frames.values()) {\n frame[Symbol.dispose]();\n }\n this.frames.clear();\n }\n\n private getFrame(handle: string): PFrameInternal.PFrameWasm {\n const frame = this.frames.get(handle);\n if (frame === undefined) throw new Error(`No such spec frame: ${handle}`);\n return frame;\n }\n}\n"],"mappings":";;;;;;;;;;AAgBA,IAAa,aAAb,MAA+C;CAC7C,AAAiB,yBAAS,IAAI,KAAwC;CAEtE,gBAAgB,OAAqD;EACnE,MAAM,0DAAqB,MAAM;EACjC,MAAM,sCAAqB;AAC3B,OAAK,OAAO,IAAI,QAAQ,MAAM;AAC9B,SAAO;;CAGT,yBACE,QACA,SACyB;AACzB,SAAO,KAAK,SAAS,OAAO,CAAC,gBAAgB,QAAQ;;CAGvD,iBAAiB,QAA+B;EAC9C,MAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,MAAI,OAAO;AACT,SAAM,OAAO,UAAU;AACvB,QAAK,OAAO,OAAO,OAAO;;;;CAK9B,aAAmB;AACjB,OAAK,MAAM,SAAS,KAAK,OAAO,QAAQ,CACtC,OAAM,OAAO,UAAU;AAEzB,OAAK,OAAO,OAAO;;CAGrB,AAAQ,SAAS,QAA2C;EAC1D,MAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,MAAI,UAAU,OAAW,OAAM,IAAI,MAAM,uBAAuB,SAAS;AACzE,SAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec_driver.js","names":[],"sources":["../../src/js_render/spec_driver.ts"],"sourcesContent":["import { createPFrame } from \"@milaboratories/pframes-rs-wasm\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport type {\n PColumnSpec,\n PSpecDriver,\n SpecFrameHandle,\n DiscoverColumnsRequest,\n DiscoverColumnsResponse,\n} from \"@milaboratories/pl-model-common\";\nimport { randomUUID } from \"node:crypto\";\n\n/**\n * Manages spec-only PFrame instances (WASM) with handle-based lifecycle.\n *\n * All operations are synchronous — WASM computes results immediately.\n */\nexport class SpecDriver implements PSpecDriver {\n private readonly frames = new Map<string, PFrameInternal.PFrameWasm>();\n\n createSpecFrame(specs: Record<string, PColumnSpec>): SpecFrameHandle {\n const frame = createPFrame(specs);\n const handle = randomUUID() as SpecFrameHandle;\n this.frames.set(handle, frame);\n return handle;\n }\n\n specFrameDiscoverColumns(\n handle: SpecFrameHandle,\n request: DiscoverColumnsRequest,\n ): DiscoverColumnsResponse {\n return this.getFrame(handle).discoverColumns(request);\n }\n\n disposeSpecFrame(handle: SpecFrameHandle): void {\n const frame = this.frames.get(handle);\n if (frame) {\n frame[Symbol.dispose]();\n this.frames.delete(handle);\n }\n }\n\n /** Dispose all managed spec frames. */\n disposeAll(): void {\n for (const frame of this.frames.values()) {\n frame[Symbol.dispose]();\n }\n this.frames.clear();\n }\n\n private getFrame(handle: string): PFrameInternal.PFrameWasm {\n const frame = this.frames.get(handle);\n if (frame === undefined) throw new Error(`No such spec frame: ${handle}`);\n return frame;\n }\n}\n"],"mappings":";;;;;;;;;AAgBA,IAAa,aAAb,MAA+C;CAC7C,AAAiB,yBAAS,IAAI,KAAwC;CAEtE,gBAAgB,OAAqD;EACnE,MAAM,QAAQ,aAAa,MAAM;EACjC,MAAM,SAAS,YAAY;AAC3B,OAAK,OAAO,IAAI,QAAQ,MAAM;AAC9B,SAAO;;CAGT,yBACE,QACA,SACyB;AACzB,SAAO,KAAK,SAAS,OAAO,CAAC,gBAAgB,QAAQ;;CAGvD,iBAAiB,QAA+B;EAC9C,MAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,MAAI,OAAO;AACT,SAAM,OAAO,UAAU;AACvB,QAAK,OAAO,OAAO,OAAO;;;;CAK9B,aAAmB;AACjB,OAAK,MAAM,SAAS,KAAK,OAAO,QAAQ,CACtC,OAAM,OAAO,UAAU;AAEzB,OAAK,OAAO,OAAO;;CAGrB,AAAQ,SAAS,QAA2C;EAC1D,MAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,MAAI,UAAU,OAAW,OAAM,IAAI,MAAM,uBAAuB,SAAS;AACzE,SAAO"}