@milaboratories/pl-middle-layer 1.39.5 → 1.39.6

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.
@@ -36,6 +36,19 @@ export declare class Project {
36
36
  * @return returns newly created block id
37
37
  * */
38
38
  addBlock(blockLabel: string, blockPackSpec: BlockPackSpecAny, before?: string, author?: AuthorMarker | undefined, blockId?: string): Promise<string>;
39
+ /**
40
+ * Duplicates an existing block by copying all its fields and state.
41
+ * This method works at the mutator level for efficient block copying.
42
+ *
43
+ * @param originalBlockId id of the block to duplicate
44
+ * @param before id of the block to insert new block before
45
+ * @param author author marker for the duplication operation
46
+ * @param newBlockId internal id to be assigned for the duplicated block,
47
+ * if omitted, a randomly generated UUID will be assigned
48
+ *
49
+ * @return returns newly created block id
50
+ * */
51
+ duplicateBlock(originalBlockId: string, before?: string, author?: AuthorMarker | undefined, newBlockId?: string): Promise<string>;
39
52
  /**
40
53
  * Update block to new block pack, optionally resetting args and ui state to
41
54
  * initial values
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/middle_layer/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/middle_layer/project.ts"],"names":[],"mappings":"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"}
@@ -60,6 +60,7 @@ export interface ProjectField {
60
60
  blockId: string;
61
61
  fieldName: 'blockPack' | 'blockSettings' | 'uiState' | 'prodArgs' | 'currentArgs' | 'prodCtx' | 'prodUiCtx' | 'prodOutput' | 'prodCtxPrevious' | 'prodUiCtxPrevious' | 'prodOutputPrevious' | 'stagingCtx' | 'stagingUiCtx' | 'stagingOutput' | 'stagingCtxPrevious' | 'stagingUiCtxPrevious' | 'stagingOutputPrevious';
62
62
  }
63
+ export declare const FieldsToDuplicate: Set<ProjectField['fieldName']>;
63
64
  export declare function projectFieldName(blockId: string, fieldName: ProjectField['fieldName']): string;
64
65
  export declare function parseProjectField(name: string): ProjectField | undefined;
65
66
  //# sourceMappingURL=project_model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project_model.d.ts","sourceRoot":"","sources":["../../src/model/project_model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EACV,gBAAgB,IAAI,yBAAyB,EAC7C,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,WAAW,gBAAiB,SAAQ,yBAAyB;IACjE,2BAA2B;IAC3B,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,2DAA2D;AAC3D,MAAM,WAAW,KAAK;IACpB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;;SAGK;IACL,KAAK,EAAE,MAAM,CAAC;IAEd,sCAAsC;IACtC,aAAa,EAAE,kBAAkB,CAAC;CACnC;AAED,qCAAqC;AACrC,MAAM,WAAW,UAAU;IACzB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IAEd,aAAa;IACb,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;CAC/B;AAED,eAAO,MAAM,qBAAqB,EAAE,gBAEnC,CAAC;AAEF,sCAAsC;AACtC,MAAM,WAAW,qBAAqB;IACpC,gDAAgD;IAChD,uBAAuB,EAAE,MAAM,CAAC;IAEhC;yEACqE;IACrE,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,eAAO,MAAM,4BAA4B,EAAE,qBAG1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,WAE9B,CAAC;AAMF,eAAO,MAAM,mBAAmB,EAAE,YAAoD,CAAC;AAEvF,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,eAAO,MAAM,uBAAuB,mBAAmB,CAAC;AACxD,eAAO,MAAM,4BAA4B,wBAAwB,CAAC;AAClE,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAC5C,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAE5D,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,yBAAyB,QAAsC,CAAC;AAE7E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,eAAO,MAAM,yBAAyB,2BAA2B,CAAC;AAElE,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;AAEpE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EACL,WAAW,GACX,eAAe,GACf,SAAS,GACT,UAAU,GACV,aAAa,GACb,SAAS,GACT,WAAW,GACX,YAAY,GACZ,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,YAAY,GACZ,cAAc,GACd,eAAe,GACf,oBAAoB,GACpB,sBAAsB,GACtB,uBAAuB,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,GAAG,MAAM,CAE9F;AAKD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAKxE"}
1
+ {"version":3,"file":"project_model.d.ts","sourceRoot":"","sources":["../../src/model/project_model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EACV,gBAAgB,IAAI,yBAAyB,EAC7C,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,WAAW,gBAAiB,SAAQ,yBAAyB;IACjE,2BAA2B;IAC3B,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,2DAA2D;AAC3D,MAAM,WAAW,KAAK;IACpB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;;SAGK;IACL,KAAK,EAAE,MAAM,CAAC;IAEd,sCAAsC;IACtC,aAAa,EAAE,kBAAkB,CAAC;CACnC;AAED,qCAAqC;AACrC,MAAM,WAAW,UAAU;IACzB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IAEd,aAAa;IACb,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;CAC/B;AAED,eAAO,MAAM,qBAAqB,EAAE,gBAEnC,CAAC;AAEF,sCAAsC;AACtC,MAAM,WAAW,qBAAqB;IACpC,gDAAgD;IAChD,uBAAuB,EAAE,MAAM,CAAC;IAEhC;yEACqE;IACrE,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,eAAO,MAAM,4BAA4B,EAAE,qBAG1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,WAE9B,CAAC;AAMF,eAAO,MAAM,mBAAmB,EAAE,YAAoD,CAAC;AAEvF,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAChD,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,eAAO,MAAM,uBAAuB,mBAAmB,CAAC;AACxD,eAAO,MAAM,4BAA4B,wBAAwB,CAAC;AAClE,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAC5C,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AACtD,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAE5D,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,yBAAyB,QAAsC,CAAC;AAE7E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,eAAO,MAAM,yBAAyB,2BAA2B,CAAC;AAElE,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;AAEpE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EACL,WAAW,GACX,eAAe,GACf,SAAS,GACT,UAAU,GACV,aAAa,GACb,SAAS,GACT,WAAW,GACX,YAAY,GACZ,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,YAAY,GACZ,cAAc,GACd,eAAe,GACf,oBAAoB,GACpB,sBAAsB,GACtB,uBAAuB,CAAC;CAC7B;AAED,eAAO,MAAM,iBAAiB,EAAE,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,CAS3D,CAAC;AAEH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,GAAG,MAAM,CAE9F;AAKD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAKxE"}
@@ -88,7 +88,8 @@ export declare class ProjectMutator {
88
88
  private resetStaging;
89
89
  private resetProduction;
90
90
  /** Running blocks are reset, already computed moved to limbo. Returns if
91
- * either of the actions were actually performed. */
91
+ * either of the actions were actually performed.
92
+ * This method ensures the block is left in a consistent state that passes check() constraints. */
92
93
  private resetOrLimboProduction;
93
94
  /** Optimally sets inputs for multiple blocks in one go */
94
95
  setStates(requests: SetStatesRequest[]): void;
@@ -98,9 +99,21 @@ export declare class ProjectMutator {
98
99
  private exportCtx;
99
100
  private renderStagingFor;
100
101
  private renderProductionFor;
102
+ private initializeNewBlock;
103
+ private getFieldNamesToDuplicate;
104
+ private initializeBlockDuplicate;
101
105
  /** Very generic method, better check for more specialized case-specific methods first. */
102
- updateStructure(newStructure: ProjectStructure, newBlockSpecProvider?: (blockId: string) => NewBlockSpec): void;
106
+ updateStructure(newStructure: ProjectStructure, newBlockInitializer?: (blockId: string) => void): void;
103
107
  addBlock(block: Block, spec: NewBlockSpec, before?: string): void;
108
+ /**
109
+ * Duplicates an existing block by copying all its fields and structure.
110
+ * This method creates a deep copy of the block at the mutator level.
111
+ *
112
+ * @param originalBlockId id of the block to duplicate
113
+ * @param newBlockId id for the new duplicated block
114
+ * @param after id of the block to insert new block after
115
+ */
116
+ duplicateBlock(originalBlockId: string, newBlockId: string, after?: string): void;
104
117
  deleteBlock(blockId: string): void;
105
118
  migrateBlockPack(blockId: string, spec: BlockPackSpecPrepared, newArgsAndUiState?: ArgsAndUiState): void;
106
119
  renderProduction(blockIds: string[], addUpstreams?: boolean): Set<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/mutator/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/mutator/project.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/pl-middle-layer",
3
- "version": "1.39.5",
3
+ "version": "1.39.6",
4
4
  "description": "Pl Middle Layer",
5
5
  "engines": {
6
6
  "node": ">=20.16.0"
@@ -33,21 +33,21 @@
33
33
  "zod": "~3.23.8",
34
34
  "remeda": "^2.22.6",
35
35
  "@milaboratories/pl-http": "^1.1.4",
36
- "@milaboratories/computable": "^2.6.0",
37
- "@milaboratories/pl-client": "^2.11.2",
38
36
  "@milaboratories/resolve-helper": "^1.1.0",
37
+ "@milaboratories/computable": "^2.6.0",
39
38
  "@platforma-sdk/block-tools": "^2.5.67",
40
- "@milaboratories/pl-model-common": "~1.16.3",
41
- "@milaboratories/pl-model-middle-layer": "~1.7.49",
39
+ "@milaboratories/pl-client": "^2.11.2",
42
40
  "@milaboratories/pl-drivers": "^1.6.3",
41
+ "@milaboratories/pl-model-middle-layer": "~1.7.49",
42
+ "@milaboratories/pl-model-common": "~1.16.3",
43
+ "@milaboratories/pl-model-backend": "~1.1.2",
43
44
  "@milaboratories/pl-tree": "~1.7.0",
44
45
  "@platforma-sdk/model": "~1.39.8",
45
46
  "@milaboratories/ts-helpers": "^1.4.1",
46
- "@milaboratories/pl-model-backend": "~1.1.2",
47
47
  "@platforma-sdk/workflow-tengo": "4.9.3",
48
48
  "@milaboratories/pl-config": "^1.6.1",
49
- "@milaboratories/pl-errors": "^1.1.9",
50
- "@milaboratories/pl-deployments": "^2.4.3"
49
+ "@milaboratories/pl-deployments": "^2.4.3",
50
+ "@milaboratories/pl-errors": "^1.1.9"
51
51
  },
52
52
  "devDependencies": {
53
53
  "semver": "^7.7.2",
@@ -60,8 +60,8 @@
60
60
  "jest": "^29.7.0",
61
61
  "@jest/globals": "^29.7.0",
62
62
  "ts-jest": "^29.2.6",
63
- "@milaboratories/eslint-config": "^1.0.4",
64
- "@milaboratories/build-configs": "1.0.4"
63
+ "@milaboratories/build-configs": "1.0.4",
64
+ "@milaboratories/eslint-config": "^1.0.4"
65
65
  },
66
66
  "scripts": {
67
67
  "type-check": "tsc --noEmit --composite false",
@@ -184,6 +184,32 @@ export class Project {
184
184
  return blockId;
185
185
  }
186
186
 
187
+ /**
188
+ * Duplicates an existing block by copying all its fields and state.
189
+ * This method works at the mutator level for efficient block copying.
190
+ *
191
+ * @param originalBlockId id of the block to duplicate
192
+ * @param before id of the block to insert new block before
193
+ * @param author author marker for the duplication operation
194
+ * @param newBlockId internal id to be assigned for the duplicated block,
195
+ * if omitted, a randomly generated UUID will be assigned
196
+ *
197
+ * @return returns newly created block id
198
+ * */
199
+ public async duplicateBlock(
200
+ originalBlockId: string,
201
+ before?: string,
202
+ author: AuthorMarker | undefined = undefined,
203
+ newBlockId: string = randomUUID(),
204
+ ): Promise<string> {
205
+ await withProjectAuthored(this.env.projectHelper, this.env.pl, this.rid, author, (mut) =>
206
+ mut.duplicateBlock(originalBlockId, newBlockId, before),
207
+ );
208
+ await this.projectTree.refreshState();
209
+
210
+ return newBlockId;
211
+ }
212
+
187
213
  /**
188
214
  * Update block to new block pack, optionally resetting args and ui state to
189
215
  * initial values
@@ -118,6 +118,17 @@ export interface ProjectField {
118
118
  | 'stagingOutputPrevious';
119
119
  }
120
120
 
121
+ export const FieldsToDuplicate: Set<ProjectField['fieldName']> = new Set([
122
+ 'blockPack',
123
+ 'blockSettings',
124
+ 'uiState',
125
+ 'prodArgs',
126
+ 'currentArgs',
127
+ 'prodCtx',
128
+ 'prodUiCtx',
129
+ 'prodOutput',
130
+ ]);
131
+
121
132
  export function projectFieldName(blockId: string, fieldName: ProjectField['fieldName']): string {
122
133
  return `${blockId}-${fieldName}`;
123
134
  }
@@ -39,6 +39,7 @@ import {
39
39
  ProjectCreatedTimestamp,
40
40
  ProjectStructureAuthorKey,
41
41
  getServiceTemplateField,
42
+ FieldsToDuplicate,
42
43
  } from '../model/project_model';
43
44
  import { BlockPackTemplateField, createBlockPack } from './block-pack/block_pack';
44
45
  import type {
@@ -472,25 +473,37 @@ export class ProjectMutator {
472
473
  }
473
474
 
474
475
  /** Running blocks are reset, already computed moved to limbo. Returns if
475
- * either of the actions were actually performed. */
476
+ * either of the actions were actually performed.
477
+ * This method ensures the block is left in a consistent state that passes check() constraints. */
476
478
  private resetOrLimboProduction(blockId: string): boolean {
477
479
  const fields = this.getBlockInfo(blockId).fields;
480
+
481
+ // Check if we can safely move to limbo (both core production fields are ready)
478
482
  if (fields.prodOutput?.status === 'Ready' && fields.prodCtx?.status === 'Ready') {
479
483
  if (this.blocksInLimbo.has(blockId))
480
484
  // we are already in limbo
481
485
  return false;
482
486
 
483
- // limbo
487
+ // limbo - keep the ready production results but clean up cache
484
488
  this.blocksInLimbo.add(blockId);
485
489
  this.renderingStateChanged = true;
486
490
 
487
- // doing some gc
491
+ // doing some gc - clean up previous cache fields
488
492
  this.deleteBlockFields(blockId, 'prodOutputPrevious', 'prodCtxPrevious', 'prodUiCtxPrevious');
489
493
 
490
494
  return true;
491
495
  } else {
492
- // reset
493
- return this.deleteBlockFields(blockId, 'prodOutput', 'prodCtx', 'prodUiCtx', 'prodArgs');
496
+ // reset - clean up any partial/inconsistent production stat
497
+ return this.deleteBlockFields(
498
+ blockId,
499
+ 'prodOutput',
500
+ 'prodCtx',
501
+ 'prodUiCtx',
502
+ 'prodArgs',
503
+ 'prodOutputPrevious',
504
+ 'prodCtxPrevious',
505
+ 'prodUiCtxPrevious',
506
+ );
494
507
  }
495
508
  }
496
509
 
@@ -643,10 +656,92 @@ export class ProjectMutator {
643
656
  // Structure changes
644
657
  //
645
658
 
659
+ private initializeNewBlock(blockId: string, spec: NewBlockSpec): void {
660
+ const info = new BlockInfo(blockId, {}, extractConfig(spec.blockPack.config), spec.blockPack.source);
661
+ this.blockInfos.set(blockId, info);
662
+
663
+ // block pack
664
+ const bp = createBlockPack(this.tx, spec.blockPack);
665
+ this.setBlockField(blockId, 'blockPack', Pl.wrapInHolder(this.tx, bp), 'NotReady');
666
+
667
+ // settings
668
+ this.setBlockFieldObj(
669
+ blockId,
670
+ 'blockSettings',
671
+ this.createJsonFieldValue(InitialBlockSettings),
672
+ );
673
+
674
+ // args
675
+ this.setBlockFieldObj(blockId, 'currentArgs', this.createJsonFieldValueByContent(spec.args));
676
+
677
+ // uiState
678
+ this.setBlockFieldObj(blockId, 'uiState', this.createJsonFieldValueByContent(spec.uiState ?? '{}'));
679
+
680
+ // checking structure
681
+ info.check();
682
+ }
683
+
684
+ private getFieldNamesToDuplicate(blockId: string): Set<ProjectField['fieldName']> {
685
+ const fields = this.getBlockInfo(blockId).fields;
686
+
687
+ const diff = <T>(setA: Set<T>, setB: Set<T>): Set<T> => new Set([...setA].filter((x) => !setB.has(x)));
688
+
689
+ // Check if we can safely move to limbo (both core production fields are ready)
690
+ if (fields.prodOutput?.status === 'Ready' && fields.prodCtx?.status === 'Ready') {
691
+ if (this.blocksInLimbo.has(blockId))
692
+ // we are already in limbo
693
+ return FieldsToDuplicate;
694
+
695
+ return diff(FieldsToDuplicate, new Set([
696
+ 'prodOutputPrevious',
697
+ 'prodCtxPrevious',
698
+ 'prodUiCtxPrevious',
699
+ ]));
700
+ } else {
701
+ return diff(FieldsToDuplicate, new Set([
702
+ 'prodOutput',
703
+ 'prodCtx',
704
+ 'prodUiCtx',
705
+ 'prodArgs',
706
+ 'prodOutputPrevious',
707
+ 'prodCtxPrevious',
708
+ 'prodUiCtxPrevious',
709
+ ]));
710
+ }
711
+ }
712
+
713
+ private initializeBlockDuplicate(blockId: string, originalBlockInfo: BlockInfo) {
714
+ const info = new BlockInfo(
715
+ blockId,
716
+ {},
717
+ originalBlockInfo.config,
718
+ originalBlockInfo.source,
719
+ );
720
+
721
+ this.blockInfos.set(blockId, info);
722
+
723
+ const fieldNamesToDuplicate = this.getFieldNamesToDuplicate(blockId);
724
+
725
+ // Copy all fields from original block to new block by sharing references
726
+ for (const [fieldName, fieldState] of Object.entries(originalBlockInfo.fields)) {
727
+ if (fieldNamesToDuplicate.has(fieldName as ProjectField['fieldName']) && fieldState && fieldState.ref) {
728
+ this.setBlockFieldObj(blockId, fieldName as keyof BlockFieldStates, {
729
+ ref: fieldState.ref,
730
+ status: fieldState.status,
731
+ value: fieldState.value,
732
+ });
733
+ }
734
+ }
735
+
736
+ this.resetOrLimboProduction(blockId);
737
+
738
+ info.check();
739
+ }
740
+
646
741
  /** Very generic method, better check for more specialized case-specific methods first. */
647
742
  public updateStructure(
648
743
  newStructure: ProjectStructure,
649
- newBlockSpecProvider: (blockId: string) => NewBlockSpec = NoNewBlocks,
744
+ newBlockInitializer: (blockId: string) => void = NoNewBlocks,
650
745
  ): void {
651
746
  const currentStagingGraph = this.getStagingGraph();
652
747
  const currentActualProductionGraph = this.getActualProductionGraph();
@@ -665,31 +760,7 @@ export class ProjectMutator {
665
760
 
666
761
  // creating new blocks
667
762
  for (const blockId of stagingDiff.onlyInB) {
668
- const spec = newBlockSpecProvider(blockId);
669
-
670
- // adding new block info
671
- const info = new BlockInfo(blockId, {}, extractConfig(spec.blockPack.config), spec.blockPack.source);
672
- this.blockInfos.set(blockId, info);
673
-
674
- // block pack
675
- const bp = createBlockPack(this.tx, spec.blockPack);
676
- this.setBlockField(blockId, 'blockPack', Pl.wrapInHolder(this.tx, bp), 'NotReady');
677
-
678
- // settings
679
- this.setBlockFieldObj(
680
- blockId,
681
- 'blockSettings',
682
- this.createJsonFieldValue(InitialBlockSettings),
683
- );
684
-
685
- // args
686
- this.setBlockFieldObj(blockId, 'currentArgs', this.createJsonFieldValueByContent(spec.args));
687
-
688
- // uiState
689
- this.setBlockFieldObj(blockId, 'uiState', this.createJsonFieldValueByContent(spec.uiState ?? '{}'));
690
-
691
- // checking structure
692
- info.check();
763
+ newBlockInitializer(blockId);
693
764
  }
694
765
 
695
766
  // resetting stagings affected by topology change
@@ -747,7 +818,50 @@ export class ProjectMutator {
747
818
  }
748
819
  this.updateStructure(newStruct, (blockId) => {
749
820
  if (blockId !== block.id) throw new Error('Unexpected');
750
- return spec;
821
+ this.initializeNewBlock(blockId, spec);
822
+ });
823
+ }
824
+
825
+ /**
826
+ * Duplicates an existing block by copying all its fields and structure.
827
+ * This method creates a deep copy of the block at the mutator level.
828
+ *
829
+ * @param originalBlockId id of the block to duplicate
830
+ * @param newBlockId id for the new duplicated block
831
+ * @param after id of the block to insert new block after
832
+ */
833
+ public duplicateBlock(originalBlockId: string, newBlockId: string, after?: string): void {
834
+ // Get the original block from structure
835
+ const originalBlock = this.getBlock(originalBlockId);
836
+ const originalBlockInfo = this.getBlockInfo(originalBlockId);
837
+
838
+ // Create new block in structure
839
+ const newBlock: Block = {
840
+ id: newBlockId,
841
+ label: originalBlock.label,
842
+ renderingMode: originalBlock.renderingMode,
843
+ };
844
+
845
+ // Add the new block to structure
846
+ const newStruct = this.structure; // copy current structure
847
+ if (after === undefined) {
848
+ // adding as a very last block
849
+ newStruct.groups[newStruct.groups.length - 1].blocks.push(newBlock);
850
+ } else {
851
+ let done = false;
852
+ for (const group of newStruct.groups) {
853
+ const idx = group.blocks.findIndex((b) => b.id === after);
854
+ if (idx < 0) continue;
855
+ group.blocks.splice(idx + 1, 0, newBlock);
856
+ done = true;
857
+ break;
858
+ }
859
+ if (!done) throw new Error(`Can't find element with id: ${after}`);
860
+ }
861
+
862
+ this.updateStructure(newStruct, (blockId) => {
863
+ if (blockId !== newBlockId) throw new Error('Unexpected');
864
+ this.initializeBlockDuplicate(blockId, originalBlockInfo);
751
865
  });
752
866
  }
753
867