@platforma-sdk/test 1.58.6 → 1.58.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.cjs +29 -0
- package/dist/index.cjs +22 -38
- package/dist/index.d.ts +6 -6
- package/dist/index.js +7 -7
- package/dist/test-block.cjs +96 -126
- package/dist/test-block.cjs.map +1 -1
- package/dist/test-block.d.ts +27 -21
- package/dist/test-block.js +92 -104
- package/dist/test-block.js.map +1 -1
- package/dist/test-pl.cjs +63 -96
- package/dist/test-pl.cjs.map +1 -1
- package/dist/test-pl.d.ts +12 -8
- package/dist/test-pl.js +60 -75
- package/dist/test-pl.js.map +1 -1
- package/dist/test-template.cjs +134 -145
- package/dist/test-template.cjs.map +1 -1
- package/dist/test-template.d.ts +47 -42
- package/dist/test-template.js +131 -142
- package/dist/test-template.js.map +1 -1
- package/dist/util.cjs +17 -17
- package/dist/util.cjs.map +1 -1
- package/dist/util.d.ts +7 -4
- package/dist/util.js +15 -15
- package/dist/util.js.map +1 -1
- package/package.json +6 -6
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/simple.test.d.ts +0 -2
- package/dist/simple.test.d.ts.map +0 -1
- package/dist/test-block.d.ts.map +0 -1
- package/dist/test-pl.d.ts.map +0 -1
- package/dist/test-template.d.ts.map +0 -1
- package/dist/util.d.ts.map +0 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
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
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
23
|
+
value: mod,
|
|
24
|
+
enumerable: true
|
|
25
|
+
}) : target, mod));
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
|
|
29
|
+
exports.__toESM = __toESM;
|
package/dist/index.cjs
CHANGED
|
@@ -1,39 +1,23 @@
|
|
|
1
|
-
'
|
|
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
|
+
let _milaboratories_pl_middle_layer = require("@milaboratories/pl-middle-layer");
|
|
8
|
+
_milaboratories_pl_middle_layer = require_runtime.__toESM(_milaboratories_pl_middle_layer);
|
|
2
9
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
get: function () { return e[k]; }
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
n.default = e;
|
|
23
|
-
return Object.freeze(n);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
var plMiddleLayer__namespace = /*#__PURE__*/_interopNamespaceDefault(plMiddleLayer);
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
exports.plTest = testPl.plTest;
|
|
31
|
-
exports.TestRenderResults = testTemplate.TestRenderResults;
|
|
32
|
-
exports.TestWorkflowResults = testTemplate.TestWorkflowResults;
|
|
33
|
-
exports.TplTestHelpers = testTemplate.TplTestHelpers;
|
|
34
|
-
exports.tplTest = testTemplate.tplTest;
|
|
35
|
-
exports.DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT = testBlock.DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT;
|
|
36
|
-
exports.blockTest = testBlock.blockTest;
|
|
37
|
-
exports.awaitStableState = util.awaitStableState;
|
|
38
|
-
exports.ML = plMiddleLayer__namespace;
|
|
39
|
-
//# sourceMappingURL=index.cjs.map
|
|
10
|
+
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
|
+
}
|
|
16
|
+
});
|
|
17
|
+
exports.TestRenderResults = require_test_template.TestRenderResults;
|
|
18
|
+
exports.TestWorkflowResults = require_test_template.TestWorkflowResults;
|
|
19
|
+
exports.TplTestHelpers = require_test_template.TplTestHelpers;
|
|
20
|
+
exports.awaitStableState = require_util.awaitStableState;
|
|
21
|
+
exports.blockTest = require_test_block.blockTest;
|
|
22
|
+
exports.plTest = require_test_pl.plTest;
|
|
23
|
+
exports.tplTest = require_test_template.tplTest;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { plTest } from "./test-pl.js";
|
|
2
|
+
import { TestRenderResults, TestWorkflowResults, TplTestHelpers, WorkflowRenderOps, tplTest } from "./test-template.js";
|
|
3
|
+
import { AwaitBlockDoneNormalized, AwaitBlockDoneOps, DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT, RawHelpers, blockTest } from "./test-block.js";
|
|
4
|
+
import { awaitStableState } from "./util.js";
|
|
5
|
+
import * as ML from "@milaboratories/pl-middle-layer";
|
|
6
|
+
export { AwaitBlockDoneNormalized, AwaitBlockDoneOps, DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT, ML, RawHelpers, TestRenderResults, TestWorkflowResults, TplTestHelpers, WorkflowRenderOps, awaitStableState, blockTest, plTest, tplTest };
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import * as
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { plTest } from "./test-pl.js";
|
|
2
|
+
import { TestRenderResults, TestWorkflowResults, TplTestHelpers, tplTest } from "./test-template.js";
|
|
3
|
+
import { awaitStableState } from "./util.js";
|
|
4
|
+
import { DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT, blockTest } from "./test-block.js";
|
|
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 };
|
package/dist/test-block.cjs
CHANGED
|
@@ -1,135 +1,105 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
function _interopNamespaceDefault(e) {
|
|
10
|
-
var n = Object.create(null);
|
|
11
|
-
if (e) {
|
|
12
|
-
Object.keys(e).forEach(function (k) {
|
|
13
|
-
if (k !== 'default') {
|
|
14
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
15
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
16
|
-
enumerable: true,
|
|
17
|
-
get: function () { return e[k]; }
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
n.default = e;
|
|
23
|
-
return Object.freeze(n);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
var fsp__namespace = /*#__PURE__*/_interopNamespaceDefault(fsp);
|
|
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
|
+
let _milaboratories_pl_middle_layer = require("@milaboratories/pl-middle-layer");
|
|
5
|
+
let node_fs_promises = require("node:fs/promises");
|
|
6
|
+
node_fs_promises = require_runtime.__toESM(node_fs_promises);
|
|
7
|
+
let node_path = require("node:path");
|
|
8
|
+
node_path = require_runtime.__toESM(node_path);
|
|
27
9
|
|
|
10
|
+
//#region src/test-block.ts
|
|
28
11
|
function normalizeABDOpts(timeoutOrOps) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
? AbortSignal.timeout(ops.timeout)
|
|
40
|
-
: ops.timeout;
|
|
41
|
-
return {
|
|
42
|
-
timeout: abortSignal,
|
|
43
|
-
ignoreBlockError: Boolean(ops.ignoreBlockError),
|
|
44
|
-
};
|
|
12
|
+
let ops = {};
|
|
13
|
+
if (timeoutOrOps !== void 0) if (typeof timeoutOrOps === "object" && !(timeoutOrOps instanceof AbortSignal)) ops = {
|
|
14
|
+
...ops,
|
|
15
|
+
...timeoutOrOps
|
|
16
|
+
};
|
|
17
|
+
else ops.timeout = timeoutOrOps;
|
|
18
|
+
return {
|
|
19
|
+
timeout: typeof ops.timeout === "undefined" ? AbortSignal.timeout(DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT) : typeof ops.timeout === "number" ? AbortSignal.timeout(ops.timeout) : ops.timeout,
|
|
20
|
+
ignoreBlockError: Boolean(ops.ignoreBlockError)
|
|
21
|
+
};
|
|
45
22
|
}
|
|
46
|
-
const DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT =
|
|
23
|
+
const DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT = 5e3;
|
|
47
24
|
async function awaitBlockDone(prj, blockId, timeoutOrOps) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
try {
|
|
71
|
-
await overview.awaitChange(ops.timeout);
|
|
72
|
-
}
|
|
73
|
-
catch (e) {
|
|
74
|
-
console.dir(blockOverview, { depth: 5 });
|
|
75
|
-
console.dir(await state.getValue(), { depth: 5 });
|
|
76
|
-
throw new Error("Aborted while awaiting block done.", { cause: e });
|
|
77
|
-
}
|
|
78
|
-
}
|
|
25
|
+
const ops = normalizeABDOpts(timeoutOrOps);
|
|
26
|
+
const overview = prj.overview;
|
|
27
|
+
const state = prj.getBlockState(blockId);
|
|
28
|
+
while (true) {
|
|
29
|
+
const blockOverview = (await overview.getValue()).blocks.find((b) => b.id == blockId);
|
|
30
|
+
if (blockOverview === void 0) throw new Error(`Blocks not found: ${blockId}`);
|
|
31
|
+
if (blockOverview.outputErrors) if (ops.ignoreBlockError) return;
|
|
32
|
+
else {
|
|
33
|
+
let errorMessage = blockOverview.outputsError;
|
|
34
|
+
if (errorMessage === void 0) errorMessage = blockOverview.exportsError;
|
|
35
|
+
throw new Error("Block error: " + (errorMessage ?? "no message"));
|
|
36
|
+
}
|
|
37
|
+
if (blockOverview.calculationStatus === "Done") return;
|
|
38
|
+
if (blockOverview.calculationStatus !== "Running") throw new Error(`Unexpected block status, block not calculating anything at the moment: ${blockOverview.calculationStatus}`);
|
|
39
|
+
try {
|
|
40
|
+
await overview.awaitChange(ops.timeout);
|
|
41
|
+
} catch (e) {
|
|
42
|
+
console.dir(blockOverview, { depth: 5 });
|
|
43
|
+
console.dir(await state.getValue(), { depth: 5 });
|
|
44
|
+
throw new Error("Aborted while awaiting block done.", { cause: e });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
79
47
|
}
|
|
80
|
-
const blockTest =
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
48
|
+
const blockTest = require_test_pl.plTest.extend({
|
|
49
|
+
ml: async ({ pl, tmpFolder }, use) => {
|
|
50
|
+
const frontendFolder = node_path.default.join(tmpFolder, "frontend");
|
|
51
|
+
const downloadFolder = node_path.default.join(tmpFolder, "download");
|
|
52
|
+
await node_fs_promises.mkdir(frontendFolder, { recursive: true });
|
|
53
|
+
await node_fs_promises.mkdir(downloadFolder, { recursive: true });
|
|
54
|
+
const ml = await _milaboratories_pl_middle_layer.MiddleLayer.init(pl, tmpFolder, {
|
|
55
|
+
defaultTreeOptions: {
|
|
56
|
+
pollingInterval: 250,
|
|
57
|
+
stopPollingDelay: 500
|
|
58
|
+
},
|
|
59
|
+
devBlockUpdateRecheckInterval: 300,
|
|
60
|
+
localSecret: _milaboratories_pl_middle_layer.MiddleLayer.generateLocalSecret(),
|
|
61
|
+
localProjections: [],
|
|
62
|
+
openFileDialogCallback: () => {
|
|
63
|
+
throw new Error("Not implemented.");
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
ml.addRuntimeCapability("requiresUIAPIVersion", 1);
|
|
67
|
+
ml.addRuntimeCapability("requiresUIAPIVersion", 2);
|
|
68
|
+
ml.addRuntimeCapability("requiresUIAPIVersion", 3);
|
|
69
|
+
try {
|
|
70
|
+
await use(ml);
|
|
71
|
+
} finally {
|
|
72
|
+
await ml.close();
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
rawPrj: async ({ ml }, use) => {
|
|
76
|
+
const pRid1 = await ml.createProject({ label: "Test Project" }, "test_project");
|
|
77
|
+
await ml.openProject(pRid1);
|
|
78
|
+
const prj = ml.getOpenedProject(pRid1);
|
|
79
|
+
try {
|
|
80
|
+
await use(prj);
|
|
81
|
+
} finally {
|
|
82
|
+
ml.closeProject(pRid1);
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
helpers: async ({ ml, rawPrj }, use) => {
|
|
86
|
+
await use({
|
|
87
|
+
async awaitBlockDone(blockId, timeout) {
|
|
88
|
+
await awaitBlockDone(rawPrj, blockId, timeout);
|
|
89
|
+
},
|
|
90
|
+
awaitBlockDoneAndGetStableBlockState: async (blockId, timeoutOrOps) => {
|
|
91
|
+
const ops = normalizeABDOpts(timeoutOrOps);
|
|
92
|
+
await awaitBlockDone(rawPrj, blockId, ops);
|
|
93
|
+
return await require_util.awaitStableState(rawPrj.getBlockState(blockId), ops.timeout);
|
|
94
|
+
},
|
|
95
|
+
async getLocalFileHandle(localPath) {
|
|
96
|
+
return await ml.internalDriverKit.lsDriver.getLocalFileHandle(node_path.default.resolve(localPath));
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
131
100
|
});
|
|
132
101
|
|
|
102
|
+
//#endregion
|
|
133
103
|
exports.DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT = DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT;
|
|
134
104
|
exports.blockTest = blockTest;
|
|
135
|
-
//# sourceMappingURL=test-block.cjs.map
|
|
105
|
+
//# sourceMappingURL=test-block.cjs.map
|
package/dist/test-block.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-block.cjs","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 { 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\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"],"
|
|
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 { 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\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":";;;;;;;;;;AAsBA,SAAS,iBAAiB,cAAqE;CAC7F,IAAI,MAAyB,EAAE;AAC/B,KAAI,iBAAiB,OACnB,KAAI,OAAO,iBAAiB,YAAY,EAAE,wBAAwB,aAChE,OAAM;EAAE,GAAG;EAAK,GAAG;EAAc;KAC9B,KAAI,UAAU;AAQrB,QAAO;EACL,SANA,OAAO,IAAI,YAAY,cACnB,YAAY,QAAQ,iCAAiC,GACrD,OAAO,IAAI,YAAY,WACrB,YAAY,QAAQ,IAAI,QAAQ,GAChC,IAAI;EAGV,kBAAkB,QAAQ,IAAI,iBAAiB;EAChD;;AAGH,MAAa,mCAAmC;AAEhD,eAAe,eACb,KACA,SACA,cACA;CACA,MAAM,MAAM,iBAAiB,aAAa;CAC1C,MAAM,WAAW,IAAI;CACrB,MAAM,QAAQ,IAAI,cAAc,QAAQ;AACxC,QAAO,MAAM;EAEX,MAAM,iBADoB,MAAM,SAAS,UAAU,EACZ,OAAO,MAAM,MAAM,EAAE,MAAM,QAAQ;AAC1E,MAAI,kBAAkB,OAAW,OAAM,IAAI,MAAM,qBAAqB,UAAU;AAChF,MAAI,cAAc,aAChB,KAAI,IAAI,iBAAkB;OACrB;GACH,IAAI,eAAe,cAAc;AACjC,OAAI,iBAAiB,OAAW,gBAAe,cAAc;AAC7D,SAAM,IAAI,MAAM,mBAAmB,gBAAgB,cAAc;;AAGrE,MAAI,cAAc,sBAAsB,OAAQ;AAChD,MAAI,cAAc,sBAAsB,UACtC,OAAM,IAAI,MACR,0EAA0E,cAAc,oBACzF;AACH,MAAI;AACF,SAAM,SAAS,YAAY,IAAI,QAAQ;WAChC,GAAQ;AACf,WAAQ,IAAI,eAAe,EAAE,OAAO,GAAG,CAAC;AACxC,WAAQ,IAAI,MAAM,MAAM,UAAU,EAAE,EAAE,OAAO,GAAG,CAAC;AACjD,SAAM,IAAI,MAAM,sCAAsC,EAAE,OAAO,GAAG,CAAC;;;;AAczE,MAAa,YAAYA,uBAAO,OAI7B;CACD,IAAI,OAAO,EAAE,IAAI,aAAa,QAAQ;EACpC,MAAM,iBAAiBC,kBAAK,KAAK,WAAW,WAAW;EACvD,MAAM,iBAAiBA,kBAAK,KAAK,WAAW,WAAW;AACvD,QAAMC,iBAAI,MAAM,gBAAgB,EAAE,WAAW,MAAM,CAAC;AACpD,QAAMA,iBAAI,MAAM,gBAAgB,EAAE,WAAW,MAAM,CAAC;EAEpD,MAAM,KAAK,MAAMC,4CAAY,KAAK,IAAI,WAAW;GAC/C,oBAAoB;IAAE,iBAAiB;IAAK,kBAAkB;IAAK;GACnE,+BAA+B;GAC/B,aAAaA,4CAAY,qBAAqB;GAC9C,kBAAkB,EAAE;GACpB,8BAA8B;AAC5B,UAAM,IAAI,MAAM,mBAAmB;;GAEtC,CAAC;AACF,KAAG,qBAAqB,wBAAwB,EAAE;AAClD,KAAG,qBAAqB,wBAAwB,EAAE;AAClD,KAAG,qBAAqB,wBAAwB,EAAE;AAElD,MAAI;AACF,SAAM,IAAI,GAAG;YACL;AACR,SAAM,GAAG,OAAO;;;CAGpB,QAAQ,OAAO,EAAE,MAAM,QAAQ;EAC7B,MAAM,QAAQ,MAAM,GAAG,cAAc,EAAE,OAAO,gBAAgB,EAAE,eAAe;AAC/E,QAAM,GAAG,YAAY,MAAM;EAC3B,MAAM,MAAM,GAAG,iBAAiB,MAAM;AACtC,MAAI;AACF,SAAM,IAAI,IAAI;YACN;AACR,MAAG,aAAa,MAAM;;;CAG1B,SAAS,OAAO,EAAE,IAAI,UAAU,QAAQ;AACtC,QAAM,IAAI;GACR,MAAM,eAAe,SAAS,SAAS;AACrC,UAAM,eAAe,QAAQ,SAAS,QAAQ;;GAEhD,sCAAsC,OACpC,SACA,iBACG;IACH,MAAM,MAAM,iBAAiB,aAAa;AAC1C,UAAM,eAAe,QAAQ,SAAS,IAAI;AAC1C,WAAQ,MAAMC,8BACZ,OAAO,cAAc,QAAQ,EAC7B,IAAI,QACL;;GAEH,MAAM,mBAAmB,WAAW;AAClC,WAAO,MAAM,GAAG,kBAAkB,SAAS,mBAAmBH,kBAAK,QAAQ,UAAU,CAAC;;GAEzF,CAAC;;CAEL,CAAC"}
|
package/dist/test-block.d.ts
CHANGED
|
@@ -1,26 +1,32 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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";
|
|
5
|
+
|
|
6
|
+
//#region src/test-block.d.ts
|
|
7
|
+
type AwaitBlockDoneOps = {
|
|
8
|
+
timeout?: number | AbortSignal;
|
|
9
|
+
ignoreBlockError?: boolean;
|
|
6
10
|
};
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
type AwaitBlockDoneNormalized = {
|
|
12
|
+
timeout: AbortSignal;
|
|
13
|
+
ignoreBlockError: boolean;
|
|
10
14
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
declare const DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT = 5000;
|
|
16
|
+
interface RawHelpers {
|
|
17
|
+
awaitBlockDone(blockId: string, timeoutOrOps?: number | AwaitBlockDoneOps): Promise<void>;
|
|
18
|
+
awaitBlockDoneAndGetStableBlockState<Pl extends Platforma>(blockId: string, timeoutOrOps?: number | AwaitBlockDoneOps): Promise<InferBlockState<Pl>>;
|
|
19
|
+
getLocalFileHandle(localPath: string): Promise<LocalImportFileHandle>;
|
|
16
20
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
+
tmpFolder: string;
|
|
26
|
+
ml: MiddleLayer;
|
|
27
|
+
rawPrj: Project;
|
|
28
|
+
helpers: RawHelpers;
|
|
25
29
|
}>;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { AwaitBlockDoneNormalized, AwaitBlockDoneOps, DEFAULT_AWAIT_BLOCK_DONE_TIMEOUT, RawHelpers, blockTest };
|
|
26
32
|
//# sourceMappingURL=test-block.d.ts.map
|