@milaboratories/pl-middle-layer 1.46.34 → 1.47.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 +0 -58
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/middle_layer/frontend_path.cjs +0 -1
- package/dist/middle_layer/frontend_path.cjs.map +1 -1
- package/dist/middle_layer/frontend_path.js +0 -1
- package/dist/middle_layer/frontend_path.js.map +1 -1
- package/dist/middle_layer/middle_layer.cjs +5 -1
- package/dist/middle_layer/middle_layer.cjs.map +1 -1
- package/dist/middle_layer/middle_layer.d.ts +3 -1
- package/dist/middle_layer/middle_layer.d.ts.map +1 -1
- package/dist/middle_layer/middle_layer.js +5 -1
- package/dist/middle_layer/middle_layer.js.map +1 -1
- package/dist/middle_layer/project.cjs +8 -6
- 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 +9 -7
- package/dist/middle_layer/project.js.map +1 -1
- package/dist/middle_layer/project_overview.cjs +2 -2
- package/dist/middle_layer/project_overview.cjs.map +1 -1
- package/dist/middle_layer/project_overview.js +3 -3
- package/dist/middle_layer/project_overview.js.map +1 -1
- package/dist/model/index.d.ts +0 -1
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/project_helper.cjs +20 -32
- package/dist/model/project_helper.cjs.map +1 -1
- package/dist/model/project_helper.d.ts +3 -4
- package/dist/model/project_helper.d.ts.map +1 -1
- package/dist/model/project_helper.js +21 -33
- package/dist/model/project_helper.js.map +1 -1
- package/dist/mutator/block-pack/frontend.cjs +0 -1
- package/dist/mutator/block-pack/frontend.cjs.map +1 -1
- package/dist/mutator/block-pack/frontend.js +0 -1
- package/dist/mutator/block-pack/frontend.js.map +1 -1
- package/dist/mutator/project.cjs +28 -35
- package/dist/mutator/project.cjs.map +1 -1
- package/dist/mutator/project.d.ts.map +1 -1
- package/dist/mutator/project.js +29 -36
- package/dist/mutator/project.js.map +1 -1
- package/package.json +13 -13
- package/src/middle_layer/middle_layer.ts +7 -2
- package/src/middle_layer/project.ts +12 -7
- package/src/middle_layer/project_overview.ts +3 -3
- package/src/model/index.ts +0 -1
- package/src/model/project_helper.ts +33 -37
- package/src/mutator/project-v3.test.ts +9 -9
- package/src/mutator/project.ts +50 -74
- package/dist/model/block_storage_helper.cjs +0 -210
- package/dist/model/block_storage_helper.cjs.map +0 -1
- package/dist/model/block_storage_helper.d.ts +0 -98
- package/dist/model/block_storage_helper.d.ts.map +0 -1
- package/dist/model/block_storage_helper.js +0 -153
- package/dist/model/block_storage_helper.js.map +0 -1
- package/src/model/block_storage_helper.ts +0 -213
package/dist/mutator/project.js
CHANGED
|
@@ -8,7 +8,7 @@ import Denque from 'denque';
|
|
|
8
8
|
import { getPreparedExportTemplateEnvelope, exportContext } from './context_export.js';
|
|
9
9
|
import { loadTemplate } from './template/template_loading.js';
|
|
10
10
|
import { notEmpty, canonicalJsonBytes, cachedDeserialize, cachedDecode } from '@milaboratories/ts-helpers';
|
|
11
|
-
import { extractConfig, UiError } from '@platforma-sdk/model';
|
|
11
|
+
import { BLOCK_STORAGE_FACADE_VERSION, extractConfig, UiError } from '@platforma-sdk/model';
|
|
12
12
|
import { getDebugFlags } from '../debug/index.js';
|
|
13
13
|
|
|
14
14
|
function cached(modIdCb, valueCb) {
|
|
@@ -402,7 +402,7 @@ class ProjectMutator {
|
|
|
402
402
|
resetToInitialStorage(blockId) {
|
|
403
403
|
const info = this.getBlockInfo(blockId);
|
|
404
404
|
const blockConfig = info.config;
|
|
405
|
-
if (blockConfig.modelAPIVersion !==
|
|
405
|
+
if (blockConfig.modelAPIVersion !== BLOCK_STORAGE_FACADE_VERSION) {
|
|
406
406
|
throw new Error("resetToInitialStorage is only supported for model API version 2");
|
|
407
407
|
}
|
|
408
408
|
// Get initial storage from VM
|
|
@@ -437,7 +437,7 @@ class ProjectMutator {
|
|
|
437
437
|
// Derive args from storage using the block's config.args() callback
|
|
438
438
|
let args;
|
|
439
439
|
let prerunArgs;
|
|
440
|
-
if (req.modelAPIVersion ===
|
|
440
|
+
if (req.modelAPIVersion === BLOCK_STORAGE_FACADE_VERSION) {
|
|
441
441
|
const currentStorageJson = info.blockStorageJson;
|
|
442
442
|
if (currentStorageJson === undefined) {
|
|
443
443
|
throw new Error(`Block ${req.blockId} has no blockStorage - this should not happen`);
|
|
@@ -827,62 +827,55 @@ class ProjectMutator {
|
|
|
827
827
|
migrateBlockPack(blockId, spec, newClearState) {
|
|
828
828
|
const info = this.getBlockInfo(blockId);
|
|
829
829
|
const newConfig = extractConfig(spec.config);
|
|
830
|
-
|
|
830
|
+
const persistBlockPack = () => {
|
|
831
|
+
this.setBlockField(blockId, "blockPack", Pl.wrapInHolder(this.tx, createBlockPack(this.tx, spec)), "NotReady");
|
|
832
|
+
};
|
|
833
|
+
const applyStorageAndDeriveArgs = (storageJson) => {
|
|
834
|
+
persistBlockPack();
|
|
835
|
+
this.setBlockStorageRaw(blockId, storageJson);
|
|
836
|
+
const deriveArgsResult = this.projectHelper.deriveArgsFromStorage(newConfig, storageJson);
|
|
837
|
+
if (!deriveArgsResult.error) {
|
|
838
|
+
this.setBlockFieldObj(blockId, "currentArgs", this.createJsonFieldValue(deriveArgsResult.value));
|
|
839
|
+
const prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(newConfig, storageJson);
|
|
840
|
+
if (prerunArgs !== undefined) {
|
|
841
|
+
this.setBlockFieldObj(blockId, "currentPrerunArgs", this.createJsonFieldValue(prerunArgs));
|
|
842
|
+
}
|
|
843
|
+
}
|
|
844
|
+
};
|
|
831
845
|
if (newClearState !== undefined) {
|
|
832
846
|
// State is being reset - no migration needed
|
|
833
|
-
const supportsStorageFromVM = newConfig.modelAPIVersion ===
|
|
847
|
+
const supportsStorageFromVM = newConfig.modelAPIVersion === BLOCK_STORAGE_FACADE_VERSION;
|
|
834
848
|
if (supportsStorageFromVM) {
|
|
835
849
|
// V2+: Get initial storage directly from VM and derive args from it
|
|
836
850
|
const initialStorageJson = this.projectHelper.getInitialStorageInVM(newConfig);
|
|
837
|
-
|
|
838
|
-
// Derive args from storage - only set currentArgs if derivation succeeds
|
|
839
|
-
const deriveArgsResult = this.projectHelper.deriveArgsFromStorage(newConfig, initialStorageJson);
|
|
840
|
-
if (!deriveArgsResult.error) {
|
|
841
|
-
this.setBlockFieldObj(blockId, "currentArgs", this.createJsonFieldValue(deriveArgsResult.value));
|
|
842
|
-
// Derive prerunArgs from storage
|
|
843
|
-
const prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(newConfig, initialStorageJson);
|
|
844
|
-
if (prerunArgs !== undefined) {
|
|
845
|
-
this.setBlockFieldObj(blockId, "currentPrerunArgs", this.createJsonFieldValue(prerunArgs));
|
|
846
|
-
}
|
|
847
|
-
}
|
|
851
|
+
applyStorageAndDeriveArgs(initialStorageJson);
|
|
848
852
|
this.blocksWithChangedInputs.add(blockId);
|
|
849
853
|
this.updateLastModified();
|
|
850
854
|
}
|
|
851
855
|
else {
|
|
852
856
|
// V1: Use setStates with legacy state format
|
|
857
|
+
persistBlockPack();
|
|
853
858
|
this.setStates([{ modelAPIVersion: 1, blockId, state: newClearState.state }]);
|
|
854
859
|
}
|
|
855
860
|
}
|
|
856
861
|
else {
|
|
857
862
|
// State is being preserved - run migrations if needed via VM
|
|
858
863
|
// Only Model API v2 blocks support migrations
|
|
859
|
-
const supportsStateMigrations = newConfig.modelAPIVersion ===
|
|
864
|
+
const supportsStateMigrations = newConfig.modelAPIVersion === BLOCK_STORAGE_FACADE_VERSION;
|
|
860
865
|
if (supportsStateMigrations) {
|
|
861
866
|
const currentStorageJson = info.blockStorageJson;
|
|
867
|
+
// Attempt migration BEFORE persisting block pack — on failure,
|
|
868
|
+
// block stays on old version (no inconsistent new-code/old-storage state)
|
|
862
869
|
const migrationResult = this.projectHelper.migrateStorageInVM(newConfig, currentStorageJson);
|
|
863
870
|
if (migrationResult.error !== undefined) {
|
|
864
|
-
|
|
865
|
-
}
|
|
866
|
-
else {
|
|
867
|
-
console.log(`[migrateBlockPack] Block ${blockId}: ${migrationResult.info}`);
|
|
868
|
-
if (migrationResult.warn) {
|
|
869
|
-
console.warn(`[migrateBlockPack] Block ${blockId} migration warning: ${migrationResult.warn}`);
|
|
870
|
-
}
|
|
871
|
-
this.setBlockStorageRaw(blockId, migrationResult.newStorageJson);
|
|
872
|
-
// Re-derive currentArgs from migrated storage (new block code + migrated data)
|
|
873
|
-
const deriveArgsResult = this.projectHelper.deriveArgsFromStorage(newConfig, migrationResult.newStorageJson);
|
|
874
|
-
if (!deriveArgsResult.error) {
|
|
875
|
-
this.setBlockFieldObj(blockId, "currentArgs", this.createJsonFieldValue(deriveArgsResult.value));
|
|
876
|
-
}
|
|
877
|
-
// Derive prerunArgs from the migrated storage so staging can re-render
|
|
878
|
-
const prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(newConfig, migrationResult.newStorageJson);
|
|
879
|
-
if (prerunArgs !== undefined) {
|
|
880
|
-
this.setBlockFieldObj(blockId, "currentPrerunArgs", this.createJsonFieldValue(prerunArgs));
|
|
881
|
-
}
|
|
871
|
+
throw new Error(`[migrateBlockPack] Block ${blockId} migration failed: ${migrationResult.error}`);
|
|
882
872
|
}
|
|
873
|
+
console.log(`[migrateBlockPack] Block ${blockId}: ${migrationResult.info}`);
|
|
874
|
+
applyStorageAndDeriveArgs(migrationResult.newStorageJson);
|
|
883
875
|
}
|
|
884
876
|
else {
|
|
885
|
-
// Legacy blocks (modelAPIVersion 1): prerunArgs = currentArgs
|
|
877
|
+
// Legacy blocks (modelAPIVersion 1): persist block pack, set prerunArgs = currentArgs
|
|
878
|
+
persistBlockPack();
|
|
886
879
|
if (info.fields.currentArgs !== undefined) {
|
|
887
880
|
this.setBlockFieldObj(blockId, "currentPrerunArgs", info.fields.currentArgs);
|
|
888
881
|
}
|