@milaboratories/pl-middle-layer 1.74.18 → 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block.cjs","names":["Computable","resourceIdToString","constructBlockContextArgsOnly","deepFreeze","blockArgsAuthorKey","getDebugFlags","constructBlockContext","ifNotUndef","getBlockPackInfo","computableFromCfgOrRF","extractCodeWithInfo"],"sources":["../../src/middle_layer/block.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type {\n ComputableCtx,\n ComputableStableDefined,\n ComputableValueOrErrors,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { blockArgsAuthorKey } from \"../model/project_model\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { AuthorMarker, BlockStateInternalV3 } from \"@milaboratories/pl-model-middle-layer\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport { resourceIdToString } from \"@milaboratories/pl-client\";\nimport { deepFreeze } from \"@milaboratories/ts-helpers\";\nimport { extractCodeWithInfo } from \"@platforma-sdk/model\";\nimport { getDebugFlags } from \"../debug\";\n\nexport type BlockParameters = Omit
|
|
1
|
+
{"version":3,"file":"block.cjs","names":["Computable","resourceIdToString","constructBlockContextArgsOnly","deepFreeze","blockArgsAuthorKey","getDebugFlags","constructBlockContext","ifNotUndef","getBlockPackInfo","computableFromCfgOrRF","extractCodeWithInfo"],"sources":["../../src/middle_layer/block.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type {\n ComputableCtx,\n ComputableStableDefined,\n ComputableValueOrErrors,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { blockArgsAuthorKey } from \"../model/project_model\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { AuthorMarker, BlockStateInternalV3 } from \"@milaboratories/pl-model-middle-layer\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport { resourceIdToString } from \"@milaboratories/pl-client\";\nimport { deepFreeze } from \"@milaboratories/ts-helpers\";\nimport { extractCodeWithInfo } from \"@platforma-sdk/model\";\nimport { getDebugFlags } from \"../debug\";\n\nexport type BlockParameters = Omit<\n BlockStateInternalV3,\n \"outputs\" | \"navigationState\" | \"columnLinks\"\n>;\n\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n): Computable<BlockParameters>;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx: ComputableCtx,\n): BlockParameters;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx?: ComputableCtx,\n): BlockParameters | Computable<BlockParameters> {\n if (cCtx === undefined)\n return Computable.make((c) => getBlockParameters(projectEntry, blockId, c), {\n key: `inputs#${resourceIdToString(projectEntry.rid)}#${blockId}`,\n });\n\n const prj = cCtx.accessor(projectEntry).node();\n const ctx = constructBlockContextArgsOnly(projectEntry, blockId);\n const blockStorageJson = ctx.blockStorage(cCtx);\n // Parse raw storage JSON - UI will derive data using sdk/model\n const blockStorage =\n blockStorageJson !== undefined ? deepFreeze(JSON.parse(blockStorageJson)) : undefined;\n return {\n author: prj.getKeyValueAsJson<AuthorMarker>(blockArgsAuthorKey(blockId)),\n blockStorage,\n };\n}\n\nexport function blockOutputs(\n projectEntry: PlTreeEntry,\n blockId: string,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<Record<string, ComputableValueOrErrors<unknown>>> {\n const key = \"outputs#\" + resourceIdToString(projectEntry.rid) + \"#\" + blockId;\n return Computable.make(\n (c) => {\n if (getDebugFlags().logOutputRecalculations) {\n console.log(\n `blockOutput recalculation : ${key} (${c.changeSourceMarker}; ${c.bodyInvocations} invocations)`,\n );\n }\n\n const prj = c.accessor(projectEntry).node();\n const ctx = constructBlockContext(projectEntry, blockId);\n\n return ifNotUndef(getBlockPackInfo(prj, blockId), ({ cfg, bpId, info }) => {\n const outputs: Record<string, Computable<any>> = {};\n for (const [cellId, cellCfg] of Object.entries(cfg.outputs)) {\n const computableOutput = computableFromCfgOrRF(\n env,\n ctx,\n cellCfg,\n extractCodeWithInfo(cfg),\n bpId,\n {},\n info.source,\n );\n outputs[cellId] = Computable.wrapError(computableOutput, 1);\n }\n return outputs;\n });\n },\n { key },\n ).withStableType();\n}\n"],"mappings":";;;;;;;;;;;AAiCA,SAAgB,mBACd,cACA,SACA,MAC+C;CAC/C,IAAI,SAAS,KAAA,GACX,OAAOA,2BAAAA,WAAW,MAAM,MAAM,mBAAmB,cAAc,SAAS,CAAC,GAAG,EAC1E,KAAK,WAAA,GAAUC,0BAAAA,mBAAAA,CAAmB,aAAa,GAAG,EAAE,GAAG,UACzD,CAAC;CAEH,MAAM,MAAM,KAAK,SAAS,YAAY,CAAC,CAAC,KAAK;CAE7C,MAAM,mBADMC,kBAAAA,8BAA8B,cAAc,OAC7B,CAAC,CAAC,aAAa,IAAI;CAE9C,MAAM,eACJ,qBAAqB,KAAA,KAAA,GAAYC,2BAAAA,WAAAA,CAAW,KAAK,MAAM,gBAAgB,CAAC,IAAI,KAAA;CAC9E,OAAO;EACL,QAAQ,IAAI,kBAAgCC,sBAAAA,mBAAmB,OAAO,CAAC;EACvE;CACF;AACF;AAEA,SAAgB,aACd,cACA,SACA,KAC2E;CAC3E,MAAM,MAAM,cAAA,GAAaH,0BAAAA,mBAAAA,CAAmB,aAAa,GAAG,IAAI,MAAM;CACtE,OAAOD,2BAAAA,WAAW,MACf,MAAM;EACL,IAAIK,cAAAA,cAAc,CAAC,CAAC,yBAClB,QAAQ,IACN,+BAA+B,IAAI,IAAI,EAAE,mBAAmB,IAAI,EAAE,gBAAgB,cACpF;EAGF,MAAM,MAAM,EAAE,SAAS,YAAY,CAAC,CAAC,KAAK;EAC1C,MAAM,MAAMC,kBAAAA,sBAAsB,cAAc,OAAO;EAEvD,OAAOC,aAAAA,WAAWC,eAAAA,iBAAiB,KAAK,OAAO,IAAI,EAAE,KAAK,MAAM,WAAW;GACzE,MAAM,UAA2C,CAAC;GAClD,KAAK,MAAM,CAAC,QAAQ,YAAY,OAAO,QAAQ,IAAI,OAAO,GAAG;IAC3D,MAAM,mBAAmBC,eAAAA,sBACvB,KACA,KACA,UAAA,GACAC,qBAAAA,oBAAAA,CAAoB,GAAG,GACvB,MACA,CAAC,GACD,KAAK,MACP;IACA,QAAQ,UAAUV,2BAAAA,WAAW,UAAU,kBAAkB,CAAC;GAC5D;GACA,OAAO;EACT,CAAC;CACH,GACA,EAAE,IAAI,CACR,CAAC,CAAC,eAAe;AACnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block.js","names":[],"sources":["../../src/middle_layer/block.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type {\n ComputableCtx,\n ComputableStableDefined,\n ComputableValueOrErrors,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { blockArgsAuthorKey } from \"../model/project_model\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { AuthorMarker, BlockStateInternalV3 } from \"@milaboratories/pl-model-middle-layer\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport { resourceIdToString } from \"@milaboratories/pl-client\";\nimport { deepFreeze } from \"@milaboratories/ts-helpers\";\nimport { extractCodeWithInfo } from \"@platforma-sdk/model\";\nimport { getDebugFlags } from \"../debug\";\n\nexport type BlockParameters = Omit
|
|
1
|
+
{"version":3,"file":"block.js","names":[],"sources":["../../src/middle_layer/block.ts"],"sourcesContent":["import type { PlTreeEntry } from \"@milaboratories/pl-tree\";\nimport type {\n ComputableCtx,\n ComputableStableDefined,\n ComputableValueOrErrors,\n} from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport { constructBlockContext, constructBlockContextArgsOnly } from \"./block_ctx\";\nimport { blockArgsAuthorKey } from \"../model/project_model\";\nimport { ifNotUndef } from \"../cfg_render/util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\nimport { getBlockPackInfo } from \"./util\";\nimport type { AuthorMarker, BlockStateInternalV3 } from \"@milaboratories/pl-model-middle-layer\";\nimport { computableFromCfgOrRF } from \"./render\";\nimport { resourceIdToString } from \"@milaboratories/pl-client\";\nimport { deepFreeze } from \"@milaboratories/ts-helpers\";\nimport { extractCodeWithInfo } from \"@platforma-sdk/model\";\nimport { getDebugFlags } from \"../debug\";\n\nexport type BlockParameters = Omit<\n BlockStateInternalV3,\n \"outputs\" | \"navigationState\" | \"columnLinks\"\n>;\n\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n): Computable<BlockParameters>;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx: ComputableCtx,\n): BlockParameters;\nexport function getBlockParameters(\n projectEntry: PlTreeEntry,\n blockId: string,\n cCtx?: ComputableCtx,\n): BlockParameters | Computable<BlockParameters> {\n if (cCtx === undefined)\n return Computable.make((c) => getBlockParameters(projectEntry, blockId, c), {\n key: `inputs#${resourceIdToString(projectEntry.rid)}#${blockId}`,\n });\n\n const prj = cCtx.accessor(projectEntry).node();\n const ctx = constructBlockContextArgsOnly(projectEntry, blockId);\n const blockStorageJson = ctx.blockStorage(cCtx);\n // Parse raw storage JSON - UI will derive data using sdk/model\n const blockStorage =\n blockStorageJson !== undefined ? deepFreeze(JSON.parse(blockStorageJson)) : undefined;\n return {\n author: prj.getKeyValueAsJson<AuthorMarker>(blockArgsAuthorKey(blockId)),\n blockStorage,\n };\n}\n\nexport function blockOutputs(\n projectEntry: PlTreeEntry,\n blockId: string,\n env: MiddleLayerEnvironment,\n): ComputableStableDefined<Record<string, ComputableValueOrErrors<unknown>>> {\n const key = \"outputs#\" + resourceIdToString(projectEntry.rid) + \"#\" + blockId;\n return Computable.make(\n (c) => {\n if (getDebugFlags().logOutputRecalculations) {\n console.log(\n `blockOutput recalculation : ${key} (${c.changeSourceMarker}; ${c.bodyInvocations} invocations)`,\n );\n }\n\n const prj = c.accessor(projectEntry).node();\n const ctx = constructBlockContext(projectEntry, blockId);\n\n return ifNotUndef(getBlockPackInfo(prj, blockId), ({ cfg, bpId, info }) => {\n const outputs: Record<string, Computable<any>> = {};\n for (const [cellId, cellCfg] of Object.entries(cfg.outputs)) {\n const computableOutput = computableFromCfgOrRF(\n env,\n ctx,\n cellCfg,\n extractCodeWithInfo(cfg),\n bpId,\n {},\n info.source,\n );\n outputs[cellId] = Computable.wrapError(computableOutput, 1);\n }\n return outputs;\n });\n },\n { key },\n ).withStableType();\n}\n"],"mappings":";;;;;;;;;;;AAiCA,SAAgB,mBACd,cACA,SACA,MAC+C;CAC/C,IAAI,SAAS,KAAA,GACX,OAAO,WAAW,MAAM,MAAM,mBAAmB,cAAc,SAAS,CAAC,GAAG,EAC1E,KAAK,UAAU,mBAAmB,aAAa,GAAG,EAAE,GAAG,UACzD,CAAC;CAEH,MAAM,MAAM,KAAK,SAAS,YAAY,CAAC,CAAC,KAAK;CAE7C,MAAM,mBADM,8BAA8B,cAAc,OAC7B,CAAC,CAAC,aAAa,IAAI;CAE9C,MAAM,eACJ,qBAAqB,KAAA,IAAY,WAAW,KAAK,MAAM,gBAAgB,CAAC,IAAI,KAAA;CAC9E,OAAO;EACL,QAAQ,IAAI,kBAAgC,mBAAmB,OAAO,CAAC;EACvE;CACF;AACF;AAEA,SAAgB,aACd,cACA,SACA,KAC2E;CAC3E,MAAM,MAAM,aAAa,mBAAmB,aAAa,GAAG,IAAI,MAAM;CACtE,OAAO,WAAW,MACf,MAAM;EACL,IAAI,cAAc,CAAC,CAAC,yBAClB,QAAQ,IACN,+BAA+B,IAAI,IAAI,EAAE,mBAAmB,IAAI,EAAE,gBAAgB,cACpF;EAGF,MAAM,MAAM,EAAE,SAAS,YAAY,CAAC,CAAC,KAAK;EAC1C,MAAM,MAAM,sBAAsB,cAAc,OAAO;EAEvD,OAAO,WAAW,iBAAiB,KAAK,OAAO,IAAI,EAAE,KAAK,MAAM,WAAW;GACzE,MAAM,UAA2C,CAAC;GAClD,KAAK,MAAM,CAAC,QAAQ,YAAY,OAAO,QAAQ,IAAI,OAAO,GAAG;IAC3D,MAAM,mBAAmB,sBACvB,KACA,KACA,SACA,oBAAoB,GAAG,GACvB,MACA,CAAC,GACD,KAAK,MACP;IACA,QAAQ,UAAU,WAAW,UAAU,kBAAkB,CAAC;GAC5D;GACA,OAAO;EACT,CAAC;CACH,GACA,EAAE,IAAI,CACR,CAAC,CAAC,eAAe;AACnB"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
const require_project_model = require("../model/project_model.cjs");
|
|
2
|
+
const require_project_model_util = require("../model/project_model_util.cjs");
|
|
3
|
+
let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
|
|
4
|
+
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
5
|
+
let _milaboratories_computable = require("@milaboratories/computable");
|
|
6
|
+
// src/middle_layer/column_links.ts
|
|
7
|
+
/**
|
|
8
|
+
* Outputs of other blocks that the args of the block reference, checked against what the last
|
|
9
|
+
* runs of their producers export; `undefined` when they could not be computed. Reads the order
|
|
10
|
+
* of the blocks, the args of the block, and of each producer above it that the args reference:
|
|
11
|
+
* whether it has a last run, the results of that run as far as the referenced columns go, and,
|
|
12
|
+
* only to label a column the run does not export, the results the producer prepares before it
|
|
13
|
+
* is run.
|
|
14
|
+
*/
|
|
15
|
+
function blockDependencies(prjEntry, blockId, env) {
|
|
16
|
+
return _milaboratories_computable.Computable.make((ctx) => (0, _milaboratories_pl_model_common.computeDependencies)(columnLinksSource(ctx.accessor(prjEntry).node(), env), blockId), { recover: forgetFailed(env, "dependencies") });
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Blocks whose args reference outputs of the block, each reference checked against what the
|
|
20
|
+
* last run of the block exports; `undefined` when they could not be computed. Reads the order of
|
|
21
|
+
* the blocks, the args of the block and of every block below it, and of the block's own runs:
|
|
22
|
+
* whether it has a last run, the results of that run as far as the referenced columns go, and,
|
|
23
|
+
* only to label a column the run does not export, the results it prepares before it is run.
|
|
24
|
+
*/
|
|
25
|
+
function blockDependents(prjEntry, blockId, env) {
|
|
26
|
+
return _milaboratories_computable.Computable.make((ctx) => (0, _milaboratories_pl_model_common.computeDependents)(columnLinksSource(ctx.accessor(prjEntry).node(), env), blockId), { recover: forgetFailed(env, "dependents") });
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Column links of a block with the blocks they name labelled by their titles in the project
|
|
30
|
+
* overview, the names the project shows; a block the overview has no title for stays unlabelled.
|
|
31
|
+
* `undefined` while either side is not computed.
|
|
32
|
+
*/
|
|
33
|
+
function labelBlockColumnLinks(links, blocks) {
|
|
34
|
+
const { blockId, dependencies, dependents } = links;
|
|
35
|
+
if (dependencies === void 0 || dependents === void 0) return void 0;
|
|
36
|
+
const named = /* @__PURE__ */ new Set([...dependencies.map((link) => link.producer.blockId), ...dependents.map((link) => link.holderBlockId)]);
|
|
37
|
+
const labels = {};
|
|
38
|
+
for (const { id, title } of blocks) if (named.has(id) && title !== void 0) labels[id] = title;
|
|
39
|
+
return {
|
|
40
|
+
blockId,
|
|
41
|
+
dependencies,
|
|
42
|
+
dependents,
|
|
43
|
+
labels
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** Logs why a side of the column links failed; the side is then not computed. */
|
|
47
|
+
function forgetFailed(env, side) {
|
|
48
|
+
return (cause) => {
|
|
49
|
+
env.logger.error(new Error(`Error in column links: ${side}`, { cause }));
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function columnLinksSource(prj, env) {
|
|
53
|
+
const structure = (0, _milaboratories_ts_helpers.notEmpty)(prj.getKeyValueAsJson(require_project_model.ProjectStructureKey));
|
|
54
|
+
return {
|
|
55
|
+
blockIds: [...require_project_model_util.allBlocks(structure)].map(({ id }) => id),
|
|
56
|
+
referencesOf: (blockId, kind) => {
|
|
57
|
+
const args = readArgs(prj, blockId, kind);
|
|
58
|
+
if (args === void 0) return void 0;
|
|
59
|
+
return env.projectHelper.getColumnReferences(args.id, () => args.getDataAsJson());
|
|
60
|
+
},
|
|
61
|
+
lastRunOf: (blockId) => readLastRun(prj, blockId),
|
|
62
|
+
stagingOf: (blockId) => readStaging(prj, blockId)
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/** The project field holding a block's args of each kind. */
|
|
66
|
+
const ARGS_FIELD = {
|
|
67
|
+
current: "currentArgs",
|
|
68
|
+
lastRun: "prodArgs"
|
|
69
|
+
};
|
|
70
|
+
function readArgs(prj, blockId, kind) {
|
|
71
|
+
return prj.traverse({
|
|
72
|
+
field: require_project_model.projectFieldName(blockId, ARGS_FIELD[kind]),
|
|
73
|
+
assertFieldType: "Dynamic",
|
|
74
|
+
stableIfNotFound: true
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* A block has a last run while it holds the args of that run. The results of the run fail to
|
|
79
|
+
* render when their field, or the result list itself, has an error.
|
|
80
|
+
*/
|
|
81
|
+
function readLastRun(prj, blockId) {
|
|
82
|
+
if (readArgs(prj, blockId, "lastRun") === void 0) return { type: "notRun" };
|
|
83
|
+
const ctx = prj.traverseOrError({
|
|
84
|
+
field: require_project_model.projectFieldName(blockId, "prodUiCtx"),
|
|
85
|
+
stableIfNotFound: true
|
|
86
|
+
});
|
|
87
|
+
if (ctx === void 0) return { type: "rendering" };
|
|
88
|
+
if (!ctx.ok || ctx.value.getError() !== void 0) return { type: "failed" };
|
|
89
|
+
return {
|
|
90
|
+
type: "rendered",
|
|
91
|
+
ctx: ctx.value
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/** The results a block prepares before it is run; `undefined` while there are none, or they failed. */
|
|
95
|
+
function readStaging(prj, blockId) {
|
|
96
|
+
const ctx = prj.traverseOrError({
|
|
97
|
+
field: require_project_model.projectFieldName(blockId, "stagingUiCtx"),
|
|
98
|
+
stableIfNotFound: true
|
|
99
|
+
});
|
|
100
|
+
return ctx !== void 0 && ctx.ok ? ctx.value : void 0;
|
|
101
|
+
}
|
|
102
|
+
exports.blockDependencies = blockDependencies;
|
|
103
|
+
exports.blockDependents = blockDependents;
|
|
104
|
+
exports.labelBlockColumnLinks = labelBlockColumnLinks;
|
|
105
|
+
|
|
106
|
+
//# sourceMappingURL=column_links.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column_links.cjs","names":["Computable","computeDependencies","computeDependents","notEmpty","ProjectStructureKey","allBlocks","projectFieldName"],"sources":["../../src/middle_layer/column_links.ts"],"sourcesContent":["import { Computable } from \"@milaboratories/computable\";\nimport type { PlTreeEntry, PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport {\n computeDependencies,\n computeDependents,\n type BlockColumnLinks,\n type ArgsKind,\n type ColumnLinksSource,\n type ProducerRun,\n type ColumnLink,\n} from \"@milaboratories/pl-model-common\";\nimport type { BlockStateOverview } from \"@milaboratories/pl-model-middle-layer\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey, projectFieldName } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\n\n/** What the column links computables read besides the project tree. */\nexport type ColumnLinksEnv = Pick<MiddleLayerEnvironment, \"projectHelper\" | \"logger\">;\n\n/**\n * Outputs of other blocks that the args of the block reference, checked against what the last\n * runs of their producers export; `undefined` when they could not be computed. Reads the order\n * of the blocks, the args of the block, and of each producer above it that the args reference:\n * whether it has a last run, the results of that run as far as the referenced columns go, and,\n * only to label a column the run does not export, the results the producer prepares before it\n * is run.\n */\nexport function blockDependencies(\n prjEntry: PlTreeEntry,\n blockId: string,\n env: ColumnLinksEnv,\n): Computable<ColumnLink[] | undefined> {\n return Computable.make(\n (ctx) => computeDependencies(columnLinksSource(ctx.accessor(prjEntry).node(), env), blockId),\n { recover: forgetFailed(env, \"dependencies\") },\n );\n}\n\n/**\n * Blocks whose args reference outputs of the block, each reference checked against what the\n * last run of the block exports; `undefined` when they could not be computed. Reads the order of\n * the blocks, the args of the block and of every block below it, and of the block's own runs:\n * whether it has a last run, the results of that run as far as the referenced columns go, and,\n * only to label a column the run does not export, the results it prepares before it is run.\n */\nexport function blockDependents(\n prjEntry: PlTreeEntry,\n blockId: string,\n env: ColumnLinksEnv,\n): Computable<ColumnLink[] | undefined> {\n return Computable.make(\n (ctx) => computeDependents(columnLinksSource(ctx.accessor(prjEntry).node(), env), blockId),\n { recover: forgetFailed(env, \"dependents\") },\n );\n}\n\n/**\n * Column links of a block with the blocks they name labelled by their titles in the project\n * overview, the names the project shows; a block the overview has no title for stays unlabelled.\n * `undefined` while either side is not computed.\n */\nexport function labelBlockColumnLinks(\n links: {\n blockId: string;\n dependencies: undefined | ColumnLink[];\n dependents: undefined | ColumnLink[];\n },\n blocks: readonly Pick<BlockStateOverview, \"id\" | \"title\">[],\n): BlockColumnLinks | undefined {\n const { blockId, dependencies, dependents } = links;\n if (dependencies === undefined || dependents === undefined) return undefined;\n const named = new Set([\n ...dependencies.map((link) => link.producer.blockId),\n ...dependents.map((link) => link.holderBlockId),\n ]);\n const labels: Record<string, string> = {};\n for (const { id, title } of blocks) {\n if (named.has(id) && title !== undefined) labels[id] = title;\n }\n return { blockId, dependencies, dependents, labels };\n}\n\n// Internals\n\n/** Logs why a side of the column links failed; the side is then not computed. */\nfunction forgetFailed(env: ColumnLinksEnv, side: \"dependencies\" | \"dependents\") {\n return (cause: unknown[]): undefined => {\n env.logger.error(new Error(`Error in column links: ${side}`, { cause }));\n return undefined;\n };\n}\n\nfunction columnLinksSource(\n prj: PlTreeNodeAccessor,\n env: ColumnLinksEnv,\n): ColumnLinksSource<PlTreeNodeAccessor> {\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n return {\n blockIds: [...allBlocks(structure)].map(({ id }) => id),\n referencesOf: (blockId, kind) => {\n const args = readArgs(prj, blockId, kind);\n if (args === undefined) return undefined;\n return env.projectHelper.getColumnReferences(args.id, () => args.getDataAsJson());\n },\n lastRunOf: (blockId) => readLastRun(prj, blockId),\n stagingOf: (blockId) => readStaging(prj, blockId),\n };\n}\n\n/** The project field holding a block's args of each kind. */\nconst ARGS_FIELD = { current: \"currentArgs\", lastRun: \"prodArgs\" } as const satisfies Record<\n ArgsKind,\n string\n>;\n\nfunction readArgs(\n prj: PlTreeNodeAccessor,\n blockId: string,\n kind: ArgsKind,\n): undefined | PlTreeNodeAccessor {\n return prj.traverse({\n field: projectFieldName(blockId, ARGS_FIELD[kind]),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n}\n\n/**\n * A block has a last run while it holds the args of that run. The results of the run fail to\n * render when their field, or the result list itself, has an error.\n */\nfunction readLastRun(prj: PlTreeNodeAccessor, blockId: string): ProducerRun<PlTreeNodeAccessor> {\n if (readArgs(prj, blockId, \"lastRun\") === undefined) return { type: \"notRun\" };\n const ctx = prj.traverseOrError({\n field: projectFieldName(blockId, \"prodUiCtx\"),\n stableIfNotFound: true,\n });\n if (ctx === undefined) return { type: \"rendering\" };\n if (!ctx.ok || ctx.value.getError() !== undefined) return { type: \"failed\" };\n return { type: \"rendered\", ctx: ctx.value };\n}\n\n/** The results a block prepares before it is run; `undefined` while there are none, or they failed. */\nfunction readStaging(prj: PlTreeNodeAccessor, blockId: string): undefined | PlTreeNodeAccessor {\n const ctx = prj.traverseOrError({\n field: projectFieldName(blockId, \"stagingUiCtx\"),\n stableIfNotFound: true,\n });\n return ctx !== undefined && ctx.ok ? ctx.value : undefined;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { ProjectStructureKey, projectFieldName } from "../model/project_model.js";
|
|
2
|
+
import { allBlocks } from "../model/project_model_util.js";
|
|
3
|
+
import { notEmpty } from "@milaboratories/ts-helpers";
|
|
4
|
+
import { computeDependencies, computeDependents } from "@milaboratories/pl-model-common";
|
|
5
|
+
import { Computable } from "@milaboratories/computable";
|
|
6
|
+
// src/middle_layer/column_links.ts
|
|
7
|
+
/**
|
|
8
|
+
* Outputs of other blocks that the args of the block reference, checked against what the last
|
|
9
|
+
* runs of their producers export; `undefined` when they could not be computed. Reads the order
|
|
10
|
+
* of the blocks, the args of the block, and of each producer above it that the args reference:
|
|
11
|
+
* whether it has a last run, the results of that run as far as the referenced columns go, and,
|
|
12
|
+
* only to label a column the run does not export, the results the producer prepares before it
|
|
13
|
+
* is run.
|
|
14
|
+
*/
|
|
15
|
+
function blockDependencies(prjEntry, blockId, env) {
|
|
16
|
+
return Computable.make((ctx) => computeDependencies(columnLinksSource(ctx.accessor(prjEntry).node(), env), blockId), { recover: forgetFailed(env, "dependencies") });
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Blocks whose args reference outputs of the block, each reference checked against what the
|
|
20
|
+
* last run of the block exports; `undefined` when they could not be computed. Reads the order of
|
|
21
|
+
* the blocks, the args of the block and of every block below it, and of the block's own runs:
|
|
22
|
+
* whether it has a last run, the results of that run as far as the referenced columns go, and,
|
|
23
|
+
* only to label a column the run does not export, the results it prepares before it is run.
|
|
24
|
+
*/
|
|
25
|
+
function blockDependents(prjEntry, blockId, env) {
|
|
26
|
+
return Computable.make((ctx) => computeDependents(columnLinksSource(ctx.accessor(prjEntry).node(), env), blockId), { recover: forgetFailed(env, "dependents") });
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Column links of a block with the blocks they name labelled by their titles in the project
|
|
30
|
+
* overview, the names the project shows; a block the overview has no title for stays unlabelled.
|
|
31
|
+
* `undefined` while either side is not computed.
|
|
32
|
+
*/
|
|
33
|
+
function labelBlockColumnLinks(links, blocks) {
|
|
34
|
+
const { blockId, dependencies, dependents } = links;
|
|
35
|
+
if (dependencies === void 0 || dependents === void 0) return void 0;
|
|
36
|
+
const named = /* @__PURE__ */ new Set([...dependencies.map((link) => link.producer.blockId), ...dependents.map((link) => link.holderBlockId)]);
|
|
37
|
+
const labels = {};
|
|
38
|
+
for (const { id, title } of blocks) if (named.has(id) && title !== void 0) labels[id] = title;
|
|
39
|
+
return {
|
|
40
|
+
blockId,
|
|
41
|
+
dependencies,
|
|
42
|
+
dependents,
|
|
43
|
+
labels
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** Logs why a side of the column links failed; the side is then not computed. */
|
|
47
|
+
function forgetFailed(env, side) {
|
|
48
|
+
return (cause) => {
|
|
49
|
+
env.logger.error(new Error(`Error in column links: ${side}`, { cause }));
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function columnLinksSource(prj, env) {
|
|
53
|
+
const structure = notEmpty(prj.getKeyValueAsJson(ProjectStructureKey));
|
|
54
|
+
return {
|
|
55
|
+
blockIds: [...allBlocks(structure)].map(({ id }) => id),
|
|
56
|
+
referencesOf: (blockId, kind) => {
|
|
57
|
+
const args = readArgs(prj, blockId, kind);
|
|
58
|
+
if (args === void 0) return void 0;
|
|
59
|
+
return env.projectHelper.getColumnReferences(args.id, () => args.getDataAsJson());
|
|
60
|
+
},
|
|
61
|
+
lastRunOf: (blockId) => readLastRun(prj, blockId),
|
|
62
|
+
stagingOf: (blockId) => readStaging(prj, blockId)
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/** The project field holding a block's args of each kind. */
|
|
66
|
+
const ARGS_FIELD = {
|
|
67
|
+
current: "currentArgs",
|
|
68
|
+
lastRun: "prodArgs"
|
|
69
|
+
};
|
|
70
|
+
function readArgs(prj, blockId, kind) {
|
|
71
|
+
return prj.traverse({
|
|
72
|
+
field: projectFieldName(blockId, ARGS_FIELD[kind]),
|
|
73
|
+
assertFieldType: "Dynamic",
|
|
74
|
+
stableIfNotFound: true
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* A block has a last run while it holds the args of that run. The results of the run fail to
|
|
79
|
+
* render when their field, or the result list itself, has an error.
|
|
80
|
+
*/
|
|
81
|
+
function readLastRun(prj, blockId) {
|
|
82
|
+
if (readArgs(prj, blockId, "lastRun") === void 0) return { type: "notRun" };
|
|
83
|
+
const ctx = prj.traverseOrError({
|
|
84
|
+
field: projectFieldName(blockId, "prodUiCtx"),
|
|
85
|
+
stableIfNotFound: true
|
|
86
|
+
});
|
|
87
|
+
if (ctx === void 0) return { type: "rendering" };
|
|
88
|
+
if (!ctx.ok || ctx.value.getError() !== void 0) return { type: "failed" };
|
|
89
|
+
return {
|
|
90
|
+
type: "rendered",
|
|
91
|
+
ctx: ctx.value
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/** The results a block prepares before it is run; `undefined` while there are none, or they failed. */
|
|
95
|
+
function readStaging(prj, blockId) {
|
|
96
|
+
const ctx = prj.traverseOrError({
|
|
97
|
+
field: projectFieldName(blockId, "stagingUiCtx"),
|
|
98
|
+
stableIfNotFound: true
|
|
99
|
+
});
|
|
100
|
+
return ctx !== void 0 && ctx.ok ? ctx.value : void 0;
|
|
101
|
+
}
|
|
102
|
+
export { blockDependencies, blockDependents, labelBlockColumnLinks };
|
|
103
|
+
|
|
104
|
+
//# sourceMappingURL=column_links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column_links.js","names":[],"sources":["../../src/middle_layer/column_links.ts"],"sourcesContent":["import { Computable } from \"@milaboratories/computable\";\nimport type { PlTreeEntry, PlTreeNodeAccessor } from \"@milaboratories/pl-tree\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport {\n computeDependencies,\n computeDependents,\n type BlockColumnLinks,\n type ArgsKind,\n type ColumnLinksSource,\n type ProducerRun,\n type ColumnLink,\n} from \"@milaboratories/pl-model-common\";\nimport type { BlockStateOverview } from \"@milaboratories/pl-model-middle-layer\";\nimport type { ProjectStructure } from \"../model/project_model\";\nimport { ProjectStructureKey, projectFieldName } from \"../model/project_model\";\nimport { allBlocks } from \"../model/project_model_util\";\nimport type { MiddleLayerEnvironment } from \"./middle_layer\";\n\n/** What the column links computables read besides the project tree. */\nexport type ColumnLinksEnv = Pick<MiddleLayerEnvironment, \"projectHelper\" | \"logger\">;\n\n/**\n * Outputs of other blocks that the args of the block reference, checked against what the last\n * runs of their producers export; `undefined` when they could not be computed. Reads the order\n * of the blocks, the args of the block, and of each producer above it that the args reference:\n * whether it has a last run, the results of that run as far as the referenced columns go, and,\n * only to label a column the run does not export, the results the producer prepares before it\n * is run.\n */\nexport function blockDependencies(\n prjEntry: PlTreeEntry,\n blockId: string,\n env: ColumnLinksEnv,\n): Computable<ColumnLink[] | undefined> {\n return Computable.make(\n (ctx) => computeDependencies(columnLinksSource(ctx.accessor(prjEntry).node(), env), blockId),\n { recover: forgetFailed(env, \"dependencies\") },\n );\n}\n\n/**\n * Blocks whose args reference outputs of the block, each reference checked against what the\n * last run of the block exports; `undefined` when they could not be computed. Reads the order of\n * the blocks, the args of the block and of every block below it, and of the block's own runs:\n * whether it has a last run, the results of that run as far as the referenced columns go, and,\n * only to label a column the run does not export, the results it prepares before it is run.\n */\nexport function blockDependents(\n prjEntry: PlTreeEntry,\n blockId: string,\n env: ColumnLinksEnv,\n): Computable<ColumnLink[] | undefined> {\n return Computable.make(\n (ctx) => computeDependents(columnLinksSource(ctx.accessor(prjEntry).node(), env), blockId),\n { recover: forgetFailed(env, \"dependents\") },\n );\n}\n\n/**\n * Column links of a block with the blocks they name labelled by their titles in the project\n * overview, the names the project shows; a block the overview has no title for stays unlabelled.\n * `undefined` while either side is not computed.\n */\nexport function labelBlockColumnLinks(\n links: {\n blockId: string;\n dependencies: undefined | ColumnLink[];\n dependents: undefined | ColumnLink[];\n },\n blocks: readonly Pick<BlockStateOverview, \"id\" | \"title\">[],\n): BlockColumnLinks | undefined {\n const { blockId, dependencies, dependents } = links;\n if (dependencies === undefined || dependents === undefined) return undefined;\n const named = new Set([\n ...dependencies.map((link) => link.producer.blockId),\n ...dependents.map((link) => link.holderBlockId),\n ]);\n const labels: Record<string, string> = {};\n for (const { id, title } of blocks) {\n if (named.has(id) && title !== undefined) labels[id] = title;\n }\n return { blockId, dependencies, dependents, labels };\n}\n\n// Internals\n\n/** Logs why a side of the column links failed; the side is then not computed. */\nfunction forgetFailed(env: ColumnLinksEnv, side: \"dependencies\" | \"dependents\") {\n return (cause: unknown[]): undefined => {\n env.logger.error(new Error(`Error in column links: ${side}`, { cause }));\n return undefined;\n };\n}\n\nfunction columnLinksSource(\n prj: PlTreeNodeAccessor,\n env: ColumnLinksEnv,\n): ColumnLinksSource<PlTreeNodeAccessor> {\n const structure = notEmpty(prj.getKeyValueAsJson<ProjectStructure>(ProjectStructureKey));\n return {\n blockIds: [...allBlocks(structure)].map(({ id }) => id),\n referencesOf: (blockId, kind) => {\n const args = readArgs(prj, blockId, kind);\n if (args === undefined) return undefined;\n return env.projectHelper.getColumnReferences(args.id, () => args.getDataAsJson());\n },\n lastRunOf: (blockId) => readLastRun(prj, blockId),\n stagingOf: (blockId) => readStaging(prj, blockId),\n };\n}\n\n/** The project field holding a block's args of each kind. */\nconst ARGS_FIELD = { current: \"currentArgs\", lastRun: \"prodArgs\" } as const satisfies Record<\n ArgsKind,\n string\n>;\n\nfunction readArgs(\n prj: PlTreeNodeAccessor,\n blockId: string,\n kind: ArgsKind,\n): undefined | PlTreeNodeAccessor {\n return prj.traverse({\n field: projectFieldName(blockId, ARGS_FIELD[kind]),\n assertFieldType: \"Dynamic\",\n stableIfNotFound: true,\n });\n}\n\n/**\n * A block has a last run while it holds the args of that run. The results of the run fail to\n * render when their field, or the result list itself, has an error.\n */\nfunction readLastRun(prj: PlTreeNodeAccessor, blockId: string): ProducerRun<PlTreeNodeAccessor> {\n if (readArgs(prj, blockId, \"lastRun\") === undefined) return { type: \"notRun\" };\n const ctx = prj.traverseOrError({\n field: projectFieldName(blockId, \"prodUiCtx\"),\n stableIfNotFound: true,\n });\n if (ctx === undefined) return { type: \"rendering\" };\n if (!ctx.ok || ctx.value.getError() !== undefined) return { type: \"failed\" };\n return { type: \"rendered\", ctx: ctx.value };\n}\n\n/** The results a block prepares before it is run; `undefined` while there are none, or they failed. */\nfunction readStaging(prj: PlTreeNodeAccessor, blockId: string): undefined | PlTreeNodeAccessor {\n const ctx = prj.traverseOrError({\n field: projectFieldName(blockId, \"stagingUiCtx\"),\n stableIfNotFound: true,\n });\n return ctx !== undefined && ctx.ok ? ctx.value : undefined;\n}\n"],"mappings":";;;;;;;;;;;;;;AA6BA,SAAgB,kBACd,UACA,SACA,KACsC;CACtC,OAAO,WAAW,MACf,QAAQ,oBAAoB,kBAAkB,IAAI,SAAS,QAAQ,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,OAAO,GAC3F,EAAE,SAAS,aAAa,KAAK,cAAc,EAAE,CAC/C;AACF;;;;;;;;AASA,SAAgB,gBACd,UACA,SACA,KACsC;CACtC,OAAO,WAAW,MACf,QAAQ,kBAAkB,kBAAkB,IAAI,SAAS,QAAQ,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,OAAO,GACzF,EAAE,SAAS,aAAa,KAAK,YAAY,EAAE,CAC7C;AACF;;;;;;AAOA,SAAgB,sBACd,OAKA,QAC8B;CAC9B,MAAM,EAAE,SAAS,cAAc,eAAe;CAC9C,IAAI,iBAAiB,KAAA,KAAa,eAAe,KAAA,GAAW,OAAO,KAAA;CACnE,MAAM,wBAAQ,IAAI,IAAI,CACpB,GAAG,aAAa,KAAK,SAAS,KAAK,SAAS,OAAO,GACnD,GAAG,WAAW,KAAK,SAAS,KAAK,aAAa,CAChD,CAAC;CACD,MAAM,SAAiC,CAAC;CACxC,KAAK,MAAM,EAAE,IAAI,WAAW,QAC1B,IAAI,MAAM,IAAI,EAAE,KAAK,UAAU,KAAA,GAAW,OAAO,MAAM;CAEzD,OAAO;EAAE;EAAS;EAAc;EAAY;CAAO;AACrD;;AAKA,SAAS,aAAa,KAAqB,MAAqC;CAC9E,QAAQ,UAAgC;EACtC,IAAI,OAAO,MAAM,IAAI,MAAM,0BAA0B,QAAQ,EAAE,MAAM,CAAC,CAAC;CAEzE;AACF;AAEA,SAAS,kBACP,KACA,KACuC;CACvC,MAAM,YAAY,SAAS,IAAI,kBAAoC,mBAAmB,CAAC;CACvF,OAAO;EACL,UAAU,CAAC,GAAG,UAAU,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE;EACtD,eAAe,SAAS,SAAS;GAC/B,MAAM,OAAO,SAAS,KAAK,SAAS,IAAI;GACxC,IAAI,SAAS,KAAA,GAAW,OAAO,KAAA;GAC/B,OAAO,IAAI,cAAc,oBAAoB,KAAK,UAAU,KAAK,cAAc,CAAC;EAClF;EACA,YAAY,YAAY,YAAY,KAAK,OAAO;EAChD,YAAY,YAAY,YAAY,KAAK,OAAO;CAClD;AACF;;AAGA,MAAM,aAAa;CAAE,SAAS;CAAe,SAAS;AAAW;AAKjE,SAAS,SACP,KACA,SACA,MACgC;CAChC,OAAO,IAAI,SAAS;EAClB,OAAO,iBAAiB,SAAS,WAAW,KAAK;EACjD,iBAAiB;EACjB,kBAAkB;CACpB,CAAC;AACH;;;;;AAMA,SAAS,YAAY,KAAyB,SAAkD;CAC9F,IAAI,SAAS,KAAK,SAAS,SAAS,MAAM,KAAA,GAAW,OAAO,EAAE,MAAM,SAAS;CAC7E,MAAM,MAAM,IAAI,gBAAgB;EAC9B,OAAO,iBAAiB,SAAS,WAAW;EAC5C,kBAAkB;CACpB,CAAC;CACD,IAAI,QAAQ,KAAA,GAAW,OAAO,EAAE,MAAM,YAAY;CAClD,IAAI,CAAC,IAAI,MAAM,IAAI,MAAM,SAAS,MAAM,KAAA,GAAW,OAAO,EAAE,MAAM,SAAS;CAC3E,OAAO;EAAE,MAAM;EAAY,KAAK,IAAI;CAAM;AAC5C;;AAGA,SAAS,YAAY,KAAyB,SAAiD;CAC7F,MAAM,MAAM,IAAI,gBAAgB;EAC9B,OAAO,iBAAiB,SAAS,cAAc;EAC/C,kBAAkB;CACpB,CAAC;CACD,OAAO,QAAQ,KAAA,KAAa,IAAI,KAAK,IAAI,QAAQ,KAAA;AACnD"}
|
|
@@ -1429,6 +1429,7 @@ var MiddleLayer = class MiddleLayer {
|
|
|
1429
1429
|
runtimeCapabilities.addSupportedRequirement("requiresModelAPIVersion", 2);
|
|
1430
1430
|
runtimeCapabilities.addSupportedRequirement("requiresCreatePTable", 2);
|
|
1431
1431
|
runtimeCapabilities.addSupportedRequirement("requiresPFramesVersion", _milaboratories_pl_model_common.REQUIRES_PFRAMES_VERSION);
|
|
1432
|
+
runtimeCapabilities.addSupportedRequirement("requiresArgsIssues");
|
|
1432
1433
|
(0, _milaboratories_pl_model_common.registerServiceCapabilities)((flag, value) => runtimeCapabilities.addSupportedRequirement(flag, value));
|
|
1433
1434
|
const serviceRegistry = require_service_factories.createModelServiceRegistry({ logger });
|
|
1434
1435
|
const treeSnapshots = require_tree_snapshot_store.TreeSnapshotStore.create(pl, {
|