@platforma-sdk/block-tools 2.14.1 → 2.14.2

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 (30) hide show
  1. package/dist/cli.js +17 -13
  2. package/dist/cli.js.map +1 -1
  3. package/dist/cli.mjs +779 -730
  4. package/dist/cli.mjs.map +1 -1
  5. package/dist/structure/engine/testing.d.ts +3 -0
  6. package/dist/structure/rules/root-changeset-config.d.ts +8 -0
  7. package/dist/structure/rules/shared/initial-version.d.ts +10 -0
  8. package/package.json +8 -8
  9. package/src/structure/__tests__/facade-end-state.test.ts +68 -3
  10. package/src/structure/__tests__/init-catalog-completeness.test.ts +86 -0
  11. package/src/structure/__tests__/init-lint-clean.test.ts +84 -0
  12. package/src/structure/__tests__/model-package-json.snapshot.test.ts +1 -0
  13. package/src/structure/__tests__/root-changeset-config.test.ts +94 -0
  14. package/src/structure/__tests__/root-ci-workflows.test.ts +3 -0
  15. package/src/structure/engine/testing.ts +4 -0
  16. package/src/structure/rules/block-package-json.ts +2 -1
  17. package/src/structure/rules/kind-package-json.ts +5 -1
  18. package/src/structure/rules/model-package-json.ts +5 -1
  19. package/src/structure/rules/root-changeset-config.ts +61 -0
  20. package/src/structure/rules/root-package-json.ts +2 -1
  21. package/src/structure/rules/root-pnpm-workspace.ts +2 -0
  22. package/src/structure/rules/root.ts +15 -1
  23. package/src/structure/rules/shared/initial-version.ts +17 -0
  24. package/src/structure/rules/software-package-json.ts +6 -0
  25. package/src/structure/rules/test-package-json.ts +5 -1
  26. package/src/structure/rules/ui-package-json.ts +5 -1
  27. package/src/structure/rules/workflow-package-json.ts +5 -1
  28. package/src/structure/templates/text/model/src/index.tpl.ts +1 -1
  29. package/src/structure/templates/text/workflows/build.tpl.yaml +1 -1
  30. package/src/structure/templates/text/workflows/mark-stable.tpl.yaml +1 -1
package/dist/cli.mjs CHANGED
@@ -1,53 +1,53 @@
1
- import { Ct as e, Ft as t, J as n, K as r, M as i, Mt as a, St as o, Xt as s, Y as c, _ as l, gt as u, n as d, p as f, vt as p, w as m } from "./config-Dx45aFJ_.mjs";
2
- import { Command as h, Option as g } from "commander";
3
- import _ from "node:path";
4
- import v from "node:fs";
5
- import { BlockPackManifest as ee, StableChannel as te, overrideDescriptionVersion as ne, overrideManifestVersion as re } from "@milaboratories/pl-model-middle-layer";
6
- import { assertDockerPushIntent as ie, createBuilder as ae, defaults as oe, envs as y, util as b } from "@platforma-sdk/package-builder-lib";
7
- import { ConsoleLoggerAdapter as x } from "@milaboratories/ts-helpers";
8
- import se, { parse as ce, parseDocument as le, stringify as ue } from "yaml";
9
- import { setTimeout as de } from "node:timers/promises";
10
- import * as fe from "node:os";
11
- import { confirm as pe, input as me, select as he } from "@inquirer/prompts";
12
- import { spawnSync as ge } from "node:child_process";
13
- import { ECRPUBLICClient as _e, GetAuthorizationTokenCommand as ve } from "@aws-sdk/client-ecr-public";
1
+ import { Ct as e, Ft as t, J as n, K as r, M as i, Mt as a, St as o, Xt as s, Y as c, _ as l, gt as u, n as d, p as f, vt as p, w as ee } from "./config-Dx45aFJ_.mjs";
2
+ import { Command as m, Option as h } from "commander";
3
+ import g from "node:path";
4
+ import _ from "node:fs";
5
+ import { BlockPackManifest as te, StableChannel as ne, overrideDescriptionVersion as re, overrideManifestVersion as ie } from "@milaboratories/pl-model-middle-layer";
6
+ import { assertDockerPushIntent as ae, createBuilder as oe, defaults as se, envs as v, util as y } from "@platforma-sdk/package-builder-lib";
7
+ import { ConsoleLoggerAdapter as b } from "@milaboratories/ts-helpers";
8
+ import ce, { parse as le, parseDocument as ue, stringify as de } from "yaml";
9
+ import { setTimeout as fe } from "node:timers/promises";
10
+ import * as pe from "node:os";
11
+ import { confirm as me, input as he, select as ge } from "@inquirer/prompts";
12
+ import { spawnSync as _e } from "node:child_process";
13
+ import { ECRPUBLICClient as ve, GetAuthorizationTokenCommand as ye } from "@aws-sdk/client-ecr-public";
14
14
  //#region src/cmd/build-meta.ts
