@uwmd/core 1.1.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/README.md +3 -3
  2. package/dist/agents/bancroft.d.ts +22 -1
  3. package/dist/agents/bancroft.d.ts.map +1 -1
  4. package/dist/agents/bancroft.js +86 -60
  5. package/dist/agents/bancroft.js.map +1 -1
  6. package/dist/agents/provider.d.ts +62 -0
  7. package/dist/agents/provider.d.ts.map +1 -0
  8. package/dist/agents/provider.js +28 -0
  9. package/dist/agents/provider.js.map +1 -0
  10. package/dist/agents/providers/anthropic.d.ts +20 -0
  11. package/dist/agents/providers/anthropic.d.ts.map +1 -0
  12. package/dist/agents/providers/anthropic.js +104 -0
  13. package/dist/agents/providers/anthropic.js.map +1 -0
  14. package/dist/agents/providers/replay.d.ts +46 -0
  15. package/dist/agents/providers/replay.d.ts.map +1 -0
  16. package/dist/agents/providers/replay.js +162 -0
  17. package/dist/agents/providers/replay.js.map +1 -0
  18. package/dist/agents/schemas.d.ts +3 -3
  19. package/dist/agents/schemas.d.ts.map +1 -1
  20. package/dist/agents/schemas.js.map +1 -1
  21. package/dist/browser.d.ts +26 -3
  22. package/dist/browser.d.ts.map +1 -1
  23. package/dist/browser.js +23 -3
  24. package/dist/browser.js.map +1 -1
  25. package/dist/calc/builtins.d.ts +10 -0
  26. package/dist/calc/builtins.d.ts.map +1 -1
  27. package/dist/calc/builtins.js +64 -42
  28. package/dist/calc/builtins.js.map +1 -1
  29. package/dist/calc/errors.js +1 -1
  30. package/dist/calc/evaluator.js +6 -2
  31. package/dist/calc/evaluator.js.map +1 -1
  32. package/dist/calc/index.d.ts +7 -0
  33. package/dist/calc/index.d.ts.map +1 -1
  34. package/dist/calc/index.js +13 -1
  35. package/dist/calc/index.js.map +1 -1
  36. package/dist/calc/quantize.d.ts +56 -0
  37. package/dist/calc/quantize.d.ts.map +1 -0
  38. package/dist/calc/quantize.js +116 -0
  39. package/dist/calc/quantize.js.map +1 -0
  40. package/dist/cli-packages.d.ts +11 -0
  41. package/dist/cli-packages.d.ts.map +1 -0
  42. package/dist/cli-packages.js +177 -0
  43. package/dist/cli-packages.js.map +1 -0
  44. package/dist/cli.js +424 -28
  45. package/dist/cli.js.map +1 -1
  46. package/dist/context.js +23 -23
  47. package/dist/deal-package-context.d.ts +52 -0
  48. package/dist/deal-package-context.d.ts.map +1 -0
  49. package/dist/deal-package-context.js +132 -0
  50. package/dist/deal-package-context.js.map +1 -0
  51. package/dist/deal-package-zip.d.ts +36 -0
  52. package/dist/deal-package-zip.d.ts.map +1 -0
  53. package/dist/deal-package-zip.js +132 -0
  54. package/dist/deal-package-zip.js.map +1 -0
  55. package/dist/deal-package.d.ts +82 -0
  56. package/dist/deal-package.d.ts.map +1 -0
  57. package/dist/deal-package.js +189 -0
  58. package/dist/deal-package.js.map +1 -0
  59. package/dist/defaults.d.ts +48 -0
  60. package/dist/defaults.d.ts.map +1 -1
  61. package/dist/defaults.js +512 -0
  62. package/dist/defaults.js.map +1 -1
  63. package/dist/index.d.ts +32 -3
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +27 -3
  66. package/dist/index.js.map +1 -1
  67. package/dist/init.js +1 -1
  68. package/dist/init.js.map +1 -1
  69. package/dist/integrity.d.ts +9 -0
  70. package/dist/integrity.d.ts.map +1 -1
  71. package/dist/integrity.js +12 -2
  72. package/dist/integrity.js.map +1 -1
  73. package/dist/lease-abstract.d.ts +82 -0
  74. package/dist/lease-abstract.d.ts.map +1 -0
  75. package/dist/lease-abstract.js +183 -0
  76. package/dist/lease-abstract.js.map +1 -0
  77. package/dist/lite-bridge.d.ts +58 -0
  78. package/dist/lite-bridge.d.ts.map +1 -0
  79. package/dist/lite-bridge.js +525 -0
  80. package/dist/lite-bridge.js.map +1 -0
  81. package/dist/lite.d.ts +63 -0
  82. package/dist/lite.d.ts.map +1 -0
  83. package/dist/lite.js +362 -0
  84. package/dist/lite.js.map +1 -0
  85. package/dist/modules.d.ts.map +1 -1
  86. package/dist/modules.js +278 -13
  87. package/dist/modules.js.map +1 -1
  88. package/dist/packs/excel-emit.d.ts +18 -1
  89. package/dist/packs/excel-emit.d.ts.map +1 -1
  90. package/dist/packs/excel-emit.js +18 -1
  91. package/dist/packs/excel-emit.js.map +1 -1
  92. package/dist/packs/hospitality.d.ts +3 -0
  93. package/dist/packs/hospitality.d.ts.map +1 -0
  94. package/dist/packs/hospitality.js +122 -0
  95. package/dist/packs/hospitality.js.map +1 -0
  96. package/dist/packs/index.d.ts +5 -1
  97. package/dist/packs/index.d.ts.map +1 -1
  98. package/dist/packs/index.js +13 -1
  99. package/dist/packs/index.js.map +1 -1
  100. package/dist/packs/land.d.ts +3 -0
  101. package/dist/packs/land.d.ts.map +1 -0
  102. package/dist/packs/land.js +124 -0
  103. package/dist/packs/land.js.map +1 -0
  104. package/dist/packs/senior-housing.d.ts +3 -0
  105. package/dist/packs/senior-housing.d.ts.map +1 -0
  106. package/dist/packs/senior-housing.js +123 -0
  107. package/dist/packs/senior-housing.js.map +1 -0
  108. package/dist/packs/student-housing.d.ts +3 -0
  109. package/dist/packs/student-housing.d.ts.map +1 -0
  110. package/dist/packs/student-housing.js +124 -0
  111. package/dist/packs/student-housing.js.map +1 -0
  112. package/dist/parser.d.ts +9 -0
  113. package/dist/parser.d.ts.map +1 -1
  114. package/dist/parser.js +40 -6
  115. package/dist/parser.js.map +1 -1
  116. package/dist/protocol.d.ts +69 -2
  117. package/dist/protocol.d.ts.map +1 -1
  118. package/dist/protocol.js +109 -1
  119. package/dist/protocol.js.map +1 -1
  120. package/dist/receipts.d.ts +216 -0
  121. package/dist/receipts.d.ts.map +1 -0
  122. package/dist/receipts.js +554 -0
  123. package/dist/receipts.js.map +1 -0
  124. package/dist/report.js +165 -165
  125. package/dist/runner.d.ts +13 -0
  126. package/dist/runner.d.ts.map +1 -1
  127. package/dist/runner.js +5 -5
  128. package/dist/runner.js.map +1 -1
  129. package/dist/source-representation.d.ts +40 -0
  130. package/dist/source-representation.d.ts.map +1 -0
  131. package/dist/source-representation.js +114 -0
  132. package/dist/source-representation.js.map +1 -0
  133. package/dist/types.d.ts +9 -0
  134. package/dist/types.d.ts.map +1 -1
  135. package/dist/types.js +34 -0
  136. package/dist/types.js.map +1 -1
  137. package/dist/uwcsv.d.ts.map +1 -1
  138. package/dist/uwcsv.js +10 -78
  139. package/dist/uwcsv.js.map +1 -1
  140. package/dist/uwxml.d.ts.map +1 -1
  141. package/dist/uwxml.js +10 -2
  142. package/dist/uwxml.js.map +1 -1
  143. package/dist/validator.js +10 -10
  144. package/dist/validator.js.map +1 -1
  145. package/dist/version.d.ts +3 -0
  146. package/dist/version.d.ts.map +1 -0
  147. package/dist/version.js +8 -0
  148. package/dist/version.js.map +1 -0
  149. package/dist/zip-safety.d.ts +15 -0
  150. package/dist/zip-safety.d.ts.map +1 -0
  151. package/dist/zip-safety.js +109 -0
  152. package/dist/zip-safety.js.map +1 -0
  153. package/package.json +12 -3
