@platforma-sdk/test 1.63.6 → 1.63.8

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.
@@ -6,16 +6,12 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
8
  var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") {
10
- for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
- key = keys[i];
12
- if (!__hasOwnProp.call(to, key) && key !== except) {
13
- __defProp(to, key, {
14
- get: ((k) => from[k]).bind(null, key),
15
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
- });
17
- }
18
- }
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
19
15
  }
20
16
  return to;
21
17
  };
@@ -23,7 +19,5 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
23
19
  value: mod,
24
20
  enumerable: true
25
21
  }) : target, mod));
26
-
27
22
  //#endregion
28
-
29
- exports.__toESM = __toESM;
23
+ exports.__toESM = __toESM;
package/dist/index.cjs CHANGED
@@ -1,18 +1,17 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
3
- const require_test_pl = require('./test-pl.cjs');
4
- const require_test_template = require('./test-template.cjs');
5
- const require_util = require('./util.cjs');
6
- const require_test_block = require('./test-block.cjs');
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
3
+ const require_test_pl = require("./test-pl.cjs");
4
+ const require_test_template = require("./test-template.cjs");
5
+ const require_util = require("./util.cjs");
6
+ const require_test_block = require("./test-block.cjs");
7
7
  let _milaboratories_pl_middle_layer = require("@milaboratories/pl-middle-layer");
8
8
  _milaboratories_pl_middle_layer = require_runtime.__toESM(_milaboratories_pl_middle_layer);
9
-
10
9
  exports.DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT = require_test_block.DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT;
11
- Object.defineProperty(exports, 'ML', {
12
- enumerable: true,
13
- get: function () {
14
- return _milaboratories_pl_middle_layer;
15
- }
10
+ Object.defineProperty(exports, "ML", {
11
+ enumerable: true,
12
+ get: function() {
13
+ return _milaboratories_pl_middle_layer;
14
+ }
16
15
  });
17
16
  exports.TestRenderResults = require_test_template.TestRenderResults;
18
17
  exports.TestWorkflowResults = require_test_template.TestWorkflowResults;
@@ -20,4 +19,4 @@ exports.TplTestHelpers = require_test_template.TplTestHelpers;
20
19
  exports.awaitStableState = require_util.awaitStableState;
21
20
  exports.blockTest = require_test_block.blockTest;
22
21
  exports.plTest = require_test_pl.plTest;
23
- exports.tplTest = require_test_template.tplTest;
22
+ exports.tplTest = require_test_template.tplTest;
package/dist/index.js CHANGED
@@ -3,5 +3,4 @@ import { TestRenderResults, TestWorkflowResults, TplTestHelpers, tplTest } from
3
3
  import { awaitStableState } from "./util.js";
4
4
  import { DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT, blockTest } from "./test-block.js";
5
5
  import * as ML from "@milaboratories/pl-middle-layer";
6
-
7
- export { DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT, ML, TestRenderResults, TestWorkflowResults, TplTestHelpers, awaitStableState, blockTest, plTest, tplTest };
6
+ export { DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT, ML, TestRenderResults, TestWorkflowResults, TplTestHelpers, awaitStableState, blockTest, plTest, tplTest };
@@ -1,13 +1,12 @@
1
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
2
- const require_test_pl = require('./test-pl.cjs');
3
- const require_util = require('./util.cjs');
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
+ const require_test_pl = require("./test-pl.cjs");
3
+ const require_util = require("./util.cjs");
4
4
  let _milaboratories_pl_middle_layer = require("@milaboratories/pl-middle-layer");
5
5
  let node_fs_promises = require("node:fs/promises");
6
6
  node_fs_promises = require_runtime.__toESM(node_fs_promises);
7
7
  let node_path = require("node:path");
8
8
  node_path = require_runtime.__toESM(node_path);
9
9
  let _platforma_sdk_model = require("@platforma-sdk/model");
10
-
11
10
  //#region src/test-block.ts
12
11
  function normalizeABDOpts(timeoutOrOps) {
13
12
  let ops = {};
@@ -100,8 +99,8 @@ const blockTest = require_test_pl.plTest.extend({
100
99
  });
101
100
  }
102
101
  });
103
-
104
102
  //#endregion
105
103
  exports.DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT = DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT;
106
104
  exports.blockTest = blockTest;
105
+
107
106
  //# sourceMappingURL=test-block.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-block.cjs","names":["plTest","path","fsp","MiddleLayer","awaitStableState"],"sources":["../src/test-block.ts"],"sourcesContent":["import path from \"node:path\";\nimport * as fsp from \"node:fs/promises\";\nimport type {\n InferBlockState,\n LocalImportFileHandle,\n Platforma,\n Project,\n} from \"@milaboratories/pl-middle-layer\";\nimport { MiddleLayer } from \"@milaboratories/pl-middle-layer\";\nimport { registerServiceCapabilities } from \"@platforma-sdk/model\";\nimport { plTest } from \"./test-pl\";\nimport { awaitStableState } from \"./util\";\n\nexport type AwaitBlockDoneOps = {\n timeout?: number | AbortSignal;\n ignoreBlockError?: boolean;\n};\n\nexport type AwaitBlockDoneNormalized = {\n timeout: AbortSignal;\n ignoreBlockError: boolean;\n};\n\nfunction normalizeABDOpts(timeoutOrOps?: number | AwaitBlockDoneOps): AwaitBlockDoneNormalized {\n let ops: AwaitBlockDoneOps = {};\n if (timeoutOrOps !== undefined) {\n if (typeof timeoutOrOps === \"object\" && !(timeoutOrOps instanceof AbortSignal))\n ops = { ...ops, ...timeoutOrOps };\n else ops.timeout = timeoutOrOps;\n }\n const abortSignal =\n typeof ops.timeout === \"undefined\"\n ? AbortSignal.timeout(DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT)\n : typeof ops.timeout === \"number\"\n ? AbortSignal.timeout(ops.timeout)\n : ops.timeout;\n return {\n timeout: abortSignal,\n ignoreBlockError: Boolean(ops.ignoreBlockError),\n };\n}\n\nexport const DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT = 5000;\n\nasync function awaitBlockDone(\n prj: Project,\n blockId: string,\n timeoutOrOps?: number | AwaitBlockDoneOps,\n) {\n const ops = normalizeABDOpts(timeoutOrOps);\n const overview = prj.overview;\n const state = prj.getBlockState(blockId);\n while (true) {\n const overviewSnapshot = (await overview.getValue())!;\n const blockOverview = overviewSnapshot.blocks.find((b) => b.id == blockId);\n if (blockOverview === undefined) throw new Error(`Blocks not found: ${blockId}`);\n if (blockOverview.outputErrors) {\n if (ops.ignoreBlockError) return;\n else {\n let errorMessage = blockOverview.outputsError;\n if (errorMessage === undefined) errorMessage = blockOverview.exportsError;\n throw new Error(\"Block error: \" + (errorMessage ?? \"no message\"));\n }\n }\n if (blockOverview.calculationStatus === \"Done\") return;\n if (blockOverview.calculationStatus !== \"Running\")\n throw new Error(\n `Unexpected block status, block not calculating anything at the moment: ${blockOverview.calculationStatus}`,\n );\n try {\n await overview.awaitChange(ops.timeout);\n } catch (e: any) {\n console.dir(blockOverview, { depth: 5 });\n console.dir(await state.getValue(), { depth: 5 });\n throw new Error(\"Aborted while awaiting block done.\", { cause: e });\n }\n }\n}\n\nexport interface RawHelpers {\n awaitBlockDone(blockId: string, timeoutOrOps?: number | AwaitBlockDoneOps): Promise<void>;\n awaitBlockDoneAndGetStableBlockState<Pl extends Platforma>(\n blockId: string,\n timeoutOrOps?: number | AwaitBlockDoneOps,\n ): Promise<InferBlockState<Pl>>;\n getLocalFileHandle(localPath: string): Promise<LocalImportFileHandle>;\n}\n\nexport const blockTest = plTest.extend<{\n ml: MiddleLayer;\n rawPrj: Project;\n helpers: RawHelpers;\n}>({\n ml: async ({ pl, tmpFolder }, use) => {\n const frontendFolder = path.join(tmpFolder, \"frontend\");\n const downloadFolder = path.join(tmpFolder, \"download\");\n await fsp.mkdir(frontendFolder, { recursive: true });\n await fsp.mkdir(downloadFolder, { recursive: true });\n\n const ml = await MiddleLayer.init(pl, tmpFolder, {\n defaultTreeOptions: { pollingInterval: 250, stopPollingDelay: 500 },\n devBlockUpdateRecheckInterval: 300,\n localSecret: MiddleLayer.generateLocalSecret(),\n localProjections: [], // TODO must be different with local pl\n openFileDialogCallback: () => {\n throw new Error(\"Not implemented.\");\n },\n });\n ml.addRuntimeCapability(\"requiresUIAPIVersion\", 1);\n ml.addRuntimeCapability(\"requiresUIAPIVersion\", 2);\n ml.addRuntimeCapability(\"requiresUIAPIVersion\", 3);\n registerServiceCapabilities((flag, value) => ml.addRuntimeCapability(flag, value));\n\n try {\n await use(ml);\n } finally {\n await ml.close();\n }\n },\n rawPrj: async ({ ml }, use) => {\n const pRid1 = await ml.createProject({ label: \"Test Project\" }, \"test_project\");\n await ml.openProject(pRid1);\n const prj = ml.getOpenedProject(pRid1);\n try {\n await use(prj);\n } finally {\n ml.closeProject(pRid1);\n }\n },\n helpers: async ({ ml, rawPrj }, use) => {\n await use({\n async awaitBlockDone(blockId, timeout) {\n await awaitBlockDone(rawPrj, blockId, timeout);\n },\n awaitBlockDoneAndGetStableBlockState: async <Pl extends Platforma>(\n blockId: string,\n timeoutOrOps?: number | AwaitBlockDoneOps,\n ) => {\n const ops = normalizeABDOpts(timeoutOrOps);\n await awaitBlockDone(rawPrj, blockId, ops);\n return (await awaitStableState(\n rawPrj.getBlockState(blockId),\n ops.timeout,\n )) as InferBlockState<Pl>;\n },\n async getLocalFileHandle(localPath) {\n return await ml.internalDriverKit.lsDriver.getLocalFileHandle(path.resolve(localPath));\n },\n });\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"test-block.cjs","names":["plTest","path","fsp","MiddleLayer","awaitStableState"],"sources":["../src/test-block.ts"],"sourcesContent":["import path from \"node:path\";\nimport * as fsp from \"node:fs/promises\";\nimport type {\n InferBlockState,\n LocalImportFileHandle,\n Platforma,\n Project,\n} from \"@milaboratories/pl-middle-layer\";\nimport { MiddleLayer } from \"@milaboratories/pl-middle-layer\";\nimport { registerServiceCapabilities } from \"@platforma-sdk/model\";\nimport { plTest } from \"./test-pl\";\nimport { awaitStableState } from \"./util\";\n\nexport type AwaitBlockDoneOps = {\n timeout?: number | AbortSignal;\n ignoreBlockError?: boolean;\n};\n\nexport type AwaitBlockDoneNormalized = {\n timeout: AbortSignal;\n ignoreBlockError: boolean;\n};\n\nfunction normalizeABDOpts(timeoutOrOps?: number | AwaitBlockDoneOps): AwaitBlockDoneNormalized {\n let ops: AwaitBlockDoneOps = {};\n if (timeoutOrOps !== undefined) {\n if (typeof timeoutOrOps === \"object\" && !(timeoutOrOps instanceof AbortSignal))\n ops = { ...ops, ...timeoutOrOps };\n else ops.timeout = timeoutOrOps;\n }\n const abortSignal =\n typeof ops.timeout === \"undefined\"\n ? AbortSignal.timeout(DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT)\n : typeof ops.timeout === \"number\"\n ? AbortSignal.timeout(ops.timeout)\n : ops.timeout;\n return {\n timeout: abortSignal,\n ignoreBlockError: Boolean(ops.ignoreBlockError),\n };\n}\n\nexport const DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT = 5000;\n\nasync function awaitBlockDone(\n prj: Project,\n blockId: string,\n timeoutOrOps?: number | AwaitBlockDoneOps,\n) {\n const ops = normalizeABDOpts(timeoutOrOps);\n const overview = prj.overview;\n const state = prj.getBlockState(blockId);\n while (true) {\n const overviewSnapshot = (await overview.getValue())!;\n const blockOverview = overviewSnapshot.blocks.find((b) => b.id == blockId);\n if (blockOverview === undefined) throw new Error(`Blocks not found: ${blockId}`);\n if (blockOverview.outputErrors) {\n if (ops.ignoreBlockError) return;\n else {\n let errorMessage = blockOverview.outputsError;\n if (errorMessage === undefined) errorMessage = blockOverview.exportsError;\n throw new Error(\"Block error: \" + (errorMessage ?? \"no message\"));\n }\n }\n if (blockOverview.calculationStatus === \"Done\") return;\n if (blockOverview.calculationStatus !== \"Running\")\n throw new Error(\n `Unexpected block status, block not calculating anything at the moment: ${blockOverview.calculationStatus}`,\n );\n try {\n await overview.awaitChange(ops.timeout);\n } catch (e: any) {\n console.dir(blockOverview, { depth: 5 });\n console.dir(await state.getValue(), { depth: 5 });\n throw new Error(\"Aborted while awaiting block done.\", { cause: e });\n }\n }\n}\n\nexport interface RawHelpers {\n awaitBlockDone(blockId: string, timeoutOrOps?: number | AwaitBlockDoneOps): Promise<void>;\n awaitBlockDoneAndGetStableBlockState<Pl extends Platforma>(\n blockId: string,\n timeoutOrOps?: number | AwaitBlockDoneOps,\n ): Promise<InferBlockState<Pl>>;\n getLocalFileHandle(localPath: string): Promise<LocalImportFileHandle>;\n}\n\nexport const blockTest = plTest.extend<{\n ml: MiddleLayer;\n rawPrj: Project;\n helpers: RawHelpers;\n}>({\n ml: async ({ pl, tmpFolder }, use) => {\n const frontendFolder = path.join(tmpFolder, \"frontend\");\n const downloadFolder = path.join(tmpFolder, \"download\");\n await fsp.mkdir(frontendFolder, { recursive: true });\n await fsp.mkdir(downloadFolder, { recursive: true });\n\n const ml = await MiddleLayer.init(pl, tmpFolder, {\n defaultTreeOptions: { pollingInterval: 250, stopPollingDelay: 500 },\n devBlockUpdateRecheckInterval: 300,\n localSecret: MiddleLayer.generateLocalSecret(),\n localProjections: [], // TODO must be different with local pl\n openFileDialogCallback: () => {\n throw new Error(\"Not implemented.\");\n },\n });\n ml.addRuntimeCapability(\"requiresUIAPIVersion\", 1);\n ml.addRuntimeCapability(\"requiresUIAPIVersion\", 2);\n ml.addRuntimeCapability(\"requiresUIAPIVersion\", 3);\n registerServiceCapabilities((flag, value) => ml.addRuntimeCapability(flag, value));\n\n try {\n await use(ml);\n } finally {\n await ml.close();\n }\n },\n rawPrj: async ({ ml }, use) => {\n const pRid1 = await ml.createProject({ label: \"Test Project\" }, \"test_project\");\n await ml.openProject(pRid1);\n const prj = ml.getOpenedProject(pRid1);\n try {\n await use(prj);\n } finally {\n ml.closeProject(pRid1);\n }\n },\n helpers: async ({ ml, rawPrj }, use) => {\n await use({\n async awaitBlockDone(blockId, timeout) {\n await awaitBlockDone(rawPrj, blockId, timeout);\n },\n awaitBlockDoneAndGetStableBlockState: async <Pl extends Platforma>(\n blockId: string,\n timeoutOrOps?: number | AwaitBlockDoneOps,\n ) => {\n const ops = normalizeABDOpts(timeoutOrOps);\n await awaitBlockDone(rawPrj, blockId, ops);\n return (await awaitStableState(\n rawPrj.getBlockState(blockId),\n ops.timeout,\n )) as InferBlockState<Pl>;\n },\n async getLocalFileHandle(localPath) {\n return await ml.internalDriverKit.lsDriver.getLocalFileHandle(path.resolve(localPath));\n },\n });\n },\n});\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { InferBlockState, LocalImportFileHandle, MiddleLayer, Platforma, Project } from "@milaboratories/pl-middle-layer";
