@voxgig/system 1.11.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cmd.ts CHANGED
@@ -173,14 +173,37 @@ function requireArgs(args: string[], n: number, what: string) {
173
173
  }
174
174
  }
175
175
 
176
- function report(results: { file: string, text: string, skipped?: boolean }[]) {
176
+ function report(results: {
177
+ file: string, text: string, skipped?: boolean,
178
+ merged?: string[],
179
+ conflicts?: { path: string, current: any, wanted: any }[],
180
+ }[]) {
177
181
  for (const res of results) {
178
182
  if (res.skipped) {
179
183
  console.log('already present (no change): ' + res.file)
180
184
  }
181
185
  else {
182
- console.log('appended to ' + res.file + ':')
186
+ console.log(
187
+ (res.merged ? 'merged into ' : 'appended to ') + res.file + ':')
183
188
  console.log(res.text)
189
+ if (res.merged) {
190
+ console.log(' new: ' + res.merged.join(', '))
191
+ }
192
+ }
193
+
194
+ // Never silent: a conflict means the requested value was NOT applied.
195
+ // It cannot be - aontu unifies rather than overrides, so appending a
196
+ // different value for a key that already has one fails the next model
197
+ // build instead of changing it.
198
+ if (res.conflicts && res.conflicts.length) {
199
+ console.log('\nNOT applied - already set to a different value:')
200
+ for (const c of res.conflicts) {
201
+ console.log(' ' + c.path +
202
+ ': ' + JSON.stringify(c.current) +
203
+ ' (wanted ' + JSON.stringify(c.wanted) + ')')
204
+ }
205
+ console.log('\nEdit the model by hand to change these: appending the\n' +
206
+ 'new value would not override it, it would fail the model build.')
184
207
  }
185
208
  }
186
209
  }
package/dist/cmd.js CHANGED
@@ -163,8 +163,25 @@ function report(results) {
163
163
  console.log('already present (no change): ' + res.file);
164
164
  }
165
165
  else {
166
- console.log('appended to ' + res.file + ':');
166
+ console.log((res.merged ? 'merged into ' : 'appended to ') + res.file + ':');
167
167
  console.log(res.text);
168
+ if (res.merged) {
169
+ console.log(' new: ' + res.merged.join(', '));
170
+ }
171
+ }
172
+ // Never silent: a conflict means the requested value was NOT applied.
173
+ // It cannot be - aontu unifies rather than overrides, so appending a
174
+ // different value for a key that already has one fails the next model
175
+ // build instead of changing it.
176
+ if (res.conflicts && res.conflicts.length) {
177
+ console.log('\nNOT applied - already set to a different value:');
178
+ for (const c of res.conflicts) {
179
+ console.log(' ' + c.path +
180
+ ': ' + JSON.stringify(c.current) +
181
+ ' (wanted ' + JSON.stringify(c.wanted) + ')');
182
+ }
183
+ console.log('\nEdit the model by hand to change these: appending the\n' +
184
+ 'new value would not override it, it would fail the model build.');
168
185
  }
169
186
  }
170
187
  }
package/dist/cmd.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cmd.js","sourceRoot":"","sources":["../cmd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cmd.js","sourceRoot":"","sources":["../cmd.ts"],"names":[],"mappings":"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"}
package/dist/lib/add.d.ts CHANGED
@@ -9,6 +9,12 @@ export type AddResult = {
9
9
  file: string;
10
10
  text: string;
11
11
  skipped?: boolean;
12
+ merged?: string[];
13
+ conflicts?: {
14
+ path: string;
15
+ current: any;
16
+ wanted: any;
17
+ }[];
12
18
  };
13
19
  declare function resolveModelFolder(start: string): string;
14
20
  declare function resolveModelFiles(start: string): ModelFiles;
package/dist/lib/add.js CHANGED
@@ -149,6 +149,48 @@ function parseArg(arg, kind) {
149
149
  throw new Error('invalid ' + kind + ' argument: ' + arg +
150
150
  ' - provide a name, {name:...,...spec}, or {thename:{...spec}}');
151
151
  }
152
+ // Split a definition against what the compiled model already holds.
153
+ //
154
+ // `fresh` is the sub-tree of paths NOT yet set - safe to append, because
155
+ // aontu unifies it in. `conflicts` are paths already set to a DIFFERENT
156
+ // value: appending those is NOT a merge, it is a build error -
157
+ //
158
+ // [aontu/scalar_value]: Cannot unify values at path $.main.env.aws.stage
159
+ // Cannot unify value: "prd" with value: "dev"
160
+ //
161
+ // aontu unifies, it does not override, so a changed value cannot be
162
+ // applied by appending. It is reported for the user to edit by hand,
163
+ // rather than written and left to break the next model build.
164
+ function diffDef(want, have, path) {
165
+ const conflicts = [];
166
+ function walk(w, h, p) {
167
+ if (undefined === h) {
168
+ return w;
169
+ }
170
+ const bothMaps = null != w && 'object' === typeof w && !Array.isArray(w) &&
171
+ null != h && 'object' === typeof h && !Array.isArray(h);
172
+ if (!bothMaps) {
173
+ // A leaf (or a shape change): equal is a no-op, different is a
174
+ // conflict. Arrays compare whole - aontu unifies them elementwise,
175
+ // and second-guessing that here would be worse than saying so.
176
+ if (JSON.stringify(w) !== JSON.stringify(h)) {
177
+ conflicts.push({ path: p, current: h, wanted: w });
178
+ }
179
+ return undefined;
180
+ }
181
+ const out = {};
182
+ let any = false;
183
+ for (const k of Object.keys(w)) {
184
+ const sub = walk(w[k], h[k], p + '.' + k);
185
+ if (undefined !== sub) {
186
+ out[k] = sub;
187
+ any = true;
188
+ }
189
+ }
190
+ return any ? out : undefined;
191
+ }
192
+ return { fresh: walk(want, have, path), conflicts };
193
+ }
152
194
  // The last compiled model (model.json next to the model source), used to
153
195
  // make the add operations idempotent: an element that already exists in
154
196
  // the compiled model is skipped rather than appended again. Formatting
