@milaboratories/pl-middle-layer 1.66.18 → 1.67.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.
Files changed (130) hide show
  1. package/dist/block_registry/index.cjs +3 -0
  2. package/dist/block_registry/index.d.ts +2 -1
  3. package/dist/block_registry/index.js +2 -1
  4. package/dist/block_registry/location_provider.cjs +117 -0
  5. package/dist/block_registry/location_provider.cjs.map +1 -0
  6. package/dist/block_registry/location_provider.js +114 -0
  7. package/dist/block_registry/location_provider.js.map +1 -0
  8. package/dist/block_registry/registry.cjs +13 -0
  9. package/dist/block_registry/registry.cjs.map +1 -1
  10. package/dist/block_registry/registry.d.ts +14 -1
  11. package/dist/block_registry/registry.d.ts.map +1 -1
  12. package/dist/block_registry/registry.js +13 -0
  13. package/dist/block_registry/registry.js.map +1 -1
  14. package/dist/block_registry/template_provider.cjs +104 -0
  15. package/dist/block_registry/template_provider.cjs.map +1 -0
  16. package/dist/block_registry/template_provider.d.ts +62 -0
  17. package/dist/block_registry/template_provider.d.ts.map +1 -0
  18. package/dist/block_registry/template_provider.js +103 -0
  19. package/dist/block_registry/template_provider.js.map +1 -0
  20. package/dist/block_registry/watcher.cjs +3 -3
  21. package/dist/block_registry/watcher.js +2 -2
  22. package/dist/dev_env/util.js +2 -2
  23. package/dist/dev_env/util.js.map +1 -1
  24. package/dist/index.cjs +10 -0
  25. package/dist/index.d.ts +5 -1
  26. package/dist/index.js +5 -1
  27. package/dist/js_render/computable_context.cjs +1 -1
  28. package/dist/js_render/computable_context.js +1 -1
  29. package/dist/middle_layer/driver_kit.d.ts +1 -1
  30. package/dist/middle_layer/middle_layer.cjs +144 -2
  31. package/dist/middle_layer/middle_layer.cjs.map +1 -1
  32. package/dist/middle_layer/middle_layer.d.ts +67 -1
  33. package/dist/middle_layer/middle_layer.d.ts.map +1 -1
  34. package/dist/middle_layer/middle_layer.js +146 -4
  35. package/dist/middle_layer/middle_layer.js.map +1 -1
  36. package/dist/middle_layer/project.cjs +1 -0
  37. package/dist/middle_layer/project.cjs.map +1 -1
  38. package/dist/middle_layer/project.d.ts +2 -2
  39. package/dist/middle_layer/project.js +4 -4
  40. package/dist/middle_layer/project.js.map +1 -1
  41. package/dist/middle_layer/sharing_list.d.ts +1 -1
  42. package/dist/model/args.cjs +9 -28
  43. package/dist/model/args.cjs.map +1 -1
  44. package/dist/model/args.js +9 -28
  45. package/dist/model/args.js.map +1 -1
  46. package/dist/model/index.cjs +7 -0
  47. package/dist/model/index.d.ts +4 -1
  48. package/dist/model/index.js +4 -1
  49. package/dist/model/project_helper.cjs +111 -0
  50. package/dist/model/project_helper.cjs.map +1 -1
  51. package/dist/model/project_helper.d.ts +76 -1
  52. package/dist/model/project_helper.d.ts.map +1 -1
  53. package/dist/model/project_helper.js +111 -0
  54. package/dist/model/project_helper.js.map +1 -1
  55. package/dist/model/project_model.d.ts +1 -1
  56. package/dist/model/sharing_model.d.ts +1 -1
  57. package/dist/model/template_apply.cjs +67 -0
  58. package/dist/model/template_apply.cjs.map +1 -0
  59. package/dist/model/template_apply.d.ts +50 -0
  60. package/dist/model/template_apply.d.ts.map +1 -0
  61. package/dist/model/template_apply.js +64 -0
  62. package/dist/model/template_apply.js.map +1 -0
  63. package/dist/model/template_export.cjs +82 -0
  64. package/dist/model/template_export.cjs.map +1 -0
  65. package/dist/model/template_export.d.ts +9 -0
  66. package/dist/model/template_export.d.ts.map +1 -0
  67. package/dist/model/template_export.js +82 -0
  68. package/dist/model/template_export.js.map +1 -0
  69. package/dist/model/template_parser.cjs +74 -0
  70. package/dist/model/template_parser.cjs.map +1 -0
  71. package/dist/model/template_parser.d.ts +43 -0
  72. package/dist/model/template_parser.d.ts.map +1 -0
  73. package/dist/model/template_parser.js +72 -0
  74. package/dist/model/template_parser.js.map +1 -0
  75. package/dist/model/template_resolve.cjs +134 -0
  76. package/dist/model/template_resolve.cjs.map +1 -0
  77. package/dist/model/template_resolve.d.ts +193 -0
  78. package/dist/model/template_resolve.d.ts.map +1 -0
  79. package/dist/model/template_resolve.js +133 -0
  80. package/dist/model/template_resolve.js.map +1 -0
  81. package/dist/model/template_serializer.cjs +162 -0
  82. package/dist/model/template_serializer.cjs.map +1 -0
  83. package/dist/model/template_serializer.d.ts +17 -0
  84. package/dist/model/template_serializer.d.ts.map +1 -0
  85. package/dist/model/template_serializer.js +157 -0
  86. package/dist/model/template_serializer.js.map +1 -0
  87. package/dist/mutator/block-pack/block_pack.cjs +1 -1
  88. package/dist/mutator/block-pack/block_pack.js +1 -1
  89. package/dist/mutator/migration.cjs +1 -1
  90. package/dist/mutator/migration.js +1 -1
  91. package/dist/mutator/project.cjs +35 -5
  92. package/dist/mutator/project.cjs.map +1 -1
  93. package/dist/mutator/project.d.ts.map +1 -1
  94. package/dist/mutator/project.js +35 -5
  95. package/dist/mutator/project.js.map +1 -1
  96. package/dist/mutator/template_construct.cjs +77 -0
  97. package/dist/mutator/template_construct.cjs.map +1 -0
  98. package/dist/mutator/template_construct.js +77 -0
  99. package/dist/mutator/template_construct.js.map +1 -0
  100. package/dist/network_check/template.js +3 -3
  101. package/dist/network_check/template.js.map +1 -1
  102. package/package.json +17 -17
  103. package/src/block_registry/index.ts +1 -0
  104. package/src/block_registry/location_provider.test.ts +236 -0
  105. package/src/block_registry/location_provider.ts +124 -0
  106. package/src/block_registry/registry.ts +22 -0
  107. package/src/block_registry/template_provider.test.ts +275 -0
  108. package/src/block_registry/template_provider.ts +168 -0
  109. package/src/middle_layer/middle_layer.ts +192 -1
  110. package/src/middle_layer/project.ts +1 -1
  111. package/src/model/args.test.ts +26 -1
  112. package/src/model/args.ts +16 -31
  113. package/src/model/index.ts +21 -0
  114. package/src/model/project_helper.ts +238 -0
  115. package/src/model/project_helper_params_init.test.ts +249 -0
  116. package/src/model/template_apply.test.ts +65 -0
  117. package/src/model/template_apply.ts +128 -0
  118. package/src/model/template_export.test.ts +255 -0
  119. package/src/model/template_export.ts +136 -0
  120. package/src/model/template_parser.test.ts +264 -0
  121. package/src/model/template_parser.ts +108 -0
  122. package/src/model/template_resolve.test.ts +397 -0
  123. package/src/model/template_resolve.ts +346 -0
  124. package/src/model/template_serializer.test.ts +398 -0
  125. package/src/model/template_serializer.ts +232 -0
  126. package/src/model/template_serializer_fixtures.test.ts +274 -0
  127. package/src/mutator/project-v3.test.ts +11 -11
  128. package/src/mutator/project.ts +92 -5
  129. package/src/mutator/template_construct.test.ts +456 -0
  130. package/src/mutator/template_construct.ts +150 -0