@@ -1,6 +1,7 @@
1
1
  // Tier-3 Calc Host — built-in function implementations.
2
2
  // Signatures and semantics per UW_PROTOCOL_v1.md §VIII.3.
3
3
  import { CalcError } from './errors.js';
4
+ import { quantizeDecimal } from './quantize.js';
4
5
  function asNumberOrNull(v, fnName) {
5
6
  if (v === null)
6
7
  return null;
@@ -13,6 +14,19 @@ function asNumber(v, fnName) {
13
14
  return v;
14
15
  throw new CalcError('CALC-TYPE-001', `${fnName}: expected number, got ${v === null ? 'null' : typeof v}.`);
15
16
  }
17
+ // `irr` search parameters — normative, protocol §VIII.3 (RFC 0024). These are
18
+ // not tuning knobs: two engines return the same root only if both use these
19
+ // exact values in this exact order. Changing one is a protocol change.
20
+ /** Low end of the IRR search interval: -99.9%. */
21
+ export const IRR_BRACKET_LO = -0.999;
22
+ /** High end of the IRR search interval: 1000%. */
23
+ export const IRR_BRACKET_HI = 10.0;
24
+ /** Stop when the NPV at the midpoint is this close to zero. */
25
+ export const IRR_VALUE_TOL = 1e-9;
26
+ /** Stop when the remaining half-interval is this narrow. */
27
+ export const IRR_INTERVAL_TOL = 1e-12;
28
+ /** Hard iteration cap; exhausting it raises `CALC-IRR-DIVERGE`. */
29
+ export const IRR_MAX_ITER = 200;
16
30
  export const BUILTINS = Object.freeze({
17
31
  // sum(...nums) — nulls treated as 0.
18
32
  sum(args) {
@@ -74,7 +88,11 @@ export const BUILTINS = Object.freeze({
74
88
  }
75
89
  return cond ? args[1] : args[2];
76
90
  },
77
- // round(num, dec) — half-away-from-zero.
91
+ // round(num, dec) — half-away-from-zero, delegated to the single quantization
92
+ // rule in quantize.ts so the builtin, the reported-value boundary, and the
93
+ // Excel emitter cannot drift apart. This previously scaled by `10 ** d`, which
94
+ // reintroduced the binary artifact it was meant to remove: `round(1.005, 2)`
95
+ // returned 1.00 while Excel's ROUND gives 1.01. See RFC 0023.
78
96
  round(args) {
79
97
  if (args.length !== 2) {
80
98
  throw new CalcError('CALC-TYPE-001', `round: expected 2 arguments, got ${args.length}.`);
@@ -88,10 +106,7 @@ export const BUILTINS = Object.freeze({
88
106
  if (!Number.isInteger(d)) {
89
107
  throw new CalcError('CALC-TYPE-001', `round: decimals must be integer, got ${d}.`);
90
108
  }
91
- const factor = 10 ** d;
92
- // Half-away-from-zero (Math.round in JS is half-up for positives, half-down for negatives).
93
- const sign = n < 0 ? -1 : 1;
94
- return sign * Math.floor(Math.abs(n) * factor + 0.5) / factor;
109
+ return quantizeDecimal(n, d);
95
110
  },
96
111
  // pmt(rate, n, pv) — standard mortgage payment formula.
97
112
  // Returns the *positive* periodic payment for a present value pv at periodic rate.
@@ -263,67 +278,74 @@ export const BUILTINS = Object.freeze({
263
278
  }
264
279
  return Math.log(num / den) / Math.log(1 + rate);
265
280
  },
266
- // irr(...flows) — bisection + Newton fallback. Null if no real root.
281
+ // irr(...flows) — bracket, then bisect. Protocol §VIII.3 (RFC 0024).
282
+ //
283
+ // Bisection only, deliberately. The procedure is normative because two
284
+ // conforming engines must return the *same* root, and bisection is the part
285
+ // of this that is bit-reproducible: every step is `(lo + hi) / 2` and a
286
+ // comparison of products, operations IEEE 754 requires to be correctly
287
+ // rounded, in an order the spec fixes. Newton is not — its iterates depend on
288
+ // the association order of a derivative sum that no document pins, and each
289
+ // iterate feeds the next, so a last-ULP difference moves the returned root by
290
+ // more than the tolerance.
291
+ //
292
+ // The Newton pass this replaced also searched outside the bracket it claimed:
293
+ // `irr(-1, 20)` returned ~19.0, a 1900% return from a search documented as
294
+ // reaching 1000%. That is now CALC-IRR-DIVERGE, per step 5.
267
295
  irr(args) {
268
296
  if (args.length < 2) {
269
297
  throw new CalcError('CALC-TYPE-001', 'irr: requires at least 2 cash flows.');
270
298
  }
271
299
  const flows = args.map((a, _i) => asNumber(a, 'irr'));
272
- // Newton-Raphson starting at 0.1.
273
300
  const npvAt = (r) => {
274
301
  let acc = 0;
275
302
  for (let t = 0; t < flows.length; t++)
276
303
  acc += flows[t] / (1 + r) ** t;
277
304
  return acc;
278
305
  };
279
- const dnpvAt = (r) => {
280
- let acc = 0;
281
- for (let t = 1; t < flows.length; t++)
282
- acc += -t * flows[t] / (1 + r) ** (t + 1);
283
- return acc;
284
- };
285
- let r = 0.1;
286
- const MAX_ITER = 100;
287
- const TOL = 1e-9;
288
- for (let i = 0; i < MAX_ITER; i++) {
289
- const f = npvAt(r);
290
- if (!Number.isFinite(f))
291
- break;
292
- if (Math.abs(f) < TOL)
293
- return r;
294
- const df = dnpvAt(r);
295
- if (df === 0 || !Number.isFinite(df))
296
- break;
297
- const next = r - f / df;
298
- if (!Number.isFinite(next) || next <= -1)
299
- break;
300
- if (Math.abs(next - r) < TOL)
301
- return next;
302
- r = next;
303
- }
304
- // Fallback: bisection over [-0.999, 10].
305
- let lo = -0.999;
306
- let hi = 10;
306
+ // 1. Domain. A root outside this interval is not reported.
307
+ let lo = IRR_BRACKET_LO;
308
+ let hi = IRR_BRACKET_HI;
307
309
  let flo = npvAt(lo);
308
- let fhi = npvAt(hi);
310
+ const fhi = npvAt(hi);
311
+ // 2. Bracket.
309
312
  if (!Number.isFinite(flo) || !Number.isFinite(fhi) || flo * fhi > 0) {
310
- throw new CalcError('CALC-IRR-DIVERGE', 'irr: no root in [-99.9%, 1000%] bracket.');
311
- }
312
- for (let i = 0; i < 200; i++) {
313
+ throw new CalcError('CALC-IRR-DIVERGE', `irr: no sign change over the [${IRR_BRACKET_LO}, ${IRR_BRACKET_HI}] bracket (-99.9% to 1000%), so no root is reported.`);
314
+ }
315
+ // 2a. A root sitting exactly on an endpoint is the answer, and must be
316
+ // returned before bisecting. Bisection cannot get there: the retention test
317
+ // is `flo * fmid < 0`, and a `flo` of exactly zero makes that product zero
318
+ // for every `mid`, so the loop would walk the endpoint away from the very
319
+ // root it brackets and then diverge. This is the one step §VIII.3's
320
+ // procedure leaves implicit; see the note there.
321
+ //
322
+ // Reachable at `hi` — `1 + 10` is exact, so `npv(10)` can be exactly zero.
323
+ // Effectively unreachable at `lo`: `1 + (-0.999)` is `0.001000000000000001`
324
+ // in binary64, so `npv(lo)` for a cash flow whose true root is -99.9% lands
325
+ // a few ULP either side of zero rather than on it, and its sign decides
326
+ // whether the bracket holds at all. That is a property of the interval, not
327
+ // of this code — a root "exactly at -0.999" is not a well-defined binary64
328
+ // quantity.
329
+ if (flo === 0)
330
+ return lo;
331
+ if (fhi === 0)
332
+ return hi;
333
+ // 3. Bisection. 4. No polish — the bisection result is the answer.
334
+ for (let i = 0; i < IRR_MAX_ITER; i++) {
313
335
  const mid = (lo + hi) / 2;
314
336
  const fmid = npvAt(mid);
315
- if (Math.abs(fmid) < TOL || (hi - lo) / 2 < TOL)
337
+ if (Math.abs(fmid) < IRR_VALUE_TOL || (hi - lo) / 2 < IRR_INTERVAL_TOL)
316
338
  return mid;
317
339
  if (flo * fmid < 0) {
318
340
  hi = mid;
319
- fhi = fmid;
320
341
  }
321
342
  else {
322
343
  lo = mid;
323
344
  flo = fmid;
324
345
  }
325
346
  }
326
- throw new CalcError('CALC-IRR-DIVERGE', 'irr: failed to converge after 200 iterations.');
347
+ // 5. Failure.
348
+ throw new CalcError('CALC-IRR-DIVERGE', `irr: bisection did not meet a stopping condition within ${IRR_MAX_ITER} iterations.`);
327
349
  },
328
350
  });
329
351
  //# sourceMappingURL=builtins.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/calc/builtins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/calc/builtins.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,0DAA0D;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMhD,SAAS,cAAc,CAAC,CAAY,EAAE,MAAc;IAClD,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,GAAG,MAAM,kCAAkC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,QAAQ,CAAC,CAAY,EAAE,MAAc;IAC5C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,GAAG,MAAM,0BAA0B,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7G,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,uEAAuE;AACvE,kDAAkD;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC;AACrC,kDAAkD;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AACnC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,mEAAmE;AACnE,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAEhC,MAAM,CAAC,MAAM,QAAQ,GAAsC,MAAM,CAAC,MAAM,CAAC;IACvE,qCAAqC;IACrC,GAAG,CAAC,IAAI;QACN,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACnC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,6CAA6C;IAC7C,GAAG,CAAC,IAAI;QACN,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBAAC,GAAG,IAAI,CAAC,CAAC;gBAAC,KAAK,EAAE,CAAC;YAAC,CAAC;QACxC,CAAC;QACD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC;IAC1C,CAAC;IAED,GAAG,CAAC,IAAI;QACN,IAAI,IAAI,GAAkB,IAAI,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,IAAI;gBAAE,SAAS;YACzB,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,IAAI;QACN,IAAI,IAAI,GAAkB,IAAI,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,IAAI;gBAAE,SAAS;YACzB,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sCAAsC;IACtC,QAAQ,CAAC,IAAI;QACX,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uBAAuB;IACvB,EAAE,CAAC,IAAI;QACL,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,iCAAiC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,sCAAsC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;QACtH,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;IACpC,CAAC;IAED,8EAA8E;IAC9E,2EAA2E;IAC3E,+EAA+E;IAC/E,6EAA6E;IAC7E,8DAA8D;IAC9D,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,oCAAoC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAI,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,wCAAwC,CAAC,GAAG,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,wDAAwD;IACxD,mFAAmF;IACnF,GAAG,CAAC,IAAI;QACN,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,gDAAgD,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACvG,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,kEAAkE;IAClE,GAAG,CAAC,IAAI;QACN,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,uCAAuC,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;QACvC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;YAC3C,GAAG,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,+EAA+E;IAE/E,8BAA8B;IAC9B,GAAG,CAAC,IAAI;QACN,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,iCAAiC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,gCAAgC;IAChC,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,mCAAmC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1F,CAAC;QACD,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,IAAI;QACP,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,kCAAkC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,+DAA+D;IAC/D,IAAI,CAAC,IAAI;QACP,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,kCAAkC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,wBAAwB,CAAC,4BAA4B,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,oCAAoC;IACpC,GAAG,CAAC,IAAI;QACN,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,kCAAkC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/C,MAAM,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,8BAA8B,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,yEAAyE;IACzE,GAAG,CAAC,IAAI;QACN,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,iCAAiC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,oCAAoC,CAAC,GAAG,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,8BAA8B;IAC9B,GAAG,CAAC,IAAI;QACN,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,iCAAiC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,kCAAkC,CAAC,KAAK,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,+EAA+E;IAE/E,mFAAmF;IACnF,gFAAgF;IAChF,iFAAiF;IACjF,yCAAyC;IACzC,EAAE,CAAC,IAAI;QACL,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,0CAA0C,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;QAChE,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,EAAE,GAAG,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IACjD,CAAC;IAED,sFAAsF;IACtF,8EAA8E;IAC9E,8DAA8D;IAC9D,EAAE,CAAC,IAAI;QACL,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,0CAA0C,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;QAChE,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,QAAQ,CAAC;IACrD,CAAC;IAED,iFAAiF;IACjF,6EAA6E;IAC7E,gEAAgE;IAChE,wDAAwD;IACxD,gEAAgE;IAChE,6DAA6D;IAC7D,IAAI,CAAC,IAAI;QACP,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,6CAA6C,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAC;QACzG,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC;QAClE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;gBACd,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,+CAA+C,CAAC,CAAC;YACxF,CAAC;YACD,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QACzB,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;QAC5B,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;QAC5B,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,8CAA8C,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,qEAAqE;IACrE,EAAE;IACF,uEAAuE;IACvE,4EAA4E;IAC5E,wEAAwE;IACxE,uEAAuE;IACvE,8EAA8E;IAC9E,4EAA4E;IAC5E,8EAA8E;IAC9E,2BAA2B;IAC3B,EAAE;IACF,8EAA8E;IAC9E,2EAA2E;IAC3E,4DAA4D;IAC5D,GAAG,CAAC,IAAI;QACN,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,sCAAsC,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAEvD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE;YAClC,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACvE,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QAEF,2DAA2D;QAC3D,IAAI,EAAE,GAAG,cAAc,CAAC;QACxB,IAAI,EAAE,GAAG,cAAc,CAAC;QACxB,IAAI,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QAEtB,cAAc;QACd,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,SAAS,CACjB,kBAAkB,EAClB,iCAAiC,cAAc,KAAK,cAAc,sDAAsD,CACzH,CAAC;QACJ,CAAC;QAED,uEAAuE;QACvE,4EAA4E;QAC5E,2EAA2E;QAC3E,0EAA0E;QAC1E,oEAAoE;QACpE,iDAAiD;QACjD,EAAE;QACF,2EAA2E;QAC3E,4EAA4E;QAC5E,4EAA4E;QAC5E,wEAAwE;QACxE,4EAA4E;QAC5E,2EAA2E;QAC3E,YAAY;QACZ,IAAI,GAAG,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACzB,IAAI,GAAG,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEzB,mEAAmE;QACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,gBAAgB;gBAAE,OAAO,GAAG,CAAC;YACnF,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBACnB,EAAE,GAAG,GAAG,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,EAAE,GAAG,GAAG,CAAC;gBACT,GAAG,GAAG,IAAI,CAAC;YACb,CAAC;QACH,CAAC;QAED,cAAc;QACd,MAAM,IAAI,SAAS,CACjB,kBAAkB,EAClB,2DAA2D,YAAY,cAAc,CACtF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  // Tier-3 Calc Host — error factory
2
- // Codes per UW_PROTOCOL_v1.md §VIII.5.
2
+ // Codes per UW_PROTOCOL_v1.md §VIII.6.
3
3
  export function calcError(code, message, pointer) {
4
4
  return {
5
5
  category: 'calc',
@@ -1,6 +1,6 @@
1
1
  // Tier-3 Calc Host — AST evaluator.
2
2
  // Variable resolution per §VIII.2; null propagation per §VIII.2.
3
- import { getSection } from '../parser.js';
3
+ import { getPathSegment, getSection, isBlockedSegment } from '../parser.js';
4
4
  import { BUILTINS } from './builtins.js';
5
5
  import { CalcError } from './errors.js';
6
6
  const MAX_NODES = 1024;
@@ -25,7 +25,7 @@ function evalNode(expr, ctx, state) {
25
25
  for (const seg of expr.segments) {
26
26
  if (cur === null || cur === undefined)
27
27
  return null;
28
- cur = cur[seg];
28
+ cur = getPathSegment(cur, seg);
29
29
  }
30
30
  return coerceCalcValue(cur);
31
31
  }
@@ -91,6 +91,10 @@ function evalNode(expr, ctx, state) {
91
91
  }
92
92
  // ─── Variable resolution ──────────────────────────────────────────────────────
93
93
  function resolveIdentifier(name, ctx) {
94
+ // A blocked head is unresolvable for the same reason a blocked segment is:
95
+ // no document-authored name may reach the prototype chain.
96
+ if (isBlockedSegment(name))
97
+ return null;
94
98
  const fm = ctx.parsed.frontmatter;
95
99
  if (fm && Object.prototype.hasOwnProperty.call(fm, name)) {
96
100
  return coerceCalcValue(fm[name]);
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/calc/evaluator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/calc/evaluator.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,17 @@ export { BUILTINS } from './builtins.js';
5
5
  export type { CalcValue, Builtin } from './builtins.js';
6
6
  export { CalcError, calcError } from './errors.js';
7
7
  export type { CalcErrorCode } from './errors.js';
8
+ export { quantizeDecimal, resolveRoundTo, DEFAULT_ROUND_TO, DEFAULT_ROUND_TO_BY_UNIT, MAX_ROUND_TO, } from './quantize.js';
8
9
  /**
9
10
  * Evaluate a single calculation declaration against a context.
10
11
  * Always returns a CalcResult — exceptions from the engine are captured
11
12
  * into the `error` field, never thrown.
13
+ *
14
+ * This is the **quantization boundary** (§VIII.5). Evaluation itself runs in
15
+ * unrounded binary64; the value leaving here is quantized to the declaration's
16
+ * effective `round_to`. Every consumer — receipts, the web editor, the CLI, the
17
+ * Excel converter — reaches results through this function, which is what makes
18
+ * one boundary sufficient.
12
19
  */
13
20
  export declare function evaluateCalc(decl: ModuleCalcDecl, ctx: CalcEvaluationContext): CalcResult;
14
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/calc/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKxF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,qBAAqB,GAAG,UAAU,CAwBzF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/calc/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMxF,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,qBAAqB,GAAG,UAAU,CA4BzF"}
@@ -5,24 +5,35 @@ import { formatCurrency, formatPercent, formatRatio, formatValue } from '../form
5
5
  import { CalcError } from './errors.js';
6
6
  import { evaluate } from './evaluator.js';
7
7
  import { parseExpression } from './parser.js';
8
+ import { quantizeDecimal, resolveRoundTo } from './quantize.js';
8
9
  export { parseExpression } from './parser.js';
9
10
  export { evaluate } from './evaluator.js';
10
11
  export { BUILTINS } from './builtins.js';
11
12
  export { CalcError, calcError } from './errors.js';
13
+ export { quantizeDecimal, resolveRoundTo, DEFAULT_ROUND_TO, DEFAULT_ROUND_TO_BY_UNIT, MAX_ROUND_TO, } from './quantize.js';
12
14
  /**
13
15
  * Evaluate a single calculation declaration against a context.
14
16
  * Always returns a CalcResult — exceptions from the engine are captured
15
17
  * into the `error` field, never thrown.
18
+ *
19
+ * This is the **quantization boundary** (§VIII.5). Evaluation itself runs in
20
+ * unrounded binary64; the value leaving here is quantized to the declaration's
21
+ * effective `round_to`. Every consumer — receipts, the web editor, the CLI, the
22
+ * Excel converter — reaches results through this function, which is what makes
23
+ * one boundary sufficient.
16
24
  */
17
25
  export function evaluateCalc(decl, ctx) {
26
+ const roundTo = resolveRoundTo(decl);
18
27
  try {
19
28
  const ast = parseExpression(decl.formula);
20
- const value = evaluate(ast, ctx);
29
+ const raw = evaluate(ast, ctx);
30
+ const value = typeof raw === 'number' ? quantizeDecimal(raw, roundTo) : raw;
21
31
  return {
22
32
  calc_id: decl.id,
23
33
  ok: true,
24
34
  value: value,
25
35
  ...(decl.unit ? { unit: decl.unit } : {}),
36
+ round_to: roundTo,
26
37
  display: formatForDisplay(value, decl.unit),
27
38
  };
28
39
  }
@@ -35,6 +46,7 @@ export function evaluateCalc(decl, ctx) {
35
46
  ok: false,
36
47
  value: null,
37
48
  ...(decl.unit ? { unit: decl.unit } : {}),
49
+ round_to: roundTo,
38
50
  error: proto,
39
51
  };
40
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/calc/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,2EAA2E;AAC3E,yEAAyE;AAEzE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEvF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAoB,EAAE,GAA0B;IAC3E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEjC,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,KAAyC;YAChD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;SAC5C,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,CAAC,YAAY,SAAS;YAClC,CAAC,CAAC,CAAC,CAAC,KAAK;YACT,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/G,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,IAAI;YACX,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,KAAK,EAAE,KAAK;SACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,IAAa;IACrD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IACpE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG,CAAC,CAAC,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QACtC,KAAK,GAAG,CAAC,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,GAAG,CAAC,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC;YACE,wCAAwC;YACxC,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/calc/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Largest `round_to` a declaration may state. Beyond ~15 significant decimal
3
+ * digits a binary64 has no fractional information left to quantize, so a larger
4
+ * value would describe a precision the representation cannot carry.
5
+ */
6
+ export declare const MAX_ROUND_TO = 12;
7
+ /**
8
+ * Normative default decimal places by declared `unit`, applied when a
9
+ * calculation omits `round_to`. Table per UW_PROTOCOL_v1.md §VIII.5.
10
+ *
11
+ * The values follow from what the unit means rather than from taste. Money is
12
+ * quantized to cents. A ratio (`x`, e.g. DSCR) is quoted to four places by
13
+ * every lender term sheet the format targets. Rates are *fractions* everywhere
14
+ * in this repo (`0.0551`, not `5.51`), so six places on a fraction is four
15
+ * places on the percentage a human reads — the same precision, one unit shift.
16
+ */
17
+ export declare const DEFAULT_ROUND_TO_BY_UNIT: Readonly<Record<string, number>>;
18
+ /**
19
+ * Default for a calculation whose `unit` is absent or not in the table. Six
20
+ * places is the residual case, chosen to match the rate default rather than to
21
+ * invent a second convention.
22
+ */
23
+ export declare const DEFAULT_ROUND_TO = 6;
24
+ /**
25
+ * The effective decimal places for a calculation declaration: its own
26
+ * `round_to` when stated, otherwise the unit default, otherwise
27
+ * {@link DEFAULT_ROUND_TO}. Total by construction — §VIII.5 deliberately has no
28
+ * "unspecified precision" mode, because two implementers reading an
29
+ * unspecified spec do not produce the same receipt digest.
30
+ */
31
+ export declare function resolveRoundTo(decl: {
32
+ unit?: string;
33
+ round_to?: number;
34
+ }): number;
35
+ /**
36
+ * Quantize `n` to `decimals` decimal places, half away from zero.
37
+ *
38
+ * Half-away-from-zero is the rule Excel's `ROUND` implements, which is the
39
+ * whole reason parity is achievable: `-2.5` quantizes to `-3`, not to `-2` the
40
+ * way JavaScript's `Math.round` would give.
41
+ *
42
+ * The scaling goes through a decimal string rather than a multiply by `10**d`,
43
+ * and that detail is load-bearing. Multiplying reintroduces exactly the binary
44
+ * artifact the caller asked to remove: `1.005 * 100` is `100.49999999999999`,
45
+ * so the naive form quantizes `1.005` to `1.00` while Excel gives `1.01` — a
46
+ * silent, off-by-a-cent divergence in the one direction the format promises
47
+ * agreement. `Number('1.005e2')` is correctly rounded from the decimal literal
48
+ * and yields `100.5` exactly, so both engines land on `1.01`.
49
+ *
50
+ * Non-finite input is a programmer error at this layer: the evaluator rejects
51
+ * division by zero (`CALC-DIV-ZERO`) and the canonicalizer refuses to serialize
52
+ * a non-finite number, so an Infinity reaching here means an upstream guard was
53
+ * removed.
54
+ */
55
+ export declare function quantizeDecimal(n: number, decimals: number): number;
56
+ //# sourceMappingURL=quantize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quantize.d.ts","sourceRoot":"","sources":["../../src/calc/quantize.ts"],"names":[],"mappings":"AAsBA;;;;GAIG;AACH,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIpE,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAOjF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoCnE"}
@@ -0,0 +1,116 @@
1
+ // Tier-3 Calc Host — the quantization boundary.
2
+ // Normative model: UW_PROTOCOL_v1.md §VIII.5 ("Numeric model").
3
+ //
4
+ // The engine evaluates in IEEE-754 binary64 and does *not* round intermediate
5
+ // values. A calculation's **reported** value is quantized here, at exactly one
6
+ // place, on its way out of `evaluateCalc()`.
7
+ //
8
+ // Why this file has to exist. Before RFC 0023 there was no quantization step at
9
+ // all, and two mechanisms disagreed about the same numbers: `receipts.ts`
10
+ // compared a stated result against recomputation with a 1e-6 tolerance, while
11
+ // `results_digest` hashed those same raw doubles bit-exactly. A last-ULP
12
+ // difference therefore passed the tolerant check and failed the exact one, and
13
+ // the failure was reported as *corruption*. Quantizing before either check runs
14
+ // removes the disagreement by construction rather than by loosening the digest.
15
+ //
16
+ // The other consumer is Excel. `packs/excel-emit.ts` wraps each emitted formula
17
+ // in `ROUND(expr, round_to)` using the same decimal places, which is why the
18
+ // Excel↔evaluator invariant can now be asserted as *exact* equality instead of
19
+ // agreement to six decimals.
20
+ import { CalcError } from './errors.js';
21
+ /**
22
+ * Largest `round_to` a declaration may state. Beyond ~15 significant decimal
23
+ * digits a binary64 has no fractional information left to quantize, so a larger
24
+ * value would describe a precision the representation cannot carry.
25
+ */
26
+ export const MAX_ROUND_TO = 12;
27
+ /**
28
+ * Normative default decimal places by declared `unit`, applied when a
29
+ * calculation omits `round_to`. Table per UW_PROTOCOL_v1.md §VIII.5.
30
+ *
31
+ * The values follow from what the unit means rather than from taste. Money is
32
+ * quantized to cents. A ratio (`x`, e.g. DSCR) is quoted to four places by
33
+ * every lender term sheet the format targets. Rates are *fractions* everywhere
34
+ * in this repo (`0.0551`, not `5.51`), so six places on a fraction is four
35
+ * places on the percentage a human reads — the same precision, one unit shift.
36
+ */
37
+ export const DEFAULT_ROUND_TO_BY_UNIT = Object.freeze({
38
+ $: 2,
39
+ '%': 6,
40
+ x: 4,
41
+ });
42
+ /**
43
+ * Default for a calculation whose `unit` is absent or not in the table. Six
44
+ * places is the residual case, chosen to match the rate default rather than to
45
+ * invent a second convention.
46
+ */
47
+ export const DEFAULT_ROUND_TO = 6;
48
+ /**
49
+ * The effective decimal places for a calculation declaration: its own
50
+ * `round_to` when stated, otherwise the unit default, otherwise
51
+ * {@link DEFAULT_ROUND_TO}. Total by construction — §VIII.5 deliberately has no
52
+ * "unspecified precision" mode, because two implementers reading an
53
+ * unspecified spec do not produce the same receipt digest.
54
+ */
55
+ export function resolveRoundTo(decl) {
56
+ if (decl.round_to !== undefined)
57
+ return decl.round_to;
58
+ if (decl.unit !== undefined) {
59
+ const byUnit = DEFAULT_ROUND_TO_BY_UNIT[decl.unit];
60
+ if (byUnit !== undefined)
61
+ return byUnit;
62
+ }
63
+ return DEFAULT_ROUND_TO;
64
+ }
65
+ /**
66
+ * Quantize `n` to `decimals` decimal places, half away from zero.
67
+ *
68
+ * Half-away-from-zero is the rule Excel's `ROUND` implements, which is the
69
+ * whole reason parity is achievable: `-2.5` quantizes to `-3`, not to `-2` the
70
+ * way JavaScript's `Math.round` would give.
71
+ *
72
+ * The scaling goes through a decimal string rather than a multiply by `10**d`,
73
+ * and that detail is load-bearing. Multiplying reintroduces exactly the binary
74
+ * artifact the caller asked to remove: `1.005 * 100` is `100.49999999999999`,
75
+ * so the naive form quantizes `1.005` to `1.00` while Excel gives `1.01` — a
76
+ * silent, off-by-a-cent divergence in the one direction the format promises
77
+ * agreement. `Number('1.005e2')` is correctly rounded from the decimal literal
78
+ * and yields `100.5` exactly, so both engines land on `1.01`.
79
+ *
80
+ * Non-finite input is a programmer error at this layer: the evaluator rejects
81
+ * division by zero (`CALC-DIV-ZERO`) and the canonicalizer refuses to serialize
82
+ * a non-finite number, so an Infinity reaching here means an upstream guard was
83
+ * removed.
84
+ */
85
+ export function quantizeDecimal(n, decimals) {
86
+ // Negative `decimals` quantizes to tens/hundreds, matching Excel's
87
+ // `ROUND(1234, -2) = 1200`. A declaration's `round_to` is separately
88
+ // constrained to be non-negative by the manifest schema, so the wider domain
89
+ // here exists only for the `round()` builtin, which has always accepted it.
90
+ if (!Number.isInteger(decimals) || decimals < -MAX_ROUND_TO || decimals > MAX_ROUND_TO) {
91
+ throw new CalcError('CALC-TYPE-001', `quantize: decimals must be an integer in [${-MAX_ROUND_TO}, ${MAX_ROUND_TO}], got ${decimals}.`);
92
+ }
93
+ if (!Number.isFinite(n)) {
94
+ throw new CalcError('CALC-TYPE-001', `quantize: cannot quantize non-finite number ${n}.`);
95
+ }
96
+ const sign = n < 0 ? -1 : 1;
97
+ const magnitude = Math.abs(n);
98
+ const shifted = Number(`${magnitude}e${decimals}`);
99
+ // An integral shifted value has no fractional part to round, so `n` is
100
+ // already quantized and is returned unchanged. This is the correct answer
101
+ // rather than a fallback, and it subsumes the large-magnitude cases: past
102
+ // 2^53 every double is integral, which is also the range where
103
+ // `${magnitude}` renders exponentially ("1e+21") and the string shift could
104
+ // not reassemble it. Guarding on integrality rather than on a magnitude
105
+ // threshold also avoids `MAX_SAFE_INTEGER + 0.5` rounding *up* to
106
+ // `MAX_SAFE_INTEGER + 1` before `Math.floor` ever sees it.
107
+ const result = !Number.isFinite(shifted) || Number.isInteger(shifted)
108
+ ? n
109
+ : sign * Number(`${Math.floor(shifted + 0.5)}e${-decimals}`);
110
+ // `-0` would otherwise survive two ways: as input, and from a small negative
111
+ // that quantizes to zero. The exact canonicalizer already renders it as "0",
112
+ // but returning it makes `Object.is(result, 0)` false for callers doing their
113
+ // own comparisons, so the sign is dropped once here rather than at each one.
114
+ return result === 0 ? 0 : result;
115
+ }
116
+ //# sourceMappingURL=quantize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quantize.js","sourceRoot":"","sources":["../../src/calc/quantize.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,gEAAgE;AAChE,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,6CAA6C;AAC7C,EAAE;AACF,gFAAgF;AAChF,0EAA0E;AAC1E,8EAA8E;AAC9E,yEAAyE;AACzE,+EAA+E;AAC/E,gFAAgF;AAChF,gFAAgF;AAChF,EAAE;AACF,gFAAgF;AAChF,6EAA6E;AAC7E,+EAA+E;AAC/E,6BAA6B;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAE/B;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAqC,MAAM,CAAC,MAAM,CAAC;IACtF,CAAC,EAAE,CAAC;IACJ,GAAG,EAAE,CAAC;IACN,CAAC,EAAE,CAAC;CACL,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAA0C;IACvE,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;IAC1C,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,QAAgB;IACzD,mEAAmE;IACnE,qEAAqE;IACrE,6EAA6E;IAC7E,4EAA4E;IAC5E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,YAAY,IAAI,QAAQ,GAAG,YAAY,EAAE,CAAC;QACvF,MAAM,IAAI,SAAS,CACjB,eAAe,EACf,6CAA6C,CAAC,YAAY,KAAK,YAAY,UAAU,QAAQ,GAAG,CACjG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,+CAA+C,CAAC,GAAG,CAAC,CAAC;IAC5F,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE9B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;IAEnD,uEAAuE;IACvE,0EAA0E;IAC1E,0EAA0E;IAC1E,+DAA+D;IAC/D,4EAA4E;IAC5E,wEAAwE;IACxE,kEAAkE;IAClE,2DAA2D;IAC3D,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;QACnE,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE/D,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,6EAA6E;IAC7E,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACnC,CAAC"}
@@ -0,0 +1,11 @@
1
+ type Flags = Record<string, string | boolean>;
2
+ export declare function cmdLeaseValidate(file: string, flags: Flags): void;
3
+ export declare function cmdLeaseProject(file: string, flags: Flags): void;
4
+ export declare function cmdPackageCreate(manifestPath: string, flags: Flags): Promise<void>;
5
+ export declare function cmdPackageVerify(file: string, flags: Flags): Promise<void>;
6
+ export declare function cmdPackageList(file: string, flags: Flags): void;
7
+ export declare function cmdPackageToContext(file: string, flags: Flags): void;
8
+ export declare function cmdPackageContextValidate(file: string, flags: Flags): void;
9
+ export declare function cmdPackageEdges(file: string): void;
10
+ export {};
11
+ //# sourceMappingURL=cli-packages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-packages.d.ts","sourceRoot":"","sources":["../src/cli-packages.ts"],"names":[],"mappings":"AAwBA,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;AAkB9C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAcjE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAahE;AAID,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BxF;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CA2B/D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAwBpE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAc1E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAKlD"}