2
- import * as _milaboratories_pl_tree0 from "@milaboratories/pl-tree";
3
- import * as vitest from "vitest";
4
- import * as _milaboratories_pl_client0 from "@milaboratories/pl-client";
2
+ import * as _$_milaboratories_pl_tree0 from "@milaboratories/pl-tree";
3
+ import * as _$vitest from "vitest";
4
+ import * as _$_milaboratories_pl_client0 from "@milaboratories/pl-client";
5
5
 
6
6
  //#region src/test-block.d.ts
7
7
  type AwaitBlockDoneOps = {
@@ -18,10 +18,10 @@ interface RawHelpers {
18
18
  awaitBlockDoneAndGetStableBlockState<Pl extends Platforma>(blockId: string, timeoutOrOps?: number | AwaitBlockDoneOps): Promise<InferBlockState<Pl>>;
19
19
  getLocalFileHandle(localPath: string): Promise<LocalImportFileHandle>;
20
20
  }
21
- declare const blockTest: vitest.TestAPI<{
22
- pl: _milaboratories_pl_client0.PlClient;
23
- createTree: (res: _milaboratories_pl_client0.ResourceId, ops?: _milaboratories_pl_tree0.SynchronizedTreeOps) => Promise<_milaboratories_pl_tree0.SynchronizedTreeState>;
24
- rootTree: _milaboratories_pl_tree0.SynchronizedTreeState;
21
+ declare const blockTest: _$vitest.TestAPI<{
22
+ pl: _$_milaboratories_pl_client0.PlClient;
23
+ createTree: (res: _$_milaboratories_pl_client0.ResourceId, ops?: _$_milaboratories_pl_tree0.SynchronizedTreeOps) => Promise<_$_milaboratories_pl_tree0.SynchronizedTreeState>;
24
+ rootTree: _$_milaboratories_pl_tree0.SynchronizedTreeState;
25
25
  tmpFolder: string;
26
26
  ml: MiddleLayer;
27
27
  rawPrj: Project;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-block.d.ts","names":[],"sources":["../src/test-block.ts"],"mappings":";;;;;;KAaY,iBAAA;EACV,OAAA,YAAmB,WAAA;EACnB,gBAAA;AAAA;AAAA,KAGU,wBAAA;EACV,OAAA,EAAS,WAAA;EACT,gBAAA;AAAA;AAAA,cAsBW,gCAAA;AAAA,UAqCI,UAAA;EACf,cAAA,CAAe,OAAA,UAAiB,YAAA,YAAwB,iBAAA,GAAoB,OAAA;EAC5E,oCAAA,YAAgD,SAAA,EAC9C,OAAA,UACA,YAAA,YAAwB,iBAAA,GACvB,OAAA,CAAQ,eAAA,CAAgB,EAAA;EAC3B,kBAAA,CAAmB,SAAA,WAAoB,OAAA,CAAQ,qBAAA;AAAA;AAAA,cAGpC,SAAA,WAAS,OAAA;MA8DpB,4BAAA,CAAA,QAAA"}
@@ -4,7 +4,6 @@ import { MiddleLayer } from "@milaboratories/pl-middle-layer";
4
4
  import * as fsp from "node:fs/promises";
5
5
  import path from "node:path";
6
6
  import { registerServiceCapabilities } from "@platforma-sdk/model";
7
-
8
7
  //#region src/test-block.ts
9
8
  function normalizeABDOpts(timeoutOrOps) {
10
9
  let ops = {};
@@ -97,7 +96,7 @@ const blockTest = plTest.extend({
97
96
  });
98
97
  }
99
98
  });
100
-
101
99
  //#endregion
102
100
  export { DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT, blockTest };
101
+
103
102
  //# sourceMappingURL=test-block.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-block.js","names":[],"sources":["../src/test-block.ts"],"sourcesContent":["import path from \"node:path\";\nimport * as fsp from \"node:fs/promises\";\nimport type {\n InferBlockState,\n LocalImportFileHandle,\n Platforma,\n Project,\n} from \"@milaboratories/pl-middle-layer\";\nimport { MiddleLayer } from \"@milaboratories/pl-middle-layer\";\nimport { registerServiceCapabilities } from \"@platforma-sdk/model\";\nimport { plTest } from \"./test-pl\";\nimport { awaitStableState } from \"./util\";\n\nexport type AwaitBlockDoneOps = {\n timeout?: number | AbortSignal;\n ignoreBlockError?: boolean;\n};\n\nexport type AwaitBlockDoneNormalized = {\n timeout: AbortSignal;\n ignoreBlockError: boolean;\n};\n\nfunction normalizeABDOpts(timeoutOrOps?: number | AwaitBlockDoneOps): AwaitBlockDoneNormalized {\n let ops: AwaitBlockDoneOps = {};\n if (timeoutOrOps !== undefined) {\n if (typeof timeoutOrOps === \"object\" && !(timeoutOrOps instanceof AbortSignal))\n ops = { ...ops, ...timeoutOrOps };\n else ops.timeout = timeoutOrOps;\n }\n const abortSignal =\n typeof ops.timeout === \"undefined\"\n ? AbortSignal.timeout(DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT)\n : typeof ops.timeout === \"number\"\n ? AbortSignal.timeout(ops.timeout)\n : ops.timeout;\n return {\n timeout: abortSignal,\n ignoreBlockError: Boolean(ops.ignoreBlockError),\n };\n}\n\nexport const DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT = 5000;\n\nasync function awaitBlockDone(\n prj: Project,\n blockId: string,\n timeoutOrOps?: number | AwaitBlockDoneOps,\n) {\n const ops = normalizeABDOpts(timeoutOrOps);\n const overview = prj.overview;\n const state = prj.getBlockState(blockId);\n while (true) {\n const overviewSnapshot = (await overview.getValue())!;\n const blockOverview = overviewSnapshot.blocks.find((b) => b.id == blockId);\n if (blockOverview === undefined) throw new Error(`Blocks not found: ${blockId}`);\n if (blockOverview.outputErrors) {\n if (ops.ignoreBlockError) return;\n else {\n let errorMessage = blockOverview.outputsError;\n if (errorMessage === undefined) errorMessage = blockOverview.exportsError;\n throw new Error(\"Block error: \" + (errorMessage ?? \"no message\"));\n }\n }\n if (blockOverview.calculationStatus === \"Done\") return;\n if (blockOverview.calculationStatus !== \"Running\")\n throw new Error(\n `Unexpected block status, block not calculating anything at the moment: ${blockOverview.calculationStatus}`,\n );\n try {\n await overview.awaitChange(ops.timeout);\n } catch (e: any) {\n console.dir(blockOverview, { depth: 5 });\n console.dir(await state.getValue(), { depth: 5 });\n throw new Error(\"Aborted while awaiting block done.\", { cause: e });\n }\n }\n}\n\nexport interface RawHelpers {\n awaitBlockDone(blockId: string, timeoutOrOps?: number | AwaitBlockDoneOps): Promise<void>;\n awaitBlockDoneAndGetStableBlockState<Pl extends Platforma>(\n blockId: string,\n timeoutOrOps?: number | AwaitBlockDoneOps,\n ): Promise<InferBlockState<Pl>>;\n getLocalFileHandle(localPath: string): Promise<LocalImportFileHandle>;\n}\n\nexport const blockTest = plTest.extend<{\n ml: MiddleLayer;\n rawPrj: Project;\n helpers: RawHelpers;\n}>({\n ml: async ({ pl, tmpFolder }, use) => {\n const frontendFolder = path.join(tmpFolder, \"frontend\");\n const downloadFolder = path.join(tmpFolder, \"download\");\n await fsp.mkdir(frontendFolder, { recursive: true });\n await fsp.mkdir(downloadFolder, { recursive: true });\n\n const ml = await MiddleLayer.init(pl, tmpFolder, {\n defaultTreeOptions: { pollingInterval: 250, stopPollingDelay: 500 },\n devBlockUpdateRecheckInterval: 300,\n localSecret: MiddleLayer.generateLocalSecret(),\n localProjections: [], // TODO must be different with local pl\n openFileDialogCallback: () => {\n throw new Error(\"Not implemented.\");\n },\n });\n ml.addRuntimeCapability(\"requiresUIAPIVersion\", 1);\n ml.addRuntimeCapability(\"requiresUIAPIVersion\", 2);\n ml.addRuntimeCapability(\"requiresUIAPIVersion\", 3);\n registerServiceCapabilities((flag, value) => ml.addRuntimeCapability(flag, value));\n\n try {\n await use(ml);\n } finally {\n await ml.close();\n }\n },\n rawPrj: async ({ ml }, use) => {\n const pRid1 = await ml.createProject({ label: \"Test Project\" }, \"test_project\");\n await ml.openProject(pRid1);\n const prj = ml.getOpenedProject(pRid1);\n try {\n await use(prj);\n } finally {\n ml.closeProject(pRid1);\n }\n },\n helpers: async ({ ml, rawPrj }, use) => {\n await use({\n async awaitBlockDone(blockId, timeout) {\n await awaitBlockDone(rawPrj, blockId, timeout);\n },\n awaitBlockDoneAndGetStableBlockState: async <Pl extends Platforma>(\n blockId: string,\n timeoutOrOps?: number | AwaitBlockDoneOps,\n ) => {\n const ops = normalizeABDOpts(timeoutOrOps);\n await awaitBlockDone(rawPrj, blockId, ops);\n return (await awaitStableState(\n rawPrj.getBlockState(blockId),\n ops.timeout,\n )) as InferBlockState<Pl>;\n },\n async getLocalFileHandle(localPath) {\n return await ml.internalDriverKit.lsDriver.getLocalFileHandle(path.resolve(localPath));\n },\n });\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"test-block.js","names":[],"sources":["../src/test-block.ts"],"sourcesContent":["import path from \"node:path\";\nimport * as fsp from \"node:fs/promises\";\nimport type {\n InferBlockState,\n LocalImportFileHandle,\n Platforma,\n Project,\n} from \"@milaboratories/pl-middle-layer\";\nimport { MiddleLayer } from \"@milaboratories/pl-middle-layer\";\nimport { registerServiceCapabilities } from \"@platforma-sdk/model\";\nimport { plTest } from \"./test-pl\";\nimport { awaitStableState } from \"./util\";\n\nexport type AwaitBlockDoneOps = {\n timeout?: number | AbortSignal;\n ignoreBlockError?: boolean;\n};\n\nexport type AwaitBlockDoneNormalized = {\n timeout: AbortSignal;\n ignoreBlockError: boolean;\n};\n\nfunction normalizeABDOpts(timeoutOrOps?: number | AwaitBlockDoneOps): AwaitBlockDoneNormalized {\n let ops: AwaitBlockDoneOps = {};\n if (timeoutOrOps !== undefined) {\n if (typeof timeoutOrOps === \"object\" && !(timeoutOrOps instanceof AbortSignal))\n ops = { ...ops, ...timeoutOrOps };\n else ops.timeout = timeoutOrOps;\n }\n const abortSignal =\n typeof ops.timeout === \"undefined\"\n ? AbortSignal.timeout(DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT)\n : typeof ops.timeout === \"number\"\n ? AbortSignal.timeout(ops.timeout)\n : ops.timeout;\n return {\n timeout: abortSignal,\n ignoreBlockError: Boolean(ops.ignoreBlockError),\n };\n}\n\nexport const DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT = 5000;\n\nasync function awaitBlockDone(\n prj: Project,\n blockId: string,\n timeoutOrOps?: number | AwaitBlockDoneOps,\n) {\n const ops = normalizeABDOpts(timeoutOrOps);\n const overview = prj.overview;\n const state = prj.getBlockState(blockId);\n while (true) {\n const overviewSnapshot = (await overview.getValue())!;\n const blockOverview = overviewSnapshot.blocks.find((b) => b.id == blockId);\n if (blockOverview === undefined) throw new Error(`Blocks not found: ${blockId}`);\n if (blockOverview.outputErrors) {\n if (ops.ignoreBlockError) return;\n else {\n let errorMessage = blockOverview.outputsError;\n if (errorMessage === undefined) errorMessage = blockOverview.exportsError;\n throw new Error(\"Block error: \" + (errorMessage ?? \"no message\"));\n }\n }\n if (blockOverview.calculationStatus === \"Done\") return;\n if (blockOverview.calculationStatus !== \"Running\")\n throw new Error(\n `Unexpected block status, block not calculating anything at the moment: ${blockOverview.calculationStatus}`,\n );\n try {\n await overview.awaitChange(ops.timeout);\n } catch (e: any) {\n console.dir(blockOverview, { depth: 5 });\n console.dir(await state.getValue(), { depth: 5 });\n throw new Error(\"Aborted while awaiting block done.\", { cause: e });\n }\n }\n}\n\nexport interface RawHelpers {\n awaitBlockDone(blockId: string, timeoutOrOps?: number | AwaitBlockDoneOps): Promise<void>;\n awaitBlockDoneAndGetStableBlockState<Pl extends Platforma>(\n blockId: string,\n timeoutOrOps?: number | AwaitBlockDoneOps,\n ): Promise<InferBlockState<Pl>>;\n getLocalFileHandle(localPath: string): Promise<LocalImportFileHandle>;\n}\n\nexport const blockTest = plTest.extend<{\n ml: MiddleLayer;\n rawPrj: Project;\n helpers: RawHelpers;\n}>({\n ml: async ({ pl, tmpFolder }, use) => {\n const frontendFolder = path.join(tmpFolder, \"frontend\");\n const downloadFolder = path.join(tmpFolder, \"download\");\n await fsp.mkdir(frontendFolder, { recursive: true });\n await fsp.mkdir(downloadFolder, { recursive: true });\n\n const ml = await MiddleLayer.init(pl, tmpFolder, {\n defaultTreeOptions: { pollingInterval: 250, stopPollingDelay: 500 },\n devBlockUpdateRecheckInterval: 300,\n localSecret: MiddleLayer.generateLocalSecret(),\n localProjections: [], // TODO must be different with local pl\n openFileDialogCallback: () => {\n throw new Error(\"Not implemented.\");\n },\n });\n ml.addRuntimeCapability(\"requiresUIAPIVersion\", 1);\n ml.addRuntimeCapability(\"requiresUIAPIVersion\", 2);\n ml.addRuntimeCapability(\"requiresUIAPIVersion\", 3);\n registerServiceCapabilities((flag, value) => ml.addRuntimeCapability(flag, value));\n\n try {\n await use(ml);\n } finally {\n await ml.close();\n }\n },\n rawPrj: async ({ ml }, use) => {\n const pRid1 = await ml.createProject({ label: \"Test Project\" }, \"test_project\");\n await ml.openProject(pRid1);\n const prj = ml.getOpenedProject(pRid1);\n try {\n await use(prj);\n } finally {\n ml.closeProject(pRid1);\n }\n },\n helpers: async ({ ml, rawPrj }, use) => {\n await use({\n async awaitBlockDone(blockId, timeout) {\n await awaitBlockDone(rawPrj, blockId, timeout);\n },\n awaitBlockDoneAndGetStableBlockState: async <Pl extends Platforma>(\n blockId: string,\n timeoutOrOps?: number | AwaitBlockDoneOps,\n ) => {\n const ops = normalizeABDOpts(timeoutOrOps);\n await awaitBlockDone(rawPrj, blockId, ops);\n return (await awaitStableState(\n rawPrj.getBlockState(blockId),\n ops.timeout,\n )) as InferBlockState<Pl>;\n },\n async getLocalFileHandle(localPath) {\n return await ml.internalDriverKit.lsDriver.getLocalFileHandle(path.resolve(localPath));\n },\n });\n },\n});\n"],"mappings":"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"}
package/dist/test-pl.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
2
  let _milaboratories_pl_middle_layer = require("@milaboratories/pl-middle-layer");
3
3
  let _milaboratories_pl_tree = require("@milaboratories/pl-tree");
4
4
  let node_crypto = require("node:crypto");
@@ -6,10 +6,8 @@ let node_fs_promises = require("node:fs/promises");
6
6
  node_fs_promises = require_runtime.__toESM(node_fs_promises);
7
7
  let node_path = require("node:path");
8
8
  node_path = require_runtime.__toESM(node_path);
9
- let vitest = require("vitest");
10
-
11
9
  //#region src/test-pl.ts
12
- const plTest = vitest.test.extend({
10
+ const plTest = require("vitest").test.extend({
13
11
  tmpFolder: async ({ onTestFinished }, use) => {
14
12
  const workFolder = node_path.default.resolve(`work/${(0, node_crypto.randomUUID)()}`);
15
13
  await node_fs_promises.mkdir(workFolder, { recursive: true });
@@ -66,7 +64,7 @@ const plTest = vitest.test.extend({
66
64
  await use(await tree(pl.clientRoot));
67
65
  }
68
66
  });
69
-
70
67
  //#endregion
71
68
  exports.plTest = plTest;
69
+
72
70
  //# sourceMappingURL=test-pl.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-pl.cjs","names":["test","path","fsp","NullResourceId","TestHelpers","SynchronizedTreeState"],"sources":["../src/test-pl.ts"],"sourcesContent":["import type { OptionalResourceId, PlClient, ResourceId } from \"@milaboratories/pl-middle-layer\";\nimport { NullResourceId, resourceIdToString, TestHelpers } from \"@milaboratories/pl-middle-layer\";\nimport type { SynchronizedTreeOps } from \"@milaboratories/pl-tree\";\nimport { SynchronizedTreeState } from \"@milaboratories/pl-tree\";\nimport { randomUUID } from \"node:crypto\";\nimport * as fsp from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { test } from \"vitest\";\n\n// oxlint-disable-next-line jest/expect-expect jest/no-disabled-tests\nexport const plTest = test.extend<{\n pl: PlClient;\n createTree: (res: ResourceId, ops?: SynchronizedTreeOps) => Promise<SynchronizedTreeState>;\n rootTree: SynchronizedTreeState;\n tmpFolder: string;\n}>({\n tmpFolder: async ({ onTestFinished }, use) => {\n const workFolder = path.resolve(`work/${randomUUID()}`);\n await fsp.mkdir(workFolder, { recursive: true });\n await use(workFolder);\n onTestFinished(async (context) => {\n if (context.task.result?.state === \"pass\") {\n await fsp.rm(workFolder, { recursive: true, maxRetries: 3, retryDelay: 100 });\n } else {\n console.log(`TEST FAILED TMP FOLDER IS PRESERVED: ${workFolder}`);\n }\n });\n },\n\n pl: async ({ onTestFinished }, use) => {\n const alternativeRoot = `test_${Date.now()}_${randomUUID()}`;\n let altRootId: OptionalResourceId = NullResourceId;\n const client = await TestHelpers.getTestClient(alternativeRoot);\n altRootId = client.clientRoot;\n try {\n await use(client);\n } finally {\n // Close the test client to avoid dangling gRPC channels\n // that can cause segfaults during process exit\n await client.close();\n }\n onTestFinished(async (context) => {\n if (context.task.result?.state === \"pass\") {\n const rawClient = await TestHelpers.getTestClient();\n try {\n await rawClient.deleteAlternativeRoot(alternativeRoot);\n } finally {\n // Close the cleanup client to avoid dangling gRPC channels\n // that can cause segfaults during process exit\n await rawClient.close();\n }\n } else {\n console.log(\n `TEST FAILED SO ALTERNATIVE ROOT IS PRESERVED IN PL: ${alternativeRoot} (${resourceIdToString(\n altRootId,\n )})`,\n );\n }\n });\n },\n\n createTree: async ({ pl }, use) => {\n const trees = new Map<ResourceId, Promise<SynchronizedTreeState>>();\n try {\n await use((res, ops) => {\n let treePromise = trees.get(res);\n if (treePromise === undefined) {\n treePromise = SynchronizedTreeState.init(\n pl,\n res,\n ops ?? {\n pollingInterval: 200,\n stopPollingDelay: 400,\n },\n );\n trees.set(res, treePromise);\n }\n return treePromise;\n });\n } finally {\n for (const [, treePromise] of trees) {\n await (await treePromise).terminate();\n }\n }\n },\n\n rootTree: async ({ pl, createTree: tree }, use) => {\n await use(await tree(pl.clientRoot));\n },\n});\n"],"mappings":";;;;;;;;;;;AAUA,MAAa,SAASA,YAAK,OAKxB;CACD,WAAW,OAAO,EAAE,kBAAkB,QAAQ;EAC5C,MAAM,aAAaC,kBAAK,QAAQ,qCAAoB,GAAG;AACvD,QAAMC,iBAAI,MAAM,YAAY,EAAE,WAAW,MAAM,CAAC;AAChD,QAAM,IAAI,WAAW;AACrB,iBAAe,OAAO,YAAY;AAChC,OAAI,QAAQ,KAAK,QAAQ,UAAU,OACjC,OAAMA,iBAAI,GAAG,YAAY;IAAE,WAAW;IAAM,YAAY;IAAG,YAAY;IAAK,CAAC;OAE7E,SAAQ,IAAI,wCAAwC,aAAa;IAEnE;;CAGJ,IAAI,OAAO,EAAE,kBAAkB,QAAQ;EACrC,MAAM,kBAAkB,QAAQ,KAAK,KAAK,CAAC,gCAAe;EAC1D,IAAI,YAAgCC;EACpC,MAAM,SAAS,MAAMC,4CAAY,cAAc,gBAAgB;AAC/D,cAAY,OAAO;AACnB,MAAI;AACF,SAAM,IAAI,OAAO;YACT;AAGR,SAAM,OAAO,OAAO;;AAEtB,iBAAe,OAAO,YAAY;AAChC,OAAI,QAAQ,KAAK,QAAQ,UAAU,QAAQ;IACzC,MAAM,YAAY,MAAMA,4CAAY,eAAe;AACnD,QAAI;AACF,WAAM,UAAU,sBAAsB,gBAAgB;cAC9C;AAGR,WAAM,UAAU,OAAO;;SAGzB,SAAQ,IACN,uDAAuD,gBAAgB,4DACrE,UACD,CAAC,GACH;IAEH;;CAGJ,YAAY,OAAO,EAAE,MAAM,QAAQ;EACjC,MAAM,wBAAQ,IAAI,KAAiD;AACnE,MAAI;AACF,SAAM,KAAK,KAAK,QAAQ;IACtB,IAAI,cAAc,MAAM,IAAI,IAAI;AAChC,QAAI,gBAAgB,QAAW;AAC7B,mBAAcC,8CAAsB,KAClC,IACA,KACA,OAAO;MACL,iBAAiB;MACjB,kBAAkB;MACnB,CACF;AACD,WAAM,IAAI,KAAK,YAAY;;AAE7B,WAAO;KACP;YACM;AACR,QAAK,MAAM,GAAG,gBAAgB,MAC5B,QAAO,MAAM,aAAa,WAAW;;;CAK3C,UAAU,OAAO,EAAE,IAAI,YAAY,QAAQ,QAAQ;AACjD,QAAM,IAAI,MAAM,KAAK,GAAG,WAAW,CAAC;;CAEvC,CAAC"}
1
+ {"version":3,"file":"test-pl.cjs","names":["test","path","fsp","NullResourceId","TestHelpers","SynchronizedTreeState"],"sources":["../src/test-pl.ts"],"sourcesContent":["import type { OptionalResourceId, PlClient, ResourceId } from \"@milaboratories/pl-middle-layer\";\nimport { NullResourceId, resourceIdToString, TestHelpers } from \"@milaboratories/pl-middle-layer\";\nimport type { SynchronizedTreeOps } from \"@milaboratories/pl-tree\";\nimport { SynchronizedTreeState } from \"@milaboratories/pl-tree\";\nimport { randomUUID } from \"node:crypto\";\nimport * as fsp from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { test } from \"vitest\";\n\n// oxlint-disable-next-line jest/expect-expect jest/no-disabled-tests\nexport const plTest = test.extend<{\n pl: PlClient;\n createTree: (res: ResourceId, ops?: SynchronizedTreeOps) => Promise<SynchronizedTreeState>;\n rootTree: SynchronizedTreeState;\n tmpFolder: string;\n}>({\n tmpFolder: async ({ onTestFinished }, use) => {\n const workFolder = path.resolve(`work/${randomUUID()}`);\n await fsp.mkdir(workFolder, { recursive: true });\n await use(workFolder);\n onTestFinished(async (context) => {\n if (context.task.result?.state === \"pass\") {\n await fsp.rm(workFolder, { recursive: true, maxRetries: 3, retryDelay: 100 });\n } else {\n console.log(`TEST FAILED TMP FOLDER IS PRESERVED: ${workFolder}`);\n }\n });\n },\n\n pl: async ({ onTestFinished }, use) => {\n const alternativeRoot = `test_${Date.now()}_${randomUUID()}`;\n let altRootId: OptionalResourceId = NullResourceId;\n const client = await TestHelpers.getTestClient(alternativeRoot);\n altRootId = client.clientRoot;\n try {\n await use(client);\n } finally {\n // Close the test client to avoid dangling gRPC channels\n // that can cause segfaults during process exit\n await client.close();\n }\n onTestFinished(async (context) => {\n if (context.task.result?.state === \"pass\") {\n const rawClient = await TestHelpers.getTestClient();\n try {\n await rawClient.deleteAlternativeRoot(alternativeRoot);\n } finally {\n // Close the cleanup client to avoid dangling gRPC channels\n // that can cause segfaults during process exit\n await rawClient.close();\n }\n } else {\n console.log(\n `TEST FAILED SO ALTERNATIVE ROOT IS PRESERVED IN PL: ${alternativeRoot} (${resourceIdToString(\n altRootId,\n )})`,\n );\n }\n });\n },\n\n createTree: async ({ pl }, use) => {\n const trees = new Map<ResourceId, Promise<SynchronizedTreeState>>();\n try {\n await use((res, ops) => {\n let treePromise = trees.get(res);\n if (treePromise === undefined) {\n treePromise = SynchronizedTreeState.init(\n pl,\n res,\n ops ?? {\n pollingInterval: 200,\n stopPollingDelay: 400,\n },\n );\n trees.set(res, treePromise);\n }\n return treePromise;\n });\n } finally {\n for (const [, treePromise] of trees) {\n await (await treePromise).terminate();\n }\n }\n },\n\n rootTree: async ({ pl, createTree: tree }, use) => {\n await use(await tree(pl.clientRoot));\n },\n});\n"],"mappings":";;;;;;;;;AAUA,MAAa,2BAASA,KAAK,OAKxB;CACD,WAAW,OAAO,EAAE,kBAAkB,QAAQ;EAC5C,MAAM,aAAaC,UAAAA,QAAK,QAAQ,SAAA,GAAA,YAAA,aAAoB,GAAG;AACvD,QAAMC,iBAAI,MAAM,YAAY,EAAE,WAAW,MAAM,CAAC;AAChD,QAAM,IAAI,WAAW;AACrB,iBAAe,OAAO,YAAY;AAChC,OAAI,QAAQ,KAAK,QAAQ,UAAU,OACjC,OAAMA,iBAAI,GAAG,YAAY;IAAE,WAAW;IAAM,YAAY;IAAG,YAAY;IAAK,CAAC;OAE7E,SAAQ,IAAI,wCAAwC,aAAa;IAEnE;;CAGJ,IAAI,OAAO,EAAE,kBAAkB,QAAQ;EACrC,MAAM,kBAAkB,QAAQ,KAAK,KAAK,CAAC,IAAA,GAAA,YAAA,aAAe;EAC1D,IAAI,YAAgCC,gCAAAA;EACpC,MAAM,SAAS,MAAMC,gCAAAA,YAAY,cAAc,gBAAgB;AAC/D,cAAY,OAAO;AACnB,MAAI;AACF,SAAM,IAAI,OAAO;YACT;AAGR,SAAM,OAAO,OAAO;;AAEtB,iBAAe,OAAO,YAAY;AAChC,OAAI,QAAQ,KAAK,QAAQ,UAAU,QAAQ;IACzC,MAAM,YAAY,MAAMA,gCAAAA,YAAY,eAAe;AACnD,QAAI;AACF,WAAM,UAAU,sBAAsB,gBAAgB;cAC9C;AAGR,WAAM,UAAU,OAAO;;SAGzB,SAAQ,IACN,uDAAuD,gBAAgB,KAAA,GAAA,gCAAA,oBACrE,UACD,CAAC,GACH;IAEH;;CAGJ,YAAY,OAAO,EAAE,MAAM,QAAQ;EACjC,MAAM,wBAAQ,IAAI,KAAiD;AACnE,MAAI;AACF,SAAM,KAAK,KAAK,QAAQ;IACtB,IAAI,cAAc,MAAM,IAAI,IAAI;AAChC,QAAI,gBAAgB,KAAA,GAAW;AAC7B,mBAAcC,wBAAAA,sBAAsB,KAClC,IACA,KACA,OAAO;MACL,iBAAiB;MACjB,kBAAkB;MACnB,CACF;AACD,WAAM,IAAI,KAAK,YAAY;;AAE7B,WAAO;KACP;YACM;AACR,QAAK,MAAM,GAAG,gBAAgB,MAC5B,QAAO,MAAM,aAAa,WAAW;;;CAK3C,UAAU,OAAO,EAAE,IAAI,YAAY,QAAQ,QAAQ;AACjD,QAAM,IAAI,MAAM,KAAK,GAAG,WAAW,CAAC;;CAEvC,CAAC"}
package/dist/test-pl.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { PlClient, ResourceId } from "@milaboratories/pl-middle-layer";
2
2
  import { SynchronizedTreeOps, SynchronizedTreeState } from "@milaboratories/pl-tree";
3
- import * as vitest from "vitest";
3
+ import * as _$vitest from "vitest";
4
4
 
5
5
  //#region src/test-pl.d.ts
6
- declare const plTest: vitest.TestAPI<{
6
+ declare const plTest: _$vitest.TestAPI<{
7
7
  pl: PlClient;
8
8
  createTree: (res: ResourceId, ops?: SynchronizedTreeOps) => Promise<SynchronizedTreeState>;
9
9
  rootTree: SynchronizedTreeState;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-pl.d.ts","names":[],"sources":["../src/test-pl.ts"],"mappings":";;;;;cAUa,MAAA,WAAM,OAAA;;oBAEC,UAAA,EAAU,GAAA,GAAQ,mBAAA,KAAwB,OAAA,CAAQ,qBAAA"}
package/dist/test-pl.js CHANGED
@@ -4,7 +4,6 @@ import { randomUUID } from "node:crypto";
4
4
  import * as fsp from "node:fs/promises";
5
5
  import path from "node:path";
6
6
  import { test } from "vitest";
7
-
8
7
  //#region src/test-pl.ts
9
8
  const plTest = test.extend({
10
9
  tmpFolder: async ({ onTestFinished }, use) => {
@@ -63,7 +62,7 @@ const plTest = test.extend({
63
62
  await use(await tree(pl.clientRoot));
64
63
  }
65
64
  });
66
-
67
65
  //#endregion
68
66
  export { plTest };
67
+
69
68
  //# sourceMappingURL=test-pl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-pl.js","names":[],"sources":["../src/test-pl.ts"],"sourcesContent":["import type { OptionalResourceId, PlClient, ResourceId } from \"@milaboratories/pl-middle-layer\";\nimport { NullResourceId, resourceIdToString, TestHelpers } from \"@milaboratories/pl-middle-layer\";\nimport type { SynchronizedTreeOps } from \"@milaboratories/pl-tree\";\nimport { SynchronizedTreeState } from \"@milaboratories/pl-tree\";\nimport { randomUUID } from \"node:crypto\";\nimport * as fsp from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { test } from \"vitest\";\n\n// oxlint-disable-next-line jest/expect-expect jest/no-disabled-tests\nexport const plTest = test.extend<{\n pl: PlClient;\n createTree: (res: ResourceId, ops?: SynchronizedTreeOps) => Promise<SynchronizedTreeState>;\n rootTree: SynchronizedTreeState;\n tmpFolder: string;\n}>({\n tmpFolder: async ({ onTestFinished }, use) => {\n const workFolder = path.resolve(`work/${randomUUID()}`);\n await fsp.mkdir(workFolder, { recursive: true });\n await use(workFolder);\n onTestFinished(async (context) => {\n if (context.task.result?.state === \"pass\") {\n await fsp.rm(workFolder, { recursive: true, maxRetries: 3, retryDelay: 100 });\n } else {\n console.log(`TEST FAILED TMP FOLDER IS PRESERVED: ${workFolder}`);\n }\n });\n },\n\n pl: async ({ onTestFinished }, use) => {\n const alternativeRoot = `test_${Date.now()}_${randomUUID()}`;\n let altRootId: OptionalResourceId = NullResourceId;\n const client = await TestHelpers.getTestClient(alternativeRoot);\n altRootId = client.clientRoot;\n try {\n await use(client);\n } finally {\n // Close the test client to avoid dangling gRPC channels\n // that can cause segfaults during process exit\n await client.close();\n }\n onTestFinished(async (context) => {\n if (context.task.result?.state === \"pass\") {\n const rawClient = await TestHelpers.getTestClient();\n try {\n await rawClient.deleteAlternativeRoot(alternativeRoot);\n } finally {\n // Close the cleanup client to avoid dangling gRPC channels\n // that can cause segfaults during process exit\n await rawClient.close();\n }\n } else {\n console.log(\n `TEST FAILED SO ALTERNATIVE ROOT IS PRESERVED IN PL: ${alternativeRoot} (${resourceIdToString(\n altRootId,\n )})`,\n );\n }\n });\n },\n\n createTree: async ({ pl }, use) => {\n const trees = new Map<ResourceId, Promise<SynchronizedTreeState>>();\n try {\n await use((res, ops) => {\n let treePromise = trees.get(res);\n if (treePromise === undefined) {\n treePromise = SynchronizedTreeState.init(\n pl,\n res,\n ops ?? {\n pollingInterval: 200,\n stopPollingDelay: 400,\n },\n );\n trees.set(res, treePromise);\n }\n return treePromise;\n });\n } finally {\n for (const [, treePromise] of trees) {\n await (await treePromise).terminate();\n }\n }\n },\n\n rootTree: async ({ pl, createTree: tree }, use) => {\n await use(await tree(pl.clientRoot));\n },\n});\n"],"mappings":";;;;;;;;AAUA,MAAa,SAAS,KAAK,OAKxB;CACD,WAAW,OAAO,EAAE,kBAAkB,QAAQ;EAC5C,MAAM,aAAa,KAAK,QAAQ,QAAQ,YAAY,GAAG;AACvD,QAAM,IAAI,MAAM,YAAY,EAAE,WAAW,MAAM,CAAC;AAChD,QAAM,IAAI,WAAW;AACrB,iBAAe,OAAO,YAAY;AAChC,OAAI,QAAQ,KAAK,QAAQ,UAAU,OACjC,OAAM,IAAI,GAAG,YAAY;IAAE,WAAW;IAAM,YAAY;IAAG,YAAY;IAAK,CAAC;OAE7E,SAAQ,IAAI,wCAAwC,aAAa;IAEnE;;CAGJ,IAAI,OAAO,EAAE,kBAAkB,QAAQ;EACrC,MAAM,kBAAkB,QAAQ,KAAK,KAAK,CAAC,GAAG,YAAY;EAC1D,IAAI,YAAgC;EACpC,MAAM,SAAS,MAAM,YAAY,cAAc,gBAAgB;AAC/D,cAAY,OAAO;AACnB,MAAI;AACF,SAAM,IAAI,OAAO;YACT;AAGR,SAAM,OAAO,OAAO;;AAEtB,iBAAe,OAAO,YAAY;AAChC,OAAI,QAAQ,KAAK,QAAQ,UAAU,QAAQ;IACzC,MAAM,YAAY,MAAM,YAAY,eAAe;AACnD,QAAI;AACF,WAAM,UAAU,sBAAsB,gBAAgB;cAC9C;AAGR,WAAM,UAAU,OAAO;;SAGzB,SAAQ,IACN,uDAAuD,gBAAgB,IAAI,mBACzE,UACD,CAAC,GACH;IAEH;;CAGJ,YAAY,OAAO,EAAE,MAAM,QAAQ;EACjC,MAAM,wBAAQ,IAAI,KAAiD;AACnE,MAAI;AACF,SAAM,KAAK,KAAK,QAAQ;IACtB,IAAI,cAAc,MAAM,IAAI,IAAI;AAChC,QAAI,gBAAgB,QAAW;AAC7B,mBAAc,sBAAsB,KAClC,IACA,KACA,OAAO;MACL,iBAAiB;MACjB,kBAAkB;MACnB,CACF;AACD,WAAM,IAAI,KAAK,YAAY;;AAE7B,WAAO;KACP;YACM;AACR,QAAK,MAAM,GAAG,gBAAgB,MAC5B,QAAO,MAAM,aAAa,WAAW;;;CAK3C,UAAU,OAAO,EAAE,IAAI,YAAY,QAAQ,QAAQ;AACjD,QAAM,IAAI,MAAM,KAAK,GAAG,WAAW,CAAC;;CAEvC,CAAC"}
1
+ {"version":3,"file":"test-pl.js","names":[],"sources":["../src/test-pl.ts"],"sourcesContent":["import type { OptionalResourceId, PlClient, ResourceId } from \"@milaboratories/pl-middle-layer\";\nimport { NullResourceId, resourceIdToString, TestHelpers } from \"@milaboratories/pl-middle-layer\";\nimport type { SynchronizedTreeOps } from \"@milaboratories/pl-tree\";\nimport { SynchronizedTreeState } from \"@milaboratories/pl-tree\";\nimport { randomUUID } from \"node:crypto\";\nimport * as fsp from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { test } from \"vitest\";\n\n// oxlint-disable-next-line jest/expect-expect jest/no-disabled-tests\nexport const plTest = test.extend<{\n pl: PlClient;\n createTree: (res: ResourceId, ops?: SynchronizedTreeOps) => Promise<SynchronizedTreeState>;\n rootTree: SynchronizedTreeState;\n tmpFolder: string;\n}>({\n tmpFolder: async ({ onTestFinished }, use) => {\n const workFolder = path.resolve(`work/${randomUUID()}`);\n await fsp.mkdir(workFolder, { recursive: true });\n await use(workFolder);\n onTestFinished(async (context) => {\n if (context.task.result?.state === \"pass\") {\n await fsp.rm(workFolder, { recursive: true, maxRetries: 3, retryDelay: 100 });\n } else {\n console.log(`TEST FAILED TMP FOLDER IS PRESERVED: ${workFolder}`);\n }\n });\n },\n\n pl: async ({ onTestFinished }, use) => {\n const alternativeRoot = `test_${Date.now()}_${randomUUID()}`;\n let altRootId: OptionalResourceId = NullResourceId;\n const client = await TestHelpers.getTestClient(alternativeRoot);\n altRootId = client.clientRoot;\n try {\n await use(client);\n } finally {\n // Close the test client to avoid dangling gRPC channels\n // that can cause segfaults during process exit\n await client.close();\n }\n onTestFinished(async (context) => {\n if (context.task.result?.state === \"pass\") {\n const rawClient = await TestHelpers.getTestClient();\n try {\n await rawClient.deleteAlternativeRoot(alternativeRoot);\n } finally {\n // Close the cleanup client to avoid dangling gRPC channels\n // that can cause segfaults during process exit\n await rawClient.close();\n }\n } else {\n console.log(\n `TEST FAILED SO ALTERNATIVE ROOT IS PRESERVED IN PL: ${alternativeRoot} (${resourceIdToString(\n altRootId,\n )})`,\n );\n }\n });\n },\n\n createTree: async ({ pl }, use) => {\n const trees = new Map<ResourceId, Promise<SynchronizedTreeState>>();\n try {\n await use((res, ops) => {\n let treePromise = trees.get(res);\n if (treePromise === undefined) {\n treePromise = SynchronizedTreeState.init(\n pl,\n res,\n ops ?? {\n pollingInterval: 200,\n stopPollingDelay: 400,\n },\n );\n trees.set(res, treePromise);\n }\n return treePromise;\n });\n } finally {\n for (const [, treePromise] of trees) {\n await (await treePromise).terminate();\n }\n }\n },\n\n rootTree: async ({ pl, createTree: tree }, use) => {\n await use(await tree(pl.clientRoot));\n },\n});\n"],"mappings":";;;;;;;AAUA,MAAa,SAAS,KAAK,OAKxB;CACD,WAAW,OAAO,EAAE,kBAAkB,QAAQ;EAC5C,MAAM,aAAa,KAAK,QAAQ,QAAQ,YAAY,GAAG;AACvD,QAAM,IAAI,MAAM,YAAY,EAAE,WAAW,MAAM,CAAC;AAChD,QAAM,IAAI,WAAW;AACrB,iBAAe,OAAO,YAAY;AAChC,OAAI,QAAQ,KAAK,QAAQ,UAAU,OACjC,OAAM,IAAI,GAAG,YAAY;IAAE,WAAW;IAAM,YAAY;IAAG,YAAY;IAAK,CAAC;OAE7E,SAAQ,IAAI,wCAAwC,aAAa;IAEnE;;CAGJ,IAAI,OAAO,EAAE,kBAAkB,QAAQ;EACrC,MAAM,kBAAkB,QAAQ,KAAK,KAAK,CAAC,GAAG,YAAY;EAC1D,IAAI,YAAgC;EACpC,MAAM,SAAS,MAAM,YAAY,cAAc,gBAAgB;AAC/D,cAAY,OAAO;AACnB,MAAI;AACF,SAAM,IAAI,OAAO;YACT;AAGR,SAAM,OAAO,OAAO;;AAEtB,iBAAe,OAAO,YAAY;AAChC,OAAI,QAAQ,KAAK,QAAQ,UAAU,QAAQ;IACzC,MAAM,YAAY,MAAM,YAAY,eAAe;AACnD,QAAI;AACF,WAAM,UAAU,sBAAsB,gBAAgB;cAC9C;AAGR,WAAM,UAAU,OAAO;;SAGzB,SAAQ,IACN,uDAAuD,gBAAgB,IAAI,mBACzE,UACD,CAAC,GACH;IAEH;;CAGJ,YAAY,OAAO,EAAE,MAAM,QAAQ;EACjC,MAAM,wBAAQ,IAAI,KAAiD;AACnE,MAAI;AACF,SAAM,KAAK,KAAK,QAAQ;IACtB,IAAI,cAAc,MAAM,IAAI,IAAI;AAChC,QAAI,gBAAgB,KAAA,GAAW;AAC7B,mBAAc,sBAAsB,KAClC,IACA,KACA,OAAO;MACL,iBAAiB;MACjB,kBAAkB;MACnB,CACF;AACD,WAAM,IAAI,KAAK,YAAY;;AAE7B,WAAO;KACP;YACM;AACR,QAAK,MAAM,GAAG,gBAAgB,MAC5B,QAAO,MAAM,aAAa,WAAW;;;CAK3C,UAAU,OAAO,EAAE,IAAI,YAAY,QAAQ,QAAQ;AACjD,QAAM,IAAI,MAAM,KAAK,GAAG,WAAW,CAAC;;CAEvC,CAAC"}
@@ -1,11 +1,10 @@
1
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
2
- const require_test_pl = require('./test-pl.cjs');
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
+ const require_test_pl = require("./test-pl.cjs");
3
3
  let _milaboratories_pl_middle_layer = require("@milaboratories/pl-middle-layer");
4
4
  let node_crypto = require("node:crypto");
5
5
  let node_path = require("node:path");
6
6
  node_path = require_runtime.__toESM(node_path);
7
7
  let _milaboratories_computable = require("@milaboratories/computable");
8
-
9
8
  //#region src/test-template.ts
10
9
  var TestRenderResults = class {
11
10
  constructor(resultEntry) {
@@ -132,10 +131,10 @@ const tplTest = require_test_pl.plTest.extend({
132
131
  }));
133
132
  }
134
133
  });
135
-
136
134
  //#endregion
137
135
  exports.TestRenderResults = TestRenderResults;
138
136
  exports.TestWorkflowResults = TestWorkflowResults;
139
137
  exports.TplTestHelpers = TplTestHelpers;
140
138
  exports.tplTest = tplTest;
139
+
141
140
  //# sourceMappingURL=test-template.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-template.cjs","names":["Computable","Pl","plTest","path","MiddleLayer"],"sources":["../src/test-template.ts"],"sourcesContent":["import type {\n ComputableCtx,\n ComputableStableDefined,\n UnwrapComputables,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type {\n AnyRef,\n MiddleLayerDriverKit,\n PlClient,\n PlTransaction,\n ResourceId,\n TemplateSpecAny,\n} from \"@milaboratories/pl-middle-layer\";\nimport {\n createRenderTemplate,\n field,\n initDriverKit,\n loadTemplate,\n MiddleLayer,\n Pl,\n prepareTemplateSpec,\n toGlobalResourceId,\n} from \"@milaboratories/pl-middle-layer\";\nimport type {\n PlTreeEntry,\n PlTreeNodeAccessor,\n SynchronizedTreeState,\n} from \"@milaboratories/pl-tree\";\nimport { randomUUID } from \"node:crypto\";\nimport path from \"node:path\";\nimport { plTest } from \"./test-pl\";\n\nexport type WorkflowRenderOps = {\n parent?: ResourceId;\n exportProcessor?: TemplateSpecAny;\n blockId?: string;\n};\n\nexport class TestRenderResults<O extends string> {\n constructor(public readonly resultEntry: PlTreeEntry) {}\n\n public computeOutput<R>(\n name: O,\n cb: (acc: PlTreeNodeAccessor | undefined, ctx: ComputableCtx) => R,\n ): Computable<UnwrapComputables<R> | undefined> {\n return Computable.make((ctx) => {\n const outputAccessor = ctx\n .accessor(this.resultEntry)\n .node()\n .traverse({ field: name, assertFieldType: \"Input\" });\n return cb(outputAccessor, ctx);\n });\n }\n}\n\nexport class TestWorkflowResults {\n constructor(\n public readonly renderResult: TestRenderResults<\"context\" | \"result\">,\n public readonly processedExportsResult: TestRenderResults<\"result\"> | undefined,\n public readonly blockId: string,\n ) {}\n\n /**\n * Returns context id of this workflow\n * */\n public context(): ComputableStableDefined<ResourceId> {\n return this.renderResult.computeOutput(\"context\", (cb) => cb?.id).withStableType();\n }\n\n /**\n * Returns context id of this workflow\n * */\n public result(): ComputableStableDefined<ResourceId> {\n return this.renderResult.computeOutput(\"result\", (cb) => cb?.id).withStableType();\n }\n\n public export<R>(\n name: string,\n cb: (acc: PlTreeNodeAccessor | undefined, ctx: ComputableCtx) => R,\n ): Computable<UnwrapComputables<R> | undefined> {\n if (this.processedExportsResult !== undefined)\n return this.processedExportsResult.computeOutput(\"result\", (acc, ctx) => {\n return cb(acc?.traverse({ field: name, assertFieldType: \"Input\" }), ctx);\n });\n else\n return this.renderResult.computeOutput(\"context\", (acc, ctx) => {\n return cb(acc?.traverse({ field: `values/${name}`, assertFieldType: \"Input\" }), ctx);\n });\n }\n\n public output<R>(\n name: string,\n cb: (acc: PlTreeNodeAccessor | undefined, ctx: ComputableCtx) => R,\n ): Computable<UnwrapComputables<R> | undefined> {\n return this.renderResult.computeOutput(\"result\", (acc, ctx) => {\n return cb(acc?.traverse({ field: name, assertFieldType: \"Input\" }), ctx);\n });\n }\n}\n\nexport class TplTestHelpers {\n constructor(\n private readonly pl: PlClient,\n private readonly resultRootRid: ResourceId,\n private readonly resultRootTree: SynchronizedTreeState,\n ) {}\n\n async renderTemplate<const O extends string>(\n ephemeral: boolean,\n template: string | TemplateSpecAny,\n outputs: O[],\n inputs: (tx: PlTransaction) => Record<string, AnyRef> | Promise<Record<string, AnyRef>>,\n ): Promise<TestRenderResults<O>> {\n const runId = randomUUID();\n const spec =\n typeof template === \"string\"\n ? await prepareTemplateSpec({\n type: \"from-file\",\n path: `./dist/tengo/tpl/${template}.plj.gz`,\n })\n : await prepareTemplateSpec(template);\n const { resultMapRid } = await this.pl.withWriteTx(\"TemplateRender\", async (tx) => {\n const tpl = loadTemplate(tx, spec);\n const renderedInputs = await inputs(tx);\n const futureOutputs = await createRenderTemplate(tx, tpl, ephemeral, renderedInputs, outputs);\n const resultMap = Pl.createPlMap(tx, futureOutputs, ephemeral);\n tx.createField(field(this.resultRootRid, runId), \"Dynamic\", resultMap);\n const resultMapRid = await toGlobalResourceId(resultMap);\n await tx.commit();\n return {\n resultMapRid,\n };\n });\n await this.resultRootTree.refreshState();\n return new TestRenderResults(this.resultRootTree.entry(resultMapRid));\n }\n\n createObject(tx: PlTransaction, value: unknown): AnyRef {\n return tx.createValue(Pl.JsonObject, JSON.stringify(value));\n }\n\n async renderWorkflow(\n workflow: string | TemplateSpecAny,\n preRun: boolean,\n args: Record<string, unknown> | Promise<Record<string, unknown>>,\n ops: WorkflowRenderOps = {},\n ): Promise<TestWorkflowResults> {\n const blockId = ops.blockId ?? randomUUID();\n const mainResult: TestRenderResults<\"result\" | \"context\"> = await this.renderTemplate(\n true,\n workflow,\n [\"result\", \"context\"],\n (tx) => {\n let ctx = undefined;\n if (ops.parent) {\n ctx = ops.parent;\n } else {\n ctx = tx.createEphemeral({ name: \"BContextEnd\", version: \"1\" });\n tx.lock(ctx);\n }\n\n return {\n args: this.createObject(tx, args),\n blockId: this.createObject(tx, blockId),\n isProduction: this.createObject(tx, !preRun),\n context: ctx,\n };\n },\n );\n\n let exports: TestRenderResults<\"result\"> | undefined = undefined;\n if (ops.exportProcessor !== undefined) {\n exports = await this.renderTemplate(true, ops.exportProcessor, [\"result\"], (tx) => ({\n pf: tx.getFutureFieldValue(mainResult.resultEntry.rid, \"context\", \"Input\"),\n }));\n }\n\n return new TestWorkflowResults(mainResult, exports, blockId);\n }\n}\n\nexport const tplTest = plTest.extend<{\n helper: TplTestHelpers;\n driverKit: MiddleLayerDriverKit;\n}>({\n helper: async ({ pl, createTree }, use): Promise<void> => {\n const resultMap = await pl.withWriteTx(\"CreatingHelpers\", async (tx) => {\n const map = tx.createEphemeral(Pl.EphStdMap);\n const rootField = field(tx.clientRoot, \"templateTeste\");\n tx.createField(rootField, \"Dynamic\", map);\n await tx.commit();\n return await toGlobalResourceId(map);\n });\n const resultMapTree = await createTree(resultMap);\n await use(new TplTestHelpers(pl, resultMap, resultMapTree));\n },\n driverKit: async ({ pl, tmpFolder }, use): Promise<void> => {\n const frontendDownloadPath = path.join(tmpFolder, \"frontend\");\n\n const driverKit = await initDriverKit(pl, tmpFolder, frontendDownloadPath, {\n localSecret: MiddleLayer.generateLocalSecret(),\n localProjections: [], // TODO must be different with local pl\n openFileDialogCallback: () => {\n throw new Error(\"Not implemented.\");\n },\n });\n\n await use(driverKit);\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"test-template.cjs","names":["Computable","Pl","plTest","path","MiddleLayer"],"sources":["../src/test-template.ts"],"sourcesContent":["import type {\n ComputableCtx,\n ComputableStableDefined,\n UnwrapComputables,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type {\n AnyRef,\n MiddleLayerDriverKit,\n PlClient,\n PlTransaction,\n ResourceId,\n TemplateSpecAny,\n} from \"@milaboratories/pl-middle-layer\";\nimport {\n createRenderTemplate,\n field,\n initDriverKit,\n loadTemplate,\n MiddleLayer,\n Pl,\n prepareTemplateSpec,\n toGlobalResourceId,\n} from \"@milaboratories/pl-middle-layer\";\nimport type {\n PlTreeEntry,\n PlTreeNodeAccessor,\n SynchronizedTreeState,\n} from \"@milaboratories/pl-tree\";\nimport { randomUUID } from \"node:crypto\";\nimport path from \"node:path\";\nimport { plTest } from \"./test-pl\";\n\nexport type WorkflowRenderOps = {\n parent?: ResourceId;\n exportProcessor?: TemplateSpecAny;\n blockId?: string;\n};\n\nexport class TestRenderResults<O extends string> {\n constructor(public readonly resultEntry: PlTreeEntry) {}\n\n public computeOutput<R>(\n name: O,\n cb: (acc: PlTreeNodeAccessor | undefined, ctx: ComputableCtx) => R,\n ): Computable<UnwrapComputables<R> | undefined> {\n return Computable.make((ctx) => {\n const outputAccessor = ctx\n .accessor(this.resultEntry)\n .node()\n .traverse({ field: name, assertFieldType: \"Input\" });\n return cb(outputAccessor, ctx);\n });\n }\n}\n\nexport class TestWorkflowResults {\n constructor(\n public readonly renderResult: TestRenderResults<\"context\" | \"result\">,\n public readonly processedExportsResult: TestRenderResults<\"result\"> | undefined,\n public readonly blockId: string,\n ) {}\n\n /**\n * Returns context id of this workflow\n * */\n public context(): ComputableStableDefined<ResourceId> {\n return this.renderResult.computeOutput(\"context\", (cb) => cb?.id).withStableType();\n }\n\n /**\n * Returns context id of this workflow\n * */\n public result(): ComputableStableDefined<ResourceId> {\n return this.renderResult.computeOutput(\"result\", (cb) => cb?.id).withStableType();\n }\n\n public export<R>(\n name: string,\n cb: (acc: PlTreeNodeAccessor | undefined, ctx: ComputableCtx) => R,\n ): Computable<UnwrapComputables<R> | undefined> {\n if (this.processedExportsResult !== undefined)\n return this.processedExportsResult.computeOutput(\"result\", (acc, ctx) => {\n return cb(acc?.traverse({ field: name, assertFieldType: \"Input\" }), ctx);\n });\n else\n return this.renderResult.computeOutput(\"context\", (acc, ctx) => {\n return cb(acc?.traverse({ field: `values/${name}`, assertFieldType: \"Input\" }), ctx);\n });\n }\n\n public output<R>(\n name: string,\n cb: (acc: PlTreeNodeAccessor | undefined, ctx: ComputableCtx) => R,\n ): Computable<UnwrapComputables<R> | undefined> {\n return this.renderResult.computeOutput(\"result\", (acc, ctx) => {\n return cb(acc?.traverse({ field: name, assertFieldType: \"Input\" }), ctx);\n });\n }\n}\n\nexport class TplTestHelpers {\n constructor(\n private readonly pl: PlClient,\n private readonly resultRootRid: ResourceId,\n private readonly resultRootTree: SynchronizedTreeState,\n ) {}\n\n async renderTemplate<const O extends string>(\n ephemeral: boolean,\n template: string | TemplateSpecAny,\n outputs: O[],\n inputs: (tx: PlTransaction) => Record<string, AnyRef> | Promise<Record<string, AnyRef>>,\n ): Promise<TestRenderResults<O>> {\n const runId = randomUUID();\n const spec =\n typeof template === \"string\"\n ? await prepareTemplateSpec({\n type: \"from-file\",\n path: `./dist/tengo/tpl/${template}.plj.gz`,\n })\n : await prepareTemplateSpec(template);\n const { resultMapRid } = await this.pl.withWriteTx(\"TemplateRender\", async (tx) => {\n const tpl = loadTemplate(tx, spec);\n const renderedInputs = await inputs(tx);\n const futureOutputs = await createRenderTemplate(tx, tpl, ephemeral, renderedInputs, outputs);\n const resultMap = Pl.createPlMap(tx, futureOutputs, ephemeral);\n tx.createField(field(this.resultRootRid, runId), \"Dynamic\", resultMap);\n const resultMapRid = await toGlobalResourceId(resultMap);\n await tx.commit();\n return {\n resultMapRid,\n };\n });\n await this.resultRootTree.refreshState();\n return new TestRenderResults(this.resultRootTree.entry(resultMapRid));\n }\n\n createObject(tx: PlTransaction, value: unknown): AnyRef {\n return tx.createValue(Pl.JsonObject, JSON.stringify(value));\n }\n\n async renderWorkflow(\n workflow: string | TemplateSpecAny,\n preRun: boolean,\n args: Record<string, unknown> | Promise<Record<string, unknown>>,\n ops: WorkflowRenderOps = {},\n ): Promise<TestWorkflowResults> {\n const blockId = ops.blockId ?? randomUUID();\n const mainResult: TestRenderResults<\"result\" | \"context\"> = await this.renderTemplate(\n true,\n workflow,\n [\"result\", \"context\"],\n (tx) => {\n let ctx = undefined;\n if (ops.parent) {\n ctx = ops.parent;\n } else {\n ctx = tx.createEphemeral({ name: \"BContextEnd\", version: \"1\" });\n tx.lock(ctx);\n }\n\n return {\n args: this.createObject(tx, args),\n blockId: this.createObject(tx, blockId),\n isProduction: this.createObject(tx, !preRun),\n context: ctx,\n };\n },\n );\n\n let exports: TestRenderResults<\"result\"> | undefined = undefined;\n if (ops.exportProcessor !== undefined) {\n exports = await this.renderTemplate(true, ops.exportProcessor, [\"result\"], (tx) => ({\n pf: tx.getFutureFieldValue(mainResult.resultEntry.rid, \"context\", \"Input\"),\n }));\n }\n\n return new TestWorkflowResults(mainResult, exports, blockId);\n }\n}\n\nexport const tplTest = plTest.extend<{\n helper: TplTestHelpers;\n driverKit: MiddleLayerDriverKit;\n}>({\n helper: async ({ pl, createTree }, use): Promise<void> => {\n const resultMap = await pl.withWriteTx(\"CreatingHelpers\", async (tx) => {\n const map = tx.createEphemeral(Pl.EphStdMap);\n const rootField = field(tx.clientRoot, \"templateTeste\");\n tx.createField(rootField, \"Dynamic\", map);\n await tx.commit();\n return await toGlobalResourceId(map);\n });\n const resultMapTree = await createTree(resultMap);\n await use(new TplTestHelpers(pl, resultMap, resultMapTree));\n },\n driverKit: async ({ pl, tmpFolder }, use): Promise<void> => {\n const frontendDownloadPath = path.join(tmpFolder, \"frontend\");\n\n const driverKit = await initDriverKit(pl, tmpFolder, frontendDownloadPath, {\n localSecret: MiddleLayer.generateLocalSecret(),\n localProjections: [], // TODO must be different with local pl\n openFileDialogCallback: () => {\n throw new Error(\"Not implemented.\");\n },\n });\n\n await use(driverKit);\n },\n});\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { AnyRef, MiddleLayerDriverKit, PlClient, PlTransaction, ResourceId, TemplateSpecAny } from "@milaboratories/pl-middle-layer";
2
- import * as _milaboratories_pl_tree0 from "@milaboratories/pl-tree";
2
+ import * as _$_milaboratories_pl_tree0 from "@milaboratories/pl-tree";
3
3
  import { PlTreeEntry, PlTreeNodeAccessor, SynchronizedTreeState } from "@milaboratories/pl-tree";
4
- import * as vitest from "vitest";
4
+ import * as _$vitest from "vitest";
5
5
  import { Computable, ComputableCtx, ComputableStableDefined, UnwrapComputables } from "@milaboratories/computable";
6
6
 
7
7
  //#region src/test-template.d.ts
@@ -40,9 +40,9 @@ declare class TplTestHelpers {
40
40
  createObject(tx: PlTransaction, value: unknown): AnyRef;
41
41
  renderWorkflow(workflow: string | TemplateSpecAny, preRun: boolean, args: Record<string, unknown> | Promise<Record<string, unknown>>, ops?: WorkflowRenderOps): Promise<TestWorkflowResults>;
42
42
  }
43
- declare const tplTest: vitest.TestAPI<{
43
+ declare const tplTest: _$vitest.TestAPI<{
44
44
  pl: PlClient;
45
- createTree: (res: ResourceId, ops?: _milaboratories_pl_tree0.SynchronizedTreeOps) => Promise<SynchronizedTreeState>;
45
+ createTree: (res: ResourceId, ops?: _$_milaboratories_pl_tree0.SynchronizedTreeOps) => Promise<SynchronizedTreeState>;
46
46
  rootTree: SynchronizedTreeState;
47
47
  tmpFolder: string;
48
48
  helper: TplTestHelpers;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-template.d.ts","names":[],"sources":["../src/test-template.ts"],"mappings":";;;;;;;KAiCY,iBAAA;EACV,MAAA,GAAS,UAAA;EACT,eAAA,GAAkB,eAAA;EAClB,OAAA;AAAA;AAAA,cAGW,iBAAA;EAAA,SACiB,WAAA,EAAa,WAAA;cAAb,WAAA,EAAa,WAAA;EAElC,aAAA,GAAA,CACL,IAAA,EAAM,CAAA,EACN,EAAA,GAAK,GAAA,EAAK,kBAAA,cAAgC,GAAA,EAAK,aAAA,KAAkB,CAAA,GAChE,UAAA,CAAW,iBAAA,CAAkB,CAAA;AAAA;AAAA,cAWrB,mBAAA;EAAA,SAEO,YAAA,EAAc,iBAAA;EAAA,SACd,sBAAA,EAAwB,iBAAA;EAAA,SACxB,OAAA;cAFA,YAAA,EAAc,iBAAA,wBACd,sBAAA,EAAwB,iBAAA,wBACxB,OAAA;EArBU;;;EA2BrB,OAAA,CAAA,GAAW,uBAAA,CAAwB,UAAA;EAvBlC;;;EA8BD,MAAA,CAAA,GAAU,uBAAA,CAAwB,UAAA;EAIlC,MAAA,GAAA,CACL,IAAA,UACA,EAAA,GAAK,GAAA,EAAK,kBAAA,cAAgC,GAAA,EAAK,aAAA,KAAkB,CAAA,GAChE,UAAA,CAAW,iBAAA,CAAkB,CAAA;EAWzB,MAAA,GAAA,CACL,IAAA,UACA,EAAA,GAAK,GAAA,EAAK,kBAAA,cAAgC,GAAA,EAAK,aAAA,KAAkB,CAAA,GAChE,UAAA,CAAW,iBAAA,CAAkB,CAAA;AAAA;AAAA,cAOrB,cAAA;EAAA,iBAEQ,EAAA;EAAA,iBACA,aAAA;EAAA,iBACA,cAAA;cAFA,EAAA,EAAI,QAAA,EACJ,aAAA,EAAe,UAAA,EACf,cAAA,EAAgB,qBAAA;EAG7B,cAAA,wBAAA,CACJ,SAAA,WACA,QAAA,WAAmB,eAAA,EACnB,OAAA,EAAS,CAAA,IACT,MAAA,GAAS,EAAA,EAAI,aAAA,KAAkB,MAAA,SAAe,MAAA,IAAU,OAAA,CAAQ,MAAA,SAAe,MAAA,KAC9E,OAAA,CAAQ,iBAAA,CAAkB,CAAA;EAyB7B,YAAA,CAAa,EAAA,EAAI,aAAA,EAAe,KAAA,YAAiB,MAAA;EAI3C,cAAA,CACJ,QAAA,WAAmB,eAAA,EACnB,MAAA,WACA,IAAA,EAAM,MAAA,oBAA0B,OAAA,CAAQ,MAAA,oBACxC,GAAA,GAAK,iBAAA,GACJ,OAAA,CAAQ,mBAAA;AAAA;AAAA,cAmCA,OAAA,WAAO,OAAA"}
@@ -3,7 +3,6 @@ import { MiddleLayer, Pl, createRenderTemplate, field, initDriverKit, loadTempla
3
3
  import { randomUUID } from "node:crypto";
4
4
  import path from "node:path";
5
5
  import { Computable } from "@milaboratories/computable";
6
-
7
6
  //#region src/test-template.ts
8
7
  var TestRenderResults = class {
9
8
  constructor(resultEntry) {
@@ -130,7 +129,7 @@ const tplTest = plTest.extend({
130
129
  }));
131
130
  }
132
131
  });
133
-
134
132
  //#endregion
135
133
  export { TestRenderResults, TestWorkflowResults, TplTestHelpers, tplTest };
134
+
136
135
  //# sourceMappingURL=test-template.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-template.js","names":[],"sources":["../src/test-template.ts"],"sourcesContent":["import type {\n ComputableCtx,\n ComputableStableDefined,\n UnwrapComputables,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type {\n AnyRef,\n MiddleLayerDriverKit,\n PlClient,\n PlTransaction,\n ResourceId,\n TemplateSpecAny,\n} from \"@milaboratories/pl-middle-layer\";\nimport {\n createRenderTemplate,\n field,\n initDriverKit,\n loadTemplate,\n MiddleLayer,\n Pl,\n prepareTemplateSpec,\n toGlobalResourceId,\n} from \"@milaboratories/pl-middle-layer\";\nimport type {\n PlTreeEntry,\n PlTreeNodeAccessor,\n SynchronizedTreeState,\n} from \"@milaboratories/pl-tree\";\nimport { randomUUID } from \"node:crypto\";\nimport path from \"node:path\";\nimport { plTest } from \"./test-pl\";\n\nexport type WorkflowRenderOps = {\n parent?: ResourceId;\n exportProcessor?: TemplateSpecAny;\n blockId?: string;\n};\n\nexport class TestRenderResults<O extends string> {\n constructor(public readonly resultEntry: PlTreeEntry) {}\n\n public computeOutput<R>(\n name: O,\n cb: (acc: PlTreeNodeAccessor | undefined, ctx: ComputableCtx) => R,\n ): Computable<UnwrapComputables<R> | undefined> {\n return Computable.make((ctx) => {\n const outputAccessor = ctx\n .accessor(this.resultEntry)\n .node()\n .traverse({ field: name, assertFieldType: \"Input\" });\n return cb(outputAccessor, ctx);\n });\n }\n}\n\nexport class TestWorkflowResults {\n constructor(\n public readonly renderResult: TestRenderResults<\"context\" | \"result\">,\n public readonly processedExportsResult: TestRenderResults<\"result\"> | undefined,\n public readonly blockId: string,\n ) {}\n\n /**\n * Returns context id of this workflow\n * */\n public context(): ComputableStableDefined<ResourceId> {\n return this.renderResult.computeOutput(\"context\", (cb) => cb?.id).withStableType();\n }\n\n /**\n * Returns context id of this workflow\n * */\n public result(): ComputableStableDefined<ResourceId> {\n return this.renderResult.computeOutput(\"result\", (cb) => cb?.id).withStableType();\n }\n\n public export<R>(\n name: string,\n cb: (acc: PlTreeNodeAccessor | undefined, ctx: ComputableCtx) => R,\n ): Computable<UnwrapComputables<R> | undefined> {\n if (this.processedExportsResult !== undefined)\n return this.processedExportsResult.computeOutput(\"result\", (acc, ctx) => {\n return cb(acc?.traverse({ field: name, assertFieldType: \"Input\" }), ctx);\n });\n else\n return this.renderResult.computeOutput(\"context\", (acc, ctx) => {\n return cb(acc?.traverse({ field: `values/${name}`, assertFieldType: \"Input\" }), ctx);\n });\n }\n\n public output<R>(\n name: string,\n cb: (acc: PlTreeNodeAccessor | undefined, ctx: ComputableCtx) => R,\n ): Computable<UnwrapComputables<R> | undefined> {\n return this.renderResult.computeOutput(\"result\", (acc, ctx) => {\n return cb(acc?.traverse({ field: name, assertFieldType: \"Input\" }), ctx);\n });\n }\n}\n\nexport class TplTestHelpers {\n constructor(\n private readonly pl: PlClient,\n private readonly resultRootRid: ResourceId,\n private readonly resultRootTree: SynchronizedTreeState,\n ) {}\n\n async renderTemplate<const O extends string>(\n ephemeral: boolean,\n template: string | TemplateSpecAny,\n outputs: O[],\n inputs: (tx: PlTransaction) => Record<string, AnyRef> | Promise<Record<string, AnyRef>>,\n ): Promise<TestRenderResults<O>> {\n const runId = randomUUID();\n const spec =\n typeof template === \"string\"\n ? await prepareTemplateSpec({\n type: \"from-file\",\n path: `./dist/tengo/tpl/${template}.plj.gz`,\n })\n : await prepareTemplateSpec(template);\n const { resultMapRid } = await this.pl.withWriteTx(\"TemplateRender\", async (tx) => {\n const tpl = loadTemplate(tx, spec);\n const renderedInputs = await inputs(tx);\n const futureOutputs = await createRenderTemplate(tx, tpl, ephemeral, renderedInputs, outputs);\n const resultMap = Pl.createPlMap(tx, futureOutputs, ephemeral);\n tx.createField(field(this.resultRootRid, runId), \"Dynamic\", resultMap);\n const resultMapRid = await toGlobalResourceId(resultMap);\n await tx.commit();\n return {\n resultMapRid,\n };\n });\n await this.resultRootTree.refreshState();\n return new TestRenderResults(this.resultRootTree.entry(resultMapRid));\n }\n\n createObject(tx: PlTransaction, value: unknown): AnyRef {\n return tx.createValue(Pl.JsonObject, JSON.stringify(value));\n }\n\n async renderWorkflow(\n workflow: string | TemplateSpecAny,\n preRun: boolean,\n args: Record<string, unknown> | Promise<Record<string, unknown>>,\n ops: WorkflowRenderOps = {},\n ): Promise<TestWorkflowResults> {\n const blockId = ops.blockId ?? randomUUID();\n const mainResult: TestRenderResults<\"result\" | \"context\"> = await this.renderTemplate(\n true,\n workflow,\n [\"result\", \"context\"],\n (tx) => {\n let ctx = undefined;\n if (ops.parent) {\n ctx = ops.parent;\n } else {\n ctx = tx.createEphemeral({ name: \"BContextEnd\", version: \"1\" });\n tx.lock(ctx);\n }\n\n return {\n args: this.createObject(tx, args),\n blockId: this.createObject(tx, blockId),\n isProduction: this.createObject(tx, !preRun),\n context: ctx,\n };\n },\n );\n\n let exports: TestRenderResults<\"result\"> | undefined = undefined;\n if (ops.exportProcessor !== undefined) {\n exports = await this.renderTemplate(true, ops.exportProcessor, [\"result\"], (tx) => ({\n pf: tx.getFutureFieldValue(mainResult.resultEntry.rid, \"context\", \"Input\"),\n }));\n }\n\n return new TestWorkflowResults(mainResult, exports, blockId);\n }\n}\n\nexport const tplTest = plTest.extend<{\n helper: TplTestHelpers;\n driverKit: MiddleLayerDriverKit;\n}>({\n helper: async ({ pl, createTree }, use): Promise<void> => {\n const resultMap = await pl.withWriteTx(\"CreatingHelpers\", async (tx) => {\n const map = tx.createEphemeral(Pl.EphStdMap);\n const rootField = field(tx.clientRoot, \"templateTeste\");\n tx.createField(rootField, \"Dynamic\", map);\n await tx.commit();\n return await toGlobalResourceId(map);\n });\n const resultMapTree = await createTree(resultMap);\n await use(new TplTestHelpers(pl, resultMap, resultMapTree));\n },\n driverKit: async ({ pl, tmpFolder }, use): Promise<void> => {\n const frontendDownloadPath = path.join(tmpFolder, \"frontend\");\n\n const driverKit = await initDriverKit(pl, tmpFolder, frontendDownloadPath, {\n localSecret: MiddleLayer.generateLocalSecret(),\n localProjections: [], // TODO must be different with local pl\n openFileDialogCallback: () => {\n throw new Error(\"Not implemented.\");\n },\n });\n\n await use(driverKit);\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"test-template.js","names":[],"sources":["../src/test-template.ts"],"sourcesContent":["import type {\n ComputableCtx,\n ComputableStableDefined,\n UnwrapComputables,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type {\n AnyRef,\n MiddleLayerDriverKit,\n PlClient,\n PlTransaction,\n ResourceId,\n TemplateSpecAny,\n} from \"@milaboratories/pl-middle-layer\";\nimport {\n createRenderTemplate,\n field,\n initDriverKit,\n loadTemplate,\n MiddleLayer,\n Pl,\n prepareTemplateSpec,\n toGlobalResourceId,\n} from \"@milaboratories/pl-middle-layer\";\nimport type {\n PlTreeEntry,\n PlTreeNodeAccessor,\n SynchronizedTreeState,\n} from \"@milaboratories/pl-tree\";\nimport { randomUUID } from \"node:crypto\";\nimport path from \"node:path\";\nimport { plTest } from \"./test-pl\";\n\nexport type WorkflowRenderOps = {\n parent?: ResourceId;\n exportProcessor?: TemplateSpecAny;\n blockId?: string;\n};\n\nexport class TestRenderResults<O extends string> {\n constructor(public readonly resultEntry: PlTreeEntry) {}\n\n public computeOutput<R>(\n name: O,\n cb: (acc: PlTreeNodeAccessor | undefined, ctx: ComputableCtx) => R,\n ): Computable<UnwrapComputables<R> | undefined> {\n return Computable.make((ctx) => {\n const outputAccessor = ctx\n .accessor(this.resultEntry)\n .node()\n .traverse({ field: name, assertFieldType: \"Input\" });\n return cb(outputAccessor, ctx);\n });\n }\n}\n\nexport class TestWorkflowResults {\n constructor(\n public readonly renderResult: TestRenderResults<\"context\" | \"result\">,\n public readonly processedExportsResult: TestRenderResults<\"result\"> | undefined,\n public readonly blockId: string,\n ) {}\n\n /**\n * Returns context id of this workflow\n * */\n public context(): ComputableStableDefined<ResourceId> {\n return this.renderResult.computeOutput(\"context\", (cb) => cb?.id).withStableType();\n }\n\n /**\n * Returns context id of this workflow\n * */\n public result(): ComputableStableDefined<ResourceId> {\n return this.renderResult.computeOutput(\"result\", (cb) => cb?.id).withStableType();\n }\n\n public export<R>(\n name: string,\n cb: (acc: PlTreeNodeAccessor | undefined, ctx: ComputableCtx) => R,\n ): Computable<UnwrapComputables<R> | undefined> {\n if (this.processedExportsResult !== undefined)\n return this.processedExportsResult.computeOutput(\"result\", (acc, ctx) => {\n return cb(acc?.traverse({ field: name, assertFieldType: \"Input\" }), ctx);\n });\n else\n return this.renderResult.computeOutput(\"context\", (acc, ctx) => {\n return cb(acc?.traverse({ field: `values/${name}`, assertFieldType: \"Input\" }), ctx);\n });\n }\n\n public output<R>(\n name: string,\n cb: (acc: PlTreeNodeAccessor | undefined, ctx: ComputableCtx) => R,\n ): Computable<UnwrapComputables<R> | undefined> {\n return this.renderResult.computeOutput(\"result\", (acc, ctx) => {\n return cb(acc?.traverse({ field: name, assertFieldType: \"Input\" }), ctx);\n });\n }\n}\n\nexport class TplTestHelpers {\n constructor(\n private readonly pl: PlClient,\n private readonly resultRootRid: ResourceId,\n private readonly resultRootTree: SynchronizedTreeState,\n ) {}\n\n async renderTemplate<const O extends string>(\n ephemeral: boolean,\n template: string | TemplateSpecAny,\n outputs: O[],\n inputs: (tx: PlTransaction) => Record<string, AnyRef> | Promise<Record<string, AnyRef>>,\n ): Promise<TestRenderResults<O>> {\n const runId = randomUUID();\n const spec =\n typeof template === \"string\"\n ? await prepareTemplateSpec({\n type: \"from-file\",\n path: `./dist/tengo/tpl/${template}.plj.gz`,\n })\n : await prepareTemplateSpec(template);\n const { resultMapRid } = await this.pl.withWriteTx(\"TemplateRender\", async (tx) => {\n const tpl = loadTemplate(tx, spec);\n const renderedInputs = await inputs(tx);\n const futureOutputs = await createRenderTemplate(tx, tpl, ephemeral, renderedInputs, outputs);\n const resultMap = Pl.createPlMap(tx, futureOutputs, ephemeral);\n tx.createField(field(this.resultRootRid, runId), \"Dynamic\", resultMap);\n const resultMapRid = await toGlobalResourceId(resultMap);\n await tx.commit();\n return {\n resultMapRid,\n };\n });\n await this.resultRootTree.refreshState();\n return new TestRenderResults(this.resultRootTree.entry(resultMapRid));\n }\n\n createObject(tx: PlTransaction, value: unknown): AnyRef {\n return tx.createValue(Pl.JsonObject, JSON.stringify(value));\n }\n\n async renderWorkflow(\n workflow: string | TemplateSpecAny,\n preRun: boolean,\n args: Record<string, unknown> | Promise<Record<string, unknown>>,\n ops: WorkflowRenderOps = {},\n ): Promise<TestWorkflowResults> {\n const blockId = ops.blockId ?? randomUUID();\n const mainResult: TestRenderResults<\"result\" | \"context\"> = await this.renderTemplate(\n true,\n workflow,\n [\"result\", \"context\"],\n (tx) => {\n let ctx = undefined;\n if (ops.parent) {\n ctx = ops.parent;\n } else {\n ctx = tx.createEphemeral({ name: \"BContextEnd\", version: \"1\" });\n tx.lock(ctx);\n }\n\n return {\n args: this.createObject(tx, args),\n blockId: this.createObject(tx, blockId),\n isProduction: this.createObject(tx, !preRun),\n context: ctx,\n };\n },\n );\n\n let exports: TestRenderResults<\"result\"> | undefined = undefined;\n if (ops.exportProcessor !== undefined) {\n exports = await this.renderTemplate(true, ops.exportProcessor, [\"result\"], (tx) => ({\n pf: tx.getFutureFieldValue(mainResult.resultEntry.rid, \"context\", \"Input\"),\n }));\n }\n\n return new TestWorkflowResults(mainResult, exports, blockId);\n }\n}\n\nexport const tplTest = plTest.extend<{\n helper: TplTestHelpers;\n driverKit: MiddleLayerDriverKit;\n}>({\n helper: async ({ pl, createTree }, use): Promise<void> => {\n const resultMap = await pl.withWriteTx(\"CreatingHelpers\", async (tx) => {\n const map = tx.createEphemeral(Pl.EphStdMap);\n const rootField = field(tx.clientRoot, \"templateTeste\");\n tx.createField(rootField, \"Dynamic\", map);\n await tx.commit();\n return await toGlobalResourceId(map);\n });\n const resultMapTree = await createTree(resultMap);\n await use(new TplTestHelpers(pl, resultMap, resultMapTree));\n },\n driverKit: async ({ pl, tmpFolder }, use): Promise<void> => {\n const frontendDownloadPath = path.join(tmpFolder, \"frontend\");\n\n const driverKit = await initDriverKit(pl, tmpFolder, frontendDownloadPath, {\n localSecret: MiddleLayer.generateLocalSecret(),\n localProjections: [], // TODO must be different with local pl\n openFileDialogCallback: () => {\n throw new Error(\"Not implemented.\");\n },\n });\n\n await use(driverKit);\n },\n});\n"],"mappings":"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"}
package/dist/util.cjs CHANGED
@@ -1,8 +1,7 @@
1
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
2
2
  let node_fs_promises = require("node:fs/promises");
3
3
  node_fs_promises = require_runtime.__toESM(node_fs_promises);
4
4
  let _milaboratories_pl_client = require("@milaboratories/pl-client");
5
-
6
5
  //#region src/util.ts
7
6
  async function awaitStableState(computable, timeout = 5e3) {
8
7
  try {
@@ -15,7 +14,7 @@ async function awaitStableState(computable, timeout = 5e3) {
15
14
  } else throw e;
16
15
  }
17
16
  }
18
-
19
17
  //#endregion
20
18
  exports.awaitStableState = awaitStableState;
19
+
21
20
  //# sourceMappingURL=util.cjs.map
package/dist/util.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.cjs","names":[],"sources":["../src/util.ts"],"sourcesContent":["import type { Computable } from \"@milaboratories/computable\";\nimport { isTimeoutOrCancelError } from \"@milaboratories/pl-client\";\nimport type { BigIntStats } from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\n\nexport async function tryStat(path: string): Promise<BigIntStats | undefined> {\n try {\n return await fsp.stat(path, { bigint: true });\n } catch (error: unknown) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n}\n\nexport async function awaitStableState<S>(\n computable: Computable<unknown, S>,\n timeout: number | AbortSignal = 5000,\n): Promise<S> {\n try {\n return await computable.awaitStableValue(\n typeof timeout === \"number\" ? AbortSignal.timeout(timeout) : timeout,\n );\n } catch (e: unknown) {\n if (isTimeoutOrCancelError(e)) {\n const fullValue = await computable.getFullValue();\n console.dir(fullValue, { depth: 5 });\n throw new Error(\n `Aborted while awaiting stable value. Unstable marker: ${fullValue.unstableMarker}`,\n { cause: e },\n );\n } else throw e;\n }\n}\n"],"mappings":";;;;;;AAgBA,eAAsB,iBACpB,YACA,UAAgC,KACpB;AACZ,KAAI;AACF,SAAO,MAAM,WAAW,iBACtB,OAAO,YAAY,WAAW,YAAY,QAAQ,QAAQ,GAAG,QAC9D;UACM,GAAY;AACnB,4DAA2B,EAAE,EAAE;GAC7B,MAAM,YAAY,MAAM,WAAW,cAAc;AACjD,WAAQ,IAAI,WAAW,EAAE,OAAO,GAAG,CAAC;AACpC,SAAM,IAAI,MACR,yDAAyD,UAAU,kBACnE,EAAE,OAAO,GAAG,CACb;QACI,OAAM"}
1
+ {"version":3,"file":"util.cjs","names":[],"sources":["../src/util.ts"],"sourcesContent":["import type { Computable } from \"@milaboratories/computable\";\nimport { isTimeoutOrCancelError } from \"@milaboratories/pl-client\";\nimport type { BigIntStats } from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\n\nexport async function tryStat(path: string): Promise<BigIntStats | undefined> {\n try {\n return await fsp.stat(path, { bigint: true });\n } catch (error: unknown) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n}\n\nexport async function awaitStableState<S>(\n computable: Computable<unknown, S>,\n timeout: number | AbortSignal = 5000,\n): Promise<S> {\n try {\n return await computable.awaitStableValue(\n typeof timeout === \"number\" ? AbortSignal.timeout(timeout) : timeout,\n );\n } catch (e: unknown) {\n if (isTimeoutOrCancelError(e)) {\n const fullValue = await computable.getFullValue();\n console.dir(fullValue, { depth: 5 });\n throw new Error(\n `Aborted while awaiting stable value. Unstable marker: ${fullValue.unstableMarker}`,\n { cause: e },\n );\n } else throw e;\n }\n}\n"],"mappings":";;;;;AAgBA,eAAsB,iBACpB,YACA,UAAgC,KACpB;AACZ,KAAI;AACF,SAAO,MAAM,WAAW,iBACtB,OAAO,YAAY,WAAW,YAAY,QAAQ,QAAQ,GAAG,QAC9D;UACM,GAAY;AACnB,OAAA,GAAA,0BAAA,wBAA2B,EAAE,EAAE;GAC7B,MAAM,YAAY,MAAM,WAAW,cAAc;AACjD,WAAQ,IAAI,WAAW,EAAE,OAAO,GAAG,CAAC;AACpC,SAAM,IAAI,MACR,yDAAyD,UAAU,kBACnE,EAAE,OAAO,GAAG,CACb;QACI,OAAM"}
package/dist/util.d.ts CHANGED
@@ -1,6 +1,4 @@
1
1
  import { Computable } from "@milaboratories/computable";
2
- import "node:fs";
3
-
4
2
  //#region src/util.d.ts
5
3
  declare function awaitStableState<S>(computable: Computable<unknown, S>, timeout?: number | AbortSignal): Promise<S>;
6
4
  //#endregion
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","names":[],"sources":["../src/util.ts"],"mappings":";;iBAgBsB,gBAAA,GAAA,CACpB,UAAA,EAAY,UAAA,UAAoB,CAAA,GAChC,OAAA,YAAkB,WAAA,GACjB,OAAA,CAAQ,CAAA"}
package/dist/util.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import "node:fs/promises";
2
2
  import { isTimeoutOrCancelError } from "@milaboratories/pl-client";
3
-
4
3
  //#region src/util.ts
5
4
  async function awaitStableState(computable, timeout = 5e3) {
6
5
  try {
@@ -13,7 +12,7 @@ async function awaitStableState(computable, timeout = 5e3) {
13
12
  } else throw e;
14
13
  }
15
14
  }
16
-
17
15
  //#endregion
18
16
  export { awaitStableState };
17
+
19
18
  //# sourceMappingURL=util.js.map
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","names":[],"sources":["../src/util.ts"],"sourcesContent":["import type { Computable } from \"@milaboratories/computable\";\nimport { isTimeoutOrCancelError } from \"@milaboratories/pl-client\";\nimport type { BigIntStats } from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\n\nexport async function tryStat(path: string): Promise<BigIntStats | undefined> {\n try {\n return await fsp.stat(path, { bigint: true });\n } catch (error: unknown) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n}\n\nexport async function awaitStableState<S>(\n computable: Computable<unknown, S>,\n timeout: number | AbortSignal = 5000,\n): Promise<S> {\n try {\n return await computable.awaitStableValue(\n typeof timeout === \"number\" ? AbortSignal.timeout(timeout) : timeout,\n );\n } catch (e: unknown) {\n if (isTimeoutOrCancelError(e)) {\n const fullValue = await computable.getFullValue();\n console.dir(fullValue, { depth: 5 });\n throw new Error(\n `Aborted while awaiting stable value. Unstable marker: ${fullValue.unstableMarker}`,\n { cause: e },\n );\n } else throw e;\n }\n}\n"],"mappings":";;;;AAgBA,eAAsB,iBACpB,YACA,UAAgC,KACpB;AACZ,KAAI;AACF,SAAO,MAAM,WAAW,iBACtB,OAAO,YAAY,WAAW,YAAY,QAAQ,QAAQ,GAAG,QAC9D;UACM,GAAY;AACnB,MAAI,uBAAuB,EAAE,EAAE;GAC7B,MAAM,YAAY,MAAM,WAAW,cAAc;AACjD,WAAQ,IAAI,WAAW,EAAE,OAAO,GAAG,CAAC;AACpC,SAAM,IAAI,MACR,yDAAyD,UAAU,kBACnE,EAAE,OAAO,GAAG,CACb;QACI,OAAM"}
1
+ {"version":3,"file":"util.js","names":[],"sources":["../src/util.ts"],"sourcesContent":["import type { Computable } from \"@milaboratories/computable\";\nimport { isTimeoutOrCancelError } from \"@milaboratories/pl-client\";\nimport type { BigIntStats } from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\n\nexport async function tryStat(path: string): Promise<BigIntStats | undefined> {\n try {\n return await fsp.stat(path, { bigint: true });\n } catch (error: unknown) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n}\n\nexport async function awaitStableState<S>(\n computable: Computable<unknown, S>,\n timeout: number | AbortSignal = 5000,\n): Promise<S> {\n try {\n return await computable.awaitStableValue(\n typeof timeout === \"number\" ? AbortSignal.timeout(timeout) : timeout,\n );\n } catch (e: unknown) {\n if (isTimeoutOrCancelError(e)) {\n const fullValue = await computable.getFullValue();\n console.dir(fullValue, { depth: 5 });\n throw new Error(\n `Aborted while awaiting stable value. Unstable marker: ${fullValue.unstableMarker}`,\n { cause: e },\n );\n } else throw e;\n }\n}\n"],"mappings":";;;AAgBA,eAAsB,iBACpB,YACA,UAAgC,KACpB;AACZ,KAAI;AACF,SAAO,MAAM,WAAW,iBACtB,OAAO,YAAY,WAAW,YAAY,QAAQ,QAAQ,GAAG,QAC9D;UACM,GAAY;AACnB,MAAI,uBAAuB,EAAE,EAAE;GAC7B,MAAM,YAAY,MAAM,WAAW,cAAc;AACjD,WAAQ,IAAI,WAAW,EAAE,OAAO,GAAG,CAAC;AACpC,SAAM,IAAI,MACR,yDAAyD,UAAU,kBACnE,EAAE,OAAO,GAAG,CACb;QACI,OAAM"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/test",
3
- "version": "1.63.6",
3
+ "version": "1.63.8",
4
4
  "description": "Typescript Block Test Helpers",
5
5
  "license": "UNLICENSED",
6
6
  "files": [
@@ -17,20 +17,20 @@
17
17
  }
18
18
  },
19
19
  "dependencies": {
20
- "@vitest/coverage-istanbul": "^4.0.18",
21
- "vitest": "^4.0.18",
22
- "@milaboratories/computable": "2.9.2",
20
+ "@vitest/coverage-istanbul": "^4.1.3",
21
+ "vitest": "^4.1.3",
23
22
  "@platforma-sdk/model": "1.63.1",
24
- "@milaboratories/pl-middle-layer": "1.55.0",
25
23
  "@milaboratories/pl-client": "3.0.0",
26
- "@milaboratories/pl-tree": "1.9.7"
24
+ "@milaboratories/pl-middle-layer": "1.55.2",
25
+ "@milaboratories/pl-tree": "1.9.7",
26
+ "@milaboratories/computable": "2.9.2"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/node": "~24.5.2",
30
30
  "typescript": "~5.9.3",
31
- "@milaboratories/ts-configs": "1.2.2",
32
- "@milaboratories/ts-builder": "1.3.0",
33
- "@milaboratories/build-configs": "1.5.2"
31
+ "@milaboratories/ts-builder": "1.3.1",
32
+ "@milaboratories/build-configs": "2.0.0",
33
+ "@milaboratories/ts-configs": "1.2.3"
34
34
  },
35
35
  "scripts": {
36
36
  "build": "ts-builder build --target node",