@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.
@@ -1,147 +1,136 @@
1
- import { Computable } from '@milaboratories/computable';
2
- import { initDriverKit, MiddleLayer, Pl, field, toGlobalResourceId, prepareTemplateSpec, loadTemplate, createRenderTemplate } from '@milaboratories/pl-middle-layer';
3
- import { randomUUID } from 'node:crypto';
4
- import path from 'node:path';
5
- import { plTest } from './test-pl.js';
1
+ import { plTest } from "./test-pl.js";
2
+ import { MiddleLayer, Pl, createRenderTemplate, field, initDriverKit, loadTemplate, prepareTemplateSpec, toGlobalResourceId } from "@milaboratories/pl-middle-layer";
3
+ import { randomUUID } from "node:crypto";
4
+ import path from "node:path";
5
+ import { Computable } from "@milaboratories/computable";
6
6
 
7
- class TestRenderResults {
8
- resultEntry;
9
- constructor(resultEntry) {
10
- this.resultEntry = resultEntry;
11
- }
12
- computeOutput(name, cb) {
13
- return Computable.make((ctx) => {
14
- const outputAccessor = ctx
15
- .accessor(this.resultEntry)
16
- .node()
17
- .traverse({ field: name, assertFieldType: "Input" });
18
- return cb(outputAccessor, ctx);
19
- });
20
- }
21
- }
22
- class TestWorkflowResults {
23
- renderResult;
24
- processedExportsResult;
25
- blockId;
26
- constructor(renderResult, processedExportsResult, blockId) {
27
- this.renderResult = renderResult;
28
- this.processedExportsResult = processedExportsResult;
29
- this.blockId = blockId;
30
- }
31
- /**
32
- * Returns context id of this workflow
33
- * */
34
- context() {
35
- return this.renderResult.computeOutput("context", (cb) => cb?.id).withStableType();
36
- }
37
- /**
38
- * Returns context id of this workflow
39
- * */
40
- result() {
41
- return this.renderResult.computeOutput("result", (cb) => cb?.id).withStableType();
42
- }
43
- export(name, cb) {
44
- if (this.processedExportsResult !== undefined)
45
- return this.processedExportsResult.computeOutput("result", (acc, ctx) => {
46
- return cb(acc?.traverse({ field: name, assertFieldType: "Input" }), ctx);
47
- });
48
- else
49
- return this.renderResult.computeOutput("context", (acc, ctx) => {
50
- return cb(acc?.traverse({ field: `values/${name}`, assertFieldType: "Input" }), ctx);
51
- });
52
- }
53
- output(name, cb) {
54
- return this.renderResult.computeOutput("result", (acc, ctx) => {
55
- return cb(acc?.traverse({ field: name, assertFieldType: "Input" }), ctx);
56
- });
57
- }
58
- }
59
- class TplTestHelpers {
60
- pl;
61
- resultRootRid;
62
- resultRootTree;
63
- constructor(pl, resultRootRid, resultRootTree) {
64
- this.pl = pl;
65
- this.resultRootRid = resultRootRid;
66
- this.resultRootTree = resultRootTree;
67
- }
68
- async renderTemplate(ephemeral, template, outputs, inputs) {
69
- const runId = randomUUID();
70
- const spec = typeof template === "string"
71
- ? await prepareTemplateSpec({
72
- type: "from-file",
73
- path: `./dist/tengo/tpl/${template}.plj.gz`,
74
- })
75
- : await prepareTemplateSpec(template);
76
- const { resultMapRid } = await this.pl.withWriteTx("TemplateRender", async (tx) => {
77
- const tpl = loadTemplate(tx, spec);
78
- const renderedInputs = await inputs(tx);
79
- const futureOutputs = await createRenderTemplate(tx, tpl, ephemeral, renderedInputs, outputs);
80
- const resultMap = Pl.createPlMap(tx, futureOutputs, ephemeral);
81
- tx.createField(field(this.resultRootRid, runId), "Dynamic", resultMap);
82
- const resultMapRid = await toGlobalResourceId(resultMap);
83
- await tx.commit();
84
- return {
85
- resultMapRid,
86
- };
87
- });
88
- await this.resultRootTree.refreshState();
89
- return new TestRenderResults(this.resultRootTree.entry(resultMapRid));
90
- }
91
- createObject(tx, value) {
92
- return tx.createValue(Pl.JsonObject, JSON.stringify(value));
93
- }
94
- async renderWorkflow(workflow, preRun, args, ops = {}) {
95
- const blockId = ops.blockId ?? randomUUID();
96
- const mainResult = await this.renderTemplate(true, workflow, ["result", "context"], (tx) => {
97
- let ctx = undefined;
98
- if (ops.parent) {
99
- ctx = ops.parent;
100
- }
101
- else {
102
- ctx = tx.createEphemeral({ name: "BContextEnd", version: "1" });
103
- tx.lock(ctx);
104
- }
105
- return {
106
- args: this.createObject(tx, args),
107
- blockId: this.createObject(tx, blockId),
108
- isProduction: this.createObject(tx, !preRun),
109
- context: ctx,
110
- };
111
- });
112
- let exports = undefined;
113
- if (ops.exportProcessor !== undefined) {
114
- exports = await this.renderTemplate(true, ops.exportProcessor, ["result"], (tx) => ({
115
- pf: tx.getFutureFieldValue(mainResult.resultEntry.rid, "context", "Input"),
116
- }));
117
- }
118
- return new TestWorkflowResults(mainResult, exports, blockId);
119
- }
120
- }
7
+ //#region src/test-template.ts
8
+ var TestRenderResults = class {
9
+ constructor(resultEntry) {
10
+ this.resultEntry = resultEntry;
11
+ }
12
+ computeOutput(name, cb) {
13
+ return Computable.make((ctx) => {
14
+ return cb(ctx.accessor(this.resultEntry).node().traverse({
15
+ field: name,
16
+ assertFieldType: "Input"
17
+ }), ctx);
18
+ });
19
+ }
20
+ };
21
+ var TestWorkflowResults = class {
22
+ constructor(renderResult, processedExportsResult, blockId) {
23
+ this.renderResult = renderResult;
24
+ this.processedExportsResult = processedExportsResult;
25
+ this.blockId = blockId;
26
+ }
27
+ /**
28
+ * Returns context id of this workflow
29
+ * */
30
+ context() {
31
+ return this.renderResult.computeOutput("context", (cb) => cb?.id).withStableType();
32
+ }
33
+ /**
34
+ * Returns context id of this workflow
35
+ * */
36
+ result() {
37
+ return this.renderResult.computeOutput("result", (cb) => cb?.id).withStableType();
38
+ }
39
+ export(name, cb) {
40
+ if (this.processedExportsResult !== void 0) return this.processedExportsResult.computeOutput("result", (acc, ctx) => {
41
+ return cb(acc?.traverse({
42
+ field: name,
43
+ assertFieldType: "Input"
44
+ }), ctx);
45
+ });
46
+ else return this.renderResult.computeOutput("context", (acc, ctx) => {
47
+ return cb(acc?.traverse({
48
+ field: `values/${name}`,
49
+ assertFieldType: "Input"
50
+ }), ctx);
51
+ });
52
+ }
53
+ output(name, cb) {
54
+ return this.renderResult.computeOutput("result", (acc, ctx) => {
55
+ return cb(acc?.traverse({
56
+ field: name,
57
+ assertFieldType: "Input"
58
+ }), ctx);
59
+ });
60
+ }
61
+ };
62
+ var TplTestHelpers = class {
63
+ constructor(pl, resultRootRid, resultRootTree) {
64
+ this.pl = pl;
65
+ this.resultRootRid = resultRootRid;
66
+ this.resultRootTree = resultRootTree;
67
+ }
68
+ async renderTemplate(ephemeral, template, outputs, inputs) {
69
+ const runId = randomUUID();
70
+ const spec = typeof template === "string" ? await prepareTemplateSpec({
71
+ type: "from-file",
72
+ path: `./dist/tengo/tpl/${template}.plj.gz`
73
+ }) : await prepareTemplateSpec(template);
74
+ const { resultMapRid } = await this.pl.withWriteTx("TemplateRender", async (tx) => {
75
+ const futureOutputs = await createRenderTemplate(tx, loadTemplate(tx, spec), ephemeral, await inputs(tx), outputs);
76
+ const resultMap = Pl.createPlMap(tx, futureOutputs, ephemeral);
77
+ tx.createField(field(this.resultRootRid, runId), "Dynamic", resultMap);
78
+ const resultMapRid = await toGlobalResourceId(resultMap);
79
+ await tx.commit();
80
+ return { resultMapRid };
81
+ });
82
+ await this.resultRootTree.refreshState();
83
+ return new TestRenderResults(this.resultRootTree.entry(resultMapRid));
84
+ }
85
+ createObject(tx, value) {
86
+ return tx.createValue(Pl.JsonObject, JSON.stringify(value));
87
+ }
88
+ async renderWorkflow(workflow, preRun, args, ops = {}) {
89
+ const blockId = ops.blockId ?? randomUUID();
90
+ const mainResult = await this.renderTemplate(true, workflow, ["result", "context"], (tx) => {
91
+ let ctx = void 0;
92
+ if (ops.parent) ctx = ops.parent;
93
+ else {
94
+ ctx = tx.createEphemeral({
95
+ name: "BContextEnd",
96
+ version: "1"
97
+ });
98
+ tx.lock(ctx);
99
+ }
100
+ return {
101
+ args: this.createObject(tx, args),
102
+ blockId: this.createObject(tx, blockId),
103
+ isProduction: this.createObject(tx, !preRun),
104
+ context: ctx
105
+ };
106
+ });
107
+ let exports = void 0;
108
+ if (ops.exportProcessor !== void 0) exports = await this.renderTemplate(true, ops.exportProcessor, ["result"], (tx) => ({ pf: tx.getFutureFieldValue(mainResult.resultEntry.rid, "context", "Input") }));
109
+ return new TestWorkflowResults(mainResult, exports, blockId);
110
+ }
111
+ };
121
112
  const tplTest = plTest.extend({
122
- helper: async ({ pl, createTree }, use) => {
123
- const resultMap = await pl.withWriteTx("CreatingHelpers", async (tx) => {
124
- const map = tx.createEphemeral(Pl.EphStdMap);
125
- const rootField = field(tx.clientRoot, "templateTeste");
126
- tx.createField(rootField, "Dynamic", map);
127
- await tx.commit();
128
- return await toGlobalResourceId(map);
129
- });
130
- const resultMapTree = await createTree(resultMap);
131
- await use(new TplTestHelpers(pl, resultMap, resultMapTree));
132
- },
133
- driverKit: async ({ pl, tmpFolder }, use) => {
134
- const frontendDownloadPath = path.join(tmpFolder, "frontend");
135
- const driverKit = await initDriverKit(pl, tmpFolder, frontendDownloadPath, {
136
- localSecret: MiddleLayer.generateLocalSecret(),
137
- localProjections: [], // TODO must be different with local pl
138
- openFileDialogCallback: () => {
139
- throw new Error("Not implemented.");
140
- },
141
- });
142
- await use(driverKit);
143
- },
113
+ helper: async ({ pl, createTree }, use) => {
114
+ const resultMap = await pl.withWriteTx("CreatingHelpers", async (tx) => {
115
+ const map = tx.createEphemeral(Pl.EphStdMap);
116
+ const rootField = field(tx.clientRoot, "templateTeste");
117
+ tx.createField(rootField, "Dynamic", map);
118
+ await tx.commit();
119
+ return await toGlobalResourceId(map);
120
+ });
121
+ await use(new TplTestHelpers(pl, resultMap, await createTree(resultMap)));
122
+ },
123
+ driverKit: async ({ pl, tmpFolder }, use) => {
124
+ await use(await initDriverKit(pl, tmpFolder, path.join(tmpFolder, "frontend"), {
125
+ localSecret: MiddleLayer.generateLocalSecret(),
126
+ localProjections: [],
127
+ openFileDialogCallback: () => {
128
+ throw new Error("Not implemented.");
129
+ }
130
+ }));
131
+ }
144
132
  });
