@milaboratories/pl-middle-layer 1.74.19 → 1.75.0
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/middle_layer/block.cjs.map +1 -1
- package/dist/middle_layer/block.js.map +1 -1
- package/dist/middle_layer/build_stamp.cjs +1 -1
- package/dist/middle_layer/build_stamp.js +1 -1
- package/dist/middle_layer/column_links.cjs +106 -0
- package/dist/middle_layer/column_links.cjs.map +1 -0
- package/dist/middle_layer/column_links.js +104 -0
- package/dist/middle_layer/column_links.js.map +1 -0
- package/dist/middle_layer/middle_layer.cjs +1 -0
- package/dist/middle_layer/middle_layer.cjs.map +1 -1
- package/dist/middle_layer/middle_layer.js +1 -0
- package/dist/middle_layer/middle_layer.js.map +1 -1
- package/dist/middle_layer/project.cjs +45 -19
- package/dist/middle_layer/project.cjs.map +1 -1
- package/dist/middle_layer/project.d.ts.map +1 -1
- package/dist/middle_layer/project.js +46 -20
- package/dist/middle_layer/project.js.map +1 -1
- package/dist/middle_layer/project_overview.cjs +56 -24
- package/dist/middle_layer/project_overview.cjs.map +1 -1
- package/dist/middle_layer/project_overview.js +55 -25
- package/dist/middle_layer/project_overview.js.map +1 -1
- package/dist/model/args_derivation.cjs +153 -0
- package/dist/model/args_derivation.cjs.map +1 -0
- package/dist/model/args_derivation.d.ts +21 -0
- package/dist/model/args_derivation.d.ts.map +1 -0
- package/dist/model/args_derivation.js +148 -0
- package/dist/model/args_derivation.js.map +1 -0
- package/dist/model/project_helper.cjs +34 -8
- package/dist/model/project_helper.cjs.map +1 -1
- package/dist/model/project_helper.d.ts +18 -5
- package/dist/model/project_helper.d.ts.map +1 -1
- package/dist/model/project_helper.js +34 -8
- package/dist/model/project_helper.js.map +1 -1
- package/dist/model/project_model.cjs +1 -0
- package/dist/model/project_model.cjs.map +1 -1
- package/dist/model/project_model.d.ts +1 -1
- package/dist/model/project_model.js +1 -0
- package/dist/model/project_model.js.map +1 -1
- package/dist/mutator/project.cjs +54 -8
- package/dist/mutator/project.cjs.map +1 -1
- package/dist/mutator/project.d.ts +1 -0
- package/dist/mutator/project.d.ts.map +1 -1
- package/dist/mutator/project.js +54 -8
- package/dist/mutator/project.js.map +1 -1
- package/package.json +16 -16
- package/src/middle_layer/block.ts +4 -1
- package/src/middle_layer/column_links.test.ts +350 -0
- package/src/middle_layer/column_links.ts +152 -0
- package/src/middle_layer/middle_layer.ts +2 -0
- package/src/middle_layer/project.ts +39 -5
- package/src/middle_layer/project_overview.test.ts +200 -0
- package/src/middle_layer/project_overview.ts +82 -28
- package/src/model/args.test.ts +39 -1
- package/src/model/args_derivation.test.ts +326 -0
- package/src/model/args_derivation.ts +194 -0
- package/src/model/project_helper.ts +55 -25
- package/src/model/project_model.ts +2 -0
- package/src/mutator/project-v3.test.ts +105 -1
- package/src/mutator/project.ts +81 -24
- package/src/test/fake_project.ts +222 -0
|
@@ -5,6 +5,7 @@ import { ProjectHelper } from "../model/project_helper.js";
|
|
|
5
5
|
import { BlockConfig } from "@platforma-sdk/model";
|
|
6
6
|
import { AuthorMarker, BlockPackSpec, BlockSettings, ProjectMeta } from "@milaboratories/pl-model-middle-layer";
|
|
7
7
|
import { MiLogger } from "@milaboratories/ts-helpers";
|
|
8
|
+
import { ArgsIssue } from "@milaboratories/pl-model-common";
|
|
8
9
|
import { AnyRef, AnyResourceRef, PlClient, PlTransaction, ResourceRef, SignedResourceId } from "@milaboratories/pl-client";
|
|
9
10
|
/**
|
|
10
11
|
* Duplicates an existing project resource within a transaction.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","names":[],"sources":["../../src/mutator/project.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"project.d.ts","names":[],"sources":["../../src/mutator/project.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;wBA2oEsB,iBACpB,IAAI,eACJ,WAAW,kBACX;EAAY;;;;;;;;AAOZ,gBAAgB,gBACf,QAAQ"}
|
package/dist/mutator/project.js
CHANGED
|
@@ -5,6 +5,7 @@ import { allBlocks, graphDiff, productionGraph, stagingGraph } from "../model/pr
|
|
|
5
5
|
import { exportProjectAsTemplateV1 } from "../model/template_serializer.js";
|
|
6
6
|
import { BlockPackTemplateField, createBlockPack } from "./block-pack/block_pack.js";
|
|
7
7
|
import { exportContext, getPreparedExportTemplateEnvelope } from "./context_export.js";
|
|
8
|
+
import { argsErrorsFieldChange, argsErrorsOfBlock, derivedArgsValue } from "../model/args_derivation.js";
|
|
8
9
|
import { getDebugFlags } from "../debug/index.js";
|
|
9
10
|
import { BLOCK_STORAGE_FACADE_VERSION, UiError, extractConfig } from "@platforma-sdk/model";
|
|
10
11
|
import { InitialBlockSettings, normalizeProjectMeta } from "@milaboratories/pl-model-middle-layer";
|
|
@@ -115,6 +116,18 @@ var BlockInfo = class {
|
|
|
115
116
|
get currentPrerunArgs() {
|
|
116
117
|
return this.currentPrerunArgsC();
|
|
117
118
|
}
|
|
119
|
+
argsErrorsC = cached(() => `${this.fields.inputsValid?.modCount}:${this.fields.currentArgs?.modCount}`, () => argsErrorsOfBlock({
|
|
120
|
+
modelAPIVersion: this.config.modelAPIVersion,
|
|
121
|
+
inputsValid: this.fields.inputsValid,
|
|
122
|
+
currentArgs: this.currentArgs
|
|
123
|
+
}));
|
|
124
|
+
/**
|
|
125
|
+
* The errors the block's `argsIssues()` found in its current args. A block whose model API
|
|
126
|
+
* version has no args issues, or that has no current args, has none.
|
|
127
|
+
*/
|
|
128
|
+
get argsErrors() {
|
|
129
|
+
return this.argsErrorsC();
|
|
130
|
+
}
|
|
118
131
|
get stagingRendered() {
|
|
119
132
|
return this.fields.stagingCtx !== void 0;
|
|
120
133
|
}
|
|
@@ -398,6 +411,26 @@ var ProjectMutator = class ProjectMutator {
|
|
|
398
411
|
}
|
|
399
412
|
return deleted;
|
|
400
413
|
}
|
|
414
|
+
/**
|
|
415
|
+
* Brings the block's `inputsValid` field in line with what its args derivation found: the run
|
|
416
|
+
* errors of its args, none when it may run with them, and no field when it has no args.
|
|
417
|
+
*/
|
|
418
|
+
setArgsErrors(blockId, derivedArgs) {
|
|
419
|
+
this.applyArgsErrorsChange(blockId, argsErrorsFieldChange(this.getBlockInfo(blockId).fields.inputsValid, derivedArgs));
|
|
420
|
+
}
|
|
421
|
+
applyArgsErrorsChange(blockId, change) {
|
|
422
|
+
switch (change.type) {
|
|
423
|
+
case "keep": return;
|
|
424
|
+
case "delete":
|
|
425
|
+
this.deleteBlockFields(blockId, "inputsValid");
|
|
426
|
+
return;
|
|
427
|
+
case "write": {
|
|
428
|
+
const ref = this.tx.createValue(Pl.JsonObject, change.data);
|
|
429
|
+
this.setBlockField(blockId, "inputsValid", ref, "Ready", change.data);
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
401
434
|
updateLastModified() {
|
|
402
435
|
this.lastModified = Date.now();
|
|
403
436
|
this.lastModifiedChanged = true;
|
|
@@ -487,9 +520,11 @@ var ProjectMutator = class ProjectMutator {
|
|
|
487
520
|
const prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(blockConfig, initialStorageJson);
|
|
488
521
|
if (prerunArgs !== void 0) this.setBlockFieldObj(blockId, "currentPrerunArgs", this.createJsonFieldValue(prerunArgs));
|
|
489
522
|
else this.deleteBlockFields(blockId, "currentPrerunArgs");
|
|
490
|
-
const
|
|
491
|
-
|
|
523
|
+
const derivedArgs = this.projectHelper.deriveArgsFromStorage(blockConfig, initialStorageJson);
|
|
524
|
+
const args = derivedArgsValue(derivedArgs);
|
|
525
|
+
if (args !== void 0) this.setBlockFieldObj(blockId, "currentArgs", this.createJsonFieldValue(args));
|
|
492
526
|
else this.deleteBlockFields(blockId, "currentArgs");
|
|
527
|
+
this.setArgsErrors(blockId, derivedArgs);
|
|
493
528
|
}
|
|
494
529
|
/** Optimally sets inputs for multiple blocks in one go */
|
|
495
530
|
setStates(requests) {
|
|
@@ -508,8 +543,9 @@ var ProjectMutator = class ProjectMutator {
|
|
|
508
543
|
const updatedStorageJson = this.projectHelper.applyStorageUpdateInVM(blockConfig, currentStorageJson, req.payload);
|
|
509
544
|
this.setBlockFieldObj(req.blockId, "blockStorage", this.createGzJsonFieldValueFromContent(updatedStorageJson));
|
|
510
545
|
prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(blockConfig, updatedStorageJson);
|
|
511
|
-
const
|
|
512
|
-
args =
|
|
546
|
+
const derivedArgs = this.projectHelper.deriveArgsFromStorage(blockConfig, updatedStorageJson);
|
|
547
|
+
args = derivedArgsValue(derivedArgs);
|
|
548
|
+
this.setArgsErrors(req.blockId, derivedArgs);
|
|
513
549
|
} else {
|
|
514
550
|
this.setBlockFieldObj(req.blockId, "blockStorage", this.createGzJsonFieldValue(req.state));
|
|
515
551
|
if (req.state !== null && typeof req.state === "object" && "args" in req.state) args = req.state.args;
|
|
@@ -624,6 +660,11 @@ var ProjectMutator = class ProjectMutator {
|
|
|
624
660
|
this.resetProduction(blockId);
|
|
625
661
|
const info = this.getBlockInfo(blockId);
|
|
626
662
|
if (info.fields.currentArgs === void 0) throw new Error(`Can't render production for block ${blockId}: currentArgs not set`);
|
|
663
|
+
const argsErrors = info.argsErrors;
|
|
664
|
+
if (argsErrors.length > 0) {
|
|
665
|
+
const messages = argsErrors.map(({ message }) => message).join("; ");
|
|
666
|
+
throw new Error(`Can't render production for block ${blockId}: ${messages}`);
|
|
667
|
+
}
|
|
627
668
|
const ctx = this.createProdCtx(this.getPendingProductionGraph().nodes.get(blockId).upstream);
|
|
628
669
|
if (this.getBlock(blockId).renderingMode === "Light") throw new Error("Can't render production for light block.");
|
|
629
670
|
const tpl = info.getTemplate(this.tx);
|
|
@@ -652,8 +693,9 @@ var ProjectMutator = class ProjectMutator {
|
|
|
652
693
|
if (spec.storageMode === "fromModel") {
|
|
653
694
|
storageToWrite = spec.initialStorage ?? this.projectHelper.getInitialStorageInVM(blockConfig);
|
|
654
695
|
prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(blockConfig, storageToWrite);
|
|
655
|
-
const
|
|
656
|
-
args =
|
|
696
|
+
const derivedArgs = this.projectHelper.deriveArgsFromStorage(blockConfig, storageToWrite);
|
|
697
|
+
args = derivedArgsValue(derivedArgs);
|
|
698
|
+
this.setArgsErrors(blockId, derivedArgs);
|
|
657
699
|
} else if (spec.storageMode === "legacy") {
|
|
658
700
|
args = JSON.parse(spec.legacyState).args;
|
|
659
701
|
if (args === void 0) throw new Error("args is undefined in legacyState");
|
|
@@ -808,9 +850,11 @@ var ProjectMutator = class ProjectMutator {
|
|
|
808
850
|
const prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(newConfig, storageJson);
|
|
809
851
|
if (prerunArgs !== void 0) this.setBlockFieldObj(blockId, "currentPrerunArgs", this.createJsonFieldValue(prerunArgs));
|
|
810
852
|
else this.deleteBlockFields(blockId, "currentPrerunArgs");
|
|
811
|
-
const
|
|
812
|
-
|
|
853
|
+
const derivedArgs = this.projectHelper.deriveArgsFromStorage(newConfig, storageJson);
|
|
854
|
+
const args = derivedArgsValue(derivedArgs);
|
|
855
|
+
if (args !== void 0) this.setBlockFieldObj(blockId, "currentArgs", this.createJsonFieldValue(args));
|
|
813
856
|
else this.deleteBlockFields(blockId, "currentArgs");
|
|
857
|
+
this.setArgsErrors(blockId, derivedArgs);
|
|
814
858
|
};
|
|
815
859
|
if (newClearState !== void 0) {
|
|
816
860
|
if (newConfig.modelAPIVersion === BLOCK_STORAGE_FACADE_VERSION) {
|
|
@@ -819,6 +863,7 @@ var ProjectMutator = class ProjectMutator {
|
|
|
819
863
|
this.updateLastModified();
|
|
820
864
|
} else {
|
|
821
865
|
persistBlockPack();
|
|
866
|
+
this.deleteBlockFields(blockId, "inputsValid");
|
|
822
867
|
this.setStates([{
|
|
823
868
|
modelAPIVersion: 1,
|
|
824
869
|
blockId,
|
|
@@ -834,6 +879,7 @@ var ProjectMutator = class ProjectMutator {
|
|
|
834
879
|
applyStorageAndDeriveArgs(migrationResult.newStorageJson);
|
|
835
880
|
} else {
|
|
836
881
|
persistBlockPack();
|
|
882
|
+
this.deleteBlockFields(blockId, "inputsValid");
|
|
837
883
|
if (info.fields.currentArgs !== void 0) this.setBlockFieldObj(blockId, "currentPrerunArgs", info.fields.currentArgs);
|
|
838
884
|
}
|
|
839
885
|
this.blocksWithChangedInputs.add(blockId);
|