@milaboratories/pl-middle-layer 1.74.19 → 1.76.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/index.cjs +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -2
- package/dist/middle_layer/block.cjs.map +1 -1
- package/dist/middle_layer/block.js.map +1 -1
- package/dist/middle_layer/block_action_context.cjs +57 -0
- package/dist/middle_layer/block_action_context.cjs.map +1 -0
- package/dist/middle_layer/block_action_context.d.ts +47 -0
- package/dist/middle_layer/block_action_context.d.ts.map +1 -0
- package/dist/middle_layer/block_action_context.js +57 -0
- package/dist/middle_layer/block_action_context.js.map +1 -0
- 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/index.d.ts +2 -1
- 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 +53 -19
- package/dist/middle_layer/project.cjs.map +1 -1
- package/dist/middle_layer/project.d.ts +6 -0
- package/dist/middle_layer/project.d.ts.map +1 -1
- package/dist/middle_layer/project.js +54 -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 +2 -1
- package/dist/model/project_model.cjs.map +1 -1
- package/dist/model/project_model.d.ts +1 -1
- package/dist/model/project_model.js +2 -1
- package/dist/model/project_model.js.map +1 -1
- package/dist/mutator/project.cjs +73 -12
- 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 +73 -12
- package/dist/mutator/project.js.map +1 -1
- package/dist/mutator/template/render_block.cjs +35 -2
- package/dist/mutator/template/render_block.cjs.map +1 -1
- package/dist/mutator/template/render_block.js +35 -4
- package/dist/mutator/template/render_block.js.map +1 -1
- package/dist/mutator/template/render_template.cjs +16 -1
- package/dist/mutator/template/render_template.cjs.map +1 -1
- package/dist/mutator/template/render_template.d.ts +12 -1
- package/dist/mutator/template/render_template.d.ts.map +1 -1
- package/dist/mutator/template/render_template.js +16 -2
- package/dist/mutator/template/render_template.js.map +1 -1
- package/package.json +16 -16
- package/src/middle_layer/block.ts +4 -1
- package/src/middle_layer/block_action_context.test.ts +148 -0
- package/src/middle_layer/block_action_context.ts +162 -0
- package/src/middle_layer/column_links.test.ts +350 -0
- package/src/middle_layer/column_links.ts +152 -0
- package/src/middle_layer/index.ts +6 -0
- package/src/middle_layer/middle_layer.ts +2 -0
- package/src/middle_layer/project.ts +52 -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 +7 -2
- package/src/mutator/project-v3.test.ts +105 -1
- package/src/mutator/project.ts +128 -37
- package/src/mutator/project_action_context.test.ts +178 -0
- package/src/mutator/template/render_block.ts +70 -5
- package/src/mutator/template/render_template.ts +22 -2
- package/src/test/fake_project.ts +222 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project_model.js","names":[],"sources":["../../src/model/project_model.ts"],"sourcesContent":["import type { ResourceType } from \"@milaboratories/pl-client\";\nimport type { ProjectId } from \"@milaboratories/pl-model-common\";\nimport type {\n ProjectListEntry as ProjectListEntryFromModel,\n ProjectMeta,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport type { BlockRenderingMode } from \"@platforma-sdk/model\";\n\nexport type { ProjectId };\n\nexport interface ProjectListEntry extends Omit<ProjectListEntryFromModel, \"id\"> {\n /** Unique project identifier in middle layer. Use to operate with given project. */\n id: ProjectId;\n}\n\n/** Entry representing a single block in block structure */\nexport interface Block {\n /** Unique block id */\n readonly id: string;\n\n /**\n * Label shown to the user\n * @deprecated\n * */\n label: string;\n\n /** How to approach block rendering */\n renderingMode: BlockRenderingMode;\n}\n\n/** Block group in block structure */\nexport interface BlockGroup {\n /** Unique group id */\n readonly id: string;\n\n /** Label shown to the user */\n label: string;\n\n /** Blocks */\n blocks: Block[];\n}\n\n/** Root of block structure value */\nexport interface ProjectStructure {\n /** The structure */\n readonly groups: BlockGroup[];\n}\n\nexport const InitialBlockStructure: ProjectStructure = {\n groups: [{ id: \"default\", label: \"Default\", blocks: [] }],\n};\n\n/** Root of project rendering state */\nexport interface ProjectRenderingState {\n /** Timestamp of last staging rendering event */\n stagingRefreshTimestamp: number;\n\n /** Blocks with detached production state, i.e. some of the dependencies of\n * such blocks were re-rendered, but their state was left \"as is\". */\n blocksInLimbo: string[];\n}\n\nexport const InitialProjectRenderingState: ProjectRenderingState = {\n stagingRefreshTimestamp: 0,\n blocksInLimbo: [],\n};\n\nexport const InitialBlockMeta: ProjectMeta = {\n label: \"New Project\",\n};\n\n//\n// Pl Model\n//\n\nexport const ProjectResourceType: ResourceType = { name: \"UserProject\", version: \"2\" };\n\nexport const SchemaVersionKey = \"SchemaVersion\";\nexport const SchemaVersionV2 = \"2\";\nexport const SchemaVersionV3 = \"3\";\nexport const SchemaVersionCurrent = \"4\";\n\nexport const ProjectCreatedTimestamp = \"ProjectCreated\";\nexport const ProjectLastModifiedTimestamp = \"ProjectLastModified\";\nexport const ProjectMetaKey = \"ProjectMeta\";\nexport const ProjectStructureKey = \"ProjectStructure\";\nexport const BlockRenderingStateKey = \"BlockRenderingState\";\n\nexport const BlockArgsAuthorKeyPrefix = \"BlockArgsAuthor/\";\nexport const BlockArgsAuthorKeyPattern = /^BlockArgsAuthor\\/(?<blockid>.*)$/;\n\nexport function blockArgsAuthorKey(blockId: string): string {\n return `${BlockArgsAuthorKeyPrefix}${blockId}`;\n}\n\nexport const ProjectStructureAuthorKey = \"ProjectStructureAuthor\";\n\nexport const ServiceTemplateCacheFieldPrefix = \"__serviceTemplate_\";\n\nexport function getServiceTemplateField(hash: string): string {\n return `${ServiceTemplateCacheFieldPrefix}${hash}`;\n}\n\nexport interface ProjectField {\n blockId: string;\n fieldName:\n | \"blockPack\"\n | \"blockSettings\"\n | \"blockStorage\" // Persistent storage for v3 blocks (state, plugins data, etc.)\n | \"prodArgs\"\n | \"currentArgs\"\n | \"currentPrerunArgs\" // Derived args for staging/prerun rendering (from prerunArgs() or args())\n | \"prodChainCtx\" // Pre-built production context chain node (accumulated prodCtx from all blocks above)\n | \"prodCtx\"\n | \"prodUiCtx\"\n | \"prodOutput\"\n | \"prodCtxPrevious\"\n | \"prodUiCtxPrevious\"\n | \"prodOutputPrevious\"\n | \"stagingCtx\"\n | \"stagingUiCtx\"\n | \"stagingOutput\"\n | \"stagingCtxPrevious\"\n | \"stagingUiCtxPrevious\"\n | \"stagingOutputPrevious\";\n}\n\nexport const FieldsToDuplicate: Set<ProjectField[\"fieldName\"]> = new Set([\n \"blockPack\",\n \"blockSettings\",\n \"blockStorage\",\n \"prodArgs\",\n \"currentArgs\",\n \"currentPrerunArgs\",\n \"prodCtx\",\n \"prodUiCtx\",\n \"prodOutput\",\n]);\n\nexport function projectFieldName(blockId: string, fieldName: ProjectField[\"fieldName\"]): string {\n return `${blockId}-${fieldName}`;\n}\n\nconst projectFieldPattern =\n /^(?<blockId>.*)-(?<fieldName>blockPack|blockSettings|blockStorage|inputsValid|prodArgs|currentArgs|currentPrerunArgs|prodChainCtx|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious)$/;\n\nexport function parseProjectField(name: string): ProjectField | undefined {\n const match = name.match(projectFieldPattern);\n if (match === null) return undefined;\n const { blockId, fieldName } = match.groups!;\n return { blockId, fieldName } as ProjectField;\n}\n"],"mappings":";AAgDA,MAAa,wBAA0C,EACrD,QAAQ,CAAC;CAAE,IAAI;CAAW,OAAO;CAAW,QAAQ,CAAC;AAAE,CAAC,EAC1D;AAYA,MAAa,+BAAsD;CACjE,yBAAyB;CACzB,eAAe,CAAC;AAClB;AAEA,MAAa,mBAAgC,EAC3C,OAAO,cACT;AAMA,MAAa,sBAAoC;CAAE,MAAM;CAAe,SAAS;AAAI;AAErF,MAAa,mBAAmB;AAGhC,MAAa,uBAAuB;AAEpC,MAAa,0BAA0B;AACvC,MAAa,+BAA+B;AAC5C,MAAa,iBAAiB;AAC9B,MAAa,sBAAsB;AACnC,MAAa,yBAAyB;AAEtC,MAAa,2BAA2B;AAGxC,SAAgB,mBAAmB,SAAyB;CAC1D,OAAO,GAAG,2BAA2B;AACvC;AAEA,MAAa,4BAA4B;AAEzC,MAAa,kCAAkC;AAE/C,SAAgB,wBAAwB,MAAsB;CAC5D,OAAO,GAAG,kCAAkC;AAC9C;
|
|
1
|
+
{"version":3,"file":"project_model.js","names":[],"sources":["../../src/model/project_model.ts"],"sourcesContent":["import type { ResourceType } from \"@milaboratories/pl-client\";\nimport type { ProjectId } from \"@milaboratories/pl-model-common\";\nimport type {\n ProjectListEntry as ProjectListEntryFromModel,\n ProjectMeta,\n} from \"@milaboratories/pl-model-middle-layer\";\nimport type { BlockRenderingMode } from \"@platforma-sdk/model\";\n\nexport type { ProjectId };\n\nexport interface ProjectListEntry extends Omit<ProjectListEntryFromModel, \"id\"> {\n /** Unique project identifier in middle layer. Use to operate with given project. */\n id: ProjectId;\n}\n\n/** Entry representing a single block in block structure */\nexport interface Block {\n /** Unique block id */\n readonly id: string;\n\n /**\n * Label shown to the user\n * @deprecated\n * */\n label: string;\n\n /** How to approach block rendering */\n renderingMode: BlockRenderingMode;\n}\n\n/** Block group in block structure */\nexport interface BlockGroup {\n /** Unique group id */\n readonly id: string;\n\n /** Label shown to the user */\n label: string;\n\n /** Blocks */\n blocks: Block[];\n}\n\n/** Root of block structure value */\nexport interface ProjectStructure {\n /** The structure */\n readonly groups: BlockGroup[];\n}\n\nexport const InitialBlockStructure: ProjectStructure = {\n groups: [{ id: \"default\", label: \"Default\", blocks: [] }],\n};\n\n/** Root of project rendering state */\nexport interface ProjectRenderingState {\n /** Timestamp of last staging rendering event */\n stagingRefreshTimestamp: number;\n\n /** Blocks with detached production state, i.e. some of the dependencies of\n * such blocks were re-rendered, but their state was left \"as is\". */\n blocksInLimbo: string[];\n}\n\nexport const InitialProjectRenderingState: ProjectRenderingState = {\n stagingRefreshTimestamp: 0,\n blocksInLimbo: [],\n};\n\nexport const InitialBlockMeta: ProjectMeta = {\n label: \"New Project\",\n};\n\n//\n// Pl Model\n//\n\nexport const ProjectResourceType: ResourceType = { name: \"UserProject\", version: \"2\" };\n\nexport const SchemaVersionKey = \"SchemaVersion\";\nexport const SchemaVersionV2 = \"2\";\nexport const SchemaVersionV3 = \"3\";\nexport const SchemaVersionCurrent = \"4\";\n\nexport const ProjectCreatedTimestamp = \"ProjectCreated\";\nexport const ProjectLastModifiedTimestamp = \"ProjectLastModified\";\nexport const ProjectMetaKey = \"ProjectMeta\";\nexport const ProjectStructureKey = \"ProjectStructure\";\nexport const BlockRenderingStateKey = \"BlockRenderingState\";\n\nexport const BlockArgsAuthorKeyPrefix = \"BlockArgsAuthor/\";\nexport const BlockArgsAuthorKeyPattern = /^BlockArgsAuthor\\/(?<blockid>.*)$/;\n\nexport function blockArgsAuthorKey(blockId: string): string {\n return `${BlockArgsAuthorKeyPrefix}${blockId}`;\n}\n\nexport const ProjectStructureAuthorKey = \"ProjectStructureAuthor\";\n\nexport const ServiceTemplateCacheFieldPrefix = \"__serviceTemplate_\";\n\nexport function getServiceTemplateField(hash: string): string {\n return `${ServiceTemplateCacheFieldPrefix}${hash}`;\n}\n\nexport interface ProjectField {\n blockId: string;\n fieldName:\n | \"blockPack\"\n | \"blockSettings\"\n | \"blockStorage\" // Persistent storage for v3 blocks (state, plugins data, etc.)\n | \"prodArgs\"\n | \"currentArgs\"\n | \"currentPrerunArgs\" // Derived args for staging/prerun rendering (from prerunArgs() or args())\n | \"inputsValid\" // Model API v2: errors found in currentArgs, none when the block may run, with the fingerprint of those args; present while currentArgs are\n | \"prodChainCtx\" // Pre-built production context chain node (accumulated prodCtx from all blocks above)\n | \"prodCtx\"\n | \"prodUiCtx\"\n | \"prodOutput\"\n | \"prodCtxPrevious\"\n | \"prodUiCtxPrevious\"\n | \"prodOutputPrevious\"\n | \"stagingCtx\"\n | \"stagingUiCtx\"\n | \"stagingOutput\"\n | \"stagingCtxPrevious\"\n | \"stagingUiCtxPrevious\"\n | \"stagingOutputPrevious\"\n // Root action context of the current render. The project holds it so it outlives the render.\n | \"prodActionContext\"\n | \"stagingActionContext\";\n}\n\nexport const FieldsToDuplicate: Set<ProjectField[\"fieldName\"]> = new Set([\n \"blockPack\",\n \"blockSettings\",\n \"blockStorage\",\n \"prodArgs\",\n \"currentArgs\",\n \"currentPrerunArgs\",\n \"inputsValid\",\n \"prodCtx\",\n \"prodUiCtx\",\n \"prodOutput\",\n]);\n\nexport function projectFieldName(blockId: string, fieldName: ProjectField[\"fieldName\"]): string {\n return `${blockId}-${fieldName}`;\n}\n\nconst projectFieldPattern =\n /^(?<blockId>.*)-(?<fieldName>blockPack|blockSettings|blockStorage|inputsValid|prodArgs|currentArgs|currentPrerunArgs|prodChainCtx|prodCtx|prodUiCtx|prodOutput|prodCtxPrevious|prodUiCtxPrevious|prodOutputPrevious|stagingCtx|stagingUiCtx|stagingOutput|stagingCtxPrevious|stagingUiCtxPrevious|stagingOutputPrevious|prodActionContext|stagingActionContext)$/;\n\nexport function parseProjectField(name: string): ProjectField | undefined {\n const match = name.match(projectFieldPattern);\n if (match === null) return undefined;\n const { blockId, fieldName } = match.groups!;\n return { blockId, fieldName } as ProjectField;\n}\n"],"mappings":";AAgDA,MAAa,wBAA0C,EACrD,QAAQ,CAAC;CAAE,IAAI;CAAW,OAAO;CAAW,QAAQ,CAAC;AAAE,CAAC,EAC1D;AAYA,MAAa,+BAAsD;CACjE,yBAAyB;CACzB,eAAe,CAAC;AAClB;AAEA,MAAa,mBAAgC,EAC3C,OAAO,cACT;AAMA,MAAa,sBAAoC;CAAE,MAAM;CAAe,SAAS;AAAI;AAErF,MAAa,mBAAmB;AAGhC,MAAa,uBAAuB;AAEpC,MAAa,0BAA0B;AACvC,MAAa,+BAA+B;AAC5C,MAAa,iBAAiB;AAC9B,MAAa,sBAAsB;AACnC,MAAa,yBAAyB;AAEtC,MAAa,2BAA2B;AAGxC,SAAgB,mBAAmB,SAAyB;CAC1D,OAAO,GAAG,2BAA2B;AACvC;AAEA,MAAa,4BAA4B;AAEzC,MAAa,kCAAkC;AAE/C,SAAgB,wBAAwB,MAAsB;CAC5D,OAAO,GAAG,kCAAkC;AAC9C;AA8BA,MAAa,oCAAoD,IAAI,IAAI;CACvE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,SAAgB,iBAAiB,SAAiB,WAA8C;CAC9F,OAAO,GAAG,QAAQ,GAAG;AACvB;AAEA,MAAM,sBACJ;AAEF,SAAgB,kBAAkB,MAAwC;CACxE,MAAM,QAAQ,KAAK,MAAM,mBAAmB;CAC5C,IAAI,UAAU,MAAM,OAAO,KAAA;CAC3B,MAAM,EAAE,SAAS,cAAc,MAAM;CACrC,OAAO;EAAE;EAAS;CAAU;AAC9B"}
|
package/dist/mutator/project.cjs
CHANGED
|
@@ -6,6 +6,7 @@ const require_project_model_util = require("../model/project_model_util.cjs");
|
|
|
6
6
|
const require_template_serializer = require("../model/template_serializer.cjs");
|
|
7
7
|
const require_block_pack = require("./block-pack/block_pack.cjs");
|
|
8
8
|
const require_context_export = require("./context_export.cjs");
|
|
9
|
+
const require_args_derivation = require("../model/args_derivation.cjs");
|
|
9
10
|
const require_index = require("../debug/index.cjs");
|
|
10
11
|
let _platforma_sdk_model = require("@platforma-sdk/model");
|
|
11
12
|
let _milaboratories_pl_model_middle_layer = require("@milaboratories/pl-model-middle-layer");
|
|
@@ -117,6 +118,18 @@ var BlockInfo = class {
|
|
|
117
118
|
get currentPrerunArgs() {
|
|
118
119
|
return this.currentPrerunArgsC();
|
|
119
120
|
}
|
|
121
|
+
argsErrorsC = cached(() => `${this.fields.inputsValid?.modCount}:${this.fields.currentArgs?.modCount}`, () => require_args_derivation.argsErrorsOfBlock({
|
|
122
|
+
modelAPIVersion: this.config.modelAPIVersion,
|
|
123
|
+
inputsValid: this.fields.inputsValid,
|
|
124
|
+
currentArgs: this.currentArgs
|
|
125
|
+
}));
|
|
126
|
+
/**
|
|
127
|
+
* The errors the block's `argsIssues()` found in its current args. A block whose model API
|
|
128
|
+
* version has no args issues, or that has no current args, has none.
|
|
129
|
+
*/
|
|
130
|
+
get argsErrors() {
|
|
131
|
+
return this.argsErrorsC();
|
|
132
|
+
}
|
|
120
133
|
get stagingRendered() {
|
|
121
134
|
return this.fields.stagingCtx !== void 0;
|
|
122
135
|
}
|
|
@@ -365,6 +378,14 @@ var ProjectMutator = class ProjectMutator {
|
|
|
365
378
|
status: "Ready"
|
|
366
379
|
};
|
|
367
380
|
}
|
|
381
|
+
/** Baggage of the root action context of a block render. */
|
|
382
|
+
blockActionContextBaggage(blockId, info) {
|
|
383
|
+
return {
|
|
384
|
+
name: this.getBlock(blockId).label,
|
|
385
|
+
blockPack: JSON.stringify(info.source),
|
|
386
|
+
blockId
|
|
387
|
+
};
|
|
388
|
+
}
|
|
368
389
|
getBlock(blockId) {
|
|
369
390
|
for (const block of require_project_model_util.allBlocks(this.struct)) if (block.id === blockId) return block;
|
|
370
391
|
throw new Error("block not found");
|
|
@@ -400,6 +421,26 @@ var ProjectMutator = class ProjectMutator {
|
|
|
400
421
|
}
|
|
401
422
|
return deleted;
|
|
402
423
|
}
|
|
424
|
+
/**
|
|
425
|
+
* Brings the block's `inputsValid` field in line with what its args derivation found: the run
|
|
426
|
+
* errors of its args, none when it may run with them, and no field when it has no args.
|
|
427
|
+
*/
|
|
428
|
+
setArgsErrors(blockId, derivedArgs) {
|
|
429
|
+
this.applyArgsErrorsChange(blockId, require_args_derivation.argsErrorsFieldChange(this.getBlockInfo(blockId).fields.inputsValid, derivedArgs));
|
|
430
|
+
}
|
|
431
|
+
applyArgsErrorsChange(blockId, change) {
|
|
432
|
+
switch (change.type) {
|
|
433
|
+
case "keep": return;
|
|
434
|
+
case "delete":
|
|
435
|
+
this.deleteBlockFields(blockId, "inputsValid");
|
|
436
|
+
return;
|
|
437
|
+
case "write": {
|
|
438
|
+
const ref = this.tx.createValue(_milaboratories_pl_client.Pl.JsonObject, change.data);
|
|
439
|
+
this.setBlockField(blockId, "inputsValid", ref, "Ready", change.data);
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
403
444
|
updateLastModified() {
|
|
404
445
|
this.lastModified = Date.now();
|
|
405
446
|
this.lastModifiedChanged = true;
|
|
@@ -418,6 +459,7 @@ var ProjectMutator = class ProjectMutator {
|
|
|
418
459
|
this.setBlockFieldObj(blockId, "stagingCtxPrevious", fields.stagingCtx);
|
|
419
460
|
this.setBlockFieldObj(blockId, "stagingUiCtxPrevious", fields.stagingUiCtx);
|
|
420
461
|
}
|
|
462
|
+
this.deleteBlockFields(blockId, "stagingActionContext");
|
|
421
463
|
if (this.deleteBlockFields(blockId, "stagingOutput", "stagingCtx", "stagingUiCtx")) this.resetStagingRefreshTimestamp();
|
|
422
464
|
}
|
|
423
465
|
resetProduction(blockId) {
|
|
@@ -430,7 +472,7 @@ var ProjectMutator = class ProjectMutator {
|
|
|
430
472
|
this.setBlockFieldObj(blockId, "prodCtxPrevious", fields.prodCtx);
|
|
431
473
|
this.setBlockFieldObj(blockId, "prodUiCtxPrevious", fields.prodUiCtx);
|
|
432
474
|
}
|
|
433
|
-
this.deleteBlockFields(blockId, "prodOutput", "prodCtx", "prodUiCtx", "prodArgs");
|
|
475
|
+
this.deleteBlockFields(blockId, "prodOutput", "prodCtx", "prodUiCtx", "prodArgs", "prodActionContext");
|
|
434
476
|
}
|
|
435
477
|
/** Running blocks are reset, settled ones (Ready or finished Error) moved to limbo. Returns if
|
|
436
478
|
* either of the actions were actually performed.
|
|
@@ -443,7 +485,10 @@ var ProjectMutator = class ProjectMutator {
|
|
|
443
485
|
this.renderingStateChanged = true;
|
|
444
486
|
this.deleteBlockFields(blockId, "prodOutputPrevious", "prodCtxPrevious", "prodUiCtxPrevious");
|
|
445
487
|
return true;
|
|
446
|
-
} else
|
|
488
|
+
} else {
|
|
489
|
+
this.deleteBlockFields(blockId, "prodActionContext");
|
|
490
|
+
return this.deleteBlockFields(blockId, "prodOutput", "prodCtx", "prodUiCtx", "prodArgs", "prodOutputPrevious", "prodCtxPrevious", "prodUiCtxPrevious");
|
|
491
|
+
}
|
|
447
492
|
}
|
|
448
493
|
/**
|
|
449
494
|
* Gets current block state and merges with partial updates.
|
|
@@ -489,9 +534,11 @@ var ProjectMutator = class ProjectMutator {
|
|
|
489
534
|
const prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(blockConfig, initialStorageJson);
|
|
490
535
|
if (prerunArgs !== void 0) this.setBlockFieldObj(blockId, "currentPrerunArgs", this.createJsonFieldValue(prerunArgs));
|
|
491
536
|
else this.deleteBlockFields(blockId, "currentPrerunArgs");
|
|
492
|
-
const
|
|
493
|
-
|
|
537
|
+
const derivedArgs = this.projectHelper.deriveArgsFromStorage(blockConfig, initialStorageJson);
|
|
538
|
+
const args = require_args_derivation.derivedArgsValue(derivedArgs);
|
|
539
|
+
if (args !== void 0) this.setBlockFieldObj(blockId, "currentArgs", this.createJsonFieldValue(args));
|
|
494
540
|
else this.deleteBlockFields(blockId, "currentArgs");
|
|
541
|
+
this.setArgsErrors(blockId, derivedArgs);
|
|
495
542
|
}
|
|
496
543
|
/** Optimally sets inputs for multiple blocks in one go */
|
|
497
544
|
setStates(requests) {
|
|
@@ -510,8 +557,9 @@ var ProjectMutator = class ProjectMutator {
|
|
|
510
557
|
const updatedStorageJson = this.projectHelper.applyStorageUpdateInVM(blockConfig, currentStorageJson, req.payload);
|
|
511
558
|
this.setBlockFieldObj(req.blockId, "blockStorage", this.createGzJsonFieldValueFromContent(updatedStorageJson));
|
|
512
559
|
prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(blockConfig, updatedStorageJson);
|
|
513
|
-
const
|
|
514
|
-
args =
|
|
560
|
+
const derivedArgs = this.projectHelper.deriveArgsFromStorage(blockConfig, updatedStorageJson);
|
|
561
|
+
args = require_args_derivation.derivedArgsValue(derivedArgs);
|
|
562
|
+
this.setArgsErrors(req.blockId, derivedArgs);
|
|
515
563
|
} else {
|
|
516
564
|
this.setBlockFieldObj(req.blockId, "blockStorage", this.createGzJsonFieldValue(req.state));
|
|
517
565
|
if (req.state !== null && typeof req.state === "object" && "args" in req.state) args = req.state.args;
|
|
@@ -617,15 +665,21 @@ var ProjectMutator = class ProjectMutator {
|
|
|
617
665
|
blockId: this.tx.createValue(_milaboratories_pl_client.Pl.JsonString, JSON.stringify(blockId)),
|
|
618
666
|
isProduction: this.tx.createValue(_milaboratories_pl_client.Pl.JsonBool, JSON.stringify(false)),
|
|
619
667
|
context: ctx
|
|
620
|
-
});
|
|
668
|
+
}, this.blockActionContextBaggage(blockId, info));
|
|
621
669
|
this.setBlockField(blockId, "stagingCtx", _milaboratories_pl_client.Pl.wrapInEphHolder(this.tx, ctx), "NotReady");
|
|
622
670
|
this.setBlockField(blockId, "stagingUiCtx", this.exportCtx(results.context), "NotReady");
|
|
623
671
|
this.setBlockField(blockId, "stagingOutput", results.result, "NotReady");
|
|
672
|
+
if (results.actionContext !== void 0) this.setBlockField(blockId, "stagingActionContext", results.actionContext, "NotReady");
|
|
624
673
|
}
|
|
625
674
|
renderProductionFor(blockId) {
|
|
626
675
|
this.resetProduction(blockId);
|
|
627
676
|
const info = this.getBlockInfo(blockId);
|
|
628
677
|
if (info.fields.currentArgs === void 0) throw new Error(`Can't render production for block ${blockId}: currentArgs not set`);
|
|
678
|
+
const argsErrors = info.argsErrors;
|
|
679
|
+
if (argsErrors.length > 0) {
|
|
680
|
+
const messages = argsErrors.map(({ message }) => message).join("; ");
|
|
681
|
+
throw new Error(`Can't render production for block ${blockId}: ${messages}`);
|
|
682
|
+
}
|
|
629
683
|
const ctx = this.createProdCtx(this.getPendingProductionGraph().nodes.get(blockId).upstream);
|
|
630
684
|
if (this.getBlock(blockId).renderingMode === "Light") throw new Error("Can't render production for light block.");
|
|
631
685
|
const tpl = info.getTemplate(this.tx);
|
|
@@ -634,10 +688,11 @@ var ProjectMutator = class ProjectMutator {
|
|
|
634
688
|
blockId: this.tx.createValue(_milaboratories_pl_client.Pl.JsonString, JSON.stringify(blockId)),
|
|
635
689
|
isProduction: this.tx.createValue(_milaboratories_pl_client.Pl.JsonBool, JSON.stringify(true)),
|
|
636
690
|
context: ctx
|
|
637
|
-
});
|
|
691
|
+
}, this.blockActionContextBaggage(blockId, info));
|
|
638
692
|
this.setBlockField(blockId, "prodCtx", _milaboratories_pl_client.Pl.wrapInEphHolder(this.tx, results.context), "NotReady");
|
|
639
693
|
this.setBlockField(blockId, "prodUiCtx", this.exportCtx(results.context), "NotReady");
|
|
640
694
|
this.setBlockField(blockId, "prodOutput", results.result, "NotReady");
|
|
695
|
+
if (results.actionContext !== void 0) this.setBlockField(blockId, "prodActionContext", results.actionContext, "NotReady");
|
|
641
696
|
this.setBlockFieldObj(blockId, "prodArgs", info.fields.currentArgs);
|
|
642
697
|
if (this.blocksInLimbo.delete(blockId)) this.renderingStateChanged = true;
|
|
643
698
|
}
|
|
@@ -654,8 +709,9 @@ var ProjectMutator = class ProjectMutator {
|
|
|
654
709
|
if (spec.storageMode === "fromModel") {
|
|
655
710
|
storageToWrite = spec.initialStorage ?? this.projectHelper.getInitialStorageInVM(blockConfig);
|
|
656
711
|
prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(blockConfig, storageToWrite);
|
|
657
|
-
const
|
|
658
|
-
args =
|
|
712
|
+
const derivedArgs = this.projectHelper.deriveArgsFromStorage(blockConfig, storageToWrite);
|
|
713
|
+
args = require_args_derivation.derivedArgsValue(derivedArgs);
|
|
714
|
+
this.setArgsErrors(blockId, derivedArgs);
|
|
659
715
|
} else if (spec.storageMode === "legacy") {
|
|
660
716
|
args = JSON.parse(spec.legacyState).args;
|
|
661
717
|
if (args === void 0) throw new Error("args is undefined in legacyState");
|
|
@@ -810,9 +866,11 @@ var ProjectMutator = class ProjectMutator {
|
|
|
810
866
|
const prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(newConfig, storageJson);
|
|
811
867
|
if (prerunArgs !== void 0) this.setBlockFieldObj(blockId, "currentPrerunArgs", this.createJsonFieldValue(prerunArgs));
|
|
812
868
|
else this.deleteBlockFields(blockId, "currentPrerunArgs");
|
|
813
|
-
const
|
|
814
|
-
|
|
869
|
+
const derivedArgs = this.projectHelper.deriveArgsFromStorage(newConfig, storageJson);
|
|
870
|
+
const args = require_args_derivation.derivedArgsValue(derivedArgs);
|
|
871
|
+
if (args !== void 0) this.setBlockFieldObj(blockId, "currentArgs", this.createJsonFieldValue(args));
|
|
815
872
|
else this.deleteBlockFields(blockId, "currentArgs");
|
|
873
|
+
this.setArgsErrors(blockId, derivedArgs);
|
|
816
874
|
};
|
|
817
875
|
if (newClearState !== void 0) {
|
|
818
876
|
if (newConfig.modelAPIVersion === _platforma_sdk_model.BLOCK_STORAGE_FACADE_VERSION) {
|
|
@@ -821,6 +879,7 @@ var ProjectMutator = class ProjectMutator {
|
|
|
821
879
|
this.updateLastModified();
|
|
822
880
|
} else {
|
|
823
881
|
persistBlockPack();
|
|
882
|
+
this.deleteBlockFields(blockId, "inputsValid");
|
|
824
883
|
this.setStates([{
|
|
825
884
|
modelAPIVersion: 1,
|
|
826
885
|
blockId,
|
|
@@ -836,6 +895,7 @@ var ProjectMutator = class ProjectMutator {
|
|
|
836
895
|
applyStorageAndDeriveArgs(migrationResult.newStorageJson);
|
|
837
896
|
} else {
|
|
838
897
|
persistBlockPack();
|
|
898
|
+
this.deleteBlockFields(blockId, "inputsValid");
|
|
839
899
|
if (info.fields.currentArgs !== void 0) this.setBlockFieldObj(blockId, "currentPrerunArgs", info.fields.currentArgs);
|
|
840
900
|
}
|
|
841
901
|
this.blocksWithChangedInputs.add(blockId);
|
|
@@ -902,6 +962,7 @@ var ProjectMutator = class ProjectMutator {
|
|
|
902
962
|
const blockId = queue.shift();
|
|
903
963
|
const fields = this.getBlockInfo(blockId).fields;
|
|
904
964
|
if (fields.prodOutput?.status === "Ready" && fields.prodCtx?.status === "Ready") continue;
|
|
965
|
+
this.deleteBlockFields(blockId, "prodActionContext");
|
|
905
966
|
if (this.deleteBlockFields(blockId, "prodOutput", "prodCtx", "prodUiCtx", "prodArgs")) {
|
|
906
967
|
stopped.push(blockId);
|
|
907
968
|
for (const downstream of activeProdGraph.traverseIdsExcludingRoots("downstream", blockId)) {
|