@milaboratories/pl-middle-layer 1.35.1 → 1.36.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.
@@ -3,18 +3,22 @@ export declare function allBlocks(structure: ProjectStructure): Iterable<Block>;
3
3
  export interface BlockGraphNode {
4
4
  readonly id: string;
5
5
  readonly missingReferences: boolean;
6
- /** Direct upstreams */
6
+ /** Upstreams, calculated accounting for potential indirect block dependencies */
7
7
  readonly upstream: Set<string>;
8
- /** Direct downstreams */
8
+ /** Direct upstream, listed in block args */
9
+ readonly directUpstream: Set<string>;
10
+ /** Downstreams, calculated accounting for potential indirect block dependencies */
9
11
  readonly downstream: Set<string>;
12
+ /** Direct downstreams listing our block in it's args */
13
+ readonly directDownstream: Set<string>;
10
14
  }
11
15
  export declare class BlockGraph {
12
16
  /** Nodes are stored in the map in topological order */
13
17
  readonly nodes: Map<string, BlockGraphNode>;
14
18
  constructor(nodes: Map<string, BlockGraphNode>);
15
- traverseIds(direction: 'upstream' | 'downstream', ...rootBlockIds: string[]): Set<string>;
16
- traverseIdsExcludingRoots(direction: 'upstream' | 'downstream', ...rootBlockIds: string[]): Set<string>;
17
- traverse(direction: 'upstream' | 'downstream', rootBlockIds: string[], cb: (node: BlockGraphNode) => void): void;
19
+ traverseIds(direction: 'upstream' | 'downstream' | 'directUpstream' | 'directDownstream', ...rootBlockIds: string[]): Set<string>;
20
+ traverseIdsExcludingRoots(direction: 'upstream' | 'downstream' | 'directUpstream' | 'directDownstream', ...rootBlockIds: string[]): Set<string>;
21
+ traverse(direction: 'upstream' | 'downstream' | 'directUpstream' | 'directDownstream', rootBlockIds: string[], cb: (node: BlockGraphNode) => void): void;
18
22
  }
19
23
  export declare function stagingGraph(structure: ProjectStructure): BlockGraph;
20
24
  export declare function productionGraph(structure: ProjectStructure, argsProvider: (blockId: string) => unknown): BlockGraph;