@@ -4,6 +4,7 @@ import { loadTemplate } from "./template/template_loading.js";
4
4
  import { BlockPackTemplateField, createBlockPack } from "./block-pack/block_pack.js";
5
5
  import { allBlocks, graphDiff, productionGraph, stagingGraph } from "../model/project_model_util.js";
6
6
  import { exportContext, getPreparedExportTemplateEnvelope } from "./context_export.js";
7
+ import { exportProjectAsTemplateV1 } from "../model/template_serializer.js";
7
8
  import { getDebugFlags } from "../debug/index.js";
8
9
  import { BLOCK_STORAGE_FACADE_VERSION, UiError, extractConfig } from "@platforma-sdk/model";
9
10
  import { InitialBlockSettings } from "@milaboratories/pl-model-middle-layer";
@@ -46,12 +47,14 @@ var BlockInfo = class {
46
47
  fields;
47
48
  config;
48
49
  source;
50
+ kind;
49
51
  logger;
50
- constructor(id, fields, config, source, logger = new ConsoleLoggerAdapter()) {
52
+ constructor(id, fields, config, source, kind, logger = new ConsoleLoggerAdapter()) {
51
53
  this.id = id;
52
54
  this.fields = fields;
53
55
  this.config = config;
54
56
  this.source = source;
57
+ this.kind = kind;
55
58
  this.logger = logger;
56
59
  }
57
60
  check() {
@@ -241,6 +244,32 @@ var ProjectMutator = class ProjectMutator {
241
244
  enrichmentTargets: this.projectHelper.getEnrichmentTargets(() => bInfo.config, () => args)
242
245
  };
243
246
  }
247
+ /**
248
+ * Render this project as a `template-v1` YAML document, or report every reason it
249
+ * cannot be.
250
+ *
251
+ * Read-only: it derives params in the VM and touches no field, so a `withProject`
252
+ * wrapper sees `wasModified === false` and skips the commit.
253
+ *
254
+ * This is where the three providers the serializer needs come from, and all are
255
+ * only reachable here. A block's storage lives behind `BlockInfo`, which is
256
+ * populated by the loader's batched round-trips, and both its kind reference and
257
+ * its origin spec are read off the block-pack container during that same load —
258
+ * `config` cannot carry the kind, since `extractConfig` normalizes the render
259
+ * envelope one level below it, and the spec is not part of the config at all.
260
+ */
261
+ exportAsTemplateV1() {
262
+ return exportProjectAsTemplateV1(this.struct, (blockId) => this.deriveTemplateParams(blockId), (blockId) => this.blockInfos.get(blockId)?.kind, (blockId) => this.blockInfos.get(blockId)?.source);
263
+ }
264
+ deriveTemplateParams(blockId) {
265
+ const info = this.blockInfos.get(blockId);
266
+ if (info === void 0) return void 0;
267
+ const storageJson = info.blockStorageJson;
268
+ if (storageJson === void 0) return void 0;
269
+ const derived = this.projectHelper.deriveTemplateParamsFromStorage(info.config, storageJson);
270
+ if (derived.error !== void 0) return { error: derived.error.message };
271
+ return { value: derived.value };
272
+ }
244
273
  getPendingProductionGraph() {
245
274
  if (this.pendingProductionGraph === void 0) this.pendingProductionGraph = productionGraph(this.struct, (blockId) => this.getProductionGraphBlockInfo(blockId, false));
246
275
  return this.pendingProductionGraph;
@@ -599,7 +628,7 @@ var ProjectMutator = class ProjectMutator {
599
628
  if (this.blocksInLimbo.delete(blockId)) this.renderingStateChanged = true;
600
629
  }
601
630
  initializeNewBlock(blockId, spec) {
602
- const info = new BlockInfo(blockId, {}, extractConfig(spec.blockPack.config), spec.blockPack.source, this.projectHelper.logger);
631
+ const info = new BlockInfo(blockId, {}, extractConfig(spec.blockPack.config), spec.blockPack.source, spec.blockPack.config.kind, this.projectHelper.logger);
603
632
  this.blockInfos.set(blockId, info);
604
633
  const bp = createBlockPack(this.tx, spec.blockPack);
605
634
  this.setBlockField(blockId, "blockPack", Pl.wrapInHolder(this.tx, bp), "NotReady");
@@ -609,7 +638,7 @@ var ProjectMutator = class ProjectMutator {
609
638
  let prerunArgs;
610
639
  let storageToWrite;
611
640
  if (spec.storageMode === "fromModel") {
612
- storageToWrite = this.projectHelper.getInitialStorageInVM(blockConfig);
641
+ storageToWrite = spec.initialStorage ?? this.projectHelper.getInitialStorageInVM(blockConfig);
613
642
  prerunArgs = this.projectHelper.derivePrerunArgsFromStorage(blockConfig, storageToWrite);
614
643
  const deriveArgsResult = this.projectHelper.deriveArgsFromStorage(blockConfig, storageToWrite);
615
644
  args = deriveArgsResult.error ? void 0 : deriveArgsResult.value;
@@ -645,7 +674,7 @@ var ProjectMutator = class ProjectMutator {
645
674
  ]));
646
675
  }
647
676
  initializeBlockDuplicate(blockId, originalBlockInfo) {
648
- const info = new BlockInfo(blockId, {}, originalBlockInfo.config, originalBlockInfo.source, this.projectHelper.logger);
677
+ const info = new BlockInfo(blockId, {}, originalBlockInfo.config, originalBlockInfo.source, originalBlockInfo.kind, this.projectHelper.logger);
649
678
  this.blockInfos.set(blockId, info);
650
679
  const fieldNamesToDuplicate = this.getFieldNamesToDuplicate(blockId);
651
680
  for (const [fieldName, fieldState] of Object.entries(originalBlockInfo.fields)) if (fieldNamesToDuplicate.has(fieldName) && fieldState && fieldState.ref) this.setBlockFieldObj(blockId, fieldName, {
@@ -988,6 +1017,7 @@ var ProjectMutator = class ProjectMutator {
988
1017
  for (const [info, response] of blockPackRequests) {
989
1018
  const bpInfo = cachedDeserialize(notEmpty((await response).data));
990
1019
  info.blockConfig = extractConfig(bpInfo.config);
1020
+ info.blockKind = bpInfo.config.kind;
991
1021
  info.blockPack = bpInfo.source;
992
1022
  }
993
1023
  const ctxExportTplEnvelope = await getPreparedExportTemplateEnvelope();
@@ -1002,7 +1032,7 @@ var ProjectMutator = class ProjectMutator {
1002
1032
  const renderingState = { stagingRefreshTimestamp };
1003
1033
  const blocksInLimboSet = new Set(blocksInLimbo);
1004
1034
  const blockInfos = /* @__PURE__ */ new Map();
1005
- blockInfoStates.forEach(({ id, fields, blockConfig, blockPack }) => blockInfos.set(id, new BlockInfo(id, fields, notEmpty(blockConfig), notEmpty(blockPack), projectHelper.logger)));
1035
+ blockInfoStates.forEach(({ id, fields, blockConfig, blockKind, blockPack }) => blockInfos.set(id, new BlockInfo(id, fields, notEmpty(blockConfig), notEmpty(blockPack), blockKind, projectHelper.logger)));
1006
1036
  const blockInStruct = /* @__PURE__ */ new Set();
1007
1037
  for (const b of allBlocks(structure)) {
1008
1038
  if (!blockInfos.has(b.id)) throw new Error(`Inconsistent project structure: no inputs for ${b.id}`);