@@ -520,21 +562,38 @@ sys: apikey: {
520
562
  function addEnv(start, arg) {
521
563
  var _a, _b, _c, _d;
522
564
  const files = resolveModelFiles(start);
523
- const { name, def } = parseArg(arg, 'env');
565
+ const { name, def: wanted } = parseArg(arg, 'env');
566
+ let def = wanted;
524
567
  const kind = def.kind || name;
525
568
  if (!ENV_KINDS.includes(kind)) {
526
569
  throw new Error('unknown environment kind: ' + kind +
527
570
  ' (known: ' + ENV_KINDS.join(', ') +
528
571
  '; use {name:..., kind:...} for a custom-named env)');
529
572
  }
530
- // Idempotent: environment already in the compiled model.
531
573
  const model = compiledModel(files);
532
- if ((_b = (_a = model === null || model === void 0 ? void 0 : model.main) === null || _a === void 0 ? void 0 : _a.env) === null || _b === void 0 ? void 0 : _b[name]) {
533
- return { file: files.model, text: '', skipped: true };
534
- }
574
+ const existing = (_b = (_a = model === null || model === void 0 ? void 0 : model.main) === null || _a === void 0 ? void 0 : _a.env) === null || _b === void 0 ? void 0 : _b[name];
535
575
  if (null == def.active) {
536
576
  def.active = true;
537
577
  }
578
+ // Already declared: MERGE rather than skip outright. Only the keys the
579
+ // model does not already carry are appended - re-stating an existing key
580
+ // with a different value would not override it, it would fail the next
581
+ // model build (aontu unifies). Those are reported instead.
582
+ let conflicts = [];
583
+ let merged;
584
+ if (existing) {
585
+ const path = 'main.env.' + name;
586
+ const diff = diffDef(def, existing, path);
587
+ conflicts = diff.conflicts;
588
+ if (null == diff.fresh) {
589
+ return {
590
+ file: files.model, text: '', skipped: true,
591
+ ...(conflicts.length ? { conflicts } : {}),
592
+ };
593
+ }
594
+ merged = leafPaths(diff.fresh, path);
595
+ def = diff.fresh;
596
+ }
538
597
  // The web env needs the auth + generic entity services declared in the
539
598
  // model so MakeSrv wires the generated service files (idempotent: only when
540
599
  // the auth service is not already declared).
@@ -549,6 +608,22 @@ function addEnv(start, arg) {
549
608
  const target = m ? node_path_1.default.join(files.folder, m[1]) : files.model;
550
609
  const prefix = m ? '' : 'main: env: ';
551
610
  const text = '\n' + prefix + name + ': ' + fmt(def, 0);
552
- return append(target, text);
611
+ const res = append(target, text);
612
+ return {
613
+ ...res,
614
+ ...(merged ? { merged } : {}),
615
+ ...(conflicts.length ? { conflicts } : {}),
616
+ };
617
+ }
618
+ // Every leaf path in a definition, for reporting what a merge appended.
619
+ function leafPaths(def, path) {
620
+ if (null == def || 'object' !== typeof def || Array.isArray(def)) {
621
+ return [path];
622
+ }
623
+ const keys = Object.keys(def);
624
+ if (0 === keys.length) {
625
+ return [path];
626
+ }
627
+ return keys.flatMap((k) => leafPaths(def[k], path + '.' + k));
553
628
  }
554
629
  //# sourceMappingURL=add.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../lib/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../lib/add.ts"],"names":[],"mappings":";AAAA,+CAA+C;;;;;;QAyf7C,kBAAkB;QAClB,iBAAiB;QACjB,SAAS;QACT,MAAM;QACN,MAAM;QACN,SAAS;QACT,MAAM;QAEN,GAAG;AA/fL,uEAAuE;AACvE,yEAAyE;AACzE,0EAA0E;AAC1E,oCAAoC;AACpC,EAAE;AACF,uEAAuE;AACvE,sEAAsE;AACtE,+BAA+B;AAE/B,sDAAwB;AACxB,0DAA4B;AAE5B,2CAAuC;AAGvC,2EAA2E;AAC3E,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;AAwB3D,6DAA6D;AAC7D,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAEtC,iEAAiE;AACjE,mEAAmE;AACnE,4BAA4B;AAC5B,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,UAAU,GAAG;QACjB,KAAK;QACL,mBAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;QACzB,mBAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC;KACrC,CAAA;IACD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,iBAAE,CAAC,UAAU,CAAC,mBAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;gBAChD,OAAO,CAAC,CAAA;YACV,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oDAAoD;QAClE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAA;AAChC,CAAC;AAGD,wEAAwE;AACxE,8DAA8D;AAC9D,sBAAsB;AACtB,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAExC,IAAI,KAAK,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACvD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,GAAG,CAAC,CAAA;QAC3C,IAAI,iBAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAA;YACT,MAAK;QACP,CAAC;IACH,CAAC;IACD,MAAM,GAAG,GAAG,iBAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAE1C,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,EAAE;QACxC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CACjB,IAAI,MAAM,CAAC,WAAW,GAAG,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAA;QACpD,IAAI,CAAC,EAAE,CAAC;YACN,OAAO,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAChC,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA;YAC7C,IAAI,iBAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,CAAA;YACV,CAAC;QACH,CAAC;QACD,OAAO,mBAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACtD,CAAC,CAAA;IAED,OAAO;QACL,MAAM;QACN,KAAK;QACL,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;QACtB,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;QACtB,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;KACvB,CAAA;AACH,CAAC;AAGD,0EAA0E;AAC1E,2DAA2D;AAC3D,SAAS,GAAG,CAAC,GAAQ,EAAE,KAAa;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IAEpC,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;QAChB,OAAO,MAAM,CAAA;IACf,CAAC;SACI,IAAI,QAAQ,KAAK,OAAO,GAAG,EAAE,CAAC;QACjC,OAAO,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACtC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,CAAA;IACxC,CAAC;SACI,IAAI,QAAQ,KAAK,OAAO,GAAG,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;IACpB,CAAC;SACI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;IACjE,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACnC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK;QACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;aAClE,IAAI,CAAC,IAAI,CAAC;QACb,IAAI,GAAG,GAAG,GAAG,GAAG,CAAA;AACpB,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,CAAA;AACtC,CAAC;AAGD,SAAS,MAAM,CAAC,IAAY,EAAE,IAAY;IACxC,MAAM,QAAQ,GAAG,iBAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;IACnD,iBAAE,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAA;IAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACvB,CAAC;AAGD,wEAAwE;AACxE,0DAA0D;AAC1D,SAAS,QAAQ,CAAC,GAAW,EAAE,IAAY;IACzC,IAAI,MAAW,CAAA;IACf,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,eAAM,EAAC,GAAG,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,CAAM,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,IAAI,GAAG,mCAAmC;YACrE,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,MAAM,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAA;IAClC,CAAC;IAED,IAAI,IAAI,IAAI,MAAM,IAAI,QAAQ,KAAK,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,0BAA0B;QAC1B,IAAI,QAAQ,KAAK,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,EAAE,CAAA;YACzB,OAAO,GAAG,CAAC,IAAI,CAAA;YACf,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,CAAA;QACnC,CAAC;QAED,sCAAsC;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,QAAQ,KAAK,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAChD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,IAAI,GAAG,aAAa,GAAG,GAAG;QACrD,+DAA+D,CAAC,CAAA;AACpE,CAAC;AAGD,oEAAoE;AACpE,EAAE;AACF,yEAAyE;AACzE,wEAAwE;AACxE,+DAA+D;AAC/D,EAAE;AACF,2EAA2E;AAC3E,gDAAgD;AAChD,EAAE;AACF,oEAAoE;AACpE,qEAAqE;AACrE,8DAA8D;AAC9D,SAAS,OAAO,CAAC,IAAS,EAAE,IAAS,EAAE,IAAY;IAGjD,MAAM,SAAS,GAAkD,EAAE,CAAA;IAEnE,SAAS,IAAI,CAAC,CAAM,EAAE,CAAM,EAAE,CAAS;QACrC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,CAAA;QACV,CAAC;QAED,MAAM,QAAQ,GACZ,IAAI,IAAI,CAAC,IAAI,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,IAAI,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAEzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,+DAA+D;YAC/D,mEAAmE;YACnE,+DAA+D;YAC/D,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;YACpD,CAAC;YACD,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,IAAI,GAAG,GAAG,KAAK,CAAA;QACf,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;YACzC,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;gBACtB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAA;gBACZ,GAAG,GAAG,IAAI,CAAA;YACZ,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9B,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,CAAA;AACrD,CAAC;AAGD,yEAAyE;AACzE,wEAAwE;AACxE,uEAAuE;AACvE,yEAAyE;AACzE,sEAAsE;AACtE,+DAA+D;AAC/D,SAAS,aAAa,CAAC,KAAiB;IACtC,MAAM,CAAC,GAAG,mBAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAC/C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/C,CAAC;IACD,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAGD,0EAA0E;AAC1E,qDAAqD;AACrD,SAAS,WAAW,CAAC,OAAe;IAClC,MAAM,GAAG,GAAG,iBAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC5C,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;SAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAA;IAC7B,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;IAChC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AAC5C,CAAC;AAGD,yCAAyC;AACzC,yEAAyE;AACzE,SAAS,SAAS,CAAC,KAAa,EAAE,GAAW;;IAC3C,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACtC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAEtD,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;IACnB,OAAO,GAAG,CAAC,IAAI,CAAA;IACf,IAAI,IAAI,GAAG,OAAO,CAAA;IAClB,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACf,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,IAAI,GAAG,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAErC,oDAAoD;IACpD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IAClC,IAAI,MAAA,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,0CAAE,GAAG,0CAAG,IAAI,CAAC,0CAAG,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACrD,CAAC;IAED,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,GAAG,CAAC,KAAK,GAAG,EAAE,CAAA;IAChB,CAAC;IACD,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IAC9B,CAAC;IAED,MAAM,GAAG,GAAG,iBAAE,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,IAAI,GAAG,2BAA2B,CAAA;IAEpC,MAAM,IAAI,GAAG,IAAI,GAAG,SAAS;QAC3B,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAEzC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AAChC,CAAC;AAGD,sCAAsC;AACtC,0EAA0E;AAC1E,qDAAqD;AACrD,SAAS,MAAM,CAAC,KAAa,EAAE,GAAW;;IACxC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACtC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAE1C,qDAAqD;IACrD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IAClC,IAAI,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,0CAAE,GAAG,0CAAG,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACrD,CAAC;IAED,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;QACnB,GAAG,CAAC,EAAE,GAAG;YACP,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE;SACpB,CAAA;IACH,CAAC;IACD,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC/B,CAAC;IACD,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QACpB,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAA;IAC/D,CAAC;IACD,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QACpB,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAA;IACxC,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAE7C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AAChC,CAAC;AAGD,sCAAsC;AACtC,uEAAuE;AACvE,4EAA4E;AAC5E,qEAAqE;AACrE,SAAS,MAAM,CAAC,KAAa,EAAE,GAAW;;IACxC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAEtC,sEAAsE;IACtE,uEAAuE;IACvE,MAAM,QAAQ,GAAG,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAErE,IAAI,MAAW,CAAA;IACf,IAAI,CAAC;QACH,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAA,eAAM,EAAC,GAAG,CAAC,CAAA;IAC9C,CAAC;IACD,OAAO,CAAM,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,8CAA8C;YAC5D,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,IAAc,CAAA;IAClB,IAAI,IAAI,GAAQ,EAAE,CAAA;IAElB,IAAI,QAAQ,KAAK,OAAO,MAAM,EAAE,CAAC;QAC/B,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;IACtD,CAAC;SACI,IAAI,IAAI,IAAI,MAAM,IAAI,QAAQ,KAAK,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;QACjE,IAAI,GAAG,EAAE,GAAG,MAAM,EAAE,CAAA;QACpB,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;SACI,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,GAAG;YAC9C,0EAA0E,CAAC,CAAA;IAC7E,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACxD,CAAC;IAED,0DAA0D;IAC1D,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IAClC,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QAClB,IAAI,IAAI,GAAQ,MAAA,KAAK,CAAC,IAAI,0CAAE,GAAG,CAAA;QAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,CAAC,CAAC,CAAA;QAClB,CAAC;QACD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QACrD,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,IAAI,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;QACxB,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAE1C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AAChC,CAAC;AAGD,qDAAqD;AACrD,yEAAyE;AACzE,wCAAwC;AACxC,mDAAmD;AACnD,SAAS,SAAS,CAAC,KAAa,EAAE,MAAc,EAAE,SAAmB;;IAEnE,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAEtC,IAAI,IAAY,CAAA;IAChB,IAAI,IAAY,CAAA;IAChB,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC;SACI,CAAC;QACJ,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,GAAG,MAAM,CAAA;IACf,CAAC;IAED,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IAElC,MAAM,GAAG,GAAgB,EAAE,CAAA;IAE3B,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,MAAW,CAAA;QACf,IAAI,CAAC;YACH,MAAM,GAAG,IAAA,eAAM,EAAC,GAAG,CAAC,CAAA;QACtB,CAAC;QACD,OAAO,CAAM,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,gDAAgD;gBAC9D,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC;QAED,IAAI,KAAa,CAAA;QACjB,IAAI,GAAQ,CAAA;QAEZ,IAAI,QAAQ,KAAK,OAAO,MAAM,EAAE,CAAC;YAC/B,KAAK,GAAG,MAAM,CAAA;YACd,GAAG,GAAG,EAAE,CAAA;QACV,CAAC;aACI,IAAI,IAAI,IAAI,MAAM,IAAI,QAAQ,KAAK,OAAO,MAAM,EAAE,CAAC;YACtD,IAAI,QAAQ,KAAK,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAA;gBACnB,GAAG,GAAG,EAAE,GAAG,MAAM,EAAE,CAAA;gBACnB,OAAO,GAAG,CAAC,IAAI,CAAA;YACjB,CAAC;iBACI,CAAC;gBACJ,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAChC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,GAAG,CAAC,CAAA;gBACnD,CAAC;gBACD,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;gBACf,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;gBACzB,GAAG,GAAG,QAAQ,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAA;YAC5D,CAAC;QACH,CAAC;aACI,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,GAAG,CAAC,CAAA;QACnD,CAAC;QAED,iEAAiE;QACjE,IAAI,MAAA,MAAA,MAAA,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,0CAAE,GAAG,0CAAG,IAAI,CAAC,0CAAG,IAAI,CAAC,0CAAE,KAAK,0CAAG,KAAK,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;YACtD,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAA;QACrB,CAAC;QACD,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACtB,GAAG,CAAC,KAAK,GAAG,KAAK;iBACd,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;iBACtE,IAAI,CAAC,GAAG,CAAC,CAAA;QACd,CAAC;QAED,wDAAwD;QACxD,MAAM,OAAO,GAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAA;QACzD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,OAAO,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;YACrB,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,WAAW,GAAG,KAAK,GAAG,IAAI;YACjE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAEjB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAgBD,uEAAuE;AACvE,yEAAyE;AACzE,MAAM,SAAS,GACb,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAA;QARvE,SAAS;AAWX,sCAAsC;AACtC,yEAAyE;AACzE,gDAAgD;AAChD,qEAAqE;AACrE,yEAAyE;AACzE,mBAAmB;AACnB,wEAAwE;AACxE,4EAA4E;AAC5E,8EAA8E;AAC9E,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6DnB,CAAA;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yEAkDoD,CAAA;AAEzE,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;EAiBnB,CAAA;AAGF,SAAS,MAAM,CAAC,KAAa,EAAE,GAAW;;IACxC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACtC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAClD,IAAI,GAAG,GAAG,MAAM,CAAA;IAEhB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,IAAI,CAAA;IAC7B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,IAAI;YACjD,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAClC,oDAAoD,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAG,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,0CAAE,GAAG,0CAAG,IAAI,CAAC,CAAA;IAEzC,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACvB,GAAG,CAAC,MAAM,GAAG,IAAI,CAAA;IACnB,CAAC;IAED,uEAAuE;IACvE,yEAAyE;IACzE,uEAAuE;IACvE,2DAA2D;IAC3D,IAAI,SAAS,GAAkD,EAAE,CAAA;IACjE,IAAI,MAA4B,CAAA;IAEhC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,WAAW,GAAG,IAAI,CAAA;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;QACzC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAE1B,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI;gBAC1C,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3C,CAAA;QACH,CAAC;QAED,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QACpC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAA;IAClB,CAAC;IAED,uEAAuE;IACvE,4EAA4E;IAC5E,6CAA6C;IAC7C,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,KAAI,MAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,0CAAE,GAAG,0CAAE,IAAI,CAAA,EAAE,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;IACjC,CAAC;IAED,wEAAwE;IACxE,MAAM,GAAG,GAAG,iBAAE,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAChD,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAA;IAC9D,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAA;IAErC,MAAM,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAEtD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAEhC,OAAO;QACL,GAAG,GAAG;QACN,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3C,CAAA;AACH,CAAC;AAGD,wEAAwE;AACxE,SAAS,SAAS,CAAC,GAAQ,EAAE,IAAY;IACvC,IAAI,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,OAAO,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAA;IACf,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7B,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAA;IACf,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;AAC/D,CAAC"}
@@ -0,0 +1,10 @@
1
+ type ContextSpec = {
2
+ env: string;
3
+ stage?: string;
4
+ srvname?: string;
5
+ };
6
+ declare const ALL_SRV = "all";
7
+ declare function resolveStage(model: any, spec: ContextSpec): string;
8
+ declare function context(seneca: any, model: any, pkg: any, spec: ContextSpec): any;
9
+ export type { ContextSpec, };
10
+ export { context, resolveStage, ALL_SRV, };
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /* Copyright © 2026 Voxgig Ltd, MIT License. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ALL_SRV = void 0;
5
+ exports.context = context;
6
+ exports.resolveStage = resolveStage;
7
+ // The service name for a process running every service in-tree. AWS Lambda
8
+ // is the one deployment that overrides it: one function per service.
9
+ const ALL_SRV = 'all';
10
+ exports.ALL_SRV = ALL_SRV;
11
+ // stage resolution, most specific first:
12
+ // 1. an explicit spec.stage - the caller knows better (Lambda's STAGE)
13
+ // 2. process.env.STAGE - deploy-time override
14
+ // 3. the model's env entry stage - main.env.<env>.stage, e.g. aws.stage
15
+ // 4. the env name - a sensible last resort ('local', 'docker')
16
+ //
17
+ // (3) is the one that was being thrown away: a model could say
18
+ // `aws: { stage: 'dev' }` and every entry would still report 'aws'.
19
+ function resolveStage(model, spec) {
20
+ if (null != spec.stage && '' !== spec.stage) {
21
+ return spec.stage;
22
+ }
23
+ const fromEnvVar = 'undefined' === typeof process ? undefined :
24
+ process.env && process.env.STAGE;
25
+ if (null != fromEnvVar && '' !== fromEnvVar) {
26
+ return fromEnvVar;
27
+ }
28
+ const envdef = model && model.main && model.main.env &&
29
+ model.main.env[spec.env];
30
+ if (envdef && null != envdef.stage && '' !== envdef.stage) {
31
+ return envdef.stage;
32
+ }
33
+ return spec.env;
34
+ }
35
+ // context(seneca, model, pkg, { env }): set the runtime context an entry
36
+ // needs. Returns seneca so it can be chained.
37
+ //
38
+ // `env` is required and NOT derived: it is the one thing the model cannot
39
+ // tell us, because it names which entry is running. It need not be a model
40
+ // env name - 'lambda' and 'test' are entries without a matching main.env
41
+ // key - so it is deliberately not validated against the model.
42
+ function context(seneca, model, pkg, spec) {
43
+ if (null == spec || 'string' !== typeof spec.env || '' === spec.env) {
44
+ throw new Error('voxgig-system: context requires a non-empty `env` string');
45
+ }
46
+ seneca.context.model = model;
47
+ seneca.context.pkg = pkg;
48
+ seneca.context.env = spec.env;
49
+ seneca.context.stage = resolveStage(model, spec);
50
+ seneca.context.srvname = spec.srvname || ALL_SRV;
51
+ return seneca;
52
+ }
53
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../lib/context.ts"],"names":[],"mappings":";AAAA,+CAA+C;;;QAmF7C,OAAO;QACP,YAAY;AA9Dd,2EAA2E;AAC3E,qEAAqE;AACrE,MAAM,OAAO,GAAG,KAAK,CAAA;QA6DnB,OAAO;AA1DT,yCAAyC;AACzC,8EAA8E;AAC9E,0DAA0D;AAC1D,0EAA0E;AAC1E,gFAAgF;AAChF,EAAE;AACF,+DAA+D;AAC/D,oEAAoE;AACpE,SAAS,YAAY,CAAC,KAAU,EAAE,IAAiB;IACjD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAA;IAClC,IAAI,IAAI,IAAI,UAAU,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;QAC5C,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG;QAClD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1B,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC,KAAK,CAAA;IACrB,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAA;AACjB,CAAC;AAGD,yEAAyE;AACzE,8CAA8C;AAC9C,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,yEAAyE;AACzE,+DAA+D;AAC/D,SAAS,OAAO,CAAC,MAAW,EAAE,KAAU,EAAE,GAAQ,EAAE,IAAiB;IACnE,IAAI,IAAI,IAAI,IAAI,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;IAC5B,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,CAAA;IACxB,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;IAC7B,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAChD,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAA;IAEhD,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,13 @@
1
+ declare const DEFAULT_PREFIX = "SENECA_";
2
+ type DevtoolsSpec = {
3
+ env: string;
4
+ prefix?: string;
5
+ };
6
+ declare function envFlag(name: string, raw: string | undefined): boolean | undefined;
7
+ declare function devtools(seneca: any, model: any, spec: DevtoolsSpec): {
8
+ test: boolean;
9
+ repl: boolean;
10
+ port?: number;
11
+ };
12
+ export type { DevtoolsSpec, };
13
+ export { devtools, envFlag, DEFAULT_PREFIX, };
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /* Copyright © 2026 Voxgig Ltd, MIT License. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DEFAULT_PREFIX = void 0;
5
+ exports.devtools = devtools;
6
+ exports.envFlag = envFlag;
7
+ // devtools: the development-only behaviour an environment entry switches
8
+ // on - Seneca's test mode, and the @seneca/repl dev REPL.
9
+ //
10
+ // These were hard-coded in the generated web entry: seneca.test() ran
11
+ // unconditionally, and the REPL was on unless a bare `REPL=false` said
12
+ // otherwise. Neither was visible in the model, so what a deployment
13
+ // actually enabled could not be read off it - and `REPL` is a name generic
14
+ // enough to collide with anything else in the environment.
15
+ //
16
+ // Now the model says what a deployment enables, and the env vars that
17
+ // override it are namespaced.
18
+ //
19
+ // @seneca/repl has no `active` option - its options shape is CLOSED, and
20
+ // passing one fails at load with "Plugin repl: option value is not valid".
21
+ // So enabling is a conditional `use`, not a plugin flag. If that changes
22
+ // upstream, this is the one place to simplify.
23
+ // Where the flags come from, most specific first:
24
+ // 1. <PREFIX>TEST / <PREFIX>REPL - runtime override
25
+ // 2. main.env.<env>.dev.<flag> - per-environment, from the model
26
+ // 3. main.conf.dev.<flag> - project default, from the model
27
+ // 4. false - a deployment enables dev tooling
28
+ // deliberately, never by accident
29
+ const DEFAULT_PREFIX = 'SENECA_';
30
+ exports.DEFAULT_PREFIX = DEFAULT_PREFIX;
31
+ // Parse an env var as a boolean. Absent or empty means "not set", so the
32
+ // next source down decides. Anything other than a recognised true/false
33
+ // word is an error rather than a silent false - `SENECA_REPL=yes` meaning
34
+ // "off" would be a miserable half hour.
35
+ function envFlag(name, raw) {
36
+ if (null == raw || '' === raw) {
37
+ return undefined;
38
+ }
39
+ const val = raw.trim().toLowerCase();
40
+ if ('true' === val || '1' === val || 'yes' === val || 'on' === val) {
41
+ return true;
42
+ }
43
+ if ('false' === val || '0' === val || 'no' === val || 'off' === val) {
44
+ return false;
45
+ }
46
+ throw new Error('voxgig-system: ' + name + ' must be a boolean ' +
47
+ '(true/false, 1/0, yes/no, on/off), got: ' + JSON.stringify(raw));
48
+ }
49
+ function envPrefix(model, spec) {
50
+ if (null != spec.prefix) {
51
+ if ('string' !== typeof spec.prefix) {
52
+ throw new Error('voxgig-system: devtools `prefix` must be a string');
53
+ }
54
+ return spec.prefix;
55
+ }
56
+ const core = model && model.main && model.main.conf && model.main.conf.core;
57
+ if (core && 'string' === typeof core.envprefix && '' !== core.envprefix) {
58
+ return core.envprefix;
59
+ }
60
+ return DEFAULT_PREFIX;
61
+ }
62
+ // Resolve one dev flag through the four sources above.
63
+ function devFlag(model, spec, flag, env) {
64
+ const name = envPrefix(model, spec) + flag.toUpperCase();
65
+ const fromEnv = envFlag(name, env[name]);
66
+ if (undefined !== fromEnv) {
67
+ return fromEnv;
68
+ }
69
+ const main = (model && model.main) || {};
70
+ const envdef = main.env && main.env[spec.env];
71
+ if (envdef && envdef.dev && null != envdef.dev[flag]) {
72
+ return !!envdef.dev[flag];
73
+ }
74
+ const conf = main.conf;
75
+ if (conf && conf.dev && null != conf.dev[flag]) {
76
+ return !!conf.dev[flag];
77
+ }
78
+ return false;
79
+ }
80
+ // The REPL port: <PREFIX>REPL_PORT, else the model's conf.port.repl.
81
+ function replPort(model, spec, env) {
82
+ const name = envPrefix(model, spec) + 'REPL_PORT';
83
+ const raw = env[name];
84
+ if (null != raw && '' !== raw) {
85
+ // Test the RAW string, not parseInt's result: parseInt('40404x') is
86
+ // 40404 and parseInt('12.5') is 12, so checking only the number back
87
+ // would silently accept a malformed port.
88
+ const val = raw.trim();
89
+ if (!/^\d+$/.test(val)) {
90
+ throw new Error('voxgig-system: ' + name + ' must be an integer, got: ' +
91
+ JSON.stringify(raw));
92
+ }
93
+ return parseInt(val, 10);
94
+ }
95
+ const port = model && model.main && model.main.conf &&
96
+ model.main.conf.port && model.main.conf.port.repl;
97
+ return 'number' === typeof port ? port : undefined;
98
+ }
99
+ // devtools(seneca, model, { env }): apply the dev-only behaviour this
100
+ // environment declares. Returns { test, repl, port } - what it decided -
101
+ // so an entry can log it or a test can assert on it.
102
+ //
103
+ // The REPL plugin is loaded only when enabled: it is the project's
104
+ // dependency, not this package's.
105
+ function devtools(seneca, model, spec) {
106
+ if (null == spec || 'string' !== typeof spec.env || '' === spec.env) {
107
+ throw new Error('voxgig-system: devtools requires a non-empty `env` string');
108
+ }
109
+ const procenv = 'undefined' === typeof process ? {} : (process.env || {});
110
+ const test = devFlag(model, spec, 'test', procenv);
111
+ const repl = devFlag(model, spec, 'repl', procenv);
112
+ const port = repl ? replPort(model, spec, procenv) : undefined;
113
+ if (test) {
114
+ seneca.test();
115
+ }
116
+ if (repl) {
117
+ seneca.use('repl', null == port ? {} : { port });
118
+ }
119
+ return { test, repl, port };
120
+ }
121
+ //# sourceMappingURL=devtools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../lib/devtools.ts"],"names":[],"mappings":"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"}
package/dist/system.d.ts CHANGED
@@ -3,6 +3,8 @@ import { Utility } from './lib/utility';
3
3
  import { MakeSrv } from './srv/make';
4
4
  import { addEntity, addSrv, addMsg, addFields, addEnv, resolveModelFiles } from './lib/add';
5
5
  import { listTemplates, ejectFragment, ejectCode, diffTemplates } from './lib/template';
6
+ import { context } from './lib/context';
7
+ import { devtools } from './lib/devtools';
6
8
  declare function messages(seneca: any, options: any, reload: any): void;
7
9
  declare function gubuify(params: any, Gubu: any): any;
8
10
  declare function prepare(seneca: any, require: any): void;
@@ -34,4 +36,4 @@ declare const Template: {
34
36
  ejectCode: typeof ejectCode;
35
37
  diff: typeof diffTemplates;
36
38
  };
37
- export { Add, Template, gubuify, System, MakeSrv, Utility, Local, Live, };
39
+ export { Add, Template, context, devtools, gubuify, System, MakeSrv, Utility, Local, Live, };
package/dist/system.js CHANGED
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.Utility = exports.MakeSrv = exports.System = exports.Template = exports.Add = void 0;
7
+ exports.Utility = exports.MakeSrv = exports.System = exports.devtools = exports.context = exports.Template = exports.Add = void 0;
8
8
  exports.gubuify = gubuify;
9
9
  exports.Local = Local;
10
10
  exports.Live = Live;
@@ -16,6 +16,10 @@ const make_1 = require("./srv/make");
16
16
  Object.defineProperty(exports, "MakeSrv", { enumerable: true, get: function () { return make_1.MakeSrv; } });
17
17
  const add_1 = require("./lib/add");
18
18
  const template_1 = require("./lib/template");
19
+ const context_1 = require("./lib/context");
20
+ Object.defineProperty(exports, "context", { enumerable: true, get: function () { return context_1.context; } });
21
+ const devtools_1 = require("./lib/devtools");
22
+ Object.defineProperty(exports, "devtools", { enumerable: true, get: function () { return devtools_1.devtools; } });
19
23
  const { srvmsgs, deep } = utility_1.Utility;
20
24
  function messages(seneca, options, reload) {
21
25
  let srvname = seneca.fixedargs.plugin$.name.replace(/^srv_/, '');
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../system.ts"],"names":[],"mappings":";AAAA,+CAA+C;;;;;;QA8O7C,OAAO;QAIP,KAAK;QACL,IAAI;AAhPN,gDAAuB;AACvB,4CAAmB;AAOnB,2CAAuC;wFAA9B,iBAAO;AAEhB,qCAAoC;wFAA3B,cAAO;AAEhB,mCAA2F;AAC3F,6CAAuF;AAIvF,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,iBAAO,CAAA;AAGjC,SAAS,QAAQ,CAAC,MAAW,EAAE,OAAY,EAAE,MAAW;IACtD,IAAI,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAEhE,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAA;IAChC,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IAEnC,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,MAAM,GAAa,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;QAExD,IAAI,MAAM,GAAG,EAAE,CAAA;QAEf,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACxE,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACzB,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,CAAC;AACH,CAAC;AAGD,uDAAuD;AACvD,SAAS,OAAO,CAAC,MAAW,EAAE,IAAS;IACrC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;QACnB,OAAO,MAAM,CAAA;IACf,CAAC;IACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAA;AACzC,CAAC;AAGD,uEAAuE;AACvE,qEAAqE;AACrE,yEAAyE;AACzE,wEAAwE;AACxE,oEAAoE;AACpE,iCAAiC;AACjC,SAAS,YAAY,CAAC,MAAW,EAAE,IAAS;IAC1C,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;QACnB,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,IAAI,GAAG,KAAK,CAAA;IAChB,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,GAAG,IAAI,CAAA;QACX,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC;IAED,KAAK,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,IAAI,CAAA;QACZ,IAAI,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;QACnB,IAAI,QAAQ,KAAK,OAAO,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACrC,CAAC;aACI,IACH,QAAQ,KAAK,OAAO,EAAE;YACtB,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CACxB,UAAU,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClF,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAC1C,EACD,CAAC;YACD,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAA;YACvB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;YAChB,OAAO,MAAM,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;AAC1C,CAAC;AAGD,SAAS,OAAO,CAAC,GAAQ;IACvB,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA;IACtB,CAAC;IAED,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAExC,gDAAgD;IAChD,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC5D,OAAO,IAAI,CAAA;AACb,CAAC;AAGD,SAAS,OAAO,CAAC,MAAW,EAAE,OAAY;IACxC,IAAI,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAEhE,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,GAAG,UAAU,CAAC,CAAA;QACxD,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IAC/B,CAAC;IACD,OAAO,CAAM,EAAE,CAAC;QACd,IAAI,kBAAkB,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,CAAC,CAAA;QACT,CAAC;IACH,CAAC;AACH,CAAC;AAID,SAAS,KAAK,CAAY,OAAY;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAA;IAEjC,qCAAqC;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAA;IAExC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,IAAI,IAAI,GAAW,KAAK,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,GAAG,GAAQ,KAAK,CAAC,CAAC,CAAC,CAAA;QAEvB,IAAI,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC,CAAA;QAEvD,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;YACrD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACjC,CAAC;aACI,CAAC;YACJ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;AAEH,CAAC;AAcD,SAAS,IAAI,CAEX,OAAoB;IAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAA;IAEhC,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAA;IAErB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAA;IAE5B,IAAI,IAAI,GAAG,MAAM;SACd,OAAO,CAAC,IAAI,CAAC;SACb,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QACxB,IAAI,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QACpB,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACpC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAA;QACrB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACpB,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,EAAG,EAAY,CAAC,CAAA;IAEpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAEjB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;AACrC,CAAC;AAGD,SAAS,OAAO,CAAC,MAAW,EAAE,IAAW,EAAE,OAAoB,EAAE,KAAU;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAA;IAEjC,qCAAqC;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAA;IAExC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;QACnB,IAAI,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC,CAAA;QAEvD,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;YACrD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACnC,CAAC;aACI,CAAC;YACJ,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;AAEH,CAAC;AAID,MAAM,MAAM,GAAG;IACb,QAAQ;IACR,OAAO;CACR,CAAA;QA2BC,MAAM;AApBR,MAAM,GAAG,GAAG;IACV,MAAM,EAAE,eAAS;IACjB,GAAG,EAAE,YAAM;IACX,GAAG,EAAE,YAAM;IACX,MAAM,EAAE,eAAS;IACjB,GAAG,EAAE,YAAM;IACX,iBAAiB,EAAjB,uBAAiB;CAClB,CAAA;QAUC,GAAG;AARL,MAAM,QAAQ,GAAG;IACf,IAAI,EAAE,wBAAa;IACnB,KAAK,EAAE,wBAAa;IACpB,SAAS,EAAT,oBAAS;IACT,IAAI,EAAE,wBAAa;CACpB,CAAA;QAIC,QAAQ"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../system.ts"],"names":[],"mappings":"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"}
package/lib/add.ts CHANGED
@@ -31,6 +31,12 @@ export type AddResult = {
31
31
  file: string // file appended to
32
32
  text: string // the appended block ('' when skipped)
33
33
  skipped?: boolean // true when the element already exists (no change)
34
+ merged?: string[] // paths appended into an element that already existed
35
+ conflicts?: { // paths already set to a DIFFERENT value; see below
36
+ path: string
37
+ current: any
38
+ wanted: any
39
+ }[]
34
40
  }
35
41
 
36
42
 
@@ -180,6 +186,58 @@ function parseArg(arg: string, kind: string): { name: string, def: any } {
180
186
  }
181
187
 
182
188
 
189
+ // Split a definition against what the compiled model already holds.
190
+ //
191
+ // `fresh` is the sub-tree of paths NOT yet set - safe to append, because
192
+ // aontu unifies it in. `conflicts` are paths already set to a DIFFERENT
193
+ // value: appending those is NOT a merge, it is a build error -
194
+ //
195
+ // [aontu/scalar_value]: Cannot unify values at path $.main.env.aws.stage
196
+ // Cannot unify value: "prd" with value: "dev"
197
+ //
198
+ // aontu unifies, it does not override, so a changed value cannot be
199
+ // applied by appending. It is reported for the user to edit by hand,
200
+ // rather than written and left to break the next model build.
201
+ function diffDef(want: any, have: any, path: string): {
202
+ fresh: any, conflicts: { path: string, current: any, wanted: any }[]
203
+ } {
204
+ const conflicts: { path: string, current: any, wanted: any }[] = []
205
+
206
+ function walk(w: any, h: any, p: string): any {
207
+ if (undefined === h) {
208
+ return w
209
+ }
210
+
211
+ const bothMaps =
212
+ null != w && 'object' === typeof w && !Array.isArray(w) &&
213
+ null != h && 'object' === typeof h && !Array.isArray(h)
214
+
215
+ if (!bothMaps) {
216
+ // A leaf (or a shape change): equal is a no-op, different is a
217
+ // conflict. Arrays compare whole - aontu unifies them elementwise,
218
+ // and second-guessing that here would be worse than saying so.
219
+ if (JSON.stringify(w) !== JSON.stringify(h)) {
220
+ conflicts.push({ path: p, current: h, wanted: w })
221
+ }
222
+ return undefined
223
+ }
224
+
225
+ const out: any = {}
226
+ let any = false
227
+ for (const k of Object.keys(w)) {
228
+ const sub = walk(w[k], h[k], p + '.' + k)
229
+ if (undefined !== sub) {
230
+ out[k] = sub
231
+ any = true
232
+ }
233
+ }
234
+ return any ? out : undefined
235
+ }
236
+
237
+ return { fresh: walk(want, have, path), conflicts }
238
+ }
239
+
240
+
183
241
  // The last compiled model (model.json next to the model source), used to
184
242
  // make the add operations idempotent: an element that already exists in
185
243
  // the compiled model is skipped rather than appended again. Formatting
@@ -609,7 +667,8 @@ sys: apikey: {
609
667
 
610
668
  function addEnv(start: string, arg: string): AddResult {
611
669
  const files = resolveModelFiles(start)
612
- const { name, def } = parseArg(arg, 'env')
670
+ const { name, def: wanted } = parseArg(arg, 'env')
671
+ let def = wanted
613
672
 
614
673
  const kind = def.kind || name
615
674
  if (!ENV_KINDS.includes(kind)) {
@@ -618,16 +677,36 @@ function addEnv(start: string, arg: string): AddResult {
618
677
  '; use {name:..., kind:...} for a custom-named env)')
619
678
  }
620
679
 
621
- // Idempotent: environment already in the compiled model.
622
680
  const model = compiledModel(files)
623
- if (model?.main?.env?.[name]) {
624
- return { file: files.model, text: '', skipped: true }
625
- }
681
+ const existing = model?.main?.env?.[name]
626
682
 
627
683
  if (null == def.active) {
628
684
  def.active = true
629
685
  }
630
686
 
687
+ // Already declared: MERGE rather than skip outright. Only the keys the
688
+ // model does not already carry are appended - re-stating an existing key
689
+ // with a different value would not override it, it would fail the next
690
+ // model build (aontu unifies). Those are reported instead.
691
+ let conflicts: { path: string, current: any, wanted: any }[] = []
692
+ let merged: string[] | undefined
693
+
694
+ if (existing) {
695
+ const path = 'main.env.' + name
696
+ const diff = diffDef(def, existing, path)
697
+ conflicts = diff.conflicts
698
+
699
+ if (null == diff.fresh) {
700
+ return {
701
+ file: files.model, text: '', skipped: true,
702
+ ...(conflicts.length ? { conflicts } : {}),
703
+ }
704
+ }
705
+
706
+ merged = leafPaths(diff.fresh, path)
707
+ def = diff.fresh
708
+ }
709
+
631
710
  // The web env needs the auth + generic entity services declared in the
632
711
  // model so MakeSrv wires the generated service files (idempotent: only when
633
712
  // the auth service is not already declared).
@@ -645,5 +724,24 @@ function addEnv(start: string, arg: string): AddResult {
645
724
 
646
725
  const text = '\n' + prefix + name + ': ' + fmt(def, 0)
647
726
 
648
- return append(target, text)
727
+ const res = append(target, text)
728
+
729
+ return {
730
+ ...res,
731
+ ...(merged ? { merged } : {}),
732
+ ...(conflicts.length ? { conflicts } : {}),
733
+ }
734
+ }
735
+
736
+
737
+ // Every leaf path in a definition, for reporting what a merge appended.
738
+ function leafPaths(def: any, path: string): string[] {
739
+ if (null == def || 'object' !== typeof def || Array.isArray(def)) {
740
+ return [path]
741
+ }
742
+ const keys = Object.keys(def)
743
+ if (0 === keys.length) {
744
+ return [path]
745
+ }
746
+ return keys.flatMap((k) => leafPaths(def[k], path + '.' + k))
649
747
  }
package/lib/context.ts ADDED
@@ -0,0 +1,87 @@
1
+ /* Copyright © 2026 Voxgig Ltd, MIT License. */
2
+
3
+ // seneca.context: the runtime facts every environment entry has to put on
4
+ // the Seneca instance before services load.
5
+ //
6
+ // This used to be five hand-written assignments at the top of every
7
+ // generated entry (local, docker, vm, aws, azure, cloudflare, web, and the
8
+ // test setups). Copy-paste let them drift: azure never set `stage` or
9
+ // `srvname`, cloudflare set none of them, and the web runner reported
10
+ // `env: 'local'` when it was the web environment. Nothing read those
11
+ // fields yet, so the drift was silent - which is exactly why it spread.
12
+ //
13
+ // One call now sets all five, and everything that CAN be derived is.
14
+
15
+
16
+ type ContextSpec = {
17
+ env: string // which entry this is - the only fact not in the model
18
+ stage?: string // deploy stage; see the resolution order below
19
+ srvname?: string // 'all' for a single process, the service for one-per-srv
20
+ }
21
+
22
+
23
+ // The service name for a process running every service in-tree. AWS Lambda
24
+ // is the one deployment that overrides it: one function per service.
25
+ const ALL_SRV = 'all'
26
+
27
+
28
+ // stage resolution, most specific first:
29
+ // 1. an explicit spec.stage - the caller knows better (Lambda's STAGE)
30
+ // 2. process.env.STAGE - deploy-time override
31
+ // 3. the model's env entry stage - main.env.<env>.stage, e.g. aws.stage
32
+ // 4. the env name - a sensible last resort ('local', 'docker')
33
+ //
34
+ // (3) is the one that was being thrown away: a model could say
35
+ // `aws: { stage: 'dev' }` and every entry would still report 'aws'.
36
+ function resolveStage(model: any, spec: ContextSpec): string {
37
+ if (null != spec.stage && '' !== spec.stage) {
38
+ return spec.stage
39
+ }
40
+
41
+ const fromEnvVar = 'undefined' === typeof process ? undefined :
42
+ process.env && process.env.STAGE
43
+ if (null != fromEnvVar && '' !== fromEnvVar) {
44
+ return fromEnvVar
45
+ }
46
+
47
+ const envdef = model && model.main && model.main.env &&
48
+ model.main.env[spec.env]
49
+ if (envdef && null != envdef.stage && '' !== envdef.stage) {
50
+ return envdef.stage
51
+ }
52
+
53
+ return spec.env
54
+ }
55
+
56
+
57
+ // context(seneca, model, pkg, { env }): set the runtime context an entry
58
+ // needs. Returns seneca so it can be chained.
59
+ //
60
+ // `env` is required and NOT derived: it is the one thing the model cannot
61
+ // tell us, because it names which entry is running. It need not be a model
62
+ // env name - 'lambda' and 'test' are entries without a matching main.env
63
+ // key - so it is deliberately not validated against the model.
64
+ function context(seneca: any, model: any, pkg: any, spec: ContextSpec): any {
65
+ if (null == spec || 'string' !== typeof spec.env || '' === spec.env) {
66
+ throw new Error('voxgig-system: context requires a non-empty `env` string')
67
+ }
68
+
69
+ seneca.context.model = model
70
+ seneca.context.pkg = pkg
71
+ seneca.context.env = spec.env
72
+ seneca.context.stage = resolveStage(model, spec)
73
+ seneca.context.srvname = spec.srvname || ALL_SRV
74
+
75
+ return seneca
76
+ }
77
+
78
+
79
+ export type {
80
+ ContextSpec,
81
+ }
82
+
83
+ export {
84
+ context,
85
+ resolveStage,
86
+ ALL_SRV,
87
+ }
@@ -0,0 +1,169 @@
1
+ /* Copyright © 2026 Voxgig Ltd, MIT License. */
2
+
3
+ // devtools: the development-only behaviour an environment entry switches
4
+ // on - Seneca's test mode, and the @seneca/repl dev REPL.
5
+ //
6
+ // These were hard-coded in the generated web entry: seneca.test() ran
7
+ // unconditionally, and the REPL was on unless a bare `REPL=false` said
8
+ // otherwise. Neither was visible in the model, so what a deployment
9
+ // actually enabled could not be read off it - and `REPL` is a name generic
10
+ // enough to collide with anything else in the environment.
11
+ //
12
+ // Now the model says what a deployment enables, and the env vars that
13
+ // override it are namespaced.
14
+ //
15
+ // @seneca/repl has no `active` option - its options shape is CLOSED, and
16
+ // passing one fails at load with "Plugin repl: option value is not valid".
17
+ // So enabling is a conditional `use`, not a plugin flag. If that changes
18
+ // upstream, this is the one place to simplify.
19
+
20
+
21
+ // Where the flags come from, most specific first:
22
+ // 1. <PREFIX>TEST / <PREFIX>REPL - runtime override
23
+ // 2. main.env.<env>.dev.<flag> - per-environment, from the model
24
+ // 3. main.conf.dev.<flag> - project default, from the model
25
+ // 4. false - a deployment enables dev tooling
26
+ // deliberately, never by accident
27
+ const DEFAULT_PREFIX = 'SENECA_'
28
+
29
+
30
+ type DevtoolsSpec = {
31
+ env: string // which entry is running
32
+ prefix?: string // env var prefix; default SENECA_
33
+ }
34
+
35
+
36
+ // Parse an env var as a boolean. Absent or empty means "not set", so the
37
+ // next source down decides. Anything other than a recognised true/false
38
+ // word is an error rather than a silent false - `SENECA_REPL=yes` meaning
39
+ // "off" would be a miserable half hour.
40
+ function envFlag(name: string, raw: string | undefined): boolean | undefined {
41
+ if (null == raw || '' === raw) {
42
+ return undefined
43
+ }
44
+
45
+ const val = raw.trim().toLowerCase()
46
+
47
+ if ('true' === val || '1' === val || 'yes' === val || 'on' === val) {
48
+ return true
49
+ }
50
+ if ('false' === val || '0' === val || 'no' === val || 'off' === val) {
51
+ return false
52
+ }
53
+
54
+ throw new Error(
55
+ 'voxgig-system: ' + name + ' must be a boolean ' +
56
+ '(true/false, 1/0, yes/no, on/off), got: ' + JSON.stringify(raw))
57
+ }
58
+
59
+
60
+ function envPrefix(model: any, spec: DevtoolsSpec): string {
61
+ if (null != spec.prefix) {
62
+ if ('string' !== typeof spec.prefix) {
63
+ throw new Error('voxgig-system: devtools `prefix` must be a string')
64
+ }
65
+ return spec.prefix
66
+ }
67
+
68
+ const core = model && model.main && model.main.conf && model.main.conf.core
69
+ if (core && 'string' === typeof core.envprefix && '' !== core.envprefix) {
70
+ return core.envprefix
71
+ }
72
+
73
+ return DEFAULT_PREFIX
74
+ }
75
+
76
+
77
+ // Resolve one dev flag through the four sources above.
78
+ function devFlag(
79
+ model: any, spec: DevtoolsSpec, flag: string, env: NodeJS.ProcessEnv
80
+ ): boolean {
81
+ const name = envPrefix(model, spec) + flag.toUpperCase()
82
+
83
+ const fromEnv = envFlag(name, env[name])
84
+ if (undefined !== fromEnv) {
85
+ return fromEnv
86
+ }
87
+
88
+ const main = (model && model.main) || {}
89
+
90
+ const envdef = main.env && main.env[spec.env]
91
+ if (envdef && envdef.dev && null != envdef.dev[flag]) {
92
+ return !!envdef.dev[flag]
93
+ }
94
+
95
+ const conf = main.conf
96
+ if (conf && conf.dev && null != conf.dev[flag]) {
97
+ return !!conf.dev[flag]
98
+ }
99
+
100
+ return false
101
+ }
102
+
103
+
104
+ // The REPL port: <PREFIX>REPL_PORT, else the model's conf.port.repl.
105
+ function replPort(model: any, spec: DevtoolsSpec, env: NodeJS.ProcessEnv):
106
+ number | undefined {
107
+ const name = envPrefix(model, spec) + 'REPL_PORT'
108
+ const raw = env[name]
109
+
110
+ if (null != raw && '' !== raw) {
111
+ // Test the RAW string, not parseInt's result: parseInt('40404x') is
112
+ // 40404 and parseInt('12.5') is 12, so checking only the number back
113
+ // would silently accept a malformed port.
114
+ const val = raw.trim()
115
+ if (!/^\d+$/.test(val)) {
116
+ throw new Error(
117
+ 'voxgig-system: ' + name + ' must be an integer, got: ' +
118
+ JSON.stringify(raw))
119
+ }
120
+ return parseInt(val, 10)
121
+ }
122
+
123
+ const port = model && model.main && model.main.conf &&
124
+ model.main.conf.port && model.main.conf.port.repl
125
+
126
+ return 'number' === typeof port ? port : undefined
127
+ }
128
+
129
+
130
+ // devtools(seneca, model, { env }): apply the dev-only behaviour this
131
+ // environment declares. Returns { test, repl, port } - what it decided -
132
+ // so an entry can log it or a test can assert on it.
133
+ //
134
+ // The REPL plugin is loaded only when enabled: it is the project's
135
+ // dependency, not this package's.
136
+ function devtools(seneca: any, model: any, spec: DevtoolsSpec): {
137
+ test: boolean, repl: boolean, port?: number
138
+ } {
139
+ if (null == spec || 'string' !== typeof spec.env || '' === spec.env) {
140
+ throw new Error('voxgig-system: devtools requires a non-empty `env` string')
141
+ }
142
+
143
+ const procenv = 'undefined' === typeof process ? {} : (process.env || {})
144
+
145
+ const test = devFlag(model, spec, 'test', procenv)
146
+ const repl = devFlag(model, spec, 'repl', procenv)
147
+ const port = repl ? replPort(model, spec, procenv) : undefined
148
+
149
+ if (test) {
150
+ seneca.test()
151
+ }
152
+
153
+ if (repl) {
154
+ seneca.use('repl', null == port ? {} : { port })
155
+ }
156
+
157
+ return { test, repl, port }
158
+ }
159
+
160
+
161
+ export type {
162
+ DevtoolsSpec,
163
+ }
164
+
165
+ export {
166
+ devtools,
167
+ envFlag,
168
+ DEFAULT_PREFIX,
169
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voxgig/system",
3
- "version": "1.11.0",
3
+ "version": "1.13.0",
4
4
  "main": "dist/system.js",
5
5
  "type": "commonjs",
6
6
  "types": "dist/system.d.ts",
package/system.ts CHANGED
@@ -15,6 +15,8 @@ import { MakeSrv } from './srv/make'
15
15
 
16
16
  import { addEntity, addSrv, addMsg, addFields, addEnv, resolveModelFiles } from './lib/add'
17
17
  import { listTemplates, ejectFragment, ejectCode, diffTemplates } from './lib/template'
18
+ import { context } from './lib/context'
19
+ import { devtools } from './lib/devtools'
18
20
 
19
21
 
20
22
 
@@ -236,6 +238,8 @@ const Template = {
236
238
  export {
237
239
  Add,
238
240
  Template,
241
+ context,
242
+ devtools,
239
243
  gubuify,
240
244
  System,
241
245
  MakeSrv,