@@ -1 +1 @@
1
- {"version":3,"file":"project_model_util.d.ts","sourceRoot":"","sources":["../../src/model/project_model_util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAI/D,wBAAgB,SAAS,CAAC,SAAS,EAAE,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAMtE;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,uBAAuB;IACvB,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,yBAAyB;IACzB,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,qBAAa,UAAU;IACrB,uDAAuD;IACvD,SAAgB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;gBAEvC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAIvC,WAAW,CAAC,SAAS,EAAE,UAAU,GAAG,YAAY,EAAE,GAAG,YAAY,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IAMzF,yBAAyB,CAC9B,SAAS,EAAE,UAAU,GAAG,YAAY,EACpC,GAAG,YAAY,EAAE,MAAM,EAAE,GACxB,GAAG,CAAC,MAAM,CAAC;IAMP,QAAQ,CACb,SAAS,EAAE,UAAU,GAAG,YAAY,EACpC,YAAY,EAAE,MAAM,EAAE,EACtB,EAAE,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GACjC,IAAI;CAmBR;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,gBAAgB,cA4BvD;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,gBAAgB,EAC3B,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,GACzC,UAAU,CA0BZ;AAcD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB;mCAC+B;IAC/B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,SAAS,CAiBjE"}
1
+ {"version":3,"file":"project_model_util.d.ts","sourceRoot":"","sources":["../../src/model/project_model_util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAI/D,wBAAgB,SAAS,CAAC,SAAS,EAAE,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAMtE;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,oFAAoF;IACpF,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,wDAAwD;IACxD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxC;AAED,qBAAa,UAAU;IACrB,uDAAuD;IACvD,SAAgB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;gBAEvC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAIvC,WAAW,CAChB,SAAS,EAAE,UAAU,GAAG,YAAY,GAAG,gBAAgB,GAAG,kBAAkB,EAC5E,GAAG,YAAY,EAAE,MAAM,EAAE,GACxB,GAAG,CAAC,MAAM,CAAC;IAMP,yBAAyB,CAC9B,SAAS,EAAE,UAAU,GAAG,YAAY,GAAG,gBAAgB,GAAG,kBAAkB,EAC5E,GAAG,YAAY,EAAE,MAAM,EAAE,GACxB,GAAG,CAAC,MAAM,CAAC;IAMP,QAAQ,CACb,SAAS,EAAE,UAAU,GAAG,YAAY,GAAG,gBAAgB,GAAG,kBAAkB,EAC5E,YAAY,EAAE,MAAM,EAAE,EACtB,EAAE,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GACjC,IAAI;CAmBR;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,gBAAgB,cA4BvD;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,gBAAgB,EAC3B,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,GACzC,UAAU,CAiDZ;AAcD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB;mCAC+B;IAC/B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,SAAS,CAiBjE"}
@@ -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.35.1",
3
+ "version": "1.36.0",
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.21.2",
35
35
  "@milaboratories/pl-http": "^1.1.2",
36
- "@milaboratories/resolve-helper": "^1.1.0",
37
36
  "@milaboratories/computable": "^2.4.5",
38
- "@platforma-sdk/block-tools": "^2.5.40",
39
- "@milaboratories/pl-client": "^2.8.1",
40
37
  "@milaboratories/pl-drivers": "^1.5.48",
41
- "@milaboratories/pl-model-middle-layer": "^1.7.26",
38
+ "@milaboratories/resolve-helper": "^1.1.0",
39
+ "@milaboratories/pl-client": "^2.8.1",
40
+ "@platforma-sdk/block-tools": "^2.5.40",
42
41
  "@milaboratories/pl-model-common": "^1.13.8",
42
+ "@milaboratories/pl-model-middle-layer": "^1.7.26",
43
43
  "@milaboratories/pl-tree": "^1.5.7",
44
- "@milaboratories/pl-model-backend": "^1.1.0",
45
44
  "@platforma-sdk/model": "^1.29.22",
46
- "@platforma-sdk/workflow-tengo": "4.1.2",
45
+ "@milaboratories/pl-model-backend": "^1.1.0",
47
46
  "@milaboratories/ts-helpers": "^1.1.6",
48
47
  "@milaboratories/pl-config": "^1.4.7",
49
- "@milaboratories/pl-errors": "^1.0.7",
50
- "@milaboratories/pl-deployments": "^2.0.1"
48
+ "@platforma-sdk/workflow-tengo": "4.1.2",
49
+ "@milaboratories/pl-deployments": "^2.1.0",
50
+ "@milaboratories/pl-errors": "^1.0.7"
51
51
  },
52
52
  "devDependencies": {
53
53
  "semver": "^7.6.3",
@@ -29,13 +29,17 @@ describe('simple traverse', () => {
29
29
  const pGraph1 = productionGraph(struct1, (id) => inputs.get(id) ?? null);
30
30
 
31
31
  test.each([
32
- { roots: ['b2'], expectedUpstreams: ['b1'], expectedDownstreams: ['b6'] },
33
- { roots: ['b4'], expectedUpstreams: ['b3'], expectedDownstreams: ['b5', 'b6'] },
34
- { roots: ['b5'], expectedUpstreams: ['b3', 'b4'], expectedDownstreams: [] },
35
- { roots: ['b6'], expectedUpstreams: ['b1', 'b2', 'b3', 'b4'], expectedDownstreams: [] }
36
- ])('$roots', ({ roots, expectedUpstreams, expectedDownstreams }) => {
37
- const upstreams = pGraph1.traverseIdsExcludingRoots('upstream', ...roots);
32
+ { roots: ['b2'], expectedDirectUpstreams: ['b1'], expectedDirectDownstreams: ['b6'], expectedUpstreams: ['b1'], expectedDownstreams: ['b6'] },
33
+ { roots: ['b4'], expectedDirectUpstreams: ['b3'], expectedDirectDownstreams: ['b5', 'b6'], expectedUpstreams: ['b3'], expectedDownstreams: ['b5', 'b6'] },
34
+ { roots: ['b5'], expectedDirectUpstreams: ['b3', 'b4'], expectedDirectDownstreams: [], expectedUpstreams: ['b3', 'b4'], expectedDownstreams: ['b6'] },
35
+ { roots: ['b6'], expectedDirectUpstreams: ['b1', 'b2', 'b3', 'b4'], expectedDirectDownstreams: [], expectedUpstreams: ['b1', 'b2', 'b3', 'b4', 'b5'], expectedDownstreams: [] }
36
+ ])('$roots', ({ roots, expectedDirectUpstreams, expectedDirectDownstreams, expectedUpstreams, expectedDownstreams }) => {
37
+ const directUpstreams = pGraph1.traverseIdsExcludingRoots('directUpstream', ...roots);
38
+ const directDownstreams = pGraph1.traverseIdsExcludingRoots('directDownstream', ...roots);
39
+ const upstreams = pGraph1.traverseIdsExcludingRoots('upstream', ...roots);
38
40
  const downstreams = pGraph1.traverseIdsExcludingRoots('downstream', ...roots);
41
+ expect([...directUpstreams].sort()).toEqual(expectedDirectUpstreams.sort());
42
+ expect([...directDownstreams].sort()).toEqual(expectedDirectDownstreams.sort());
39
43
  expect([...upstreams].sort()).toEqual(expectedUpstreams.sort());
40
44
  expect([...downstreams].sort()).toEqual(expectedDownstreams.sort());
41
45
  });
@@ -13,10 +13,14 @@ export function allBlocks(structure: ProjectStructure): Iterable<Block> {
13
13
  export interface BlockGraphNode {
14
14
  readonly id: string;
15
15
  readonly missingReferences: boolean;
16
- /** Direct upstreams */
16
+ /** Upstreams, calculated accounting for potential indirect block dependencies */
17
17
  readonly upstream: Set<string>;
18
- /** Direct downstreams */
18
+ /** Direct upstream, listed in block args */
19
+ readonly directUpstream: Set<string>;
20
+ /** Downstreams, calculated accounting for potential indirect block dependencies */
19
21
  readonly downstream: Set<string>;
22
+ /** Direct downstreams listing our block in it's args */
23
+ readonly directDownstream: Set<string>;
20
24
  }
21
25
 
22
26
  export class BlockGraph {
@@ -27,14 +31,17 @@ export class BlockGraph {
27
31
  this.nodes = nodes;
28
32
  }
29
33
 
30
- public traverseIds(direction: 'upstream' | 'downstream', ...rootBlockIds: string[]): Set<string> {
34
+ public traverseIds(
35
+ direction: 'upstream' | 'downstream' | 'directUpstream' | 'directDownstream',
36
+ ...rootBlockIds: string[]
37
+ ): Set<string> {
31
38
  const all = new Set<string>();
32
39
  this.traverse(direction, rootBlockIds, (node) => all.add(node.id));
33
40
  return all;
34
41
  }
35
42
 
36
43
  public traverseIdsExcludingRoots(
37
- direction: 'upstream' | 'downstream',
44
+ direction: 'upstream' | 'downstream' | 'directUpstream' | 'directDownstream',
38
45
  ...rootBlockIds: string[]
39
46
  ): Set<string> {
40
47
  const result = this.traverseIds(direction, ...rootBlockIds);
@@ -43,7 +50,7 @@ export class BlockGraph {
43
50
  }
44
51
 
45
52
  public traverse(
46
- direction: 'upstream' | 'downstream',
53
+ direction: 'upstream' | 'downstream' | 'directUpstream' | 'directDownstream',
47
54
  rootBlockIds: string[],
48
55
  cb: (node: BlockGraphNode) => void,
49
56
  ): void {
@@ -68,7 +75,7 @@ export class BlockGraph {
68
75
  }
69
76
 
70
77
  export function stagingGraph(structure: ProjectStructure) {
71
- type WNode = Optional<Writable<BlockGraphNode>, 'upstream' | 'downstream'>;
78
+ type WNode = Optional<Writable<BlockGraphNode>, 'upstream' | 'downstream' | 'directUpstream' | 'directDownstream'>;
72
79
  const result = new Map<string, WNode>();
73
80
 
74
81
  // Simple dependency graph from previous to next
@@ -84,15 +91,15 @@ export function stagingGraph(structure: ProjectStructure) {
84
91
  };
85
92
  result.set(id, current);
86
93
  if (previous === undefined) {
87
- current.upstream = new Set<string>();
94
+ current.directUpstream = current.upstream = new Set<string>();
88
95
  } else {
89
- current.upstream = new Set<string>([previous.id]);
90
- previous.downstream = new Set<string>([current.id]);
96
+ current.directUpstream = current.upstream = new Set<string>([previous.id]);
97
+ previous.directDownstream = previous.downstream = new Set<string>([current.id]);
91
98
  }
92
99
 
93
100
  previous = current;
94
101
  }
95
- if (previous !== undefined) previous.downstream = new Set<string>();
102
+ if (previous !== undefined) previous.directDownstream = previous.downstream = new Set<string>();
96
103
 
97
104
  return new BlockGraph(result as Map<string, BlockGraphNode>);
98
105
  }
@@ -101,31 +108,54 @@ export function productionGraph(
101
108
  structure: ProjectStructure,
102
109
  argsProvider: (blockId: string) => unknown,
103
110
  ): BlockGraph {
104
- const result = new Map<string, BlockGraphNode>();
111
+ const resultMap = new Map<string, BlockGraphNode>();
112
+ // result graph is constructed to be able to perform traversal on incomplete graph
113
+ // to calculate potentialUpstreams
114
+ const resultGraph = new BlockGraph(resultMap);
105
115
 
106
116
  // traversing blocks in topological order defined by the project structure
107
117
  // and keeping possibleUpstreams set on each step, to consider only
108
118
  // those dependencies that are possible under current topology
109
- const possibleUpstreams = new Set<string>();
119
+ const allAbove = new Set<string>();
110
120
  for (const { id } of allBlocks(structure)) {
111
121
  const args = argsProvider(id);
112
122
 
113
123
  // skipping those blocks for which we don't have args
114
124
  if (args === undefined) continue;
115
125
 
116
- const upstreams = inferAllReferencedBlocks(args, possibleUpstreams);
126
+ const directUpstreams = inferAllReferencedBlocks(args, allAbove);
127
+
128
+ // The algorithm here adds all downstream blocks of direct upstreams as potential upstreams.
129
+ // They may produce additional columns, anchored in our direct upstream, those columns might be needed by the workflow.
130
+ const potentialUpstreams = resultGraph.traverseIds('directDownstream', ...directUpstreams.upstreams);
131
+
132
+ // To minimize complexity of the graph, we leave only the closest upstreams, removing all their transitive dependencies,
133
+ // relying on the traversal mechanisms in BContexts and on UI level to connect our block with all upstreams
134
+ const upstreams = new Set<string>();
135
+ for (const { id: pId } of allBlocks(structure)) {
136
+ if (pId === id) break; // stopping on current block
137
+ if (potentialUpstreams.has(pId)) {
138
+ upstreams.add(pId);
139
+ for (const transitiveUpstream of resultGraph.traverseIdsExcludingRoots('upstream', pId))
140
+ upstreams.delete(transitiveUpstream);
141
+ }
142
+ }
143
+
117
144
  const node: BlockGraphNode = {
118
145
  id,
119
- missingReferences: upstreams.missingReferences,
120
- upstream: upstreams.upstreams,
146
+ missingReferences: directUpstreams.missingReferences,
147
+ upstream: upstreams,
148
+ directUpstream: directUpstreams.upstreams,
121
149
  downstream: new Set<string>(), // will be populated from downstream blocks
150
+ directDownstream: new Set<string>(), // will be populated from downstream blocks
122
151
  };
123
- result.set(id, node);
124
- upstreams.upstreams.forEach((dep) => result.get(dep)!.downstream.add(id));
125
- possibleUpstreams.add(id);
152
+ resultMap.set(id, node);
153
+ directUpstreams.upstreams.forEach((dep) => resultMap.get(dep)!.directDownstream.add(id));
154
+ upstreams.forEach((dep) => resultMap.get(dep)!.downstream.add(id));
155
+ allAbove.add(id);
126
156
  }
127
157
 
128
- return new BlockGraph(result);
158
+ return resultGraph;
129
159
  }
130
160
 
131
161
  function setsEqual<T>(a: Set<T>, b: Set<T>): boolean {
@@ -756,8 +756,7 @@ export class ProjectMutator {
756
756
  prodGraph.traverse('upstream', blockIds, (node) => {
757
757
  blockIdsSet.add(node.id);
758
758
  });
759
- // checking that targets contain all upstreams
760
- else
759
+ else // checking that targets contain all upstreams
761
760
  for (const blockId of blockIdsSet) {
762
761
  const node = prodGraph.nodes.get(blockId);
763
762
  if (node === undefined) throw new Error(`Can't find block with id: ${blockId}`);