15
- function ye() {
16
- let e = new h("build-meta").description("Extracts meta information from blocks package.json and outputs meta.json with embedded binary and textual information linked from the meta section.");
15
+ function be() {
16
+ let e = new m("build-meta").description("Extracts meta information from blocks package.json and outputs meta.json with embedded binary and textual information linked from the meta section.");
17
17
  return e.option("-i, --modulePath <path>", "input module path", "."), e.requiredOption("-o, --destination <path>", "output meta.json file"), e.action(async (e) => {
18
- let n = _.resolve(e.modulePath), r = await a(await t((await p(n)).meta, n));
19
- await v.promises.writeFile(_.resolve(e.destination), JSON.stringify(r));
18
+ let n = g.resolve(e.modulePath), r = await a(await t((await p(n)).meta, n));
19
+ await _.promises.writeFile(g.resolve(e.destination), JSON.stringify(r));
20
20
  }), e;
21
21
  }
22
22
  //#endregion
23
23
  //#region src/cmd/build-model.ts
24
- async function be(e) {
24
+ async function xe(e) {
25
25
  try {
26
- return await v.promises.readFile(e, "utf8");
26
+ return await _.promises.readFile(e, "utf8");
27
27
  } catch (e) {
28
28
  if (e instanceof Error && "code" in e && e.code === "ENOENT") return;
29
29
  throw e;
30
30
  }
31
31
  }
32
- function xe() {
33
- let e = new h("build-model").description("Extracts and outputs block model JSON from pre-built block model module");
32
+ function Se() {
33
+ let e = new m("build-model").description("Extracts and outputs block model JSON from pre-built block model module");
34
34
  return e.option("-i, --modulePath <path>", "input module path", "."), e.option("-b, --sourceBundle <path>", "bundled model code to embed into the model for callback-based rendering to work", "./dist/bundle.js"), e.option("-o, --destination <path>", "output model file", "./dist/model.json"), e.action(async (e) => {
35
- let { model: t, platforma: n } = s(_.resolve(e.modulePath));
35
+ let { model: t, platforma: n } = s(g.resolve(e.modulePath));
36
36
  if (t ||= n, !t) throw Error("\"model\" export not found");
37
37
  let { config: r } = t;
38
38
  if (!r) throw Error("Malformed \"model\" object, check it is created with \"BlockModel\" and \".done()\" is executed as the call in the chain.");
39
39
  if (!("outputs" in r) || !("sections" in r)) throw Error("\"config\" has unexpected structure");
40
- let i = await be(e.sourceBundle);
40
+ let i = await xe(e.sourceBundle);
41
41
  i !== void 0 && (r.code = {
42
42
  type: "plain",
43
43
  content: i
44
- }), await v.promises.writeFile(_.resolve(e.destination), JSON.stringify(r));
44
+ }), await _.promises.writeFile(g.resolve(e.destination), JSON.stringify(r));
45
45
  }), e;
46
46
  }
47
47
  //#endregion
48
48
  //#region src/cmd/build-kind-manifest.ts
49
- function Se() {
50
- let e = new h("build-kind-manifest").description("Writes the block-kind dist manifest (identity + src source-hash) from a pre-built kind bundle");
49
+ function Ce() {
50
+ let e = new m("build-kind-manifest").description("Writes the block-kind dist manifest (identity + src source-hash) from a pre-built kind bundle");
51
51
  return e.option("-i, --modulePath <path>", "kind package dir (contains package.json, src/, dist/)", "."), e.option("-s, --srcDir <path>", "source dir hashed into sourceHash, relative to modulePath", "src"), e.option("-o, --dst <path>", "output dir with the compiled bundle, relative to modulePath", "dist"), e.action(async (e) => {
52
52
  await o({
53
53
  modulePath: e.modulePath,
@@ -58,79 +58,79 @@ function Se() {
58
58
  }
59
59
  //#endregion
60
60
  //#region src/cmd/pack.ts
61
- function Ce() {
62
- let t = new h("pack").description("Builds block pack and outputs a block pack manifest consolidating all references assets into a single folder");
61
+ function we() {
62
+ let t = new m("pack").description("Builds block pack and outputs a block pack manifest consolidating all references assets into a single folder");
63
63
  return t.option("-i, --modulePath <path>", "input module path", "."), t.option("-o, --destinationPath <path>", "output folder", "./block-pack"), t.action(async (t) => {
64
- await e(await u(_.resolve(t.modulePath)), _.resolve(t.destinationPath));
64
+ await e(await u(g.resolve(t.modulePath)), g.resolve(t.destinationPath));
65
65
  }), t;
66
66
  }
67
67
  //#endregion
68
68
  //#region src/cmd/publish.ts
69
- function we(e, t) {
69
+ function Te(e, t) {
70
70
  let n = { ...e };
71
- for (let e in t) t[e] && typeof t[e] == "object" && !Array.isArray(t[e]) && n[e] && typeof n[e] == "object" && !Array.isArray(n[e]) ? n[e] = we(n[e], t[e]) : n[e] = t[e];
71
+ for (let e in t) t[e] && typeof t[e] == "object" && !Array.isArray(t[e]) && n[e] && typeof n[e] == "object" && !Array.isArray(n[e]) ? n[e] = Te(n[e], t[e]) : n[e] = t[e];
72
72
  return n;
73
73
  }
74
- function Te() {
75
- let e = new h("publish").description("Publishes the block package and refreshes the registry (for v2 block-pack schema)");
76
- return e.addOption(new g("-r, --registry <address>", "full address of the registry").env("PL_REGISTRY").makeOptionMandatory()), e.addOption(new g("--registry-serve-url <url>", "CDN serve URL written into block-pack/published.json (npm-consumed blocks)").env("PL_REGISTRY_SERVE_URL").makeOptionMandatory()), e.option("-m, --manifest <path>", "manifest file path", `./block-pack/${i}`), e.option("-v, --version-override <path>", "override package version"), e.addOption(new g("--refresh", "refresh repository after adding the package").default(!0).env("PL_REGISTRY_REFRESH")), e.option("--no-refresh", "do not refresh repository after adding the package"), e.addOption(new g("--unstable", "do not add the published package to stable channel").default(!1).env("PL_PUBLISH_UNSTABLE")), e.action(async (e) => {
77
- let t = new x(), i = _.resolve(e.manifest), a = JSON.parse(await v.promises.readFile(i, { encoding: "utf-8" })), o = ee.parse(a);
78
- o = we(a, o);
79
- let s = _.dirname(i), u = _.dirname(s);
80
- t.info(`Manifest root = ${s}`), t.info(`Facade root = ${u}`), e.versionOverride && (o = re(o, e.versionOverride));
81
- let d = new m(l(e.registry), t);
82
- await c(d, o, u, async (e) => Buffer.from(await v.promises.readFile(_.resolve(s, e)))), e.unstable || (t.info(`Adding package to ${te} channel...`), await d.addPackageToChannel(o.description.id, te)), await n(s, r({
74
+ function Ee() {
75
+ let e = new m("publish").description("Publishes the block package and refreshes the registry (for v2 block-pack schema)");
76
+ return e.addOption(new h("-r, --registry <address>", "full address of the registry").env("PL_REGISTRY").makeOptionMandatory()), e.addOption(new h("--registry-serve-url <url>", "CDN serve URL written into block-pack/published.json (npm-consumed blocks)").env("PL_REGISTRY_SERVE_URL").makeOptionMandatory()), e.option("-m, --manifest <path>", "manifest file path", `./block-pack/${i}`), e.option("-v, --version-override <path>", "override package version"), e.addOption(new h("--refresh", "refresh repository after adding the package").default(!0).env("PL_REGISTRY_REFRESH")), e.option("--no-refresh", "do not refresh repository after adding the package"), e.addOption(new h("--unstable", "do not add the published package to stable channel").default(!1).env("PL_PUBLISH_UNSTABLE")), e.action(async (e) => {
77
+ let t = new b(), i = g.resolve(e.manifest), a = JSON.parse(await _.promises.readFile(i, { encoding: "utf-8" })), o = te.parse(a);
78
+ o = Te(a, o);
79
+ let s = g.dirname(i), u = g.dirname(s);
80
+ t.info(`Manifest root = ${s}`), t.info(`Facade root = ${u}`), e.versionOverride && (o = ie(o, e.versionOverride));
81
+ let d = new ee(l(e.registry), t);
82
+ await c(d, o, u, async (e) => Buffer.from(await _.promises.readFile(g.resolve(s, e)))), e.unstable || (t.info(`Adding package to ${ne} channel...`), await d.addPackageToChannel(o.description.id, ne)), await n(s, r({
83
83
  registryUrl: e.registryServeUrl,
84
84
  id: o.description.id
85
- })), t.info(`Wrote published coordinates to ${_.resolve(s, "published.json")}`), e.refresh && await d.updateIfNeeded();
85
+ })), t.info(`Wrote published coordinates to ${g.resolve(s, "published.json")}`), e.refresh && await d.updateIfNeeded();
86
86
  }), e;
87
87
  }
88
88
  //#endregion
89
89
  //#region src/cmd/refresh-registry.ts
90
- function Ee() {
91
- let e = new h("refresh-registry").description("Refresh overview files based on published but not proecessed artefacts");
92
- return e.addOption(new g("-r, --registry <address>", "full address of the registry").env("PL_REGISTRY").makeOptionMandatory()), e.addOption(new g("-m, --mode <mode>", "refresh mode (allowed valiues: \"force\", \"normal\", \"dry-run\")").choices([
90
+ function De() {
91
+ let e = new m("refresh-registry").description("Refresh overview files based on published but not proecessed artefacts");
92
+ return e.addOption(new h("-r, --registry <address>", "full address of the registry").env("PL_REGISTRY").makeOptionMandatory()), e.addOption(new h("-m, --mode <mode>", "refresh mode (allowed valiues: \"force\", \"normal\", \"dry-run\")").choices([
93
93
  "force",
94
94
  "normal",
95
95
  "dry-run"
96
96
  ]).env("PL_REGISTRY_REFRESH_DRY_RUN").default("normal")), e.action(async (e) => {
97
- await new m(l(e.registry), new x()).updateIfNeeded(e.mode);
97
+ await new ee(l(e.registry), new b()).updateIfNeeded(e.mode);
98
98
  }), e;
99
99
  }
100
100
  //#endregion
101
101
  //#region src/cmd/mark-stable.ts
102
- function De() {
103
- let e = new h("mark-stable").description("Mark target block stable");
104
- return e.option("-i, --modulePath <path>", "input module path", "."), e.addOption(new g("-c, --channel <channel name>", "custom channel").default(te).hideHelp()), e.option("-v, --version-override <path>", "override package version"), e.addOption(new g("-r, --registry <address>", "full address of the registry").env("PL_REGISTRY").makeOptionMandatory()), e.addOption(new g("--refresh", "refresh repository after adding the package").default(!0).env("PL_REGISTRY_REFRESH")), e.option("--no-refresh", "do not refresh repository after adding the package"), e.option("--unmark", "reverses meaning of this command, flag can be used to remove \"stable\" flag from the package", !1), e.action(async (e) => {
105
- let t = await p(_.resolve(e.modulePath));
106
- e.versionOverride && (t = ne(t, e.versionOverride));
107
- let n = new m(l(e.registry), new x());
102
+ function Oe() {
103
+ let e = new m("mark-stable").description("Mark target block stable");
104
+ return e.option("-i, --modulePath <path>", "input module path", "."), e.addOption(new h("-c, --channel <channel name>", "custom channel").default(ne).hideHelp()), e.option("-v, --version-override <path>", "override package version"), e.addOption(new h("-r, --registry <address>", "full address of the registry").env("PL_REGISTRY").makeOptionMandatory()), e.addOption(new h("--refresh", "refresh repository after adding the package").default(!0).env("PL_REGISTRY_REFRESH")), e.option("--no-refresh", "do not refresh repository after adding the package"), e.option("--unmark", "reverses meaning of this command, flag can be used to remove \"stable\" flag from the package", !1), e.action(async (e) => {
105
+ let t = await p(g.resolve(e.modulePath));
106
+ e.versionOverride && (t = re(t, e.versionOverride));
107
+ let n = new ee(l(e.registry), new b());
108
108
  e.unmark ? await n.removePackageFromChannel(t.id, e.channel) : await n.addPackageToChannel(t.id, e.channel), e.refresh && await n.updateIfNeeded();
109
109
  }), e;
110
110
  }
111
111
  //#endregion
112
112
  //#region src/structure/engine/fs/node.ts
113
- var Oe = class {
113
+ var ke = class {
114
114
  constructor(e) {
115
115
  this.root = e;
116
116
  }
117
117
  abs(e) {
118
- return _.resolve(this.root, e);
118
+ return g.resolve(this.root, e);
119
119
  }
120
120
  read(e) {
121
- return v.readFileSync(this.abs(e), "utf-8");
121
+ return _.readFileSync(this.abs(e), "utf-8");
122
122
  }
123
123
  write(e, t) {
124
124
  let n = this.abs(e);
125
- v.mkdirSync(_.dirname(n), { recursive: !0 }), v.writeFileSync(n, t, "utf-8");
125
+ _.mkdirSync(g.dirname(n), { recursive: !0 }), _.writeFileSync(n, t, "utf-8");
126
126
  }
127
127
  writeBinary(e, t) {
128
128
  let n = this.abs(e);
129
- v.mkdirSync(_.dirname(n), { recursive: !0 }), v.writeFileSync(n, t);
129
+ _.mkdirSync(g.dirname(n), { recursive: !0 }), _.writeFileSync(n, t);
130
130
  }
131
131
  exists(e) {
132
132
  try {
133
- return v.statSync(this.abs(e)), !0;
133
+ return _.statSync(this.abs(e)), !0;
134
134
  } catch {
135
135
  return !1;
136
136
  }
@@ -138,15 +138,15 @@ var Oe = class {
138
138
  list(e) {
139
139
  let t = this.abs(e);
140
140
  try {
141
- if (!v.statSync(t).isDirectory()) return [];
141
+ if (!_.statSync(t).isDirectory()) return [];
142
142
  } catch {
143
143
  return [];
144
144
  }
145
145
  let n = [];
146
146
  function r(e, t) {
147
- let i = v.readdirSync(t, { withFileTypes: !0 });
147
+ let i = _.readdirSync(t, { withFileTypes: !0 });
148
148
  for (let a of i) {
149
- let i = e ? `${e}/${a.name}` : a.name, o = _.join(t, a.name);
149
+ let i = e ? `${e}/${a.name}` : a.name, o = g.join(t, a.name);
150
150
  a.isDirectory() ? r(i, o) : a.isFile() && n.push(i);
151
151
  }
152
152
  }
@@ -155,7 +155,7 @@ var Oe = class {
155
155
  listDir(e) {
156
156
  let t = this.abs(e), n;
157
157
  try {
158
- n = v.readdirSync(t, { withFileTypes: !0 });
158
+ n = _.readdirSync(t, { withFileTypes: !0 });
159
159
  } catch {
160
160
  return [];
161
161
  }
@@ -166,48 +166,48 @@ var Oe = class {
166
166
  }
167
167
  move(e, t) {
168
168
  let n = this.abs(e), r = this.abs(t);
169
- v.mkdirSync(_.dirname(r), { recursive: !0 }), v.renameSync(n, r);
169
+ _.mkdirSync(g.dirname(r), { recursive: !0 }), _.renameSync(n, r);
170
170
  }
171
171
  delete(e) {
172
- v.rmSync(this.abs(e), {
172
+ _.rmSync(this.abs(e), {
173
173
  recursive: !0,
174
174
  force: !0
175
175
  });
176
176
  }
177
- }, ke = class {
177
+ }, Ae = class {
178
178
  constructor(e) {
179
179
  this.root = e;
180
180
  }
181
181
  staticRead(e) {
182
- return v.readFileSync(_.resolve(this.root, "static", e), "utf-8");
182
+ return _.readFileSync(g.resolve(this.root, "static", e), "utf-8");
183
183
  }
184
184
  staticReadBinary(e) {
185
- return v.readFileSync(_.resolve(this.root, "static", e));
185
+ return _.readFileSync(g.resolve(this.root, "static", e));
186
186
  }
187
187
  textRead(e) {
188
- return v.readFileSync(_.resolve(this.root, "text", e), "utf-8");
188
+ return _.readFileSync(g.resolve(this.root, "text", e), "utf-8");
189
189
  }
190
190
  };
191
- function Ae(e, t) {
191
+ function je(e, t) {
192
192
  return e.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (e, n) => t[n] ?? `\${${n}}`);
193
193
  }
194
194
  //#endregion
195
195
  //#region src/structure/engine/flatten.ts
196
- var je = ["default", "init"];
197
- function Me(e, t) {
196
+ var Me = ["default", "init"];
197
+ function Ne(e, t) {
198
198
  if (!e) return t;
199
199
  if (!t) return e;
200
200
  let n = e.endsWith("/") ? e.slice(0, -1) : e, r = t.startsWith("/") ? t.slice(1) : t;
201
201
  return r ? `${n}/${r}` : n;
202
202
  }
203
- function Ne(e, t) {
203
+ function Pe(e, t) {
204
204
  return e.filter((e) => e.scope === t).slice().sort((e, t) => e.path.localeCompare(t.path));
205
205
  }
206
- function Pe(e, t) {
206
+ function Fe(e, t) {
207
207
  let n = [];
208
208
  function r(e, i, a, o, s) {
209
209
  if (e.kind === "scope") {
210
- let n = Ne(t.modules, e.scope);
210
+ let n = Pe(t.modules, e.scope);
211
211
  for (let t of n) for (let n of e.children) r(n, e.scope, t.path, o, s);
212
212
  return;
213
213
  }
@@ -220,14 +220,14 @@ function Pe(e, t) {
220
220
  for (let t of e.children) r(t, i, a, o, e.modes);
221
221
  return;
222
222
  }
223
- if (i === void 0 || a === void 0) throw Error(`flatten: leaf '${Ie(e)}' is not inside a scope() frame`);
223
+ if (i === void 0 || a === void 0) throw Error(`flatten: leaf '${Le(e)}' is not inside a scope() frame`);
224
224
  if (e.kind === "rename") {
225
225
  n.push({
226
226
  leaf: e,
227
227
  scope: i,
228
228
  modulePath: a,
229
- resolvedPath: Me(a, e.from),
230
- resolvedTo: Me(a, e.to),
229
+ resolvedPath: Ne(a, e.from),
230
+ resolvedTo: Ne(a, e.to),
231
231
  triggers: o,
232
232
  modes: s
233
233
  });
@@ -237,15 +237,15 @@ function Pe(e, t) {
237
237
  leaf: e,
238
238
  scope: i,
239
239
  modulePath: a,
240
- resolvedPath: Me(a, Fe(e)),
240
+ resolvedPath: Ne(a, Ie(e)),
241
241
  triggers: o,
242
242
  modes: s
243
243
  });
244
244
  }
245
- for (let t of e.children) r(t, void 0, void 0, [], je);
245
+ for (let t of e.children) r(t, void 0, void 0, [], Me);
246
246
  return n;
247
247
  }
248
- function Fe(e) {
248
+ function Ie(e) {
249
249
  switch (e.kind) {
250
250
  case "fixed":
251
251
  case "managed":
@@ -255,63 +255,63 @@ function Fe(e) {
255
255
  case "rename": return e.from;
256
256
  }
257
257
  }
258
- function Ie(e) {
258
+ function Le(e) {
259
259
  return e.kind === "rename" ? `rename ${e.from} -> ${e.to}` : `${e.kind} ${e.path}`;
260
260
  }
261
261
  //#endregion
262
262
  //#region src/structure/engine/glob.ts
263
- var Le = /[.+^${}()|[\]\\]/g;
264
- function Re(e) {
263
+ var Re = /[.+^${}()|[\]\\]/g;
264
+ function ze(e) {
265
265
  let t = "";
266
266
  for (let n = 0; n < e.length; n++) {
267
267
  let r = e[n];
268
- r === "*" ? e[n + 1] === "*" ? (n++, e[n + 1] === "/" ? (n++, t += "(?:.*/)?") : t += ".*") : t += "[^/]*" : r === "?" ? t += "[^/]" : t += r.replace(Le, "\\$&");
268
+ r === "*" ? e[n + 1] === "*" ? (n++, e[n + 1] === "/" ? (n++, t += "(?:.*/)?") : t += ".*") : t += "[^/]*" : r === "?" ? t += "[^/]" : t += r.replace(Re, "\\$&");
269
269
  }
270
270
  return RegExp(`^${t}$`);
271
271
  }
272
- function ze(e, t) {
273
- return Re(e).test(t);
272
+ function Be(e, t) {
273
+ return ze(e).test(t);
274
274
  }
275
275
  //#endregion
276
276
  //#region src/structure/engine/builders.ts
277
- var S, Be;
278
- function Ve(e) {
279
- if (!S) throw Error(`${e}() called outside defineStructure(). Builders must run inside the lambda passed to defineStructure(...).`);
280
- return S;
277
+ var x, Ve;
278
+ function He(e) {
279
+ if (!x) throw Error(`${e}() called outside defineStructure(). Builders must run inside the lambda passed to defineStructure(...).`);
280
+ return x;
281
281
  }
282
- function C(e, t) {
283
- let n = Ve(e);
282
+ function S(e, t) {
283
+ let n = He(e);
284
284
  n.stack[n.stack.length - 1].push(t);
285
285
  }
286
- function He(e, t) {
287
- let n = Be;
288
- Be = e;
286
+ function Ue(e, t) {
287
+ let n = Ve;
288
+ Ve = e;
289
289
  try {
290
290
  return t();
291
291
  } finally {
292
- Be = n;
292
+ Ve = n;
293
293
  }
294
294
  }
295
- function Ue() {
296
- return Be;
295
+ function We() {
296
+ return Ve;
297
297
  }
298
- function We(e) {
299
- if (S) throw Error("defineStructure() cannot be called from inside another defineStructure().");
298
+ function Ge(e) {
299
+ if (x) throw Error("defineStructure() cannot be called from inside another defineStructure().");
300
300
  let t = [], n = {
301
301
  root: t,
302
302
  stack: [t],
303
303
  inScope: !1
304
304
  };
305
- S = n;
305
+ x = n;
306
306
  try {
307
307
  if (e(), n.stack.length !== 1) throw Error(`defineStructure: builder body left ${n.stack.length - 1} unclosed group frame(s)`);
308
308
  let r = { children: t };
309
- return Ge(r), r;
309
+ return Ke(r), r;
310
310
  } finally {
311
- S = void 0;
311
+ x = void 0;
312
312
  }
313
313
  }
314
- function Ge(e) {
314
+ function Ke(e) {
315
315
  let t = /* @__PURE__ */ new Map();
316
316
  function n(e, r) {
317
317
  if (e.kind === "scope") {
@@ -334,8 +334,8 @@ function Ge(e) {
334
334
  throw Error(`defineStructure validation: path '${t}' under scope '${e}' is declared as both seed and ${n}. Seeds are block-author territory (written once at init, untouched thereafter); engine-managed primitives (fixed/managed/scaffold) rewrite on every refresh. The two contracts cannot coexist on the same path.`);
335
335
  }
336
336
  }
337
- function w(e, t) {
338
- let n = Ve("scope");
337
+ function C(e, t) {
338
+ let n = He("scope");
339
339
  if (n.inScope) throw Error("scope() cannot nest. Already inside a scope.");
340
340
  let r = {
341
341
  kind: "scope",
@@ -349,22 +349,22 @@ function w(e, t) {
349
349
  n.stack.pop(), n.inScope = !1;
350
350
  }
351
351
  }
352
- var Ke;
353
- function qe(e) {
354
- Ke = e;
352
+ var qe;
353
+ function Je(e) {
354
+ qe = e;
355
355
  }
356
- function T(e, t, n) {
357
- Je(e, t), n && Je((t) => !e(t), n);
356
+ function w(e, t, n) {
357
+ Ye(e, t), n && Ye((t) => !e(t), n);
358
358
  }
359
- function Je(e, t) {
360
- if (S) {
361
- Ye(e, t);
359
+ function Ye(e, t) {
360
+ if (x) {
361
+ Xe(e, t);
362
362
  return;
363
363
  }
364
- if (!(Ke?.(e, t) ?? !1)) throw Error("when() called outside defineStructure() and outside any managed(...) body. Place this call inside one of the two.");
364
+ if (!(qe?.(e, t) ?? !1)) throw Error("when() called outside defineStructure() and outside any managed(...) body. Place this call inside one of the two.");
365
365
  }
366
- function Ye(e, t) {
367
- let n = S, r = {
366
+ function Xe(e, t) {
367
+ let n = x, r = {
368
368
  kind: "when",
369
369
  trigger: e,
370
370
  children: []
@@ -376,11 +376,11 @@ function Ye(e, t) {
376
376
  n.stack.pop();
377
377
  }
378
378
  }
379
- function E(e) {
379
+ function T(e) {
380
380
  return (t) => t.filesMatch(e);
381
381
  }
382
- function Xe(e, t, n) {
383
- let r = Ve(e), i = {
382
+ function Ze(e, t, n) {
383
+ let r = He(e), i = {
384
384
  kind: "mode",
385
385
  modes: t,
386
386
  children: []
@@ -392,70 +392,70 @@ function Xe(e, t, n) {
392
392
  r.stack.pop();
393
393
  }
394
394
  }
395
- function Ze(e) {
396
- Xe("onInitOrUpdate", ["init", "updateDeps"], e);
395
+ function Qe(e) {
396
+ Ze("onInitOrUpdate", ["init", "updateDeps"], e);
397
397
  }
398
- function D(e, t) {
399
- C("fixed", {
398
+ function E(e, t) {
399
+ S("fixed", {
400
400
  kind: "fixed",
401
401
  path: e,
402
402
  content: t
403
403
  });
404
404
  }
405
- function O(e, t, n) {
406
- C("managed", {
405
+ function D(e, t, n) {
406
+ S("managed", {
407
407
  kind: "managed",
408
408
  path: e,
409
409
  initial: t,
410
410
  body: n
411
411
  });
412
412
  }
413
- function Qe(e, t) {
414
- C("scaffold", {
413
+ function $e(e, t) {
414
+ S("scaffold", {
415
415
  kind: "scaffold",
416
416
  path: e,
417
417
  initial: t
418
418
  });
419
419
  }
420
- function k(e, t) {
421
- C("seed", {
420
+ function O(e, t) {
421
+ S("seed", {
422
422
  kind: "seed",
423
423
  path: e,
424
424
  initial: t
425
425
  });
426
426
  }
427
- function A(e) {
428
- C("remove", {
427
+ function k(e) {
428
+ S("remove", {
429
429
  kind: "remove",
430
430
  path: e
431
431
  });
432
432
  }
433
- function j(e) {
433
+ function A(e) {
434
434
  return {
435
435
  kind: "file",
436
436
  path: e
437
437
  };
438
438
  }
439
- function $e(e) {
439
+ function et(e) {
440
440
  return {
441
441
  kind: "binary",
442
442
  path: e
443
443
  };
444
444
  }
445
- function et(e) {
445
+ function tt(e) {
446
446
  return {
447
447
  kind: "text",
448
448
  value: e
449
449
  };
450
450
  }
451
- function M(e, t) {
451
+ function j(e, t) {
452
452
  return {
453
453
  kind: "tpl",
454
454
  path: e,
455
455
  vars: t
456
456
  };
457
457
  }
458
- function N(e) {
458
+ function M(e) {
459
459
  return {
460
460
  kind: "generate",
461
461
  fn: e
@@ -463,69 +463,69 @@ function N(e) {
463
463
  }
464
464
  //#endregion
465
465
  //#region src/structure/engine/parsers/json.ts
466
- function tt(e) {
466
+ function nt(e) {
467
467
  return JSON.parse(e);
468
468
  }
469
- var nt = 100, rt = 2;
470
- function it(e) {
471
- return e.length === 0 ? "[]" : "[" + e.map(at).join(", ") + "]";
472
- }
469
+ var rt = 100, it = 2;
473
470
  function at(e) {
474
- if (Array.isArray(e)) return it(e);
475
- if (P(e)) {
471
+ return e.length === 0 ? "[]" : "[" + e.map(ot).join(", ") + "]";
472
+ }
473
+ function ot(e) {
474
+ if (Array.isArray(e)) return at(e);
475
+ if (N(e)) {
476
476
  let t = Object.entries(e);
477
- return t.length === 0 ? "{}" : "{ " + t.map(([e, t]) => `${JSON.stringify(e)}: ${at(t)}`).join(", ") + " }";
477
+ return t.length === 0 ? "{}" : "{ " + t.map(([e, t]) => `${JSON.stringify(e)}: ${ot(t)}`).join(", ") + " }";
478
478
  }
479
479
  return JSON.stringify(e);
480
480
  }
481
- function ot(e, t, n, r) {
482
- let i = t + rt, a = " ".repeat(i);
481
+ function st(e, t, n, r) {
482
+ let i = t + it, a = " ".repeat(i);
483
483
  if (Array.isArray(e)) {
484
- let o = it(e);
485
- if (n + o.length + r <= nt) return o;
484
+ let o = at(e);
485
+ if (n + o.length + r <= rt) return o;
486
486
  let s = e.length - 1;
487
- return "[\n" + e.map((e, t) => a + ot(e, i, i, t === s ? 0 : 1)).join(",\n") + "\n" + " ".repeat(t) + "]";
487
+ return "[\n" + e.map((e, t) => a + st(e, i, i, t === s ? 0 : 1)).join(",\n") + "\n" + " ".repeat(t) + "]";
488
488
  }
489
- if (P(e)) {
489
+ if (N(e)) {
490
490
  let n = Object.entries(e);
491
491
  if (n.length === 0) return "{}";
492
492
  let r = n.length - 1;
493
493
  return "{\n" + n.map(([e, t], n) => {
494
494
  let o = `${a}${JSON.stringify(e)}: `;
495
- return o + ot(t, i, o.length, n === r ? 0 : 1);
495
+ return o + st(t, i, o.length, n === r ? 0 : 1);
496
496
  }).join(",\n") + "\n" + " ".repeat(t) + "}";
497
497
  }
498
498
  return JSON.stringify(e);
499
499
  }
500
- function st(e, t) {
501
- return t?.collapse ? ot(JSON.parse(JSON.stringify(e ?? null)), 0, 0, 0) + "\n" : JSON.stringify(e, null, 2) + "\n";
500
+ function ct(e, t) {
501
+ return t?.collapse ? st(JSON.parse(JSON.stringify(e ?? null)), 0, 0, 0) + "\n" : JSON.stringify(e, null, 2) + "\n";
502
502
  }
503
- function ct(e) {
503
+ function lt(e) {
504
504
  return e === "" || e === void 0 ? [] : e.split(".");
505
505
  }
506
- function P(e) {
506
+ function N(e) {
507
507
  return typeof e == "object" && !!e && !Array.isArray(e);
508
508
  }
509
- function lt(e, t) {
510
- let n = ct(t), r = e;
509
+ function ut(e, t) {
510
+ let n = lt(t), r = e;
511
511
  for (let e of n) {
512
- if (!P(r)) return;
512
+ if (!N(r)) return;
513
513
  r = r[e];
514
514
  }
515
515
  return r;
516
516
  }
517
- function ut(e, t) {
518
- let n = ct(t);
517
+ function dt(e, t) {
518
+ let n = lt(t);
519
519
  if (n.length === 0) return !0;
520
520
  let r = e;
521
521
  for (let e = 0; e < n.length - 1; e++) {
522
- if (!P(r)) return !1;
522
+ if (!N(r)) return !1;
523
523
  r = r[n[e]];
524
524
  }
525
- return P(r) ? n[n.length - 1] in r : !1;
525
+ return N(r) ? n[n.length - 1] in r : !1;
526
526
  }
527
- function dt(e, t, n) {
528
- let r = ct(t);
527
+ function ft(e, t, n) {
528
+ let r = lt(t);
529
529
  if (r.length === 0) throw Error("setAtPath: jsonPath must be non-empty");
530
530
  let i = e;
531
531
  for (let e = 0; e < r.length - 1; e++) {
@@ -533,22 +533,22 @@ function dt(e, t, n) {
533
533
  if (n === void 0) {
534
534
  let e = {};
535
535
  i[t] = e, i = e;
536
- } else if (P(n)) i = n;
536
+ } else if (N(n)) i = n;
537
537
  else throw Error(`setAtPath: cannot descend into non-object at '${r.slice(0, e + 1).join(".")}'`);
538
538
  }
539
539
  i[r[r.length - 1]] = n;
540
540
  }
541
- function ft(e, t) {
542
- let n = ct(t);
541
+ function pt(e, t) {
542
+ let n = lt(t);
543
543
  if (n.length === 0) throw Error("deleteAtPath: jsonPath must be non-empty");
544
544
  let r = e;
545
545
  for (let e = 0; e < n.length - 1; e++) {
546
- if (!P(r)) return;
546
+ if (!N(r)) return;
547
547
  r = r[n[e]];
548
548
  }
549
- P(r) && delete r[n[n.length - 1]];
549
+ N(r) && delete r[n[n.length - 1]];
550
550
  }
551
- function pt(e, t) {
551
+ function mt(e, t) {
552
552
  let n = new Set(t), r = Object.keys(e), i = /* @__PURE__ */ new Map();
553
553
  i.set("", []);
554
554
  let a = "";
@@ -563,72 +563,72 @@ function pt(e, t) {
563
563
  }
564
564
  //#endregion
565
565
  //#region src/structure/engine/parsers/lines.ts
566
- function mt(e) {
566
+ function ht(e) {
567
567
  let t = e.split("\n");
568
568
  return t.length > 0 && t[t.length - 1] === "" && t.pop(), t;
569
569
  }
570
- function ht(e) {
570
+ function gt(e) {
571
571
  return e.join("\n") + "\n";
572
572
  }
573
- function gt(e) {
573
+ function _t(e) {
574
574
  return e.replace(/(^|\s)#.*$/, "$1").trim();
575
575
  }
576
- function _t(e, t) {
577
- let n = gt(e);
576
+ function vt(e, t) {
577
+ let n = _t(e);
578
578
  return n === "" ? !1 : n === t.trim();
579
579
  }
580
- function vt(e, t) {
581
- for (let n of e) if (_t(n, t)) return !0;
580
+ function yt(e, t) {
581
+ for (let n of e) if (vt(n, t)) return !0;
582
582
  return !1;
583
583
  }
584
584
  //#endregion
585
585
  //#region src/structure/engine/content-rules.ts
586
- function yt(e, t) {
586
+ function bt(e, t) {
587
587
  return e === "sdk:" ? t ? "workspace:*" : "catalog:" : e;
588
588
  }
589
- var bt = [
589
+ var xt = [
590
590
  "dependencies",
591
591
  "devDependencies",
592
592
  "peerDependencies",
593
593
  "optionalDependencies"
594
594
  ];
595
- function xt(e, t) {
596
- if (R(e)) for (let n of bt) {
595
+ function St(e, t) {
596
+ if (L(e)) for (let n of xt) {
597
597
  let r = e[n];
598
- if (R(r)) for (let e of Object.keys(r)) r[e] === "sdk:" && (r[e] = t ? "workspace:*" : "catalog:");
598
+ if (L(r)) for (let e of Object.keys(r)) r[e] === "sdk:" && (r[e] = t ? "workspace:*" : "catalog:");
599
599
  }
600
600
  }
601
- var F;
602
- function St(e) {
603
- if (!F) throw Error(`${e}() only valid inside a managed(...) body. Move this call inside managed(path, initial, () => {...}).`);
604
- return F;
601
+ var P;
602
+ function Ct(e) {
603
+ if (!P) throw Error(`${e}() only valid inside a managed(...) body. Move this call inside managed(path, initial, () => {...}).`);
604
+ return P;
605
605
  }
606
- function I(e) {
607
- let t = St(e);
606
+ function F(e) {
607
+ let t = Ct(e);
608
608
  if (t.kind !== "json") throw Error(`${e}() requires a JSON-managed body; got '${t.kind}'.`);
609
609
  return t;
610
610
  }
611
- function L(e) {
612
- let t = St(e);
611
+ function I(e) {
612
+ let t = Ct(e);
613
613
  if (t.kind !== "yaml") throw Error(`${e}() requires a YAML-managed body; got '${t.kind}'.`);
614
614
  return t;
615
615
  }
616
- function Ct(e) {
617
- let t = St(e);
616
+ function wt(e) {
617
+ let t = Ct(e);
618
618
  if (t.kind !== "lines") throw Error(`${e}() requires a lines-managed body; got '${t.kind}'.`);
619
619
  return t;
620
620
  }
621
- function wt(e, t) {
622
- let n = e.ctx ?? Ue();
621
+ function Tt(e, t) {
622
+ let n = e.ctx ?? We();
623
623
  if (!n) throw Error(`${t}() needs a RunContext but none is active. Pass { ctx } via the with-managed-* helper or run inside engine.run(...).`);
624
624
  return n;
625
625
  }
626
- function R(e) {
626
+ function L(e) {
627
627
  return typeof e == "object" && !!e && !Array.isArray(e);
628
628
  }
629
- function Tt(e, t, n = {}) {
630
- if (F) throw Error("Nested managed(...) body — engine bug.");
631
- F = {
629
+ function Et(e, t, n = {}) {
630
+ if (P) throw Error("Nested managed(...) body — engine bug.");
631
+ P = {
632
632
  kind: "json",
633
633
  obj: e,
634
634
  ctx: n.ctx,
@@ -637,12 +637,12 @@ function Tt(e, t, n = {}) {
637
637
  try {
638
638
  return t(n.ctx ?? n.triggerContext?.ctx), e;
639
639
  } finally {
640
- F = void 0;
640
+ P = void 0;
641
641
  }
642
642
  }
643
- function Et(e, t, n = {}) {
644
- if (F) throw Error("Nested managed(...) body — engine bug.");
645
- F = {
643
+ function Dt(e, t, n = {}) {
644
+ if (P) throw Error("Nested managed(...) body — engine bug.");
645
+ P = {
646
646
  kind: "yaml",
647
647
  doc: e,
648
648
  ctx: n.ctx,
@@ -653,12 +653,12 @@ function Et(e, t, n = {}) {
653
653
  try {
654
654
  return t(n.ctx ?? n.triggerContext?.ctx), e;
655
655
  } finally {
656
- F = void 0;
656
+ P = void 0;
657
657
  }
658
658
  }
659
- function Dt(e, t, n = {}) {
660
- if (F) throw Error("Nested managed(...) body — engine bug.");
661
- F = {
659
+ function Ot(e, t, n = {}) {
660
+ if (P) throw Error("Nested managed(...) body — engine bug.");
661
+ P = {
662
662
  kind: "lines",
663
663
  lines: e,
664
664
  ctx: n.ctx,
@@ -667,183 +667,187 @@ function Dt(e, t, n = {}) {
667
667
  try {
668
668
  return t(n.ctx ?? n.triggerContext?.ctx), e;
669
669
  } finally {
670
- F = void 0;
670
+ P = void 0;
671
671
  }
672
672
  }
673
- qe((e, t) => {
674
- if (!F) return !1;
675
- let n = F.triggerContext;
673
+ Je((e, t) => {
674
+ if (!P) return !1;
675
+ let n = P.triggerContext;
676
676
  if (!n) throw Error("when() inside a managed(...) body requires a triggerContext. The runner supplies it via the `triggerContext` opt to with-managed-*; ensure your test/test helper passes one.");
677
677
  return e(n) && t(), !0;
678
678
  });
679
- function z(e, t) {
680
- dt(I("ensureField").obj, e, t);
679
+ function R(e, t) {
680
+ ft(F("ensureField").obj, e, t);
681
681
  }
682
- function B(e, t) {
683
- let n = I("removeField").obj;
684
- ut(n, e) && (t && !t(lt(n, e)) || ft(n, e));
682
+ function kt(e, t) {
683
+ let n = F("removeField").obj;
684
+ dt(n, e) && (t && !t(ut(n, e)) || pt(n, e));
685
685
  }
686
- function Ot(e, t) {
687
- let n = I("requireField").obj;
688
- if (!ut(n, e)) throw Error(t ?? `requireField: missing field '${e}'`);
686
+ function At(e, t) {
687
+ let n = F("requireField").obj;
688
+ if (!dt(n, e)) throw Error(t ?? `requireField: missing field '${e}'`);
689
689
  }
690
- function kt(e, t) {
691
- let n = I("ensureFieldEntries").obj, r = ut(n, e) ? lt(n, e) : void 0, i = R(r) ? r : {};
690
+ function jt(e, t) {
691
+ let n = F("ensureFieldEntries").obj, r = dt(n, e) ? ut(n, e) : void 0, i = L(r) ? r : {};
692
692
  for (let [e, n] of Object.entries(t)) i[e] = n;
693
- R(r) || dt(n, e, i);
693
+ L(r) || ft(n, e, i);
694
694
  }
695
- function V(e, t) {
696
- z(`scripts.${e}`, t);
695
+ function z(e, t) {
696
+ R(`scripts.${e}`, t);
697
697
  }
698
- function H(e) {
699
- B(`scripts.${e}`);
698
+ function B(e) {
699
+ kt(`scripts.${e}`);
700
700
  }
701
- var At = [
701
+ var Mt = [
702
702
  "dependencies",
703
703
  "devDependencies",
704
704
  "peerDependencies",
705
705
  "optionalDependencies"
706
706
  ];
707
- function jt(e, t, n, r) {
708
- let i = I(e), a = i.obj, o = n === "sdk:" ? yt(n, wt(i, e).isSdkInternal) : n;
709
- for (let e of At) {
707
+ function Nt(e, t, n, r) {
708
+ let i = F(e), a = i.obj, o = n === "sdk:" ? bt(n, Tt(i, e).isSdkInternal) : n;
709
+ for (let e of Mt) {
710
710
  if (e === r) continue;
711
711
  let n = a[e];
712
- R(n) && t in n && delete n[t];
712
+ L(n) && t in n && delete n[t];
713
713
  }
714
- let s = a[r], c = R(s) ? s : {};
715
- c[t] = o, R(s) || (a[r] = c);
714
+ let s = a[r], c = L(s) ? s : {};
715
+ c[t] = o, L(s) || (a[r] = c);
716
716
  }
717
- function U(e, t) {
718
- jt("ensureDep", e, t, "dependencies");
717
+ function Pt(e, t) {
718
+ Nt("ensureDep", e, t, "dependencies");
719
719
  }
720
- function W(e, t) {
721
- jt("ensureDevDep", e, t, "devDependencies");
720
+ function V(e, t) {
721
+ Nt("ensureDevDep", e, t, "devDependencies");
722
722
  }
723
- function Mt(e, t) {
724
- jt("ensurePeerDep", e, t, "peerDependencies");
723
+ function Ft(e, t) {
724
+ Nt("ensurePeerDep", e, t, "peerDependencies");
725
725
  }
726
- function G(e) {
727
- let t = I("removeDep").obj;
728
- for (let n of At) {
726
+ function H(e) {
727
+ let t = F("removeDep").obj;
728
+ for (let n of Mt) {
729
729
  let r = t[n];
730
- R(r) && e in r && delete r[e];
730
+ L(r) && e in r && delete r[e];
731
731
  }
732
732
  }
733
- function K(e) {
734
- for (let [t, n] of Object.entries(e)) W(t, n);
733
+ function U(e) {
734
+ for (let [t, n] of Object.entries(e)) V(t, n);
735
735
  }
736
- function Nt(e) {
737
- for (let [t, n] of Object.entries(e)) Mt(t, n);
736
+ function It(e) {
737
+ for (let [t, n] of Object.entries(e)) Ft(t, n);
738
738
  }
739
- function Pt(e, t, n) {
740
- let r = wt(I(e), e);
741
- for (let i of r.modules) i.scope === t && jt(e, i.name, "workspace:*", n);
739
+ function Lt(e, t, n) {
740
+ let r = Tt(F(e), e);
741
+ for (let i of r.modules) i.scope === t && Nt(e, i.name, "workspace:*", n);
742
742
  }
743
- function Ft(e) {
744
- Pt("ensureWorkspaceScopeDeps", e, "dependencies");
743
+ function Rt(e) {
744
+ Lt("ensureWorkspaceScopeDeps", e, "dependencies");
745
745
  }
746
- function It(e) {
747
- Pt("ensureWorkspaceScopeDevDeps", e, "devDependencies");
746
+ function zt(e) {
747
+ Lt("ensureWorkspaceScopeDevDeps", e, "devDependencies");
748
748
  }
749
- function Lt(e) {
750
- let t = I("pruneKeysMatching").obj;
749
+ function Bt(e) {
750
+ let t = F("pruneKeysMatching").obj;
751
751
  for (let n of Object.keys(t)) e(n, t[n]) && delete t[n];
752
752
  }
753
- function Rt(e, t) {
754
- let n = pt(e, t);
753
+ function Vt(e, t) {
754
+ let n = mt(e, t);
755
755
  for (let t of Object.keys(e)) delete e[t];
756
756
  for (let t of Object.keys(n)) e[t] = n[t];
757
757
  }
758
- function q(e) {
759
- Rt(I("enforceFieldOrder").obj, e);
758
+ function W(e) {
759
+ Vt(F("enforceFieldOrder").obj, e);
760
760
  }
761
- function zt(e, t) {
761
+ function Ht(e, t) {
762
762
  let n = Object.keys(e).sort(), r = {};
763
763
  for (let t of n) r[t] = e[t];
764
764
  for (let t of Object.keys(e)) delete e[t];
765
- for (let i of n) e[i] = r[i], t && R(e[i]) && zt(e[i], !0);
765
+ for (let i of n) e[i] = r[i], t && L(e[i]) && Ht(e[i], !0);
766
766
  }
767
- function J(e = "", t = {}) {
767
+ function G(e = "", t = {}) {
768
768
  let n = t.recursive ?? !1;
769
769
  if (e === "" && !n) return;
770
- let r = I("enforceAlphabeticalOrder").obj;
770
+ let r = F("enforceAlphabeticalOrder").obj;
771
771
  if (e === "") {
772
- zt(r, !0);
772
+ Ht(r, !0);
773
773
  return;
774
774
  }
775
- let i = lt(r, e);
776
- R(i) && zt(i, n);
775
+ let i = ut(r, e);
776
+ L(i) && Ht(i, n);
777
+ }
778
+ function Ut(e, t) {
779
+ let n = F("transformAt").obj;
780
+ ft(n, e, t(ut(n, e)));
777
781
  }
778
- function Bt() {
779
- let e = L("ensureWorkspaceModulePaths"), t = wt(e, "ensureWorkspaceModulePaths").modules.filter((e) => e.path !== "").map((e) => e.path).sort(), n = e.doc.toJSON()?.packages;
782
+ function Wt() {
783
+ let e = I("ensureWorkspaceModulePaths"), t = Tt(e, "ensureWorkspaceModulePaths").modules.filter((e) => e.path !== "").map((e) => e.path).sort(), n = e.doc.toJSON()?.packages;
780
784
  Array.isArray(n) && n.length === t.length && n.every((e, n) => e === t[n]) || e.doc.setIn(["packages"], t);
781
785
  }
782
- function Vt(e, t) {
786
+ function Gt(e, t) {
783
787
  let n = e.doc.getIn(["catalog", t]);
784
788
  return typeof n == "string" ? n : void 0;
785
789
  }
786
- function Ht(e, t) {
787
- let n = L("ensureCatalogVersion");
788
- Vt(n, e) === void 0 && n.doc.setIn(["catalog", e], t);
790
+ function Kt(e, t) {
791
+ let n = I("ensureCatalogVersion");
792
+ Gt(n, e) === void 0 && n.doc.setIn(["catalog", e], t);
789
793
  }
790
- function Ut(e) {
791
- let t = L("ensureCatalogLatest");
794
+ function qt(e) {
795
+ let t = I("ensureCatalogLatest");
792
796
  if (!t.getLatestVersion) return;
793
797
  let n = t.getLatestVersion(e);
794
- n !== void 0 && Vt(t, e) !== n && t.doc.setIn(["catalog", e], n);
798
+ n !== void 0 && Gt(t, e) !== n && t.doc.setIn(["catalog", e], n);
795
799
  }
796
- function Wt(e, t) {
797
- let n = L("pinCatalogToDependencyOf");
800
+ function Jt(e, t) {
801
+ let n = I("pinCatalogToDependencyOf");
798
802
  if (!n.getDerivedDependencyPin) return;
799
803
  let r = n.getDerivedDependencyPin(e);
800
- r !== void 0 && Vt(n, e) !== r && n.doc.setIn(["catalog", e], r);
804
+ r !== void 0 && Gt(n, e) !== r && n.doc.setIn(["catalog", e], r);
801
805
  }
802
- function Gt(e) {
803
- let t = L("ensureCatalogAbsent");
806
+ function Yt(e) {
807
+ let t = I("ensureCatalogAbsent");
804
808
  t.doc.hasIn(["catalog", e]) && t.doc.deleteIn(["catalog", e]);
805
809
  }
806
- function Kt(e) {
807
- let t = Ct("ensureGitignoreEntries");
808
- for (let n of e) vt(t.lines, n) || t.lines.push(n);
810
+ function Xt(e) {
811
+ let t = wt("ensureGitignoreEntries");
812
+ for (let n of e) yt(t.lines, n) || t.lines.push(n);
809
813
  }
810
814
  //#endregion
811
815
  //#region src/structure/engine/parsers/yaml.ts
812
- function qt(e) {
813
- return le(e);
816
+ function Zt(e) {
817
+ return ue(e);
814
818
  }
815
- function Jt(e) {
819
+ function Qt(e) {
816
820
  return e.toString();
817
821
  }
818
- var Yt = ".structure";
819
- function Xt(e) {
822
+ var $t = ".structure";
823
+ function en(e) {
820
824
  if (!e.exists(".structure")) return { version: 0 };
821
825
  try {
822
- let t = JSON.parse(e.read(Yt));
826
+ let t = JSON.parse(e.read($t));
823
827
  return { version: typeof t?.version == "number" ? t.version : 0 };
824
828
  } catch {
825
829
  return { version: 0 };
826
830
  }
827
831
  }
828
- function Zt(e, t = 0) {
829
- if (e < t) throw new Qt(e, t);
832
+ function tn(e, t = 0) {
833
+ if (e < t) throw new nn(e, t);
830
834
  }
831
- var Qt = class extends Error {
835
+ var nn = class extends Error {
832
836
  constructor(e, t) {
833
837
  super(`Block .structure version is ${e}, below floor ${t}. Bootstrap via the legacy-migration skill, then re-run.`), this.version = e, this.floor = t, this.name = "StructureVersionFloorError";
834
838
  }
835
839
  };
836
- function $t(e, t) {
837
- e.write(Yt, JSON.stringify(t));
840
+ function rn(e, t) {
841
+ e.write($t, JSON.stringify(t));
838
842
  }
839
843
  //#endregion
840
844
  //#region src/structure/engine/runner.ts
841
- var en = class extends Error {
845
+ var an = class extends Error {
842
846
  constructor(e) {
843
847
  super(`Post-run recheck: rule set not idempotent. Failing item: ${e.primitive} '${e.path}' (scope=${e.scope}, action=${e.action}). Engine bug.`), this.failing = e, this.name = "RecheckError";
844
848
  }
845
849
  };
846
- function tn(e, t, n, r) {
850
+ function on(e, t, n, r) {
847
851
  switch (e.kind) {
848
852
  case "text": return e.value;
849
853
  case "file":
@@ -851,47 +855,47 @@ function tn(e, t, n, r) {
851
855
  return n.staticRead(e.path);
852
856
  case "tpl":
853
857
  if (!n) throw Error(`tpl('${e.path}'): no TemplateProvider configured. Pass opts.templates to engine.run(...).`);
854
- return Ae(n.textRead(e.path), typeof e.vars == "function" ? e.vars(r) : e.vars);
858
+ return je(n.textRead(e.path), typeof e.vars == "function" ? e.vars(r) : e.vars);
855
859
  case "generate": {
856
860
  let n = e.fn(r);
857
- if (t.endsWith(".json")) return xt(n, r.isSdkInternal), st(n, { collapse: !t.endsWith("package.json") });
858
- if (t.endsWith(".yaml") || t.endsWith(".yml")) return ue(n);
861
+ if (t.endsWith(".json")) return St(n, r.isSdkInternal), ct(n, { collapse: !t.endsWith("package.json") });
862
+ if (t.endsWith(".yaml") || t.endsWith(".yml")) return de(n);
859
863
  if (typeof n != "string") throw Error(`generate() for '${t}' must return a string for non-JSON/YAML files; got ${typeof n}`);
860
864
  return n;
861
865
  }
862
866
  case "binary": throw Error(`binary('${e.path}') cannot be resolved to a string; it is only valid inside seed()/scaffold(), which copy it verbatim via fs.writeBinary.`);
863
867
  }
864
868
  }
865
- function nn(e, t, n, r, i) {
869
+ function sn(e, t, n, r, i) {
866
870
  if (n.kind === "binary") {
867
871
  if (!r) throw Error(`binary('${n.path}'): no TemplateProvider configured. Pass opts.templates to engine.run(...).`);
868
872
  e.writeBinary(t, r.staticReadBinary(n.path));
869
873
  return;
870
874
  }
871
- e.write(t, tn(n, t, r, i));
875
+ e.write(t, on(n, t, r, i));
872
876
  }
873
- function rn(e, t, n, r, i, a) {
877
+ function cn(e, t, n, r, i, a) {
874
878
  let o = e.split("/").pop() ?? e;
875
879
  if (e.endsWith(".json")) {
876
- let i = tt(t);
880
+ let i = nt(t);
877
881
  if (typeof i != "object" || !i || Array.isArray(i)) throw Error(`managed: parsed value at '${e}' is not a JSON object`);
878
- return Tt(i, n, { triggerContext: r }), st(i, { collapse: o !== "package.json" });
882
+ return Et(i, n, { triggerContext: r }), ct(i, { collapse: o !== "package.json" });
879
883
  }
880
884
  if (e.endsWith(".yaml") || e.endsWith(".yml")) {
881
- let e = qt(t);
882
- return Et(e, n, {
885
+ let e = Zt(t);
886
+ return Dt(e, n, {
883
887
  triggerContext: r,
884
888
  getLatestVersion: i,
885
889
  getDerivedDependencyPin: a
886
- }), Jt(e);
890
+ }), Qt(e);
887
891
  }
888
892
  if (o === ".gitignore" || o.endsWith(".gitignore")) {
889
- let e = mt(t);
890
- return Dt(e, n, { triggerContext: r }), ht(e);
893
+ let e = ht(t);
894
+ return Ot(e, n, { triggerContext: r }), gt(e);
891
895
  }
892
896
  throw Error(`managed('${e}'): unsupported file kind. Only .json, .yaml, .yml, .gitignore are dispatched.`);
893
897
  }
894
- function an(e) {
898
+ function ln(e) {
895
899
  let t = e.list(""), n = /* @__PURE__ */ new Set();
896
900
  for (let e of t) {
897
901
  n.add(e);
@@ -900,37 +904,37 @@ function an(e) {
900
904
  }
901
905
  return n;
902
906
  }
903
- function on(e, t) {
907
+ function un(e, t) {
904
908
  let n = t === "" ? t : t.endsWith("/") ? t.slice(0, -1) : t;
905
909
  return e.has(n);
906
910
  }
907
- function sn(e, t, n) {
911
+ function dn(e, t, n) {
908
912
  return {
909
913
  ctx: t,
910
914
  version: t.version,
911
- pathExists: (t) => on(e, t),
912
- pathMissing: (t) => !on(e, t),
915
+ pathExists: (t) => un(e, t),
916
+ pathMissing: (t) => !un(e, t),
913
917
  filesMatch: (t) => {
914
918
  let r = n ? `${n}/${t}` : t;
915
- for (let t of e) if (ze(r, t)) return !0;
919
+ for (let t of e) if (Be(r, t)) return !0;
916
920
  return !1;
917
921
  }
918
922
  };
919
923
  }
920
- function cn(e, t) {
924
+ function fn(e, t) {
921
925
  for (let n of e.triggers) if (!n(t)) return !1;
922
926
  return !0;
923
927
  }
924
- function ln(e, t) {
928
+ function pn(e, t) {
925
929
  return t ? "init" : e.updateDepsOnly ? "updateDeps" : "default";
926
930
  }
927
- function un(e, t) {
931
+ function mn(e, t) {
928
932
  return e.filter((e) => e.modes.includes(t));
929
933
  }
930
- function dn(e, t, n, r, i, a) {
934
+ function hn(e, t, n, r, i, a) {
931
935
  let o = e.leaf;
932
936
  if (o.kind === "fixed") {
933
- let i = tn(o.content, e.resolvedPath, r, a);
937
+ let i = on(o.content, e.resolvedPath, r, a);
934
938
  return t.exists(e.resolvedPath) ? t.read(e.resolvedPath) === i ? void 0 : (n || t.write(e.resolvedPath, i), {
935
939
  scope: e.scope,
936
940
  path: e.resolvedPath,
@@ -943,13 +947,13 @@ function dn(e, t, n, r, i, a) {
943
947
  action: "create"
944
948
  });
945
949
  }
946
- if (o.kind === "scaffold") return t.exists(e.resolvedPath) ? void 0 : (n || nn(t, e.resolvedPath, o.initial, r, a), {
950
+ if (o.kind === "scaffold") return t.exists(e.resolvedPath) ? void 0 : (n || sn(t, e.resolvedPath, o.initial, r, a), {
947
951
  scope: e.scope,
948
952
  path: e.resolvedPath,
949
953
  primitive: "scaffold",
950
954
  action: "create"
951
955
  });
952
- if (o.kind === "seed") return !i || t.exists(e.resolvedPath) ? void 0 : (n || nn(t, e.resolvedPath, o.initial, r, a), {
956
+ if (o.kind === "seed") return !i || t.exists(e.resolvedPath) ? void 0 : (n || sn(t, e.resolvedPath, o.initial, r, a), {
953
957
  scope: e.scope,
954
958
  path: e.resolvedPath,
955
959
  primitive: "seed",
@@ -972,11 +976,11 @@ function dn(e, t, n, r, i, a) {
972
976
  });
973
977
  }
974
978
  }
975
- function fn(e, t, n, r, i, a, o, s) {
979
+ function gn(e, t, n, r, i, a, o, s) {
976
980
  if (e.leaf.kind !== "managed") return;
977
981
  let c = e.leaf, l = e.resolvedPath, u = t.exists(l), d, f = !1;
978
- u ? d = t.read(l) : (d = tn(c.initial, l, i, s), f = !0);
979
- let p = rn(l, d, c.body, r, a, o);
982
+ u ? d = t.read(l) : (d = on(c.initial, l, i, s), f = !0);
983
+ let p = cn(l, d, c.body, r, a, o);
980
984
  if (f) return n || t.write(l, p), {
981
985
  scope: e.scope,
982
986
  path: l,
@@ -990,40 +994,40 @@ function fn(e, t, n, r, i, a, o, s) {
990
994
  action: "update"
991
995
  };
992
996
  }
993
- function pn(e, t, n, r, i, a, o, s) {
994
- let c = un(e, ln(n, a)), l = [], u = an(t);
997
+ function _n(e, t, n, r, i, a, o, s) {
998
+ let c = mn(e, pn(n, a)), l = [], u = ln(t);
995
999
  for (let e of c) {
996
- if (e.leaf.kind === "managed" || !cn(e, sn(u, n, e.modulePath))) continue;
997
- let o = dn(e, t, r, i, a, n);
1000
+ if (e.leaf.kind === "managed" || !fn(e, dn(u, n, e.modulePath))) continue;
1001
+ let o = hn(e, t, r, i, a, n);
998
1002
  o && l.push(o);
999
1003
  }
1000
- let d = an(t);
1004
+ let d = ln(t);
1001
1005
  for (let e of c) {
1002
1006
  if (e.leaf.kind !== "managed") continue;
1003
- let a = sn(d, n, e.modulePath);
1004
- if (!cn(e, a)) continue;
1005
- let c = fn(e, t, r, a, i, o, s, n);
1007
+ let a = dn(d, n, e.modulePath);
1008
+ if (!fn(e, a)) continue;
1009
+ let c = gn(e, t, r, a, i, o, s, n);
1006
1010
  c && l.push(c);
1007
1011
  }
1008
1012
  return l;
1009
1013
  }
1010
- function mn(e, t, n, r = {}) {
1011
- return He(n, () => {
1012
- let i = Pe(e, n), a = !!r.initMode, o = pn(i, t, n, n.dryRun, r.templates, a, r.registryLookup, r.derivedPinLookup);
1014
+ function vn(e, t, n, r = {}) {
1015
+ return Ue(n, () => {
1016
+ let i = Fe(e, n), a = !!r.initMode, o = _n(i, t, n, n.dryRun, r.templates, a, r.registryLookup, r.derivedPinLookup);
1013
1017
  if (!n.dryRun && !n.updateDepsOnly && !a) {
1014
- $t(t, { version: 2 });
1018
+ rn(t, { version: 2 });
1015
1019
  let i = {
1016
1020
  ...r.rediscover ? r.rediscover(t) : n,
1017
1021
  dryRun: !0
1018
- }, a = pn(Pe(e, i), t, i, !0, r.templates, !1, r.registryLookup, r.derivedPinLookup).filter((e) => e.path !== Yt);
1019
- if (a.length > 0) throw new en(a[0]);
1022
+ }, a = _n(Fe(e, i), t, i, !0, r.templates, !1, r.registryLookup, r.derivedPinLookup).filter((e) => e.path !== $t);
1023
+ if (a.length > 0) throw new an(a[0]);
1020
1024
  }
1021
- return a && !n.dryRun && $t(t, { version: 2 }), { changes: o };
1025
+ return a && !n.dryRun && rn(t, { version: 2 }), { changes: o };
1022
1026
  });
1023
1027
  }
1024
1028
  //#endregion
1025
1029
  //#region src/structure/engine/discovery.ts
1026
- var hn = [
1030
+ var yn = [
1027
1031
  "root",
1028
1032
  "block",
1029
1033
  "model",
@@ -1032,12 +1036,12 @@ var hn = [
1032
1036
  "test",
1033
1037
  "software",
1034
1038
  "kind"
1035
- ], gn = class extends Error {
1039
+ ], bn = class extends Error {
1036
1040
  constructor(e, t) {
1037
1041
  super(e), this.path = t, this.name = "DiscoveryError";
1038
1042
  }
1039
1043
  };
1040
- function _n(e) {
1044
+ function xn(e) {
1041
1045
  let t = /* @__PURE__ */ new Set();
1042
1046
  for (let n of [
1043
1047
  e.dependencies,
@@ -1047,18 +1051,18 @@ function _n(e) {
1047
1051
  ]) if (n) for (let e of Object.keys(n)) t.add(e);
1048
1052
  return t;
1049
1053
  }
1050
- function vn(e) {
1054
+ function Sn(e) {
1051
1055
  return e === "" || e === ".";
1052
1056
  }
1053
- function yn(e) {
1057
+ function Cn(e) {
1054
1058
  let t = e.pkg["block-scope"];
1055
1059
  if (typeof t == "string") {
1056
- if (!hn.includes(t)) throw new gn(`package.json "block-scope" must be one of ${hn.join(", ")}, got '${t}'`, e.path);
1060
+ if (!yn.includes(t)) throw new bn(`package.json "block-scope" must be one of ${yn.join(", ")}, got '${t}'`, e.path);
1057
1061
  return t;
1058
1062
  }
1059
- if (vn(e.path)) return "root";
1063
+ if (Sn(e.path)) return "root";
1060
1064
  if (e.pkg.block !== void 0) return "block";
1061
- let n = _n(e.pkg);
1065
+ let n = xn(e.pkg);
1062
1066
  if (n.has("@platforma-sdk/block-kind")) return "kind";
1063
1067
  if (e.pkg["block-software"] !== void 0) return "software";
1064
1068
  if (n.has("@platforma-sdk/package-builder")) {
@@ -1069,39 +1073,39 @@ function yn(e) {
1069
1073
  if (n.has("@platforma-sdk/model") && e.pkg.main) return "model";
1070
1074
  if (n.has("@platforma-sdk/test")) return "test";
1071
1075
  }
1072
- function bn(e) {
1076
+ function wn(e) {
1073
1077
  let t = [];
1074
1078
  for (let n of e) {
1075
- let e = yn(n);
1076
- if (!e) throw new gn(`Unclassified workspace package at '${n.path}'. Add a top-level "block-scope" string to its package.json.`, n.path);
1079
+ let e = Cn(n);
1080
+ if (!e) throw new bn(`Unclassified workspace package at '${n.path}'. Add a top-level "block-scope" string to its package.json.`, n.path);
1077
1081
  t.push({
1078
1082
  scope: e,
1079
1083
  name: n.pkg.name ?? n.path,
1080
- path: vn(n.path) ? "" : n.path
1084
+ path: Sn(n.path) ? "" : n.path
1081
1085
  });
1082
1086
  }
1083
1087
  return t;
1084
1088
  }
1085
1089
  //#endregion
1086
1090
  //#region src/structure/engine/ctx.ts
1087
- function Y(e, t) {
1091
+ function K(e, t) {
1088
1092
  return e.modules.filter((e) => e.scope === t);
1089
1093
  }
1090
- function xn(e, t) {
1091
- let n = Y(e, t);
1094
+ function Tn(e, t) {
1095
+ let n = K(e, t);
1092
1096
  if (n.length === 0) throw Error(`findModule: expected one '${t}' module, found none`);
1093
1097
  if (n.length > 1) throw Error(`findModule: expected exactly one '${t}' module, found ${n.length}`);
1094
1098
  return n[0];
1095
1099
  }
1096
- function Sn(e, t) {
1097
- return { [xn(e, t).name]: "workspace:*" };
1100
+ function En(e, t) {
1101
+ return { [Tn(e, t).name]: "workspace:*" };
1098
1102
  }
1099
- function X(e, t) {
1103
+ function q(e, t) {
1100
1104
  let n = {};
1101
- for (let r of Y(e, t)) n[r.name] = "workspace:*";
1105
+ for (let r of K(e, t)) n[r.name] = "workspace:*";
1102
1106
  return n;
1103
1107
  }
1104
- function Cn(e) {
1108
+ function Dn(e) {
1105
1109
  let t = e.facadeName, n = [
1106
1110
  {
1107
1111
  scope: "root",
@@ -1145,7 +1149,7 @@ function Cn(e) {
1145
1149
  path: "software"
1146
1150
  }), n;
1147
1151
  }
1148
- function wn(e) {
1152
+ function On(e) {
1149
1153
  return {
1150
1154
  isSdkInternal: e.isSdkInternal ?? !1,
1151
1155
  updateDepsOnly: e.updateDepsOnly ?? !1,
@@ -1157,41 +1161,41 @@ function wn(e) {
1157
1161
  }
1158
1162
  //#endregion
1159
1163
  //#region src/structure/engine/discovery-fs.ts
1160
- var Z = class extends Error {
1164
+ var J = class extends Error {
1161
1165
  constructor(e) {
1162
1166
  super(e), this.name = "StructureCliError";
1163
1167
  }
1164
1168
  };
1165
- function Tn(e, t) {
1169
+ function kn(e, t) {
1166
1170
  return e === "" ? t : `${e}/${t}`;
1167
1171
  }
1168
- function En(e, t) {
1172
+ function An(e, t) {
1169
1173
  try {
1170
1174
  return JSON.parse(e.read(t));
1171
1175
  } catch {
1172
1176
  return;
1173
1177
  }
1174
1178
  }
1175
- function Dn(e) {
1176
- if (e.includes("*")) throw new Z(`pnpm-workspace.yaml 'packages:' entry '${e}' contains a glob. The structurer requires literal package paths — replace the glob with one entry per package directory.`);
1179
+ function jn(e) {
1180
+ if (e.includes("*")) throw new J(`pnpm-workspace.yaml 'packages:' entry '${e}' contains a glob. The structurer requires literal package paths — replace the glob with one entry per package directory.`);
1177
1181
  let t = e.replace(/^\.\//, "").replace(/\/$/, "");
1178
1182
  return t === "." ? "" : t;
1179
1183
  }
1180
- function On(e) {
1184
+ function Mn(e) {
1181
1185
  let t;
1182
1186
  try {
1183
1187
  t = e.read("pnpm-workspace.yaml");
1184
1188
  } catch {
1185
- throw new Z("No pnpm-workspace.yaml found. This directory is empty or unrecognisable as a block — run 'block-tools structure init' instead, or pass --sdk-internal for an in-monorepo block.");
1189
+ throw new J("No pnpm-workspace.yaml found. This directory is empty or unrecognisable as a block — run 'block-tools structure init' instead, or pass --sdk-internal for an in-monorepo block.");
1186
1190
  }
1187
- let n = ce(t) ?? {}, r = Array.isArray(n.packages) ? n.packages : [], i = new Set([""]);
1191
+ let n = le(t) ?? {}, r = Array.isArray(n.packages) ? n.packages : [], i = new Set([""]);
1188
1192
  for (let t of r) {
1189
- let n = Dn(t);
1193
+ let n = jn(t);
1190
1194
  (n === "" || e.exists(n)) && i.add(n);
1191
1195
  }
1192
1196
  let a = [];
1193
1197
  for (let t of i) {
1194
- let n = En(e, Tn(t, "package.json"));
1198
+ let n = An(e, kn(t, "package.json"));
1195
1199
  n && a.push({
1196
1200
  path: t,
1197
1201
  pkg: n
@@ -1199,7 +1203,7 @@ function On(e) {
1199
1203
  }
1200
1204
  return a;
1201
1205
  }
1202
- function kn(e) {
1206
+ function Nn(e) {
1203
1207
  let t = [], n = new Set([
1204
1208
  "node_modules",
1205
1209
  ".turbo",
@@ -1211,7 +1215,7 @@ function kn(e) {
1211
1215
  let o = e.listDir(i);
1212
1216
  for (let s of o) {
1213
1217
  if (!s.isDirectory || n.has(s.name)) continue;
1214
- let o = Tn(i, s.name), c = En(e, Tn(o, "package.json"));
1218
+ let o = kn(i, s.name), c = An(e, kn(o, "package.json"));
1215
1219
  c && t.push({
1216
1220
  path: o,
1217
1221
  pkg: c
@@ -1220,11 +1224,11 @@ function kn(e) {
1220
1224
  }
1221
1225
  return r("", 1), t;
1222
1226
  }
1223
- function An(e) {
1227
+ function Pn(e) {
1224
1228
  let t = e.indexOf("/");
1225
- if (!e.startsWith("@") || t < 0) throw new Z(`Cannot parse block name '${e}': expected '@npm-org/org-scope.short-name'.`);
1229
+ if (!e.startsWith("@") || t < 0) throw new J(`Cannot parse block name '${e}': expected '@npm-org/org-scope.short-name'.`);
1226
1230
  let n = e.slice(0, t), r = e.slice(t + 1), i = r.indexOf(".");
1227
- if (i < 0) throw new Z(`Cannot parse block name '${e}': base name '${r}' has no '.' separating org-scope from short-name.`);
1231
+ if (i < 0) throw new J(`Cannot parse block name '${e}': base name '${r}' has no '.' separating org-scope from short-name.`);
1228
1232
  return {
1229
1233
  facadeName: e,
1230
1234
  baseName: r,
@@ -1233,15 +1237,15 @@ function An(e) {
1233
1237
  shortName: r.slice(i + 1)
1234
1238
  };
1235
1239
  }
1236
- function jn(e) {
1237
- let { fs: t, isSdkInternal: n } = e, r = n ? kn(t) : On(t);
1238
- if (r.length === 0) throw new Z("No workspace packages found. Run 'block-tools structure init' to scaffold a block.");
1239
- let i = bn(r), a = Xt(t);
1240
- Zt(a.version, 0);
1240
+ function Fn(e) {
1241
+ let { fs: t, isSdkInternal: n } = e, r = n ? Nn(t) : Mn(t);
1242
+ if (r.length === 0) throw new J("No workspace packages found. Run 'block-tools structure init' to scaffold a block.");
1243
+ let i = wn(r), a = en(t);
1244
+ tn(a.version, 0);
1241
1245
  let o = i.find((e) => e.scope === "block") ?? i.find((e) => e.scope === "root");
1242
- if (!o) throw new Z("Could not find a 'block' (or root-as-block) package to derive BlockVars from.");
1243
- let s = An(o.name.replace(/\.block$/, ""));
1244
- return wn({
1246
+ if (!o) throw new J("Could not find a 'block' (or root-as-block) package to derive BlockVars from.");
1247
+ let s = Pn(o.name.replace(/\.block$/, ""));
1248
+ return On({
1245
1249
  isSdkInternal: n,
1246
1250
  updateDepsOnly: e.updateDepsOnly ?? !1,
1247
1251
  modules: i,
@@ -1252,7 +1256,7 @@ function jn(e) {
1252
1256
  }
1253
1257
  //#endregion
1254
1258
  //#region src/structure/rules/shared/key-order.ts
1255
- var Q = [
1259
+ var Y = [
1256
1260
  "name",
1257
1261
  "version",
1258
1262
  "private",
@@ -1273,25 +1277,31 @@ var Q = [
1273
1277
  "pnpm",
1274
1278
  "block",
1275
1279
  "block-software"
1276
- ], Mn = {
1280
+ ], X = "1.0.0";
1281
+ function Z() {
1282
+ Ut("version", (e) => typeof e == "string" && e.length > 0 ? e : X);
1283
+ }
1284
+ //#endregion
1285
+ //#region src/structure/rules/root-package-json.ts
1286
+ var In = {
1277
1287
  "build:dev-local": "env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=all PL_BUILD_LOCATION=local turbo run build",
1278
1288
  "build:dev-remote": "env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=all PL_BUILD_LOCATION=remote turbo run build",
1279
1289
  "build:dev-no-software": "env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=none turbo run build",
1280
1290
  "build:dev-binary-existing": "env PL_BUILD_CHANNEL=dev PL_BUILD_USE_PUBLISHED=true turbo run build",
1281
1291
  "build:release": "env PL_BUILD_CHANNEL=release PL_BUILD_VARIANT=all PL_BUILD_LOCATION=remote turbo run build"
1282
- }, Nn = {
1292
+ }, Ln = {
1283
1293
  test: "env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=binary PL_BUILD_LOCATION=local turbo run test --concurrency 1",
1284
1294
  "test:dry-run": "env PL_BUILD_CHANNEL=dev PL_BUILD_VARIANT=binary PL_BUILD_LOCATION=local turbo run test --dry-run=json"
1285
1295
  };
1286
- function Pn() {
1296
+ function Rn() {
1287
1297
  return {
1288
- version: "1.0.0",
1298
+ version: X,
1289
1299
  private: !0,
1290
1300
  scripts: {
1291
1301
  fmt: "turbo run fmt",
1292
1302
  check: "turbo run check",
1293
- ...Mn,
1294
- ...Nn,
1303
+ ...In,
1304
+ ...Ln,
1295
1305
  "mark-stable": "turbo run mark-stable",
1296
1306
  "do-pack": "turbo run do-pack",
1297
1307
  watch: "turbo watch build",
@@ -1314,28 +1324,28 @@ function Pn() {
1314
1324
  packageManager: "pnpm@9.12.0"
1315
1325
  };
1316
1326
  }
1317
- function Fn() {
1318
- z("packageManager", "pnpm@9.12.0"), B("name"), V("fmt", "turbo run fmt"), V("check", "turbo run check");
1319
- for (let [e, t] of Object.entries(Mn)) V(e, t);
1320
- for (let [e, t] of Object.entries(Nn)) V(e, t);
1321
- H("build"), H("build:dev"), V("mark-stable", "turbo run mark-stable"), V("do-pack", "turbo run do-pack"), V("watch", "turbo watch build"), V("changeset", "changeset"), V("version-packages", "changeset version"), V("update-sdk", "block-tools structure refresh --update-deps-only"), H("update"), V("upgrade-sdk", "block-tools structure refresh --update-deps-only && pnpm i && block-tools structure refresh && pnpm i && pnpm fmt"), K({
1327
+ function zn() {
1328
+ R("packageManager", "pnpm@9.12.0"), kt("name"), z("fmt", "turbo run fmt"), z("check", "turbo run check");
1329
+ for (let [e, t] of Object.entries(In)) z(e, t);
1330
+ for (let [e, t] of Object.entries(Ln)) z(e, t);
1331
+ B("build"), B("build:dev"), z("mark-stable", "turbo run mark-stable"), z("do-pack", "turbo run do-pack"), z("watch", "turbo watch build"), z("changeset", "changeset"), z("version-packages", "changeset version"), z("update-sdk", "block-tools structure refresh --update-deps-only"), B("update"), z("upgrade-sdk", "block-tools structure refresh --update-deps-only && pnpm i && block-tools structure refresh && pnpm i && pnpm fmt"), U({
1322
1332
  "@changesets/cli": "catalog:",
1323
1333
  "@milaboratories/ts-builder": "sdk:",
1324
1334
  "@platforma-sdk/block-tools": "sdk:",
1325
1335
  shx: "catalog:",
1326
1336
  turbo: "catalog:"
1327
- }), Nt({
1337
+ }), It({
1328
1338
  oxlint: "*",
1329
1339
  oxfmt: "*"
1330
- }), Lt((e, t) => {
1340
+ }), Bt((e, t) => {
1331
1341
  if (!/^(\/\/|--)/.test(e) || typeof t != "object" || !t) return !1;
1332
1342
  let n = t;
1333
1343
  return n.pnpm !== void 0 || n.overrides !== void 0;
1334
- }), J("dependencies"), J("devDependencies"), J("peerDependencies"), J("optionalDependencies"), q([...Q]);
1344
+ }), G("dependencies"), G("devDependencies"), G("peerDependencies"), G("optionalDependencies"), W([...Y]);
1335
1345
  }
1336
1346
  //#endregion
1337
1347
  //#region src/structure/rules/root-turbo-json.ts
1338
- var In = "https://turbo.build/schema.json", Ln = ["tsconfig.json"], Rn = {
1348
+ var Bn = "https://turbo.build/schema.json", Vn = ["tsconfig.json"], Hn = {
1339
1349
  fmt: { cache: !1 },
1340
1350
  check: {
1341
1351
  dependsOn: ["^build"],
@@ -1384,15 +1394,15 @@ var In = "https://turbo.build/schema.json", Ln = ["tsconfig.json"], Rn = {
1384
1394
  cache: !1
1385
1395
  }
1386
1396
  };
1387
- function zn() {
1397
+ function Un() {
1388
1398
  return {
1389
- $schema: In,
1390
- globalDependencies: Ln,
1391
- tasks: { ...Rn }
1399
+ $schema: Bn,
1400
+ globalDependencies: Vn,
1401
+ tasks: { ...Hn }
1392
1402
  };
1393
1403
  }
1394
- function Bn() {
1395
- z("$schema", In), z("globalDependencies", Ln), kt("tasks", Rn), B("tasks.build:dev"), q([
1404
+ function Wn() {
1405
+ R("$schema", Bn), R("globalDependencies", Vn), jt("tasks", Hn), kt("tasks.build:dev"), W([
1396
1406
  "$schema",
1397
1407
  "globalDependencies",
1398
1408
  "tasks"
@@ -1400,70 +1410,70 @@ function Bn() {
1400
1410
  }
1401
1411
  //#endregion
1402
1412
  //#region src/structure/engine/registry-client.ts
1403
- var Vn = 2, Hn = 500, Un = 3e4;
1404
- function Wn(e) {
1413
+ var Gn = 2, Kn = 500, qn = 3e4;
1414
+ function Jn(e) {
1405
1415
  if (!e) return null;
1406
1416
  let t = Number(e);
1407
1417
  if (Number.isFinite(t) && t > 0) return t * 1e3;
1408
1418
  let n = Date.parse(e);
1409
1419
  return Number.isNaN(n) ? null : Math.max(0, n - Date.now());
1410
1420
  }
1411
- async function Gn(e) {
1421
+ async function Yn(e) {
1412
1422
  for (let t = 1;; t++) {
1413
1423
  let n;
1414
1424
  try {
1415
- n = await fetch(e, { signal: AbortSignal.timeout(Un) });
1425
+ n = await fetch(e, { signal: AbortSignal.timeout(qn) });
1416
1426
  } catch (e) {
1417
- if (t > Vn) throw e;
1418
- await de(Hn * 2 ** (t - 1) * (.8 + .4 * Math.random()));
1427
+ if (t > Gn) throw e;
1428
+ await fe(Kn * 2 ** (t - 1) * (.8 + .4 * Math.random()));
1419
1429
  continue;
1420
1430
  }
1421
1431
  if (n.ok) return n;
1422
- if (!(n.status === 429 || n.status >= 500) || t > Vn) throw Error(`registry returned HTTP ${n.status}`);
1423
- let r = Wn(n.headers.get("retry-after"));
1432
+ if (!(n.status === 429 || n.status >= 500) || t > Gn) throw Error(`registry returned HTTP ${n.status}`);
1433
+ let r = Jn(n.headers.get("retry-after"));
1424
1434
  if (r != null) {
1425
- await de(r);
1435
+ await fe(r);
1426
1436
  continue;
1427
1437
  }
1428
- await de(Hn * 2 ** (t - 1) * (.8 + .4 * Math.random()));
1438
+ await fe(Kn * 2 ** (t - 1) * (.8 + .4 * Math.random()));
1429
1439
  }
1430
1440
  }
1431
- function Kn() {
1441
+ function Xn() {
1432
1442
  return {
1433
1443
  async getLatestVersion(e) {
1434
- let t = (await (await Gn(`https://registry.npmjs.org/-/package/${e}/dist-tags`)).json()).latest;
1444
+ let t = (await (await Yn(`https://registry.npmjs.org/-/package/${e}/dist-tags`)).json()).latest;
1435
1445
  if (!t) throw Error("no 'latest' dist-tag in registry response");
1436
1446
  return t;
1437
1447
  },
1438
1448
  async getDeclaredDependency(e, t, n) {
1439
- let r = await (await Gn(`https://registry.npmjs.org/${e}/${t}`)).json();
1449
+ let r = await (await Yn(`https://registry.npmjs.org/${e}/${t}`)).json();
1440
1450
  return r.dependencies?.[n] ?? r.peerDependencies?.[n];
1441
1451
  }
1442
1452
  };
1443
1453
  }
1444
- async function qn(e, t) {
1454
+ async function Zn(e, t) {
1445
1455
  let n = await Promise.all(t.map(async (t) => [t, await e.getLatestVersion(t)]));
1446
1456
  return new Map(n);
1447
1457
  }
1448
- function Jn(e) {
1458
+ function Qn(e) {
1449
1459
  return (t) => e.get(t);
1450
1460
  }
1451
- var Yn = [/^@platforma-sdk\//, /^@milaboratories\//];
1452
- function Xn(e) {
1453
- return Yn.some((t) => t.test(e));
1461
+ var $n = [/^@platforma-sdk\//, /^@milaboratories\//];
1462
+ function er(e) {
1463
+ return $n.some((t) => t.test(e));
1454
1464
  }
1455
- async function Zn(e, t = Kn()) {
1456
- return e.length === 0 ? () => void 0 : Jn(await qn(t, e));
1465
+ async function tr(e, t = Xn()) {
1466
+ return e.length === 0 ? () => void 0 : Qn(await Zn(t, e));
1457
1467
  }
1458
- function Qn(e) {
1468
+ function nr(e) {
1459
1469
  return /^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(e);
1460
1470
  }
1461
- async function $n(e, t = Kn()) {
1471
+ async function rr(e, t = Xn()) {
1462
1472
  if (e.length === 0) return () => void 0;
1463
1473
  let n = await Promise.all(e.map(async (e) => {
1464
1474
  let n = await t.getDeclaredDependency(e.of, e.ofVersion ?? "latest", e.entry);
1465
1475
  if (n === void 0) throw Error(`derived catalog pin '${e.entry}': package '${e.of}'${e.ofVersion ? `@${e.ofVersion}` : " (latest)"} declares no dependency '${e.entry}'. A derived pin requires the source to declare the dep as an exact version.`);
1466
- if (!Qn(n)) throw Error(`derived catalog pin '${e.entry}': package '${e.of}'${e.ofVersion ? `@${e.ofVersion}` : " (latest)"} declares '${e.entry}: ${n}', which is not an exact version. A derived pin requires an exact ('x.y.z') source dependency so the catalog can pin to it precisely.`);
1476
+ if (!nr(n)) throw Error(`derived catalog pin '${e.entry}': package '${e.of}'${e.ofVersion ? `@${e.ofVersion}` : " (latest)"} declares '${e.entry}: ${n}', which is not an exact version. A derived pin requires an exact ('x.y.z') source dependency so the catalog can pin to it precisely.`);
1467
1477
  return [e.entry, n];
1468
1478
  })), r = new Map(n);
1469
1479
  return (e) => r.get(e);
@@ -1471,7 +1481,7 @@ async function $n(e, t = Kn()) {
1471
1481
  //#endregion
1472
1482
  //#region src/structure/rules/shared/retired-deps.ts
1473
1483
  // @vitejs/plugin-vue — bundled by ts-builder's internal vite config.
1474
- var er = [
1484
+ var ir = [
1475
1485
  "vite",
1476
1486
  "tsup",
1477
1487
  "vue-tsc",
@@ -1479,51 +1489,53 @@ var er = [
1479
1489
  "vite-plugin-dts",
1480
1490
  "@platforma-sdk/eslint-config"
1481
1491
  ];
1482
- function tr() {
1483
- for (let e of er) G(e);
1492
+ function ar() {
1493
+ for (let e of ir) H(e);
1484
1494
  }
1485
1495
  //#endregion
1486
1496
  //#region src/structure/rules/root-pnpm-workspace.ts
1487
- var nr = [
1497
+ var or = [
1488
1498
  "@platforma-sdk/model",
1489
1499
  "@platforma-sdk/ui-vue",
1490
1500
  "@platforma-sdk/workflow-tengo",
1491
1501
  "@platforma-sdk/test",
1502
+ "@platforma-sdk/block-kind",
1492
1503
  "@platforma-sdk/block-tools",
1493
1504
  "@platforma-sdk/block-kind",
1494
1505
  "@platforma-sdk/tengo-builder",
1495
1506
  "@platforma-sdk/package-builder",
1496
1507
  "@milaboratories/ts-builder",
1497
1508
  "@milaboratories/ts-configs"
1498
- ], rr = "0.0.0-init-must-fetch";
1499
- for (let e of nr) if (!Xn(e)) throw Error(`SDK_CATALOG_PACKAGES entry '${e}' matches no catalog bump pattern; its placeholder would never be resolved to npm latest on init. Add it to CATALOG_BUMP_PATTERNS or move it to the infra floor.`);
1500
- var ir = {
1509
+ ], sr = "0.0.0-init-must-fetch";
1510
+ for (let e of or) if (!er(e)) throw Error(`SDK_CATALOG_PACKAGES entry '${e}' matches no catalog bump pattern; its placeholder would never be resolved to npm latest on init. Add it to CATALOG_BUMP_PATTERNS or move it to the infra floor.`);
1511
+ var cr = {
1501
1512
  turbo: "~2.8.11",
1502
1513
  shx: "~0.4.0",
1503
1514
  "@changesets/cli": "~2.29.8",
1504
- vitest: "~4.0.18"
1505
- }, ar = [{
1515
+ vitest: "~4.0.18",
1516
+ typescript: "~5.9.3"
1517
+ }, lr = [{
1506
1518
  entry: "vue",
1507
1519
  of: "@platforma-sdk/ui-vue"
1508
1520
  }, {
1509
1521
  entry: "@milaboratories/helpers",
1510
1522
  of: "@platforma-sdk/model"
1511
- }], or = "@platforma-open/milaboratories.runenv-python-3", sr = "1.8.2";
1512
- function cr(e) {
1523
+ }], ur = "@platforma-open/milaboratories.runenv-python-3", dr = "1.8.2";
1524
+ function fr(e) {
1513
1525
  let t = e.modules.filter((e) => e.path !== "").map((e) => e.path).sort(), n = {};
1514
- for (let e of nr) n[e] = rr;
1515
- return Object.assign(n, ir), e.modules.some((e) => e.scope === "software") && (n[or] = sr), {
1526
+ for (let e of or) n[e] = sr;
1527
+ return Object.assign(n, cr), e.modules.some((e) => e.scope === "software") && (n[ur] = dr), {
1516
1528
  packages: t,
1517
1529
  catalog: n
1518
1530
  };
1519
1531
  }
1520
- function lr() {
1521
- Bt();
1522
- for (let e of er) Gt(e);
1532
+ function pr() {
1533
+ Wt();
1534
+ for (let e of ir) Yt(e);
1523
1535
  }
1524
1536
  //#endregion
1525
1537
  //#region src/structure/rules/root-gitignore.ts
1526
- var ur = [
1538
+ var mr = [
1527
1539
  ".test_auth.json",
1528
1540
  "node_modules/",
1529
1541
  "dist/",
@@ -1538,47 +1550,78 @@ var ur = [
1538
1550
  ".vscode/sftp.json",
1539
1551
  "test-dry-run.json"
1540
1552
  ];
1541
- function dr() {
1542
- Kt(ur);
1553
+ function hr() {
1554
+ Xt(mr);
1555
+ }
1556
+ //#endregion
1557
+ //#region src/structure/rules/root-changeset-config.ts
1558
+ var gr = "---\n---\n\nInitial release.\n", _r = "@changesets/cli/changelog", vr = "restricted", yr = "main", br = "patch", xr = [
1559
+ "$schema",
1560
+ "changelog",
1561
+ "commit",
1562
+ "fixed",
1563
+ "linked",
1564
+ "access",
1565
+ "baseBranch",
1566
+ "updateInternalDependencies",
1567
+ "ignore"
1568
+ ];
1569
+ function Sr() {
1570
+ return {
1571
+ $schema: "https://unpkg.com/@changesets/config@3.1.1/schema.json",
1572
+ changelog: _r,
1573
+ commit: !1,
1574
+ fixed: [],
1575
+ linked: [],
1576
+ access: vr,
1577
+ baseBranch: yr,
1578
+ updateInternalDependencies: br,
1579
+ ignore: []
1580
+ };
1581
+ }
1582
+ function Cr() {
1583
+ R("changelog", _r), R("commit", !1), R("access", vr), R("baseBranch", yr), R("updateInternalDependencies", br), W(xr);
1543
1584
  }
1544
1585
  //#endregion
1545
1586
  //#region src/structure/rules/root.ts
1546
- function fr() {
1547
- w("root", () => {
1548
- T(({ ctx: e }) => !e.isSdkInternal, () => {
1549
- O("turbo.json", N(() => zn()), () => {
1550
- Bn();
1551
- }), D(".vscode/settings.json", j("root/.vscode/settings.json")), O("package.json", N(() => Pn()), () => {
1552
- Fn();
1553
- }), O("pnpm-workspace.yaml", N((e) => cr(e)), () => {
1554
- lr();
1555
- }), O(".gitignore", j("root/.gitignore"), () => {
1556
- dr();
1557
- });
1587
+ function wr() {
1588
+ C("root", () => {
1589
+ w(({ ctx: e }) => !e.isSdkInternal, () => {
1590
+ D("turbo.json", M(() => Un()), () => {
1591
+ Wn();
1592
+ }), E(".vscode/settings.json", A("root/.vscode/settings.json")), D("package.json", M(() => Rn()), () => {
1593
+ zn();
1594
+ }), D("pnpm-workspace.yaml", M((e) => fr(e)), () => {
1595
+ pr();
1596
+ }), D(".gitignore", A("root/.gitignore"), () => {
1597
+ hr();
1598
+ }), D(".changeset/config.json", M(() => Sr()), () => {
1599
+ Cr();
1600
+ }), O(".changeset/scaffold.md", tt(gr));
1558
1601
  });
1559
1602
  });
1560
1603
  }
1561
1604
  //#endregion
1562
1605
  //#region src/structure/rules/root-ci.ts
1563
- function pr(e) {
1606
+ function Tr(e) {
1564
1607
  return e.split(/[-_]+/).filter((e) => e.length > 0).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(" ");
1565
1608
  }
1566
- function mr() {
1567
- w("root", () => {
1568
- T(({ ctx: e }) => !e.isSdkInternal, () => {
1569
- D(".github/workflows/build.yaml", M("workflows/build.tpl.yaml", (e) => {
1609
+ function Er() {
1610
+ C("root", () => {
1611
+ w(({ ctx: e }) => !e.isSdkInternal, () => {
1612
+ E(".github/workflows/build.yaml", j("workflows/build.tpl.yaml", (e) => {
1570
1613
  let t = e.blockVars.shortName;
1571
1614
  return {
1572
- appName: `Block: ${pr(t)}`,
1615
+ appName: `Block: ${Tr(t)}`,
1573
1616
  appNameSlug: `block-${t}`
1574
1617
  };
1575
- })), D(".github/workflows/mark-stable.yaml", M("workflows/mark-stable.tpl.yaml", (e) => ({ appName: `Block: ${pr(e.blockVars.shortName)} - Mark Stable` })));
1618
+ })), E(".github/workflows/mark-stable.yaml", j("workflows/mark-stable.tpl.yaml", (e) => ({ appName: `Block: ${Tr(e.blockVars.shortName)} - Mark Stable` })));
1576
1619
  });
1577
1620
  });
1578
1621
  }
1579
1622
  //#endregion
1580
1623
  //#region src/structure/rules/block-package-json.ts
1581
- var hr = {
1624
+ var Dr = {
1582
1625
  "@platforma-open": {
1583
1626
  s3: "s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1",
1584
1627
  serveUrl: "https://blocks.pl-open.science"
@@ -1587,45 +1630,45 @@ var hr = {
1587
1630
  s3: "s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1",
1588
1631
  serveUrl: "https://block.registry.platforma.bio/releases"
1589
1632
  }
1590
- }, gr = {
1633
+ }, Or = {
1591
1634
  s3: "s3://milab-euce1-prod-pkgs-s3-block-registry/pub/releases/?region=eu-central-1",
1592
1635
  serveUrl: "https://blocks.pl-open.science"
1593
- }, _r = {
1636
+ }, kr = {
1594
1637
  s3: "s3://milab-euce1-prod-pkgs-s3-block-registry/aux/dev/?region=eu-central-1",
1595
1638
  serveUrl: "https://aux-blocks.pl-open.science"
1596
1639
  };
1597
- function vr(e, t) {
1598
- let n = t ? _r : hr[e] ?? gr;
1640
+ function Ar(e, t) {
1641
+ let n = t ? kr : Dr[e] ?? Or;
1599
1642
  return `block-tools publish -r ${n.s3} --registry-serve-url ${n.serveUrl}`;
1600
1643
  }
1601
- function yr(e) {
1644
+ function jr(e) {
1602
1645
  let t = {};
1603
- for (let n of Y(e, "workflow")) t.workflow = `${n.name}/dist/tengo/tpl/main.plj.gz`;
1604
- for (let n of Y(e, "model")) t.model = `${n.name}/dist/model.json`;
1605
- for (let n of Y(e, "ui")) t.ui = `${n.name}/dist`;
1646
+ for (let n of K(e, "workflow")) t.workflow = `${n.name}/dist/tengo/tpl/main.plj.gz`;
1647
+ for (let n of K(e, "model")) t.model = `${n.name}/dist/model.json`;
1648
+ for (let n of K(e, "ui")) t.ui = `${n.name}/dist`;
1606
1649
  return t;
1607
1650
  }
1608
- function br(e, t) {
1651
+ function Mr(e, t) {
1609
1652
  return {
1610
1653
  build: "ts-builder build --target block-facade && block-tools pack",
1611
1654
  check: "ts-builder type-check --target block-facade",
1612
- prepublishOnly: vr(e, t),
1655
+ prepublishOnly: Ar(e, t),
1613
1656
  "do-pack": "shx rm -f package.tgz && pnpm pack && shx mv *.tgz package.tgz"
1614
1657
  };
1615
1658
  }
1616
- var xr = {
1659
+ var Nr = {
1617
1660
  "@milaboratories/ts-builder": "sdk:",
1618
1661
  "@milaboratories/ts-configs": "sdk:",
1619
1662
  "@platforma-sdk/block-tools": "sdk:",
1620
1663
  "@platforma-sdk/model": "sdk:",
1621
1664
  shx: "catalog:",
1622
1665
  typescript: "catalog:"
1623
- }, Sr = { ".": {
1666
+ }, Pr = { ".": {
1624
1667
  sources: "./src/index.ts",
1625
1668
  types: "./dist/index.d.ts",
1626
1669
  default: "./dist/index.js"
1627
1670
  } };
1628
- function Cr(e) {
1671
+ function Fr(e) {
1629
1672
  if (Object.keys(e.components).length === 0) throw Error("block.components is empty — no workflow/model/ui module was discovered");
1630
1673
  let t = e.meta, n = [
1631
1674
  ["block.meta.title", t.title],
@@ -1637,15 +1680,15 @@ function Cr(e) {
1637
1680
  ];
1638
1681
  for (let [e, t] of n) if (typeof t != "string" || t === "") throw Error(`required block field '${e}' is empty`);
1639
1682
  }
1640
- function wr(e) {
1683
+ function Ir(e) {
1641
1684
  let t = e.blockVars, n = {
1642
- ...xr,
1643
- ...X(e, "model"),
1644
- ...X(e, "ui"),
1645
- ...X(e, "workflow"),
1646
- ...X(e, "kind")
1685
+ ...Nr,
1686
+ ...q(e, "model"),
1687
+ ...q(e, "ui"),
1688
+ ...q(e, "workflow"),
1689
+ ...q(e, "kind")
1647
1690
  }, r = {
1648
- components: yr(e),
1691
+ components: jr(e),
1649
1692
  meta: {
1650
1693
  title: t.shortName,
1651
1694
  description: `${t.shortName} block`,
@@ -1657,55 +1700,56 @@ function wr(e) {
1657
1700
  }
1658
1701
  }
1659
1702
  };
1660
- return Cr(r), {
1703
+ return Fr(r), {
1661
1704
  name: `${t.facadeName}.block`,
1662
- version: "1.0.0",
1705
+ version: X,
1663
1706
  type: "module",
1664
1707
  files: ["dist", "block-pack"],
1665
1708
  main: "./dist/index.js",
1666
1709
  module: "./dist/index.js",
1667
1710
  types: "./dist/index.d.ts",
1668
- exports: Sr,
1669
- scripts: br(t.npmOrg, e.isSdkInternal),
1711
+ exports: Pr,
1712
+ scripts: Mr(t.npmOrg, e.isSdkInternal),
1670
1713
  dependencies: {},
1671
1714
  devDependencies: n,
1672
1715
  block: r
1673
1716
  };
1674
1717
  }
1675
- function Tr(e) {
1676
- let t = e.blockVars, n = Y(e, "kind");
1718
+ function Lr(e) {
1719
+ let t = e.blockVars, n = K(e, "kind");
1677
1720
  if (n.length !== 1) throw Error(n.length === 0 ? `block '${t.facadeName}' declares no kind — every block must have a sibling kind/ package` : `block '${t.facadeName}' declares ${n.length} kinds; exactly one is required`);
1678
- z("type", "module"), z("files", ["dist", "block-pack"]), z("main", "./dist/index.js"), z("module", "./dist/index.js"), z("types", "./dist/index.d.ts"), z("exports", Sr);
1679
- let r = br(t.npmOrg, e.isSdkInternal);
1680
- for (let [e, t] of Object.entries(r)) V(e, t);
1681
- H("mark-stable"), It("model"), It("ui"), It("workflow"), It("kind"), W("@milaboratories/ts-builder", "sdk:"), W("@milaboratories/ts-configs", "sdk:"), W("@platforma-sdk/block-tools", "sdk:"), W("@platforma-sdk/model", "sdk:"), W("shx", "catalog:"), W("typescript", "catalog:"), z("block.components", yr(e)), Ot("version", "facade package.json must carry a 'version' (the facade publishes)"), J("dependencies"), J("devDependencies"), J("peerDependencies"), J("optionalDependencies"), q([...Q]);
1721
+ R("type", "module"), R("files", ["dist", "block-pack"]), R("main", "./dist/index.js"), R("module", "./dist/index.js"), R("types", "./dist/index.d.ts"), R("exports", Pr);
1722
+ let r = Mr(t.npmOrg, e.isSdkInternal);
1723
+ for (let [e, t] of Object.entries(r)) z(e, t);
1724
+ B("mark-stable"), zt("model"), zt("ui"), zt("workflow"), zt("kind"), V("@milaboratories/ts-builder", "sdk:"), V("@milaboratories/ts-configs", "sdk:"), V("@platforma-sdk/block-tools", "sdk:"), V("@platforma-sdk/model", "sdk:"), V("shx", "catalog:"), V("typescript", "catalog:"), R("block.components", jr(e)), At("version", "facade package.json must carry a 'version' (the facade publishes)"), G("dependencies"), G("devDependencies"), G("peerDependencies"), G("optionalDependencies"), W([...Y]);
1682
1725
  }
1683
1726
  //#endregion
1684
1727
  //#region src/structure/rules/shared/pascal-case.ts
1685
- function Er(e) {
1728
+ function Rr(e) {
1686
1729
  let t = e.split(/[^A-Za-z0-9]+/).filter((e) => e.length > 0).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join("");
1687
1730
  return /^[0-9]/.test(t) ? `_${t}` : t;
1688
1731
  }
1689
1732
  //#endregion
1690
1733
  //#region src/structure/rules/block.ts
1691
- function Dr() {
1692
- w("block", () => {
1693
- A("index.js"), A("index.d.ts"), D("src/index.ts", M("block/src/index.tpl.ts", (e) => ({
1734
+ function zr() {
1735
+ C("block", () => {
1736
+ k("index.js"), k("index.d.ts"), E("src/index.ts", j("block/src/index.tpl.ts", (e) => ({
1694
1737
  facadeName: e.blockVars.facadeName,
1695
- pascalName: Er(e.blockVars.shortName)
1696
- }))), D("src/AGENTS.ts", j("block/src/AGENTS.ts")), Qe("src/block-extra.ts", j("block/src/block-extra.ts")), Qe("src/agents-extra.ts", j("block/src/agents-extra.ts")), D("tsconfig.json", j("block/tsconfig.json")), k("logos/block-logo.png", $e("block/logos/block-logo.png")), k("logos/organization-logo.png", $e("block/logos/organization-logo.png")), O("package.json", N((e) => wr(e)), (e) => {
1697
- Tr(e);
1738
+ pascalName: Rr(e.blockVars.shortName)
1739
+ }))), E("src/AGENTS.ts", A("block/src/AGENTS.ts")), $e("src/block-extra.ts", A("block/src/block-extra.ts")), $e("src/agents-extra.ts", A("block/src/agents-extra.ts")), E("tsconfig.json", A("block/tsconfig.json")), O("logos/block-logo.png", et("block/logos/block-logo.png")), O("logos/organization-logo.png", et("block/logos/organization-logo.png")), D("package.json", M((e) => Ir(e)), (e) => {
1740
+ Lr(e);
1698
1741
  });
1699
1742
  });
1700
1743
  }
1701
1744
  //#endregion
1702
1745
  //#region src/structure/rules/shared/colocated-tests.ts
1703
- var $ = "src/**/*.test.ts";
1746
+ var Q = "src/**/*.test.ts";
1704
1747
  //#endregion
1705
1748
  //#region src/structure/rules/model-package-json.ts
1706
- function Or(e) {
1749
+ function Br(e) {
1707
1750
  return {
1708
1751
  name: `${e.blockVars.facadeName}.model`,
1752
+ version: X,
1709
1753
  private: !0,
1710
1754
  type: "module",
1711
1755
  main: "dist/index.cjs",
@@ -1727,7 +1771,7 @@ function Or(e) {
1727
1771
  },
1728
1772
  dependencies: {
1729
1773
  "@platforma-sdk/model": "sdk:",
1730
- ...X(e, "kind")
1774
+ ...q(e, "kind")
1731
1775
  },
1732
1776
  devDependencies: {
1733
1777
  "@milaboratories/ts-builder": "sdk:",
@@ -1740,52 +1784,53 @@ function Or(e) {
1740
1784
  }
1741
1785
  };
1742
1786
  }
1743
- function kr() {
1744
- z("private", !0), z("type", "module"), z("main", "dist/index.cjs"), z("module", "dist/index.js"), z("types", "dist/index.d.ts"), z("exports", {
1787
+ function Vr() {
1788
+ Z(), R("private", !0), R("type", "module"), R("main", "dist/index.cjs"), R("module", "dist/index.js"), R("types", "dist/index.d.ts"), R("exports", {
1745
1789
  ".": {
1746
1790
  types: "./dist/index.d.ts",
1747
1791
  sources: "./src/index.ts",
1748
1792
  import: "./dist/index.js"
1749
1793
  },
1750
1794
  "./dist/*": "./dist/*"
1751
- }), V("fmt", "ts-builder format"), V("watch", "ts-builder build --target block-model --watch"), V("build", "ts-builder build --target block-model && block-tools build-model"), V("check", "ts-builder check --target block-model"), U("@platforma-sdk/model", "sdk:"), Ft("kind"), K({
1795
+ }), z("fmt", "ts-builder format"), z("watch", "ts-builder build --target block-model --watch"), z("build", "ts-builder build --target block-model && block-tools build-model"), z("check", "ts-builder check --target block-model"), Pt("@platforma-sdk/model", "sdk:"), Rt("kind"), U({
1752
1796
  "@milaboratories/ts-builder": "sdk:",
1753
1797
  "@milaboratories/ts-configs": "sdk:",
1754
1798
  "@platforma-sdk/block-tools": "sdk:"
1755
- }), Nt({
1799
+ }), It({
1756
1800
  "@types/node": "*",
1757
1801
  typescript: "*"
1758
- }), T(({ ctx: e }) => !e.isSdkInternal, () => T(E($), () => {
1759
- V("test", "vitest run --passWithNoTests"), W("vitest", "catalog:"), W("@types/node", "*");
1760
- }, () => G("vitest"))), tr(), B("tsup"), H("lint"), J("dependencies"), J("devDependencies"), J("peerDependencies"), J("optionalDependencies"), q([...Q]);
1802
+ }), w(({ ctx: e }) => !e.isSdkInternal, () => w(T(Q), () => {
1803
+ z("test", "vitest run --passWithNoTests"), V("vitest", "catalog:"), V("@types/node", "*");
1804
+ }, () => H("vitest"))), ar(), kt("tsup"), B("lint"), G("dependencies"), G("devDependencies"), G("peerDependencies"), G("optionalDependencies"), W([...Y]);
1761
1805
  }
1762
1806
  //#endregion
1763
1807
  //#region src/structure/rules/model.ts
1764
- function Ar() {
1765
- w("model", () => {
1766
- T(E($), () => D("tsconfig.json", j("model/tsconfig.node.json")), () => D("tsconfig.json", j("model/tsconfig.json"))), D(".oxlintrc.json", j("model/.oxlintrc.json")), D(".oxfmtrc.json", j("model/.oxfmtrc.json")), k("src/index.ts", M("model/src/index.tpl.ts", (e) => ({ kindPkg: `${e.blockVars.facadeName}.kind` }))), O("package.json", N((e) => Or(e)), () => {
1767
- kr();
1808
+ function Hr() {
1809
+ C("model", () => {
1810
+ w(T(Q), () => E("tsconfig.json", A("model/tsconfig.node.json")), () => E("tsconfig.json", A("model/tsconfig.json"))), E(".oxlintrc.json", A("model/.oxlintrc.json")), E(".oxfmtrc.json", A("model/.oxfmtrc.json")), O("src/index.ts", j("model/src/index.tpl.ts", (e) => ({ kindPkg: `${e.blockVars.facadeName}.kind` }))), D("package.json", M((e) => Br(e)), () => {
1811
+ Vr();
1768
1812
  });
1769
1813
  });
1770
1814
  }
1771
1815
  //#endregion
1772
1816
  //#region src/structure/rules/kind-package-json.ts
1773
- var jr = { ".": {
1817
+ var Ur = { ".": {
1774
1818
  types: "./dist/index.d.ts",
1775
1819
  sources: "./src/index.ts",
1776
1820
  import: "./dist/index.js",
1777
1821
  require: "./dist/index.cjs",
1778
1822
  default: "./dist/index.js"
1779
1823
  } };
1780
- function Mr(e) {
1824
+ function Wr(e) {
1781
1825
  return {
1782
1826
  name: `${e.blockVars.facadeName}.kind`,
1827
+ version: X,
1783
1828
  private: !0,
1784
1829
  type: "module",
1785
1830
  main: "./dist/index.cjs",
1786
1831
  module: "./dist/index.js",
1787
1832
  types: "./dist/index.d.ts",
1788
- exports: jr,
1833
+ exports: Ur,
1789
1834
  scripts: {
1790
1835
  fmt: "ts-builder format",
1791
1836
  watch: "ts-builder build --target block-kind --watch",
@@ -1804,30 +1849,31 @@ function Mr(e) {
1804
1849
  }
1805
1850
  };
1806
1851
  }
1807
- function Nr() {
1808
- z("private", !0), z("type", "module"), z("main", "./dist/index.cjs"), z("module", "./dist/index.js"), z("types", "./dist/index.d.ts"), z("exports", jr), V("fmt", "ts-builder format"), V("watch", "ts-builder build --target block-kind --watch"), V("build", "ts-builder build --target block-kind && block-tools build-kind-manifest"), V("check", "ts-builder check --target block-kind"), H("lint"), U("@platforma-sdk/block-kind", "sdk:"), K({
1852
+ function Gr() {
1853
+ Z(), R("private", !0), R("type", "module"), R("main", "./dist/index.cjs"), R("module", "./dist/index.js"), R("types", "./dist/index.d.ts"), R("exports", Ur), z("fmt", "ts-builder format"), z("watch", "ts-builder build --target block-kind --watch"), z("build", "ts-builder build --target block-kind && block-tools build-kind-manifest"), z("check", "ts-builder check --target block-kind"), B("lint"), Pt("@platforma-sdk/block-kind", "sdk:"), U({
1809
1854
  "@milaboratories/ts-builder": "sdk:",
1810
1855
  "@milaboratories/ts-configs": "sdk:",
1811
1856
  "@platforma-sdk/block-tools": "sdk:"
1812
- }), Nt({
1857
+ }), It({
1813
1858
  "@types/node": "*",
1814
1859
  typescript: "*"
1815
- }), J("dependencies"), J("devDependencies"), J("peerDependencies"), J("optionalDependencies"), q([...Q]);
1860
+ }), G("dependencies"), G("devDependencies"), G("peerDependencies"), G("optionalDependencies"), W([...Y]);
1816
1861
  }
1817
1862
  //#endregion
1818
1863
  //#region src/structure/rules/kind.ts
1819
- function Pr() {
1820
- w("kind", () => {
1821
- D("tsconfig.json", j("kind/tsconfig.json")), D(".oxlintrc.json", j("kind/.oxlintrc.json")), D(".oxfmtrc.json", j("kind/.oxfmtrc.json")), k("src/index.ts", j("kind/src/index.ts")), O("package.json", N((e) => Mr(e)), () => {
1822
- Nr();
1864
+ function Kr() {
1865
+ C("kind", () => {
1866
+ E("tsconfig.json", A("kind/tsconfig.json")), E(".oxlintrc.json", A("kind/.oxlintrc.json")), E(".oxfmtrc.json", A("kind/.oxfmtrc.json")), O("src/index.ts", A("kind/src/index.ts")), D("package.json", M((e) => Wr(e)), () => {
1867
+ Gr();
1823
1868
  });
1824
1869
  });
1825
1870
  }
1826
1871
  //#endregion
1827
1872
  //#region src/structure/rules/ui-package-json.ts
1828
- function Fr(e) {
1873
+ function qr(e) {
1829
1874
  return {
1830
1875
  name: `${e.blockVars.facadeName}.ui`,
1876
+ version: X,
1831
1877
  private: !0,
1832
1878
  type: "module",
1833
1879
  scripts: {
@@ -1840,7 +1886,7 @@ function Fr(e) {
1840
1886
  dependencies: {
1841
1887
  "@platforma-sdk/ui-vue": "sdk:",
1842
1888
  vue: "catalog:",
1843
- ...Sn(e, "model")
1889
+ ...En(e, "model")
1844
1890
  },
1845
1891
  devDependencies: {
1846
1892
  "@milaboratories/ts-builder": "sdk:",
@@ -1852,31 +1898,32 @@ function Fr(e) {
1852
1898
  }
1853
1899
  };
1854
1900
  }
1855
- function Ir() {
1856
- z("private", !0), z("type", "module"), V("fmt", "ts-builder format"), V("dev", "ts-builder serve --target block-ui"), V("watch", "ts-builder build --target block-ui --watch"), V("build", "ts-builder build --target block-ui"), V("check", "ts-builder check --target block-ui"), U("@platforma-sdk/ui-vue", "sdk:"), U("vue", "catalog:"), Ft("model"), K({
1901
+ function Jr() {
1902
+ Z(), R("private", !0), R("type", "module"), z("fmt", "ts-builder format"), z("dev", "ts-builder serve --target block-ui"), z("watch", "ts-builder build --target block-ui --watch"), z("build", "ts-builder build --target block-ui"), z("check", "ts-builder check --target block-ui"), Pt("@platforma-sdk/ui-vue", "sdk:"), Pt("vue", "catalog:"), Rt("model"), U({
1857
1903
  "@milaboratories/ts-builder": "sdk:",
1858
1904
  "@milaboratories/ts-configs": "sdk:"
1859
- }), tr(), H("preview"), H("lint"), Nt({
1905
+ }), ar(), B("preview"), B("lint"), It({
1860
1906
  "@types/node": "*",
1861
1907
  typescript: "*"
1862
- }), T(({ ctx: e }) => !e.isSdkInternal, () => T(E($), () => {
1863
- V("test", "vitest run --passWithNoTests"), W("vitest", "catalog:"), W("@types/node", "*");
1864
- }, () => G("vitest"))), J("dependencies"), J("devDependencies"), J("peerDependencies"), J("optionalDependencies"), q([...Q]);
1908
+ }), w(({ ctx: e }) => !e.isSdkInternal, () => w(T(Q), () => {
1909
+ z("test", "vitest run --passWithNoTests"), V("vitest", "catalog:"), V("@types/node", "*");
1910
+ }, () => H("vitest"))), G("dependencies"), G("devDependencies"), G("peerDependencies"), G("optionalDependencies"), W([...Y]);
1865
1911
  }
1866
1912
  //#endregion
1867
1913
  //#region src/structure/rules/ui.ts
1868
- function Lr() {
1869
- w("ui", () => {
1870
- T(E($), () => D("tsconfig.json", j("ui/tsconfig.node.json")), () => D("tsconfig.json", j("ui/tsconfig.json"))), D(".oxlintrc.json", j("ui/.oxlintrc.json")), D(".oxfmtrc.json", j("ui/.oxfmtrc.json")), Qe("index.html", j("ui/index.html")), k("src/main.ts", j("ui/src/main.ts")), k("src/app.ts", M("ui/src/app.tpl.ts", (e) => ({ modelPkg: `${e.blockVars.facadeName}.model` }))), k("src/MainPage.vue", M("ui/src/MainPage.tpl.vue", (e) => ({ shortName: e.blockVars.shortName }))), O("package.json", N((e) => Fr(e)), () => {
1871
- Ir();
1914
+ function Yr() {
1915
+ C("ui", () => {
1916
+ w(T(Q), () => E("tsconfig.json", A("ui/tsconfig.node.json")), () => E("tsconfig.json", A("ui/tsconfig.json"))), E(".oxlintrc.json", A("ui/.oxlintrc.json")), E(".oxfmtrc.json", A("ui/.oxfmtrc.json")), $e("index.html", A("ui/index.html")), O("src/main.ts", A("ui/src/main.ts")), O("src/app.ts", j("ui/src/app.tpl.ts", (e) => ({ modelPkg: `${e.blockVars.facadeName}.model` }))), O("src/MainPage.vue", j("ui/src/MainPage.tpl.vue", (e) => ({ shortName: e.blockVars.shortName }))), D("package.json", M((e) => qr(e)), () => {
1917
+ Jr();
1872
1918
  });
1873
1919
  });
1874
1920
  }
1875
1921
  //#endregion
1876
1922
  //#region src/structure/rules/workflow-package-json.ts
1877
- function Rr(e) {
1923
+ function Xr(e) {
1878
1924
  return {
1879
1925
  name: `${e.blockVars.facadeName}.workflow`,
1926
+ version: X,
1880
1927
  private: !0,
1881
1928
  type: "module",
1882
1929
  scripts: {
@@ -1886,7 +1933,7 @@ function Rr(e) {
1886
1933
  },
1887
1934
  dependencies: {
1888
1935
  "@platforma-sdk/workflow-tengo": "sdk:",
1889
- ...X(e, "software")
1936
+ ...q(e, "software")
1890
1937
  },
1891
1938
  devDependencies: {
1892
1939
  "@platforma-sdk/tengo-builder": "sdk:",
@@ -1895,33 +1942,34 @@ function Rr(e) {
1895
1942
  }
1896
1943
  };
1897
1944
  }
1898
- function zr() {
1899
- z("private", !0), z("type", "module"), V("build", "shx rm -rf dist && pl-tengo build"), V("check", "pl-tengo check"), V("format", "/usr/bin/env emacs --script ./format.el || echo 'No emacs.'"), T(({ ctx: e }) => !e.isSdkInternal, () => T(E($), () => {
1900
- V("test", "vitest run --passWithNoTests"), K({ vitest: "catalog:" });
1901
- }, () => G("vitest"))), U("@platforma-sdk/workflow-tengo", "sdk:"), Ft("software"), K({
1945
+ function Zr() {
1946
+ Z(), R("private", !0), R("type", "module"), z("build", "shx rm -rf dist && pl-tengo build"), z("check", "pl-tengo check"), z("format", "/usr/bin/env emacs --script ./format.el || echo 'No emacs.'"), w(({ ctx: e }) => !e.isSdkInternal, () => w(T(Q), () => {
1947
+ z("test", "vitest run --passWithNoTests"), U({ vitest: "catalog:" });
1948
+ }, () => H("vitest"))), Pt("@platforma-sdk/workflow-tengo", "sdk:"), Rt("software"), U({
1902
1949
  "@platforma-sdk/tengo-builder": "sdk:",
1903
1950
  "@platforma-sdk/test": "sdk:",
1904
1951
  shx: "catalog:"
1905
- }), tr(), J("dependencies"), J("devDependencies"), J("peerDependencies"), J("optionalDependencies"), q([...Q]);
1952
+ }), ar(), G("dependencies"), G("devDependencies"), G("peerDependencies"), G("optionalDependencies"), W([...Y]);
1906
1953
  }
1907
1954
  //#endregion
1908
1955
  //#region src/structure/rules/workflow.ts
1909
- function Br() {
1910
- w("workflow", () => {
1911
- D("format.el", j("workflow/format.el")), T(({ ctx: e }) => !e.isSdkInternal, () => T(E($), () => {
1912
- D("tsconfig.json", j("workflow/tsconfig.json")), Qe("vitest.config.mts", j("workflow/vitest.config.mts"));
1956
+ function Qr() {
1957
+ C("workflow", () => {
1958
+ E("format.el", A("workflow/format.el")), w(({ ctx: e }) => !e.isSdkInternal, () => w(T(Q), () => {
1959
+ E("tsconfig.json", A("workflow/tsconfig.json")), $e("vitest.config.mts", A("workflow/vitest.config.mts"));
1913
1960
  }, () => {
1914
- A("tsconfig.json"), A("vitest.config.mts");
1915
- })), A("index.js"), A("index.d.ts"), k("src/main.tpl.tengo", M("workflow/src/main.tpl.tengo", (e) => ({ shortName: e.blockVars.shortName }))), O("package.json", N((e) => Rr(e)), () => {
1916
- zr();
1961
+ k("tsconfig.json"), k("vitest.config.mts");
1962
+ })), k("index.js"), k("index.d.ts"), O("src/main.tpl.tengo", j("workflow/src/main.tpl.tengo", (e) => ({ shortName: e.blockVars.shortName }))), D("package.json", M((e) => Xr(e)), () => {
1963
+ Zr();
1917
1964
  });
1918
1965
  });
1919
1966
  }
1920
1967
  //#endregion
1921
1968
  //#region src/structure/rules/test-package-json.ts
1922
- function Vr(e) {
1969
+ function $r(e) {
1923
1970
  return {
1924
1971
  name: `${e.blockVars.facadeName}.test`,
1972
+ version: X,
1925
1973
  private: !0,
1926
1974
  type: "module",
1927
1975
  scripts: {
@@ -1938,27 +1986,27 @@ function Vr(e) {
1938
1986
  }
1939
1987
  };
1940
1988
  }
1941
- function Hr() {
1942
- z("private", !0), z("type", "module"), V("fmt", "ts-builder format"), V("check", "ts-builder check --target block-test"), V("test", "vitest run --passWithNoTests"), H("lint"), K({
1989
+ function ei() {
1990
+ Z(), R("private", !0), R("type", "module"), z("fmt", "ts-builder format"), z("check", "ts-builder check --target block-test"), z("test", "vitest run --passWithNoTests"), B("lint"), U({
1943
1991
  "@platforma-sdk/test": "sdk:",
1944
1992
  "@milaboratories/ts-builder": "sdk:",
1945
1993
  "@milaboratories/ts-configs": "sdk:",
1946
1994
  vitest: "catalog:"
1947
- }), Nt({ typescript: "*" }), G("@types/node"), tr(), J("dependencies"), J("devDependencies"), J("peerDependencies"), J("optionalDependencies"), q([...Q]);
1995
+ }), It({ typescript: "*" }), H("@types/node"), ar(), G("dependencies"), G("devDependencies"), G("peerDependencies"), G("optionalDependencies"), W([...Y]);
1948
1996
  }
1949
1997
  //#endregion
1950
1998
  //#region src/structure/rules/test.ts
1951
- function Ur() {
1952
- w("test", () => {
1953
- D("tsconfig.json", j("test/tsconfig.json")), D(".oxlintrc.json", j("test/.oxlintrc.json")), D(".oxfmtrc.json", j("test/.oxfmtrc.json")), Qe("vitest.config.mts", j("test/vitest.config.mts")), k("src/demo.test.ts", et("import { expect, test } from \"vitest\";\n\ntest(\"scaffolded block sanity check\", () => {\n expect(true).toBe(true);\n});\n")), O("package.json", N((e) => Vr(e)), () => {
1954
- Hr();
1999
+ function ti() {
2000
+ C("test", () => {
2001
+ E("tsconfig.json", A("test/tsconfig.json")), E(".oxlintrc.json", A("test/.oxlintrc.json")), E(".oxfmtrc.json", A("test/.oxfmtrc.json")), $e("vitest.config.mts", A("test/vitest.config.mts")), O("src/demo.test.ts", tt("import { expect, test } from \"vitest\";\n\ntest(\"scaffolded block sanity check\", () => {\n expect(true).toBe(true);\n});\n")), D("package.json", M((e) => $r(e)), () => {
2002
+ ei();
1955
2003
  });
1956
2004
  });
1957
2005
  }
1958
2006
  //#endregion
1959
2007
  //#region src/structure/rules/software-package-json.ts
1960
- var Wr = "block-tools software build", Gr = "shx rm -f *.tgz && block-tools software build && pnpm pack && shx mv platforma-open*.tgz package.tgz";
1961
- function Kr() {
2008
+ var ni = "block-tools software build", ri = "shx rm -f *.tgz && block-tools software build && pnpm pack && shx mv platforma-open*.tgz package.tgz";
2009
+ function ii() {
1962
2010
  return { entrypoints: { main: { binary: {
1963
2011
  artifact: {
1964
2012
  type: "python",
@@ -1973,65 +2021,66 @@ function Kr() {
1973
2021
  cmd: ["python", "{pkg}/main.py"]
1974
2022
  } } } };
1975
2023
  }
1976
- function qr(e) {
2024
+ function ai(e) {
1977
2025
  return {
1978
2026
  name: `${e.blockVars.facadeName}.software`,
2027
+ version: X,
1979
2028
  type: "module",
1980
2029
  description: "Block Software",
1981
2030
  files: ["./dist/**/*"],
1982
2031
  scripts: {
1983
- build: Wr,
1984
- "do-pack": Gr,
2032
+ build: ni,
2033
+ "do-pack": ri,
1985
2034
  changeset: "changeset",
1986
2035
  "version-packages": "changeset version"
1987
2036
  },
1988
- "block-software": Kr(),
2037
+ "block-software": ii(),
1989
2038
  devDependencies: {
1990
2039
  "@platforma-open/milaboratories.runenv-python-3": "catalog:",
1991
2040
  "@platforma-sdk/block-tools": "sdk:"
1992
2041
  }
1993
2042
  };
1994
2043
  }
1995
- function Jr() {
1996
- B("private"), z("type", "module"), z("files", ["./dist/**/*"]), V("build", Wr), V("do-pack", Gr), H("prepublishOnly"), V("changeset", "changeset"), V("version-packages", "changeset version"), W("@platforma-open/milaboratories.runenv-python-3", "catalog:"), W("@platforma-sdk/block-tools", "sdk:"), G("@platforma-sdk/package-builder"), J("dependencies"), J("devDependencies"), J("peerDependencies"), J("optionalDependencies"), q([...Q]);
2044
+ function oi() {
2045
+ kt("private"), Z(), R("type", "module"), R("files", ["./dist/**/*"]), z("build", ni), z("do-pack", ri), B("prepublishOnly"), z("changeset", "changeset"), z("version-packages", "changeset version"), V("@platforma-open/milaboratories.runenv-python-3", "catalog:"), V("@platforma-sdk/block-tools", "sdk:"), H("@platforma-sdk/package-builder"), G("dependencies"), G("devDependencies"), G("peerDependencies"), G("optionalDependencies"), W([...Y]);
1997
2046
  }
1998
2047
  //#endregion
1999
2048
  //#region src/structure/rules/software.ts
2000
- var Yr = "import sys\n\nprint(\"Hello from Python, \" + sys.argv[1] + \"!\")\n", Xr = "# No dependencies specified for this script\n";
2001
- function Zr() {
2002
- w("software", () => {
2003
- k("src/main.py", et(Yr)), k("src/requirements.txt", et(Xr)), O("package.json", N((e) => qr(e)), () => {
2004
- Jr();
2049
+ var si = "import sys\n\nprint(\"Hello from Python, \" + sys.argv[1] + \"!\")\n", ci = "# No dependencies specified for this script\n";
2050
+ function li() {
2051
+ C("software", () => {
2052
+ O("src/main.py", tt(si)), O("src/requirements.txt", tt(ci)), D("package.json", M((e) => ai(e)), () => {
2053
+ oi();
2005
2054
  });
2006
2055
  });
2007
2056
  }
2008
- function Qr() {
2009
- w("model", () => {
2010
- A("eslint.config.mjs"), A("vite.config.mts");
2011
- }), w("ui", () => {
2012
- A("eslint.config.mjs"), A("vite.config.ts"), A("tsconfig.app.json"), A("tsconfig.node.json");
2013
- }), w("test", () => {
2014
- A("eslint.config.mjs");
2015
- }), w("root", () => {
2016
- A(".prettierrc"), O("package.json", N(() => Pn()), () => {
2017
- H("pretty"), G("@platforma-sdk/blocks-deps-updater");
2057
+ function ui() {
2058
+ C("model", () => {
2059
+ k("eslint.config.mjs"), k("vite.config.mts");
2060
+ }), C("ui", () => {
2061
+ k("eslint.config.mjs"), k("vite.config.ts"), k("tsconfig.app.json"), k("tsconfig.node.json");
2062
+ }), C("test", () => {
2063
+ k("eslint.config.mjs");
2064
+ }), C("root", () => {
2065
+ k(".prettierrc"), D("package.json", M(() => Rn()), () => {
2066
+ B("pretty"), H("@platforma-sdk/blocks-deps-updater");
2018
2067
  });
2019
2068
  });
2020
2069
  }
2021
2070
  //#endregion
2022
2071
  //#region src/structure/rules/root-catalog-bump.ts
2023
- function $r() {
2024
- Ze(() => {
2025
- w("root", () => {
2026
- T(({ ctx: e }) => !e.isSdkInternal, () => {
2027
- O("pnpm-workspace.yaml", N((e) => cr(e)), (e) => {
2028
- for (let e of nr) Ut(e);
2029
- for (let e of ar) Wt(e.entry, {
2072
+ function di() {
2073
+ Qe(() => {
2074
+ C("root", () => {
2075
+ w(({ ctx: e }) => !e.isSdkInternal, () => {
2076
+ D("pnpm-workspace.yaml", M((e) => fr(e)), (e) => {
2077
+ for (let e of or) qt(e);
2078
+ for (let e of lr) Jt(e.entry, {
2030
2079
  of: e.of,
2031
2080
  ofVersion: e.ofVersion
2032
2081
  });
2033
- for (let [e, t] of Object.entries(ir)) Ht(e, t);
2034
- e.modules.some((e) => e.scope === "software") && Ht(or, sr);
2082
+ for (let [e, t] of Object.entries(cr)) Kt(e, t);
2083
+ e.modules.some((e) => e.scope === "software") && Kt(ur, dr);
2035
2084
  });
2036
2085
  });
2037
2086
  });
@@ -2039,25 +2088,25 @@ function $r() {
2039
2088
  }
2040
2089
  //#endregion
2041
2090
  //#region src/structure/structure-definition.ts
2042
- var ei = We(() => {
2043
- fr(), mr(), Dr(), Ar(), Pr(), Lr(), Br(), Ur(), Zr(), Qr(), $r();
2091
+ var fi = Ge(() => {
2092
+ wr(), Er(), zr(), Hr(), Kr(), Yr(), Qr(), ti(), li(), ui(), di();
2044
2093
  });
2045
2094
  //#endregion
2046
2095
  //#region src/structure/cli/run-structure.ts
2047
- async function ti() {
2048
- return Zn(nr.filter(Xn));
2096
+ async function pi() {
2097
+ return tr(or.filter(er));
2049
2098
  }
2050
- async function ni(e) {
2051
- let t = _.resolve(e.blockPath), n = e.mode === "check", r = new Oe(t), i = new ke(e.templatesRoot), a = mn(ei, r, jn({
2099
+ async function mi(e) {
2100
+ let t = g.resolve(e.blockPath), n = e.mode === "check", r = new ke(t), i = new Ae(e.templatesRoot), a = vn(fi, r, Fn({
2052
2101
  fs: r,
2053
2102
  isSdkInternal: e.isSdkInternal,
2054
2103
  updateDepsOnly: e.updateDepsOnly,
2055
2104
  dryRun: n
2056
2105
  }), {
2057
2106
  templates: i,
2058
- registryLookup: e.updateDepsOnly ? await ti() : void 0,
2059
- derivedPinLookup: e.updateDepsOnly ? await $n(ar) : void 0,
2060
- rediscover: () => jn({
2107
+ registryLookup: e.updateDepsOnly ? await pi() : void 0,
2108
+ derivedPinLookup: e.updateDepsOnly ? await rr(lr) : void 0,
2109
+ rediscover: () => Fn({
2061
2110
  fs: r,
2062
2111
  isSdkInternal: e.isSdkInternal,
2063
2112
  updateDepsOnly: !1,
@@ -2069,16 +2118,16 @@ async function ni(e) {
2069
2118
  changes: a.changes
2070
2119
  };
2071
2120
  }
2072
- function ri(e, t) {
2121
+ function hi(e, t) {
2073
2122
  if (t.length === 0) return ` ${e}: up to date (0 changes)`;
2074
2123
  let n = t.map((e) => ` ${e.action.padEnd(6)} ${e.primitive.padEnd(8)} ${e.path} [${e.scope}]`);
2075
2124
  return ` ${e}: ${t.length} change(s)\n${n.join("\n")}`;
2076
2125
  }
2077
2126
  //#endregion
2078
2127
  //#region src/cmd/structure/refresh.ts
2079
- async function ii(e) {
2128
+ async function gi(e) {
2080
2129
  for (let t of e.paths) {
2081
- let n = await ni({
2130
+ let n = await mi({
2082
2131
  blockPath: t,
2083
2132
  isSdkInternal: e.isSdkInternal,
2084
2133
  updateDepsOnly: e.updateDepsOnly,
@@ -2086,43 +2135,43 @@ async function ii(e) {
2086
2135
  templatesRoot: e.templatesRoot,
2087
2136
  log: (t) => e.logger.info(t)
2088
2137
  });
2089
- e.logger.info(ri(t, n.changes));
2138
+ e.logger.info(hi(t, n.changes));
2090
2139
  }
2091
2140
  }
2092
- function ai(e) {
2093
- let t = new h("refresh").description("Bring block(s) up to date with the canonical structure. Applies rules, writes files, bumps .structure version. Default mode is offline; --update-deps-only fires only catalog-bump rules (network).");
2141
+ function _i(e) {
2142
+ let t = new m("refresh").description("Bring block(s) up to date with the canonical structure. Applies rules, writes files, bumps .structure version. Default mode is offline; --update-deps-only fires only catalog-bump rules (network).");
2094
2143
  return t.argument("[paths...]", "block path(s); defaults to the current directory"), t.option("--sdk-internal", "block(s) live inside the SDK monorepo; skip root-scope rules"), t.option("--update-deps-only", "fire ONLY catalog-bump rules (npm network). Follow with `pnpm install` then a plain refresh."), t.action(async (t, n) => {
2095
- let r = t.length > 0 ? t : ["."], i = _.join(e, "src", "structure", "templates");
2096
- await ii({
2144
+ let r = t.length > 0 ? t : ["."], i = g.join(e, "src", "structure", "templates");
2145
+ await gi({
2097
2146
  paths: r,
2098
2147
  isSdkInternal: !!n.sdkInternal,
2099
2148
  updateDepsOnly: !!n.updateDepsOnly,
2100
2149
  templatesRoot: i,
2101
- logger: new x()
2150
+ logger: new b()
2102
2151
  });
2103
2152
  }), t;
2104
2153
  }
2105
2154
  //#endregion
2106
2155
  //#region src/cmd/update-deps.ts
2107
- function oi(e) {
2108
- let t = new h("update-deps").description("[DEPRECATED] Use `block-tools structure refresh --update-deps-only`. This alias delegates to it.");
2156
+ function vi(e) {
2157
+ let t = new m("update-deps").description("[DEPRECATED] Use `block-tools structure refresh --update-deps-only`. This alias delegates to it.");
2109
2158
  return t.action(async () => {
2110
- let t = new x();
2111
- t.warn("`block-tools update-deps` is deprecated and will be removed in a future release. Use `block-tools structure refresh --update-deps-only` instead. Delegating now."), await ii({
2159
+ let t = new b();
2160
+ t.warn("`block-tools update-deps` is deprecated and will be removed in a future release. Use `block-tools structure refresh --update-deps-only` instead. Delegating now."), await gi({
2112
2161
  paths: ["."],
2113
2162
  isSdkInternal: !1,
2114
2163
  updateDepsOnly: !0,
2115
- templatesRoot: _.join(e, "src", "structure", "templates"),
2164
+ templatesRoot: g.join(e, "src", "structure", "templates"),
2116
2165
  logger: t
2117
2166
  });
2118
2167
  }), t;
2119
2168
  }
2120
2169
  //#endregion
2121
2170
  //#region src/cmd/list-overview-snapshots.ts
2122
- function si() {
2123
- let e = new h("list-overview-snapshots").description("List all available global overview snapshots in the registry");
2124
- return e.addOption(new g("-r, --registry <address>", "full address of the registry").env("PL_REGISTRY").makeOptionMandatory()), e.option("--json", "output in JSON format", !1), e.action(async (e) => {
2125
- let t = new x(), n = await new m(l(e.registry), t).listGlobalOverviewSnapshots();
2171
+ function yi() {
2172
+ let e = new m("list-overview-snapshots").description("List all available global overview snapshots in the registry");
2173
+ return e.addOption(new h("-r, --registry <address>", "full address of the registry").env("PL_REGISTRY").makeOptionMandatory()), e.option("--json", "output in JSON format", !1), e.action(async (e) => {
2174
+ let t = new b(), n = await new ee(l(e.registry), t).listGlobalOverviewSnapshots();
2126
2175
  if (e.json) t.info(JSON.stringify(n, null, 2));
2127
2176
  else if (n.length === 0) t.info("No snapshots found.");
2128
2177
  else {
@@ -2133,10 +2182,10 @@ function si() {
2133
2182
  }
2134
2183
  //#endregion
2135
2184
  //#region src/cmd/restore-overview-from-snapshot.ts
2136
- function ci() {
2137
- let e = new h("restore-overview-from-snapshot").description("Restore global overview from a snapshot");
2138
- return e.addOption(new g("-r, --registry <address>", "full address of the registry").env("PL_REGISTRY").makeOptionMandatory()), e.requiredOption("-s, --snapshot <timestamp>", "snapshot timestamp ID to restore from"), e.option("--skip-confirmation", "skip confirmation prompt (use with caution)", !1), e.action(async (e) => {
2139
- let t = new x(), n = new m(l(e.registry), t), r = await n.listGlobalOverviewSnapshots();
2185
+ function bi() {
2186
+ let e = new m("restore-overview-from-snapshot").description("Restore global overview from a snapshot");
2187
+ return e.addOption(new h("-r, --registry <address>", "full address of the registry").env("PL_REGISTRY").makeOptionMandatory()), e.requiredOption("-s, --snapshot <timestamp>", "snapshot timestamp ID to restore from"), e.option("--skip-confirmation", "skip confirmation prompt (use with caution)", !1), e.action(async (e) => {
2188
+ let t = new b(), n = new ee(l(e.registry), t), r = await n.listGlobalOverviewSnapshots();
2140
2189
  if (!r.find((t) => t.timestamp === e.snapshot)) throw Error(`Snapshot '${e.snapshot}' not found. Available snapshots:\n${r.map((e) => ` - ${e.timestamp}`).join("\n") || " (none)"}`);
2141
2190
  if (!e.skipConfirmation) {
2142
2191
  let n = (await import("node:readline")).createInterface({
@@ -2159,7 +2208,7 @@ function ci() {
2159
2208
  }
2160
2209
  //#endregion
2161
2210
  //#region src/registry_v1/flags.ts
2162
- function li(e) {
2211
+ function xi(e) {
2163
2212
  let t = e.match(/(?<destName>[^/\\]+)=(?<src>.*)/);
2164
2213
  if (t) {
2165
2214
  let { src: e, destName: n } = t.groups;
@@ -2169,33 +2218,33 @@ function li(e) {
2169
2218
  };
2170
2219
  } else return {
2171
2220
  src: e,
2172
- destName: _.basename(e)
2221
+ destName: g.basename(e)
2173
2222
  };
2174
2223
  }
2175
- function ui(e, t) {
2176
- return new g(e, t).argParser((e, t) => [...t ?? [], li(e)]).default([]);
2224
+ function Si(e, t) {
2225
+ return new h(e, t).argParser((e, t) => [...t ?? [], xi(e)]).default([]);
2177
2226
  }
2178
2227
  //#endregion
2179
2228
  //#region src/cmd/upload-package-v1.ts
2180
- var di = [
2229
+ var Ci = [
2181
2230
  "registry",
2182
2231
  "organization",
2183
2232
  "package",
2184
2233
  "version"
2185
2234
  ];
2186
- function fi() {
2187
- let e = new h("upload-package-v1").description("Uploads V1 package and refreshes the registry");
2188
- return e.addOption(new g("-r, --registry <address|alias>", "full address of the registry or alias from .pl.reg").env("PL_REGISTRY")), e.addOption(new g("-o, --organization <organization>", "target organisation").env("PL_PACKAGE_ORGANIZATION")), e.addOption(new g("-p, --package <package>", "target package").env("PL_PACKAGE_NAME")), e.addOption(new g("-v, --version <version>", "target version").env("PL_PACKAGE_VERSION")), e.option("-m, --meta <path>", "json file containing meta information to associate with tha package"), e.addOption(ui("-f, --file <file>", "package files")), e.addOption(new g("--refresh", "refresh repository after adding the package").default(!0).env("PL_REGISTRY_REFRESH")), e.option("--no-refresh", "do not refresh repository after adding the package"), e.action(async (e) => {
2189
- let t = new x(), n = f.parse({});
2190
- for (let t of di) e[t] && (n[t] = e[t]);
2191
- e.meta && (e.meta.endsWith(".json") ? n.meta = JSON.parse(await v.promises.readFile(e.meta, { encoding: "utf-8" })) : e.meta.endsWith(".yaml") && (n.meta = se.parse(await v.promises.readFile(e.meta, { encoding: "utf-8" }))));
2235
+ function wi() {
2236
+ let e = new m("upload-package-v1").description("Uploads V1 package and refreshes the registry");
2237
+ return e.addOption(new h("-r, --registry <address|alias>", "full address of the registry or alias from .pl.reg").env("PL_REGISTRY")), e.addOption(new h("-o, --organization <organization>", "target organisation").env("PL_PACKAGE_ORGANIZATION")), e.addOption(new h("-p, --package <package>", "target package").env("PL_PACKAGE_NAME")), e.addOption(new h("-v, --version <version>", "target version").env("PL_PACKAGE_VERSION")), e.option("-m, --meta <path>", "json file containing meta information to associate with tha package"), e.addOption(Si("-f, --file <file>", "package files")), e.addOption(new h("--refresh", "refresh repository after adding the package").default(!0).env("PL_REGISTRY_REFRESH")), e.option("--no-refresh", "do not refresh repository after adding the package"), e.action(async (e) => {
2238
+ let t = new b(), n = f.parse({});
2239
+ for (let t of Ci) e[t] && (n[t] = e[t]);
2240
+ e.meta && (e.meta.endsWith(".json") ? n.meta = JSON.parse(await _.promises.readFile(e.meta, { encoding: "utf-8" })) : e.meta.endsWith(".yaml") && (n.meta = ce.parse(await _.promises.readFile(e.meta, { encoding: "utf-8" }))));
2192
2241
  for (let t of e.file) n.files[t.destName] = t.src;
2193
2242
  let r = await d(n);
2194
- t.info(se.stringify(r.conf));
2243
+ t.info(ce.stringify(r.conf));
2195
2244
  let i = r.createRegistry(t), a = r.fullPackageName, o = i.constructNewPackage(a);
2196
2245
  for (let [e, n] of Object.entries(r.conf.files)) {
2197
2246
  t.info(`Uploading ${n} -> ${e} ...`);
2198
- let r = await v.promises.readFile(n);
2247
+ let r = await _.promises.readFile(n);
2199
2248
  await o.addFile(e, r);
2200
2249
  }
2201
2250
  t.info("Uploading meta information..."), await o.writeMeta(r.conf.meta), await o.finish(), e.refresh && await i.updateIfNeeded();
@@ -2203,12 +2252,12 @@ function fi() {
2203
2252
  }
2204
2253
  //#endregion
2205
2254
  //#region src/cmd/structure/check.ts
2206
- function pi(e) {
2207
- let t = new h("check").description("Check block(s) against the canonical structure (read-only). Exits non-zero if any diff would land — used as the CI gate.");
2255
+ function Ti(e) {
2256
+ let t = new m("check").description("Check block(s) against the canonical structure (read-only). Exits non-zero if any diff would land — used as the CI gate.");
2208
2257
  return t.argument("[paths...]", "block path(s); defaults to the current directory"), t.option("--sdk-internal", "block(s) live inside the SDK monorepo; skip root-scope rules"), t.action(async (t, n) => {
2209
- let r = new x(), i = t.length > 0 ? t : ["."], a = _.join(e, "src", "structure", "templates"), o = !1;
2258
+ let r = new b(), i = t.length > 0 ? t : ["."], a = g.join(e, "src", "structure", "templates"), o = !1;
2210
2259
  for (let e of i) {
2211
- let t = await ni({
2260
+ let t = await mi({
2212
2261
  blockPath: e,
2213
2262
  isSdkInternal: !!n.sdkInternal,
2214
2263
  updateDepsOnly: !1,
@@ -2216,41 +2265,41 @@ function pi(e) {
2216
2265
  templatesRoot: a,
2217
2266
  log: (e) => r.info(e)
2218
2267
  });
2219
- r.info(ri(e, t.changes)), t.changes.length > 0 && (o = !0);
2268
+ r.info(hi(e, t.changes)), t.changes.length > 0 && (o = !0);
2220
2269
  }
2221
2270
  if (o) throw Error("Structure check failed: one or more blocks are out of date. Run `structure refresh`.");
2222
2271
  }), t;
2223
2272
  }
2224
2273
  //#endregion
2225
2274
  //#region src/structure/init-block-constructor.ts
2226
- var mi = ["python"], hi = class extends Error {
2275
+ var $ = ["python"], Ei = class extends Error {
2227
2276
  constructor(e) {
2228
2277
  super(`Missing required flag --${e} in --non-interactive mode. Supply every BlockVars flag, or drop --non-interactive to be prompted.`), this.name = "InitFlagError";
2229
2278
  }
2230
2279
  };
2231
- async function gi(e, t, n, r) {
2280
+ async function Di(e, t, n, r) {
2232
2281
  if (e !== void 0 && e !== "") return e;
2233
- if (n) throw new hi(t);
2282
+ if (n) throw new Ei(t);
2234
2283
  return r();
2235
2284
  }
2236
- async function _i(e) {
2237
- let t = await gi(e.npmOrg, "npm-org", e.nonInteractive, () => me({
2285
+ async function Oi(e) {
2286
+ let t = await Di(e.npmOrg, "npm-org", e.nonInteractive, () => he({
2238
2287
  message: "npm org (e.g. @platforma-open):",
2239
2288
  default: "@platforma-open"
2240
- })), n = await gi(e.orgScope, "org-scope", e.nonInteractive, () => me({ message: "org scope (e.g. my-org):" })), r = await gi(e.shortName, "short-name", e.nonInteractive, () => me({ message: "block short name (e.g. mixcr-clonotyping):" })), i;
2241
- i = e.withSoftware === void 0 ? e.nonInteractive ? !1 : await pe({
2289
+ })), n = await Di(e.orgScope, "org-scope", e.nonInteractive, () => he({ message: "org scope (e.g. my-org):" })), r = await Di(e.shortName, "short-name", e.nonInteractive, () => he({ message: "block short name (e.g. mixcr-clonotyping):" })), i;
2290
+ i = e.withSoftware === void 0 ? e.nonInteractive ? !1 : await me({
2242
2291
  message: "Include a software module?",
2243
2292
  default: !1
2244
2293
  }) : e.withSoftware;
2245
2294
  let a;
2246
2295
  if (i) {
2247
- if (a = await gi(e.platform, "platform", e.nonInteractive, () => he({
2296
+ if (a = await Di(e.platform, "platform", e.nonInteractive, () => ge({
2248
2297
  message: "Software platform:",
2249
- choices: mi.map((e) => ({
2298
+ choices: $.map((e) => ({
2250
2299
  name: e,
2251
2300
  value: e
2252
2301
  }))
2253
- })), !mi.includes(a)) throw Error(`Unsupported --platform '${a}'. Only ${mi.join(", ")} ${mi.length === 1 ? "is" : "are"} supported at v1.`);
2302
+ })), !$.includes(a)) throw Error(`Unsupported --platform '${a}'. Only ${$.join(", ")} ${$.length === 1 ? "is" : "are"} supported at v1.`);
2254
2303
  } else if (e.platform) throw Error("--platform was given but software is disabled (--no-software).");
2255
2304
  return {
2256
2305
  facadeName: `${t}/${n}.${r}`,
@@ -2261,20 +2310,20 @@ async function _i(e) {
2261
2310
  softwarePlatform: a
2262
2311
  };
2263
2312
  }
2264
- async function vi(e) {
2265
- let t = e.vars, n = Cn(t), r = new Oe(e.blockPath), i = new ke(e.templatesRoot), a = wn({
2313
+ async function ki(e) {
2314
+ let t = e.vars, n = Dn(t), r = new ke(e.blockPath), i = new Ae(e.templatesRoot), a = On({
2266
2315
  blockVars: t,
2267
2316
  modules: n,
2268
2317
  isSdkInternal: !1,
2269
2318
  version: 2,
2270
2319
  dryRun: !1
2271
- }), o = nr.filter(Xn), s, c;
2320
+ }), o = or.filter(er), s, c;
2272
2321
  try {
2273
- s = await Zn(o), c = await $n(ar);
2322
+ s = await tr(o), c = await rr(lr);
2274
2323
  } catch (e) {
2275
2324
  throw Error(`init requires network access to resolve SDK catalog versions from npm, but the registry lookup failed: ${e instanceof Error ? e.message : String(e)}`);
2276
2325
  }
2277
- return mn(ei, r, a, {
2326
+ return vn(fi, r, a, {
2278
2327
  templates: i,
2279
2328
  initMode: !0,
2280
2329
  registryLookup: s,
@@ -2283,12 +2332,12 @@ async function vi(e) {
2283
2332
  }
2284
2333
  //#endregion
2285
2334
  //#region src/cmd/structure/init.ts
2286
- function yi(e) {
2287
- let t = new h("init").description("Scaffold a fresh Platforma block from the canonical structure. Missing flags are prompted unless --non-interactive.");
2288
- return t.argument("[path]", "target directory (default: <short-name> under the current directory)"), t.option("--npm-org <org>", "npm org, e.g. @platforma-open"), t.option("--org-scope <scope>", "org scope, e.g. my-org"), t.option("--short-name <name>", "block short name, e.g. mixcr-clonotyping"), t.option("--with-software", "include a software module"), t.option("--no-software", "omit the software module"), t.addOption(new g("--platform <platform>", "software platform (single-valued)").choices([...mi])), t.option("--non-interactive", "error on any missing flag instead of prompting"), t.action(async (t, n) => {
2289
- let r = new x(), i = n.withSoftware === !0, a = n.software === !1;
2335
+ function Ai(e) {
2336
+ let t = new m("init").description("Scaffold a fresh Platforma block from the canonical structure. Missing flags are prompted unless --non-interactive.");
2337
+ return t.argument("[path]", "target directory (default: <short-name> under the current directory)"), t.option("--npm-org <org>", "npm org, e.g. @platforma-open"), t.option("--org-scope <scope>", "org scope, e.g. my-org"), t.option("--short-name <name>", "block short name, e.g. mixcr-clonotyping"), t.option("--with-software", "include a software module"), t.option("--no-software", "omit the software module"), t.addOption(new h("--platform <platform>", "software platform (single-valued)").choices([...$])), t.option("--non-interactive", "error on any missing flag instead of prompting"), t.action(async (t, n) => {
2338
+ let r = new b(), i = n.withSoftware === !0, a = n.software === !1;
2290
2339
  if (i && a) throw Error("--with-software and --no-software are mutually exclusive.");
2291
- let o = i ? !0 : a ? !1 : void 0, s = await _i({
2340
+ let o = i ? !0 : a ? !1 : void 0, s = await Oi({
2292
2341
  npmOrg: n.npmOrg,
2293
2342
  orgScope: n.orgScope,
2294
2343
  shortName: n.shortName,
@@ -2296,25 +2345,25 @@ function yi(e) {
2296
2345
  platform: n.platform,
2297
2346
  nonInteractive: n.nonInteractive
2298
2347
  });
2299
- await vi({
2348
+ await ki({
2300
2349
  vars: s,
2301
- blockPath: t ? _.resolve(t) : _.resolve(process.cwd(), s.shortName),
2302
- templatesRoot: _.join(e, "src", "structure", "templates"),
2350
+ blockPath: t ? g.resolve(t) : g.resolve(process.cwd(), s.shortName),
2351
+ templatesRoot: g.join(e, "src", "structure", "templates"),
2303
2352
  log: (e) => r.info(e)
2304
2353
  });
2305
2354
  }), t;
2306
2355
  }
2307
2356
  //#endregion
2308
2357
  //#region src/cmd/software/knobs.ts
2309
- var bi = ["dev", "release"], xi = [
2358
+ var ji = ["dev", "release"], Mi = [
2310
2359
  "docker",
2311
2360
  "binary",
2312
2361
  "all",
2313
2362
  "none"
2314
- ], Si = ["local", "remote"];
2315
- function Ci(e) {
2363
+ ], Ni = ["local", "remote"];
2364
+ function Pi(e) {
2316
2365
  if (e.usePublished) {
2317
- if (e.variant === "docker" || e.variant === "all") throw b.CLIError(`--use-published is binary-only and cannot be combined with --variant ${e.variant}`);
2366
+ if (e.variant === "docker" || e.variant === "all") throw y.CLIError(`--use-published is binary-only and cannot be combined with --variant ${e.variant}`);
2318
2367
  return { kind: "binary-existing" };
2319
2368
  }
2320
2369
  return e.variant === "none" ? { kind: "no-software" } : e.location === void 0 ? { kind: "bare" } : {
@@ -2326,33 +2375,33 @@ function Ci(e) {
2326
2375
  }
2327
2376
  //#endregion
2328
2377
  //#region src/cmd/software/ecr-login.ts
2329
- var wi = "public.ecr.aws", Ti = "us-east-1";
2330
- function Ei(e) {
2378
+ var Fi = "public.ecr.aws", Ii = "us-east-1";
2379
+ function Li(e) {
2331
2380
  if (process.env.AWS_ACCESS_KEY_ID || process.env.AWS_PROFILE) return;
2332
- let t = process.env.PL_AWS_PROFILE ?? oe.AWS_DEV_PROFILE;
2381
+ let t = process.env.PL_AWS_PROFILE ?? se.AWS_DEV_PROFILE;
2333
2382
  process.env.AWS_PROFILE = t, e?.debug(`Using AWS profile '${t}' for dev push credentials`);
2334
2383
  }
2335
- function Di(e) {
2384
+ function Ri(e) {
2336
2385
  return new URL(`https://${e}`).hostname;
2337
2386
  }
2338
- function Oi() {
2339
- return ` aws sso login --profile ${process.env.AWS_PROFILE ?? process.env.PL_AWS_PROFILE ?? oe.AWS_DEV_PROFILE}`;
2387
+ function zi() {
2388
+ return ` aws sso login --profile ${process.env.AWS_PROFILE ?? process.env.PL_AWS_PROFILE ?? se.AWS_DEV_PROFILE}`;
2340
2389
  }
2341
- async function ki(e, t) {
2342
- let n = Di(e);
2343
- if (n !== wi) throw b.CLIError(`automatic docker login is only supported for '${wi}', not '${n}'.\nLog in manually, or drop the ecr:// scheme from the push target to opt out.`);
2390
+ async function Bi(e, t) {
2391
+ let n = Ri(e);
2392
+ if (n !== Fi) throw y.CLIError(`automatic docker login is only supported for '${Fi}', not '${n}'.\nLog in manually, or drop the ecr:// scheme from the push target to opt out.`);
2344
2393
  t?.info(`Logging in to ECR registry '${n}'...`);
2345
2394
  let r, i;
2346
2395
  try {
2347
- let e = (await new _e({ region: Ti }).send(new ve({}))).authorizationData?.authorizationToken;
2396
+ let e = (await new ve({ region: Ii }).send(new ye({}))).authorizationData?.authorizationToken;
2348
2397
  if (!e) throw Error("empty authorization token");
2349
2398
  let t = Buffer.from(e, "base64").toString("utf8"), n = t.indexOf(":");
2350
2399
  if (n < 0) throw Error("malformed authorization token (no ':' separator)");
2351
2400
  r = t.slice(0, n), i = t.slice(n + 1);
2352
2401
  } catch (e) {
2353
- throw b.CLIError(`failed to obtain an ECR login token for '${n}': ${e instanceof Error ? e.message : String(e)}\nYour AWS/SSO session is likely expired or absent — log in and retry:\n` + Oi());
2402
+ throw y.CLIError(`failed to obtain an ECR login token for '${n}': ${e instanceof Error ? e.message : String(e)}\nYour AWS/SSO session is likely expired or absent — log in and retry:\n` + zi());
2354
2403
  }
2355
- let a = ge("docker", [
2404
+ let a = _e("docker", [
2356
2405
  "login",
2357
2406
  "--username",
2358
2407
  r,
@@ -2367,16 +2416,16 @@ async function ki(e, t) {
2367
2416
  ],
2368
2417
  env: {
2369
2418
  ...process.env,
2370
- HOME: process.env.HOME || fe.homedir()
2419
+ HOME: process.env.HOME || pe.homedir()
2371
2420
  }
2372
2421
  });
2373
- if (a.error || a.status !== 0) throw b.CLIError(`'docker login ${n}' failed`);
2422
+ if (a.error || a.status !== 0) throw y.CLIError(`'docker login ${n}' failed`);
2374
2423
  }
2375
2424
  //#endregion
2376
2425
  //#region src/cmd/software/run-build.ts
2377
- async function Ai(e) {
2426
+ async function Vi(e) {
2378
2427
  let { core: t, scenario: n, options: r = {}, logger: i } = e, a = r.ids;
2379
- t.buildMode = ji(n);
2428
+ t.buildMode = Hi(n);
2380
2429
  let o = () => t.buildSoftwareArchives({
2381
2430
  ids: a,
2382
2431
  forceBuild: !!r.force,
@@ -2393,99 +2442,99 @@ async function Ai(e) {
2393
2442
  r.buildDocker && t.buildDockerImages({
2394
2443
  ids: a,
2395
2444
  registry: r.dockerRegistry,
2396
- strictPlatformMatching: y.isCI()
2445
+ strictPlatformMatching: v.isCI()
2397
2446
  }), await o(), r.pushDocker && t.publishDockerImages({
2398
2447
  ids: a,
2399
2448
  pushTo: r.dockerPushTo,
2400
- strictPlatformMatching: y.isCI()
2449
+ strictPlatformMatching: v.isCI()
2401
2450
  });
2402
2451
  break;
2403
2452
  case "target": {
2404
- let { channel: e, variant: s, location: c } = n, l = s !== "binary", u = s !== "docker", d = c === "remote", f = Pi(e, r);
2453
+ let { channel: e, variant: s, location: c } = n, l = s !== "binary", u = s !== "docker", d = c === "remote", f = Gi(e, r);
2405
2454
  l && t.buildDockerImages({
2406
2455
  ids: a,
2407
2456
  registry: f.pull,
2408
- strictPlatformMatching: y.isCI()
2409
- }), u && await o(), d && e === "dev" && (l || u) && Ei(i), l && d && (f.autoLogin && f.push && await ki(f.push, i), t.publishDockerImages({
2457
+ strictPlatformMatching: v.isCI()
2458
+ }), u && await o(), d && e === "dev" && (l || u) && Li(i), l && d && (f.autoLogin && f.push && await Bi(f.push, i), t.publishDockerImages({
2410
2459
  ids: a,
2411
2460
  pushTo: f.push,
2412
- strictPlatformMatching: y.isCI()
2461
+ strictPlatformMatching: v.isCI()
2413
2462
  })), u && d && await t.publishPackages({
2414
2463
  ids: a,
2415
2464
  storageURL: r.storageUrl
2416
2465
  });
2417
2466
  break;
2418
2467
  }
2419
- default: b.assertNever(n);
2468
+ default: y.assertNever(n);
2420
2469
  }
2421
2470
  t.buildSwJsonFiles({
2422
2471
  packageIds: a,
2423
2472
  noSoftware: n.kind === "no-software"
2424
2473
  });
2425
2474
  }
2426
- function ji(e) {
2475
+ function Hi(e) {
2427
2476
  return e.kind !== "target" || e.channel === "release" ? "release" : e.variant !== "docker" && e.location === "remote" ? "dev-remote" : "dev-local";
2428
2477
  }
2429
- function Mi(e) {
2478
+ function Ui(e) {
2430
2479
  if (!e.includes("://")) return e;
2431
2480
  let t = new URL(e);
2432
2481
  return t.host + t.pathname;
2433
2482
  }
2434
- function Ni(e) {
2483
+ function Wi(e) {
2435
2484
  return {
2436
- registry: Mi(e),
2485
+ registry: Ui(e),
2437
2486
  autoLogin: e.startsWith("ecr://")
2438
2487
  };
2439
2488
  }
2440
- function Pi(e, t) {
2441
- let n = e === "dev", r = process.env[n ? y.PL_DEV_DOCKER_PUSH_URL : y.PL_RELEASE_DOCKER_PUSH_URL], i = process.env[n ? y.PL_DEV_DOCKER_PULL_URL : y.PL_RELEASE_DOCKER_PULL_URL], a = t.dockerPushTo ?? r ?? (n ? oe.DEV_DOCKER_PUSH_TARGET : void 0), o = a ? Ni(a) : {
2489
+ function Gi(e, t) {
2490
+ let n = e === "dev", r = process.env[n ? v.PL_DEV_DOCKER_PUSH_URL : v.PL_RELEASE_DOCKER_PUSH_URL], i = process.env[n ? v.PL_DEV_DOCKER_PULL_URL : v.PL_RELEASE_DOCKER_PULL_URL], a = t.dockerPushTo ?? r ?? (n ? se.DEV_DOCKER_PUSH_TARGET : void 0), o = a ? Wi(a) : {
2442
2491
  registry: void 0,
2443
2492
  autoLogin: !1
2444
- }, s = t.dockerRegistry ?? i ?? (n ? a : oe.DOCKER_REGISTRY);
2493
+ }, s = t.dockerRegistry ?? i ?? (n ? a : se.DOCKER_REGISTRY);
2445
2494
  return {
2446
- pull: s ? Mi(s) : void 0,
2495
+ pull: s ? Ui(s) : void 0,
2447
2496
  push: o.registry,
2448
2497
  autoLogin: o.autoLogin
2449
2498
  };
2450
2499
  }
2451
2500
  //#endregion
2452
2501
  //#region src/cmd/software/env.ts
2453
- var Fi = "PL_BUILD_CHANNEL", Ii = "PL_BUILD_VARIANT", Li = "PL_BUILD_LOCATION", Ri = "PL_BUILD_USE_PUBLISHED";
2454
- y.PL_DOCKER_REGISTRY_PUSH_TO, y.PL_DEV_DOCKER_PUSH_URL, y.PL_DEV_DOCKER_PULL_URL, y.PL_DEV_BINARY_UPLOAD_URL, y.PL_RELEASE_DOCKER_PUSH_URL, y.PL_RELEASE_DOCKER_PULL_URL, y.PL_RELEASE_BINARY_UPLOAD_URL;
2502
+ var Ki = "PL_BUILD_CHANNEL", qi = "PL_BUILD_VARIANT", Ji = "PL_BUILD_LOCATION", Yi = "PL_BUILD_USE_PUBLISHED";
2503
+ v.PL_DOCKER_REGISTRY_PUSH_TO, v.PL_DEV_DOCKER_PUSH_URL, v.PL_DEV_DOCKER_PULL_URL, v.PL_DEV_BINARY_UPLOAD_URL, v.PL_RELEASE_DOCKER_PUSH_URL, v.PL_RELEASE_DOCKER_PULL_URL, v.PL_RELEASE_BINARY_UPLOAD_URL;
2455
2504
  //#endregion
2456
2505
  //#region src/cmd/software/build.ts
2457
- function zi() {
2458
- let e = new h("build").description("Build a software module for a target and write its .sw.json descriptor (build + push in one pass)");
2459
- return e.addOption(new g("--channel <channel>", "registry channel to build for").choices([...bi]).env(Fi)), e.addOption(new g("--variant <variant>", "artifact kind to build (default: all declared)").choices([...xi]).env(Ii)), e.addOption(new g("--location <location>", "where the artifact lands (local = no push)").choices([...Si]).env(Li)), e.addOption(new g("--use-published", "do not build or push; emit a descriptor pointing at the already-published release artifact").env(Ri)), e.addOption(new g("--log-level <level>", "logging level").choices([
2506
+ function Xi() {
2507
+ let e = new m("build").description("Build a software module for a target and write its .sw.json descriptor (build + push in one pass)");
2508
+ return e.addOption(new h("--channel <channel>", "registry channel to build for").choices([...ji]).env(Ki)), e.addOption(new h("--variant <variant>", "artifact kind to build (default: all declared)").choices([...Mi]).env(qi)), e.addOption(new h("--location <location>", "where the artifact lands (local = no push)").choices([...Ni]).env(Ji)), e.addOption(new h("--use-published", "do not build or push; emit a descriptor pointing at the already-published release artifact").env(Yi)), e.addOption(new h("--log-level <level>", "logging level").choices([
2460
2509
  "error",
2461
2510
  "warn",
2462
2511
  "info",
2463
2512
  "debug"
2464
- ]).default("info")), e.addOption(new g("--package-root <path>", "path to directory with package.json file")), e.addOption(new g("--force", "force action, ignoring automatic safety checks").default(!1)), e.addOption(new g("--version <value>", "override package version (ignore package.json)")), e.addOption(new g("--platform <os-arch>", "{os}-{arch} pair; no effect on cross-platform packages").choices([...b.AllPlatforms]).env(y.PL_PKG_OS)), e.addOption(new g("--all-platforms", "build for all supported platforms").default(!1)), e.addOption(new g("--full-dir-hash", "hash file contents (not metadata) for the dev content hash").env(y.PL_PKG_FULL_HASH).default(!1)), e.addOption(new g("--package-id <id...>", "act only on selected packages")), e.addOption(new g("--content-root <path>", "override software content root").env(y.PL_PKG_CONTENT_ROOT)), e.addOption(new g("--storage-url <url>", "override binary upload registry URL").env(y.PL_PKG_STORAGE_URL)), e.addOption(new g("--docker-registry <registry>", "docker pull registry embedded in the descriptor").env(y.PL_DOCKER_REGISTRY)), e.addOption(new g("--docker-push-to <registry>", "alternative registry for docker push").env(y.PL_DOCKER_REGISTRY_PUSH_TO)), e.addOption(new g("--docker-build", "build docker images").env(y.PL_DOCKER_BUILD).default(!1)), e.addOption(new g("--docker-no-build", "do not build docker images").env(y.PL_DOCKER_NO_BUILD).default(!1)), e.addOption(new g("--docker-autopush", "push docker images after build").env(y.PL_DOCKER_AUTOPUSH).default(!1)), e.addOption(new g("--docker-no-autopush", "do not push docker images").env(y.PL_DOCKER_NO_AUTOPUSH).default(!1)), e.addOption(new g("--conda-build", "build conda environment before packing").env(y.PL_CONDA_BUILD).default(!1)), e.addOption(new g("--conda-no-build", "do not build conda environment").env(y.PL_CONDA_NO_BUILD).default(!1)), e.action(async (e) => {
2465
- let t = b.createLogger(e.logLevel);
2513
+ ]).default("info")), e.addOption(new h("--package-root <path>", "path to directory with package.json file")), e.addOption(new h("--force", "force action, ignoring automatic safety checks").default(!1)), e.addOption(new h("--version <value>", "override package version (ignore package.json)")), e.addOption(new h("--platform <os-arch>", "{os}-{arch} pair; no effect on cross-platform packages").choices([...y.AllPlatforms]).env(v.PL_PKG_OS)), e.addOption(new h("--all-platforms", "build for all supported platforms").default(!1)), e.addOption(new h("--full-dir-hash", "hash file contents (not metadata) for the dev content hash").env(v.PL_PKG_FULL_HASH).default(!1)), e.addOption(new h("--package-id <id...>", "act only on selected packages")), e.addOption(new h("--content-root <path>", "override software content root").env(v.PL_PKG_CONTENT_ROOT)), e.addOption(new h("--storage-url <url>", "override binary upload registry URL").env(v.PL_PKG_STORAGE_URL)), e.addOption(new h("--docker-registry <registry>", "docker pull registry embedded in the descriptor").env(v.PL_DOCKER_REGISTRY)), e.addOption(new h("--docker-push-to <registry>", "alternative registry for docker push").env(v.PL_DOCKER_REGISTRY_PUSH_TO)), e.addOption(new h("--docker-build", "build docker images").env(v.PL_DOCKER_BUILD).default(!1)), e.addOption(new h("--docker-no-build", "do not build docker images").env(v.PL_DOCKER_NO_BUILD).default(!1)), e.addOption(new h("--docker-autopush", "push docker images after build").env(v.PL_DOCKER_AUTOPUSH).default(!1)), e.addOption(new h("--docker-no-autopush", "do not push docker images").env(v.PL_DOCKER_NO_AUTOPUSH).default(!1)), e.addOption(new h("--conda-build", "build conda environment before packing").env(v.PL_CONDA_BUILD).default(!1)), e.addOption(new h("--conda-no-build", "do not build conda environment").env(v.PL_CONDA_NO_BUILD).default(!1)), e.action(async (e) => {
2514
+ let t = y.createLogger(e.logLevel);
2466
2515
  try {
2467
- let n = Ci({
2516
+ let n = Pi({
2468
2517
  channel: e.channel,
2469
2518
  variant: e.variant,
2470
2519
  location: e.location,
2471
2520
  usePublished: !!e.usePublished
2472
- }), r = ae(t, { packageRoot: e.packageRoot });
2521
+ }), r = oe(t, { packageRoot: e.packageRoot });
2473
2522
  r.version = e.version, r.targetPlatform = e.platform, r.allPlatforms = !!e.allPlatforms, r.fullDirHash = !!e.fullDirHash;
2474
- let i = b.shouldDoAction({
2475
- default: y.isCI(),
2523
+ let i = y.shouldDoAction({
2524
+ default: v.isCI(),
2476
2525
  enable: e.dockerBuild,
2477
2526
  disable: e.dockerNoBuild
2478
- }), a = i && b.shouldDoAction({
2479
- default: y.isCI() && !r.isPrivate,
2527
+ }), a = i && y.shouldDoAction({
2528
+ default: v.isCI() && !r.isPrivate,
2480
2529
  enable: e.dockerAutopush,
2481
2530
  disable: e.dockerNoAutopush
2482
2531
  });
2483
- n.kind === "bare" && ie({
2532
+ n.kind === "bare" && ae({
2484
2533
  buildDocker: i,
2485
2534
  pushDocker: a,
2486
2535
  pushDisabledExplicitly: !!e.dockerNoAutopush,
2487
2536
  dockerPackageCount: r.selectedDockerPackages(e.packageId).length
2488
- }), await Ai({
2537
+ }), await Vi({
2489
2538
  core: r,
2490
2539
  scenario: n,
2491
2540
  logger: t,
@@ -2498,7 +2547,7 @@ function zi() {
2498
2547
  dockerPushTo: e.dockerPushTo,
2499
2548
  buildDocker: i,
2500
2549
  pushDocker: a,
2501
- condaBuild: b.shouldDoAction({
2550
+ condaBuild: y.shouldDoAction({
2502
2551
  default: !0,
2503
2552
  enable: e.condaBuild,
2504
2553
  disable: e.condaNoBuild
@@ -2512,22 +2561,22 @@ function zi() {
2512
2561
  }
2513
2562
  //#endregion
2514
2563
  //#region src/cmd/software/index.ts
2515
- function Bi() {
2516
- let e = new h("software").description("Build and publish a block's software modules");
2517
- return e.addCommand(zi()), e;
2564
+ function Zi() {
2565
+ let e = new m("software").description("Build and publish a block's software modules");
2566
+ return e.addCommand(Xi()), e;
2518
2567
  }
2519
2568
  //#endregion
2520
2569
  //#region src/cli.ts
2521
- function Vi(e = process.cwd()) {
2522
- let t = new h();
2523
- t.name("block-tools").description("Utility to manipulate Platforma Blocks and Block Registry"), t.addCommand(ye()), t.addCommand(xe()), t.addCommand(Se()), t.addCommand(Ce()), t.addCommand(Te()), t.addCommand(Ee()), t.addCommand(De()), t.addCommand(oi(e)), t.addCommand(si()), t.addCommand(ci()), t.addCommand(fi()), t.addCommand(Bi());
2524
- let n = new h("structure").description("Manage block scaffolding against the canonical structure (check / init / refresh)");
2525
- return n.addCommand(pi(e)), n.addCommand(yi(e)), n.addCommand(ai(e)), t.addCommand(n), t;
2570
+ function Qi(e = process.cwd()) {
2571
+ let t = new m();
2572
+ t.name("block-tools").description("Utility to manipulate Platforma Blocks and Block Registry"), t.addCommand(be()), t.addCommand(Se()), t.addCommand(Ce()), t.addCommand(we()), t.addCommand(Ee()), t.addCommand(De()), t.addCommand(Oe()), t.addCommand(vi(e)), t.addCommand(yi()), t.addCommand(bi()), t.addCommand(wi()), t.addCommand(Zi());
2573
+ let n = new m("structure").description("Manage block scaffolding against the canonical structure (check / init / refresh)");
2574
+ return n.addCommand(Ti(e)), n.addCommand(Ai(e)), n.addCommand(_i(e)), t.addCommand(n), t;
2526
2575
  }
2527
- async function Hi(e, t) {
2528
- await Vi(t).parseAsync(e);
2576
+ async function $i(e, t) {
2577
+ await Qi(t).parseAsync(e);
2529
2578
  }
2530
2579
  //#endregion
2531
- export { Vi as buildProgram, Hi as run };
2580
+ export { Qi as buildProgram, $i as run };
2532
2581
 
2533
2582
  //# sourceMappingURL=cli.mjs.map