145
133
 
134
+ //#endregion
146
135
  export { TestRenderResults, TestWorkflowResults, TplTestHelpers, tplTest };
147
- //# sourceMappingURL=test-template.js.map
136
+ //# sourceMappingURL=test-template.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-template.js","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"],"names":[],"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,21 +1,21 @@
1
- 'use strict';
1
+ const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
2
+ let node_fs_promises = require("node:fs/promises");
3
+ node_fs_promises = require_runtime.__toESM(node_fs_promises);
4
+ let _milaboratories_pl_client = require("@milaboratories/pl-client");
2
5
 
3
- var plClient = require('@milaboratories/pl-client');
4
-
5
- async function awaitStableState(computable, timeout = 5000) {
6
- try {
7
- return await computable.awaitStableValue(typeof timeout === "number" ? AbortSignal.timeout(timeout) : timeout);
8
- }
9
- catch (e) {
10
- if (plClient.isTimeoutOrCancelError(e)) {
11
- const fullValue = await computable.getFullValue();
12
- console.dir(fullValue, { depth: 5 });
13
- throw new Error(`Aborted while awaiting stable value. Unstable marker: ${fullValue.unstableMarker}`, { cause: e });
14
- }
15
- else
16
- throw e;
17
- }
6
+ //#region src/util.ts
7
+ async function awaitStableState(computable, timeout = 5e3) {
8
+ try {
9
+ return await computable.awaitStableValue(typeof timeout === "number" ? AbortSignal.timeout(timeout) : timeout);
10
+ } catch (e) {
11
+ if ((0, _milaboratories_pl_client.isTimeoutOrCancelError)(e)) {
12
+ const fullValue = await computable.getFullValue();
13
+ console.dir(fullValue, { depth: 5 });
14
+ throw new Error(`Aborted while awaiting stable value. Unstable marker: ${fullValue.unstableMarker}`, { cause: e });
15
+ } else throw e;
16
+ }
18
17
  }
19
18
 
19
+ //#endregion
20
20
  exports.awaitStableState = awaitStableState;
21
- //# sourceMappingURL=util.cjs.map
21
+ //# sourceMappingURL=util.cjs.map
package/dist/util.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.cjs","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"],"names":["isTimeoutOrCancelError"],"mappings":";;;;AAgBO,eAAe,gBAAgB,CACpC,UAAkC,EAClC,UAAgC,IAAI,EAAA;AAEpC,IAAA,IAAI;QACF,OAAO,MAAM,UAAU,CAAC,gBAAgB,CACtC,OAAO,OAAO,KAAK,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CACrE;IACH;IAAE,OAAO,CAAU,EAAE;AACnB,QAAA,IAAIA,+BAAsB,CAAC,CAAC,CAAC,EAAE;AAC7B,YAAA,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE;YACjD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACpC,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,sDAAA,EAAyD,SAAS,CAAC,cAAc,CAAA,CAAE,EACnF,EAAE,KAAK,EAAE,CAAC,EAAE,CACb;QACH;;AAAO,YAAA,MAAM,CAAC;IAChB;AACF;;;;"}
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"}
package/dist/util.d.ts CHANGED
@@ -1,5 +1,8 @@
1
- import type { Computable } from "@milaboratories/computable";
2
- import type { BigIntStats } from "node:fs";
3
- export declare function tryStat(path: string): Promise<BigIntStats | undefined>;
4
- export declare function awaitStableState<S>(computable: Computable<unknown, S>, timeout?: number | AbortSignal): Promise<S>;
1
+ import { Computable } from "@milaboratories/computable";
2
+ import "node:fs";
3
+
4
+ //#region src/util.d.ts
5
+ declare function awaitStableState<S>(computable: Computable<unknown, S>, timeout?: number | AbortSignal): Promise<S>;
6
+ //#endregion
7
+ export { awaitStableState };
5
8
  //# sourceMappingURL=util.d.ts.map
package/dist/util.js CHANGED
@@ -1,19 +1,19 @@
1
- import { isTimeoutOrCancelError } from '@milaboratories/pl-client';
1
+ import "node:fs/promises";
2
+ import { isTimeoutOrCancelError } from "@milaboratories/pl-client";
2
3
 
3
- async function awaitStableState(computable, timeout = 5000) {
4
- try {
5
- return await computable.awaitStableValue(typeof timeout === "number" ? AbortSignal.timeout(timeout) : timeout);
6
- }
7
- catch (e) {
8
- if (isTimeoutOrCancelError(e)) {
9
- const fullValue = await computable.getFullValue();
10
- console.dir(fullValue, { depth: 5 });
11
- throw new Error(`Aborted while awaiting stable value. Unstable marker: ${fullValue.unstableMarker}`, { cause: e });
12
- }
13
- else
14
- throw e;
15
- }
4
+ //#region src/util.ts
5
+ async function awaitStableState(computable, timeout = 5e3) {
6
+ try {
7
+ return await computable.awaitStableValue(typeof timeout === "number" ? AbortSignal.timeout(timeout) : timeout);
8
+ } catch (e) {
9
+ if (isTimeoutOrCancelError(e)) {
10
+ const fullValue = await computable.getFullValue();
11
+ console.dir(fullValue, { depth: 5 });
12
+ throw new Error(`Aborted while awaiting stable value. Unstable marker: ${fullValue.unstableMarker}`, { cause: e });
13
+ } else throw e;
14
+ }
16
15
  }
17
16
 
17
+ //#endregion
18
18
  export { awaitStableState };
19
- //# sourceMappingURL=util.js.map
19
+ //# sourceMappingURL=util.js.map
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","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"],"names":[],"mappings":";;AAgBO,eAAe,gBAAgB,CACpC,UAAkC,EAClC,UAAgC,IAAI,EAAA;AAEpC,IAAA,IAAI;QACF,OAAO,MAAM,UAAU,CAAC,gBAAgB,CACtC,OAAO,OAAO,KAAK,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CACrE;IACH;IAAE,OAAO,CAAU,EAAE;AACnB,QAAA,IAAI,sBAAsB,CAAC,CAAC,CAAC,EAAE;AAC7B,YAAA,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE;YACjD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACpC,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,sDAAA,EAAyD,SAAS,CAAC,cAAc,CAAA,CAAE,EACnF,EAAE,KAAK,EAAE,CAAC,EAAE,CACb;QACH;;AAAO,YAAA,MAAM,CAAC;IAChB;AACF;;;;"}
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.58.6",
3
+ "version": "1.58.9",
4
4
  "description": "Typescript Block Test Helpers",
5
5
  "license": "UNLICENSED",
6
6
  "files": [
@@ -20,16 +20,16 @@
20
20
  "@vitest/coverage-istanbul": "^4.0.18",
21
21
  "vitest": "^4.0.18",
22
22
  "@milaboratories/computable": "2.8.5",
23
- "@milaboratories/pl-tree": "1.8.46",
24
23
  "@milaboratories/pl-client": "2.17.7",
25
- "@milaboratories/pl-middle-layer": "1.48.10"
24
+ "@milaboratories/pl-tree": "1.8.47",
25
+ "@milaboratories/pl-middle-layer": "1.48.12"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "~24.5.2",
29
- "typescript": "~5.6.3",
29
+ "typescript": "~5.9.3",
30
30
  "@milaboratories/build-configs": "1.5.0",
31
- "@milaboratories/ts-builder": "1.2.11",
32
- "@milaboratories/ts-configs": "1.2.1"
31
+ "@milaboratories/ts-configs": "1.2.1",
32
+ "@milaboratories/ts-builder": "1.2.12"
33
33
  },
34
34
  "scripts": {
35
35
  "build": "ts-builder build --target node",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,KAAK,EAAE,MAAM,iCAAiC,CAAC"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=simple.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simple.test.d.ts","sourceRoot":"","sources":["../src/simple.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-block.d.ts","sourceRoot":"","sources":["../src/test-block.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,SAAS,EACT,OAAO,EACR,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAI9D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,WAAW,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAqBF,eAAO,MAAM,gCAAgC,OAAO,CAAC;AAqCrD,MAAM,WAAW,UAAU;IACzB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1F,oCAAoC,CAAC,EAAE,SAAS,SAAS,EACvD,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GAAG,iBAAiB,GACxC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACvE;AAED,eAAO,MAAM,SAAS;;;;;;;;EA6DpB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-pl.d.ts","sourceRoot":"","sources":["../src/test-pl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,QAAQ,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAEhG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAOhE,eAAO,MAAM,MAAM;;sBAEC,UAAU,QAAQ,mBAAmB,KAAK,OAAO,CAAC,qBAAqB,CAAC;;;EA6E1F,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-template.d.ts","sourceRoot":"","sources":["../src/test-template.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAS5E;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,EAClC,OAAO,GAAE,MAAM,GAAG,WAAkB,GACnC,OAAO,CAAC,CAAC,CAAC,CAeZ"}