@uwmd/core 1.6.0 → 1.8.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 (98) hide show
  1. package/dist/agents/bancroft.js +4 -1
  2. package/dist/agents/bancroft.js.map +1 -1
  3. package/dist/asset-class.d.ts +98 -0
  4. package/dist/asset-class.d.ts.map +1 -0
  5. package/dist/asset-class.js +226 -0
  6. package/dist/asset-class.js.map +1 -0
  7. package/dist/browser.d.ts +23 -9
  8. package/dist/browser.d.ts.map +1 -1
  9. package/dist/browser.js +25 -5
  10. package/dist/browser.js.map +1 -1
  11. package/dist/calc/errors.d.ts +1 -1
  12. package/dist/calc/errors.d.ts.map +1 -1
  13. package/dist/calc/errors.js.map +1 -1
  14. package/dist/calc/evaluator.js +25 -1
  15. package/dist/calc/evaluator.js.map +1 -1
  16. package/dist/calc/prng.d.ts +59 -0
  17. package/dist/calc/prng.d.ts.map +1 -0
  18. package/dist/calc/prng.js +181 -0
  19. package/dist/calc/prng.js.map +1 -0
  20. package/dist/calc/sensitivity.d.ts +76 -0
  21. package/dist/calc/sensitivity.d.ts.map +1 -0
  22. package/dist/calc/sensitivity.js +160 -0
  23. package/dist/calc/sensitivity.js.map +1 -0
  24. package/dist/calc/stochastic.d.ts +97 -0
  25. package/dist/calc/stochastic.d.ts.map +1 -0
  26. package/dist/calc/stochastic.js +265 -0
  27. package/dist/calc/stochastic.js.map +1 -0
  28. package/dist/cascade.d.ts.map +1 -1
  29. package/dist/cascade.js +8 -4
  30. package/dist/cascade.js.map +1 -1
  31. package/dist/cli-args.d.ts +37 -0
  32. package/dist/cli-args.d.ts.map +1 -0
  33. package/dist/cli-args.js +93 -0
  34. package/dist/cli-args.js.map +1 -0
  35. package/dist/cli.js +119 -72
  36. package/dist/cli.js.map +1 -1
  37. package/dist/editor.js +25 -6
  38. package/dist/editor.js.map +1 -1
  39. package/dist/index.d.ts +24 -10
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +26 -5
  42. package/dist/index.js.map +1 -1
  43. package/dist/init.d.ts.map +1 -1
  44. package/dist/init.js +16 -4
  45. package/dist/init.js.map +1 -1
  46. package/dist/integrity-canonical.d.ts.map +1 -1
  47. package/dist/integrity-canonical.js +10 -2
  48. package/dist/integrity-canonical.js.map +1 -1
  49. package/dist/integrity.d.ts +92 -4
  50. package/dist/integrity.d.ts.map +1 -1
  51. package/dist/integrity.js +195 -9
  52. package/dist/integrity.js.map +1 -1
  53. package/dist/lite-bridge.d.ts.map +1 -1
  54. package/dist/lite-bridge.js +47 -0
  55. package/dist/lite-bridge.js.map +1 -1
  56. package/dist/migrate-source-tags.d.ts +34 -0
  57. package/dist/migrate-source-tags.d.ts.map +1 -0
  58. package/dist/migrate-source-tags.js +179 -0
  59. package/dist/migrate-source-tags.js.map +1 -0
  60. package/dist/module-runtime.d.ts +57 -0
  61. package/dist/module-runtime.d.ts.map +1 -0
  62. package/dist/module-runtime.js +167 -0
  63. package/dist/module-runtime.js.map +1 -0
  64. package/dist/module-signing.d.ts +85 -0
  65. package/dist/module-signing.d.ts.map +1 -0
  66. package/dist/module-signing.js +136 -0
  67. package/dist/module-signing.js.map +1 -0
  68. package/dist/modules.d.ts +42 -0
  69. package/dist/modules.d.ts.map +1 -1
  70. package/dist/modules.js +124 -1
  71. package/dist/modules.js.map +1 -1
  72. package/dist/parser.d.ts.map +1 -1
  73. package/dist/parser.js +27 -1
  74. package/dist/parser.js.map +1 -1
  75. package/dist/protocol.d.ts +234 -21
  76. package/dist/protocol.d.ts.map +1 -1
  77. package/dist/protocol.js +352 -32
  78. package/dist/protocol.js.map +1 -1
  79. package/dist/renderer.d.ts.map +1 -1
  80. package/dist/renderer.js +22 -2
  81. package/dist/renderer.js.map +1 -1
  82. package/dist/report.d.ts.map +1 -1
  83. package/dist/report.js +17 -0
  84. package/dist/report.js.map +1 -1
  85. package/dist/runner.d.ts.map +1 -1
  86. package/dist/runner.js +9 -3
  87. package/dist/runner.js.map +1 -1
  88. package/dist/types.d.ts +118 -5
  89. package/dist/types.d.ts.map +1 -1
  90. package/dist/types.js +44 -0
  91. package/dist/types.js.map +1 -1
  92. package/dist/validator.d.ts +26 -2
  93. package/dist/validator.d.ts.map +1 -1
  94. package/dist/validator.js +256 -19
  95. package/dist/validator.js.map +1 -1
  96. package/dist/version.d.ts +1 -1
  97. package/dist/version.js +1 -1
  98. package/package.json +6 -2
@@ -0,0 +1,97 @@
1
+ import { PRNG_ALGORITHM } from './prng.js';
2
+ import type { CalcEvaluationContext, ProtocolError } from '../protocol.js';
3
+ /** Hard ceiling on draws for one declaration. RFC 0005's proposed bound. */
4
+ export declare const MAX_STOCHASTIC_SAMPLES = 100000;
5
+ /** Minimum that produces a summary worth reporting. */
6
+ export declare const MIN_STOCHASTIC_SAMPLES = 2;
7
+ export type DistributionSpec = {
8
+ kind: 'uniform';
9
+ min: number;
10
+ max: number;
11
+ } | {
12
+ kind: 'normal';
13
+ mean: number;
14
+ stddev: number;
15
+ } | {
16
+ kind: 'triangular';
17
+ min: number;
18
+ mode: number;
19
+ max: number;
20
+ };
21
+ export interface StochasticInput {
22
+ /** The dotted path this input replaces, exactly as an expression writes it. */
23
+ variable: string;
24
+ distribution: DistributionSpec;
25
+ }
26
+ export type SummaryStat = 'mean' | 'median' | 'p10' | 'p25' | 'p75' | 'p90' | 'min' | 'max' | 'stddev';
27
+ export declare const SUMMARY_STATS: readonly SummaryStat[];
28
+ export interface StochasticDecl {
29
+ id: string;
30
+ label: string;
31
+ /** An ordinary §VIII.1 safe expression. */
32
+ base_formula: string;
33
+ /**
34
+ * Inputs to draw. **Order is part of the contract**: one PRNG stream feeds
35
+ * them in declared order, so reordering the list changes every sample. That
36
+ * is a real constraint and the alternative — a stream per input — makes a
37
+ * declaration's output depend on a hidden per-input keying rule instead.
38
+ */
39
+ inputs: StochasticInput[];
40
+ samples: number;
41
+ /** Required. A stochastic calc without one is not reproducible. */
42
+ seed: number;
43
+ summarize: SummaryStat[];
44
+ /** Off by default; 100,000 samples inline would make a document unreadable. */
45
+ return_samples?: boolean;
46
+ unit?: string;
47
+ round_to?: number;
48
+ }
49
+ export interface StochasticSummary {
50
+ mean?: number | null;
51
+ median?: number | null;
52
+ p10?: number | null;
53
+ p25?: number | null;
54
+ p75?: number | null;
55
+ p90?: number | null;
56
+ min?: number | null;
57
+ max?: number | null;
58
+ stddev?: number | null;
59
+ }
60
+ export interface StochasticResult {
61
+ calc_id: string;
62
+ ok: boolean;
63
+ error?: ProtocolError;
64
+ summary?: StochasticSummary;
65
+ /** Present only when `return_samples` was set. */
66
+ samples?: number[];
67
+ /** Run parameters, echoed so a reader can tell what produced the numbers. */
68
+ sampled?: {
69
+ count: number;
70
+ seed: number;
71
+ algorithm: typeof PRNG_ALGORITHM;
72
+ };
73
+ /**
74
+ * Draws whose formula did not evaluate to a number. Excluded from the
75
+ * summary rather than counted as zero — a rate path that divides by zero
76
+ * says nothing about the distribution, and folding it in as 0 would drag
77
+ * every statistic toward it.
78
+ */
79
+ failed_samples?: number;
80
+ unit?: string;
81
+ round_to?: number;
82
+ }
83
+ /**
84
+ * Evaluate a stochastic declaration into a distribution summary.
85
+ *
86
+ * Total: a malformed declaration returns `ok: false` with a typed error rather
87
+ * than throwing, matching `evaluateCalc` and `evaluateSensitivity`.
88
+ */
89
+ export declare function evaluateStochastic(decl: StochasticDecl, ctx: CalcEvaluationContext): StochasticResult;
90
+ /**
91
+ * Narrow an unknown declaration, for hosts reading `custom_calculations`.
92
+ *
93
+ * Structural, like `isSensitivityDecl`: a block carrying `inputs` and `seed`
94
+ * alongside `base_formula` is a stochastic declaration.
95
+ */
96
+ export declare function isStochasticDecl(value: unknown): value is StochasticDecl;
97
+ //# sourceMappingURL=stochastic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stochastic.d.ts","sourceRoot":"","sources":["../../src/calc/stochastic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,265 @@
1
+ // Stochastic calculations (protocol §VIII.8, RFC 0005).
2
+ //
3
+ // CRE underwriting reasons about ranges: "DSCR is 1.45 base case but 1.20-1.65
4
+ // across rate paths". Today those numbers are computed in Excel and pasted in
5
+ // as plain values, losing the model behind them, or approximated as
6
+ // best/base/worst — which renders nicely and cannot answer "what is the
7
+ // probability this underwrites above our minimum DSCR?"
8
+ //
9
+ // **A declaration, like sensitivity, and for the same reason.** RFC 0005
10
+ // proposed `uniform()`, `normal()`, `triangular()`, and `monte_carlo(expr, n)`
11
+ // as grammar built-ins. Three problems, any one of which is disqualifying:
12
+ //
13
+ // 1. Every builtin in this engine is a pure `(CalcValue[]) => CalcValue`. A
14
+ // sampling builtin needs PRNG state, so it is not a function of its
15
+ // arguments — and "the calc engine is pure" is what makes a formula
16
+ // auditable.
17
+ // 2. `monte_carlo(expr, n)` takes an *expression*, but the evaluator
18
+ // evaluates arguments eagerly. Making it lazy means either a special-cased
19
+ // builtin or a string argument executed as a program.
20
+ // 3. The grammar would have to admit a call whose legality depends on the
21
+ // enclosing declaration's `deterministic` flag — a context-sensitive
22
+ // grammar, checked in a parser that is deliberately context-free.
23
+ //
24
+ // So the inputs are declared in JSON and each sample is an ordinary evaluation
25
+ // with `overrides` (§VIII.7.2) — the mechanism sensitivity tables already use.
26
+ // The grammar and the builtins are untouched, and `monte_carlo` is not a
27
+ // function but the shape of the whole declaration.
28
+ //
29
+ // **Determinism is the entire point.** A stochastic calc that two hosts
30
+ // evaluate differently is not a model, it is a rumor. The seed plus the
31
+ // normative PRNG (§VIII.8.2) plus a normative percentile rule (§VIII.8.3) is
32
+ // what makes the distribution reproducible.
33
+ import { evaluateCalc } from './index.js';
34
+ import { MAX_ROUND_TO, resolveRoundTo } from './quantize.js';
35
+ import { PRNG_ALGORITHM, Pcg64, sampleNormal, sampleTriangular, sampleUniform } from './prng.js';
36
+ /** Hard ceiling on draws for one declaration. RFC 0005's proposed bound. */
37
+ export const MAX_STOCHASTIC_SAMPLES = 100_000;
38
+ /** Minimum that produces a summary worth reporting. */
39
+ export const MIN_STOCHASTIC_SAMPLES = 2;
40
+ export const SUMMARY_STATS = Object.freeze([
41
+ 'mean', 'median', 'p10', 'p25', 'p75', 'p90', 'min', 'max', 'stddev',
42
+ ]);
43
+ function declError(id, code, message, pointer) {
44
+ return { calc_id: id, ok: false, error: { category: 'calc', code, message, pointer } };
45
+ }
46
+ /**
47
+ * Evaluate a stochastic declaration into a distribution summary.
48
+ *
49
+ * Total: a malformed declaration returns `ok: false` with a typed error rather
50
+ * than throwing, matching `evaluateCalc` and `evaluateSensitivity`.
51
+ */
52
+ export function evaluateStochastic(decl, ctx) {
53
+ const problem = checkDecl(decl);
54
+ if (problem)
55
+ return problem;
56
+ const roundTo = resolveRoundTo({
57
+ ...(decl.unit !== undefined ? { unit: decl.unit } : {}),
58
+ ...(decl.round_to !== undefined ? { round_to: decl.round_to } : {}),
59
+ });
60
+ const rng = new Pcg64(decl.seed);
61
+ const values = [];
62
+ let failed = 0;
63
+ for (let i = 0; i < decl.samples; i++) {
64
+ const overrides = {};
65
+ // One stream, drawn in declared input order — see `StochasticDecl.inputs`.
66
+ for (const input of decl.inputs) {
67
+ overrides[input.variable] = draw(rng.nextDouble(), input.distribution);
68
+ }
69
+ const result = evaluateCalc({
70
+ id: decl.id,
71
+ label: decl.label,
72
+ formula: decl.base_formula,
73
+ deterministic: true,
74
+ ...(decl.unit !== undefined ? { unit: decl.unit } : {}),
75
+ round_to: roundTo,
76
+ }, { ...ctx, overrides: { ...ctx.overrides, ...overrides } });
77
+ if (result.ok && typeof result.value === 'number' && Number.isFinite(result.value)) {
78
+ values.push(result.value);
79
+ }
80
+ else {
81
+ failed++;
82
+ }
83
+ }
84
+ return {
85
+ calc_id: decl.id,
86
+ ok: true,
87
+ summary: summarize(values, decl.summarize),
88
+ ...(decl.return_samples ? { samples: values } : {}),
89
+ sampled: { count: decl.samples, seed: decl.seed, algorithm: PRNG_ALGORITHM },
90
+ failed_samples: failed,
91
+ ...(decl.unit !== undefined ? { unit: decl.unit } : {}),
92
+ round_to: roundTo,
93
+ };
94
+ }
95
+ function draw(u, spec) {
96
+ switch (spec.kind) {
97
+ case 'uniform':
98
+ return sampleUniform(u, spec.min, spec.max);
99
+ case 'normal':
100
+ // Clamped away from the open interval's endpoints: `nextDouble` can
101
+ // return exactly 0, and the inverse CDF is unbounded there.
102
+ return sampleNormal(u === 0 ? Number.MIN_VALUE : u, spec.mean, spec.stddev);
103
+ case 'triangular':
104
+ return sampleTriangular(u, spec.min, spec.mode, spec.max);
105
+ }
106
+ }
107
+ /**
108
+ * Summary statistics.
109
+ *
110
+ * **Percentiles use nearest-rank, not interpolation** (§VIII.8.3). A percentile
111
+ * is therefore an actual observed sample, which makes it exactly reproducible
112
+ * whenever the samples are; interpolating between two neighbours introduces an
113
+ * arithmetic step whose result two hosts can round differently, for a number
114
+ * nobody reads to that precision anyway.
115
+ */
116
+ function summarize(values, wanted) {
117
+ const summary = {};
118
+ // Every requested key is present even with no data, set to null. An absent
119
+ // key would be indistinguishable from one the declaration never asked for.
120
+ if (values.length === 0) {
121
+ for (const stat of wanted)
122
+ summary[stat] = null;
123
+ return summary;
124
+ }
125
+ const sorted = [...values].sort((a, b) => a - b);
126
+ const n = sorted.length;
127
+ const at = (fraction) => sorted[Math.max(0, Math.ceil(fraction * n) - 1)];
128
+ let sum = 0;
129
+ for (const v of values)
130
+ sum += v;
131
+ const mean = sum / n;
132
+ for (const stat of wanted) {
133
+ switch (stat) {
134
+ case 'mean':
135
+ summary.mean = mean;
136
+ break;
137
+ case 'median':
138
+ summary.median = at(0.5);
139
+ break;
140
+ case 'p10':
141
+ summary.p10 = at(0.1);
142
+ break;
143
+ case 'p25':
144
+ summary.p25 = at(0.25);
145
+ break;
146
+ case 'p75':
147
+ summary.p75 = at(0.75);
148
+ break;
149
+ case 'p90':
150
+ summary.p90 = at(0.9);
151
+ break;
152
+ case 'min':
153
+ summary.min = sorted[0];
154
+ break;
155
+ case 'max':
156
+ summary.max = sorted[n - 1];
157
+ break;
158
+ case 'stddev': {
159
+ if (n < 2) {
160
+ summary.stddev = null;
161
+ break;
162
+ }
163
+ // Sample standard deviation (n-1). A single draw has no spread, and
164
+ // reporting 0 would claim certainty the run does not have.
165
+ let acc = 0;
166
+ for (const v of values)
167
+ acc += (v - mean) * (v - mean);
168
+ summary.stddev = Math.sqrt(acc / (n - 1));
169
+ break;
170
+ }
171
+ }
172
+ }
173
+ return summary;
174
+ }
175
+ function checkDecl(decl) {
176
+ if (!Number.isInteger(decl.seed)) {
177
+ // The one refusal that is about reproducibility rather than shape: without
178
+ // a seed the calc produces a different answer every run, which is the exact
179
+ // opposite of what this format is for.
180
+ return declError(decl.id, 'CALC-STOCH-001', 'seed is required and must be an integer; a stochastic calc without one is not reproducible.', 'seed');
181
+ }
182
+ if (!Number.isInteger(decl.samples) ||
183
+ decl.samples < MIN_STOCHASTIC_SAMPLES ||
184
+ decl.samples > MAX_STOCHASTIC_SAMPLES) {
185
+ return declError(decl.id, 'CALC-STOCH-002', `samples must be an integer in [${MIN_STOCHASTIC_SAMPLES}, ${MAX_STOCHASTIC_SAMPLES}].`, 'samples');
186
+ }
187
+ if (!Array.isArray(decl.inputs) || decl.inputs.length === 0) {
188
+ // With no random inputs every draw is the same number, and the "summary" is
189
+ // a point estimate wearing a distribution's clothes.
190
+ return declError(decl.id, 'CALC-STOCH-005', 'inputs must list at least one random variable.', 'inputs');
191
+ }
192
+ const seenVariables = new Set();
193
+ for (const [idx, input] of decl.inputs.entries()) {
194
+ const pointer = `inputs[${idx}]`;
195
+ if (!input || typeof input.variable !== 'string' || input.variable.length === 0) {
196
+ return declError(decl.id, 'CALC-STOCH-003', `${pointer}.variable must be a non-empty path.`, `${pointer}.variable`);
197
+ }
198
+ if (seenVariables.has(input.variable)) {
199
+ // The later draw silently wins for every sample, and the earlier one is
200
+ // still consuming the stream — so the distribution is wrong in a way no
201
+ // output reveals.
202
+ return declError(decl.id, 'CALC-STOCH-003', `${pointer}.variable '${input.variable}' is drawn more than once.`, `${pointer}.variable`);
203
+ }
204
+ seenVariables.add(input.variable);
205
+ const bad = checkDistribution(input.distribution);
206
+ if (bad)
207
+ return declError(decl.id, 'CALC-STOCH-003', `${pointer}.distribution: ${bad}`, `${pointer}.distribution`);
208
+ }
209
+ if (!Array.isArray(decl.summarize) || decl.summarize.length === 0) {
210
+ return declError(decl.id, 'CALC-STOCH-004', 'summarize must name at least one statistic.', 'summarize');
211
+ }
212
+ for (const stat of decl.summarize) {
213
+ if (!SUMMARY_STATS.includes(stat)) {
214
+ return declError(decl.id, 'CALC-STOCH-004', `Unknown summary statistic '${stat}'; expected one of ${SUMMARY_STATS.join(', ')}.`, 'summarize');
215
+ }
216
+ }
217
+ if (decl.round_to !== undefined &&
218
+ (!Number.isInteger(decl.round_to) || decl.round_to < 0 || decl.round_to > MAX_ROUND_TO)) {
219
+ return declError(decl.id, 'CALC-STOCH-006', `round_to must be an integer in [0, ${MAX_ROUND_TO}].`, 'round_to');
220
+ }
221
+ return null;
222
+ }
223
+ function checkDistribution(spec) {
224
+ if (!spec || typeof spec !== 'object')
225
+ return 'missing.';
226
+ const finite = (n) => typeof n === 'number' && Number.isFinite(n);
227
+ switch (spec.kind) {
228
+ case 'uniform':
229
+ if (!finite(spec.min) || !finite(spec.max))
230
+ return 'uniform needs finite min and max.';
231
+ if (spec.min >= spec.max)
232
+ return 'uniform needs min < max.';
233
+ return null;
234
+ case 'normal':
235
+ if (!finite(spec.mean) || !finite(spec.stddev))
236
+ return 'normal needs finite mean and stddev.';
237
+ if (spec.stddev <= 0)
238
+ return 'normal needs stddev > 0.';
239
+ return null;
240
+ case 'triangular':
241
+ if (!finite(spec.min) || !finite(spec.mode) || !finite(spec.max)) {
242
+ return 'triangular needs finite min, mode and max.';
243
+ }
244
+ if (!(spec.min <= spec.mode && spec.mode <= spec.max) || spec.min >= spec.max) {
245
+ return 'triangular needs min <= mode <= max and min < max.';
246
+ }
247
+ return null;
248
+ default:
249
+ return `unknown distribution kind '${spec.kind}'.`;
250
+ }
251
+ }
252
+ /**
253
+ * Narrow an unknown declaration, for hosts reading `custom_calculations`.
254
+ *
255
+ * Structural, like `isSensitivityDecl`: a block carrying `inputs` and `seed`
256
+ * alongside `base_formula` is a stochastic declaration.
257
+ */
258
+ export function isStochasticDecl(value) {
259
+ return (typeof value === 'object' &&
260
+ value !== null &&
261
+ 'base_formula' in value &&
262
+ 'inputs' in value &&
263
+ 'seed' in value);
264
+ }
265
+ //# sourceMappingURL=stochastic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stochastic.js","sourceRoot":"","sources":["../../src/calc/stochastic.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"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"}
package/dist/cascade.js CHANGED
@@ -86,8 +86,12 @@ function findFieldOverride(block, rest) {
86
86
  }
87
87
  /**
88
88
  * Walk the parsed sections looking for a value at `field_path` whose effective
89
- * source matches one of the wanted tags. Effective source = field_override.source
90
- * (when present for the path) → block.meta.source.
89
+ * resolution tag matches one of the wanted tags. Effective tag, per RFC 0031:
90
+ * field_override.resolution field_override.source → block.meta.resolution →
91
+ * block.meta.source, most specific first. The two `source` fallbacks carry the
92
+ * pre-split spelling (a tag in the actor field), which §2.6 read-time
93
+ * interpretation keeps meaningful; a properly-split file matches on
94
+ * `resolution` and its actor never collides with a tag.
91
95
  *
92
96
  * Used to detect user_override / user_input / market_data values already
93
97
  * recorded in the file. Returns the first match; multi-variant sections check
@@ -108,8 +112,8 @@ function findBySource(parsed, field_path, wanted) {
108
112
  if (value === undefined)
109
113
  continue;
110
114
  const override = findFieldOverride(block, split.rest);
111
- const effective = override?.source ?? block.meta.source;
112
- if (wanted.includes(effective)) {
115
+ const effective = override?.resolution ?? override?.source ?? block.meta.resolution ?? block.meta.source;
116
+ if (effective !== undefined && wanted.includes(effective)) {
113
117
  return { block, value, source: effective };
114
118
  }
115
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cascade.js","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cascade.js","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { ViewerTier } from './protocol.js';
2
+ /**
3
+ * Parse `--flag`, `--flag value`, and `--flag=value` forms. A bare `--flag`
4
+ * whose next token is another flag (or nothing) is boolean `true`; otherwise
5
+ * it consumes the next token as its value. The `=` form never consumes the
6
+ * next token.
7
+ */
8
+ export declare function parseFlags(rawArgs: string[]): Record<string, string | boolean>;
9
+ /**
10
+ * The non-flag tokens, excluding any token `parseFlags` consumed as a flag's
11
+ * value. Mirrors `parseFlags`' consumption rule exactly: a `--flag=value`
12
+ * token is self-contained and a boolean `--flag` consumes nothing, so in both
13
+ * cases the following token stays positional. (An earlier inline version
14
+ * skipped the next token after *any* `--` token, so
15
+ * `uwmd parse --compact=true file.uwx.md` silently dropped the filename and
16
+ * died with a usage error.)
17
+ */
18
+ export declare function extractPositionals(rawArgs: string[]): string[];
19
+ /**
20
+ * Swap a UW-family extension for another, matching the longest known suffix
21
+ * case-insensitively while preserving the original casing of the stem. A path
22
+ * with no known suffix gets the extension appended.
23
+ */
24
+ export declare function replaceUWExtension(file: string, extension: string): string;
25
+ /** The `--tier` flag as a ViewerTier, or undefined for absent/boolean forms. */
26
+ export declare function hostTierFlag(flags: Record<string, string | boolean>): ViewerTier | undefined;
27
+ /** Where fragments live for a record, unless told otherwise. */
28
+ export declare function defaultPartsDir(file: string): string;
29
+ /** Read and parse a JSON manifest, returning a result union instead of exiting. */
30
+ export declare function readManifestFile(path: string): {
31
+ ok: true;
32
+ manifest: unknown;
33
+ } | {
34
+ ok: false;
35
+ message: string;
36
+ };
37
+ //# sourceMappingURL=cli-args.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAsB9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAa9D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAM1E;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,UAAU,GAAG,SAAS,CAG5F;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GACX;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAMlE"}
@@ -0,0 +1,93 @@
1
+ // Pure argument/path plumbing for the uwmd CLI, extracted from cli.ts so it
2
+ // can carry a sibling unit test — cli.ts itself is a top-level script (it
3
+ // reads process.argv and runs at import time), which is why it never had one.
4
+ // Nothing here touches stdout, process.exit, or the filesystem except
5
+ // readManifestFile, which returns a result union instead of exiting.
6
+ import { readFileSync } from 'node:fs';
7
+ import { resolve, dirname } from 'node:path';
8
+ import { UWX_EXTENSION } from './source-representation.js';
9
+ /**
10
+ * Parse `--flag`, `--flag value`, and `--flag=value` forms. A bare `--flag`
11
+ * whose next token is another flag (or nothing) is boolean `true`; otherwise
12
+ * it consumes the next token as its value. The `=` form never consumes the
13
+ * next token.
14
+ */
15
+ export function parseFlags(rawArgs) {
16
+ const flags = {};
17
+ for (let i = 0; i < rawArgs.length; i++) {
18
+ const arg = rawArgs[i];
19
+ if (arg.startsWith('--')) {
20
+ const body = arg.slice(2);
21
+ const eqIdx = body.indexOf('=');
22
+ if (eqIdx >= 0) {
23
+ flags[body.slice(0, eqIdx)] = body.slice(eqIdx + 1);
24
+ continue;
25
+ }
26
+ const key = body;
27
+ const next = rawArgs[i + 1];
28
+ if (next && !next.startsWith('--')) {
29
+ flags[key] = next;
30
+ i++;
31
+ }
32
+ else {
33
+ flags[key] = true;
34
+ }
35
+ }
36
+ }
37
+ return flags;
38
+ }
39
+ /**
40
+ * The non-flag tokens, excluding any token `parseFlags` consumed as a flag's
41
+ * value. Mirrors `parseFlags`' consumption rule exactly: a `--flag=value`
42
+ * token is self-contained and a boolean `--flag` consumes nothing, so in both
43
+ * cases the following token stays positional. (An earlier inline version
44
+ * skipped the next token after *any* `--` token, so
45
+ * `uwmd parse --compact=true file.uwx.md` silently dropped the filename and
46
+ * died with a usage error.)
47
+ */
48
+ export function extractPositionals(rawArgs) {
49
+ const positional = [];
50
+ for (let i = 0; i < rawArgs.length; i++) {
51
+ const arg = rawArgs[i];
52
+ if (arg.startsWith('--')) {
53
+ const consumesNext = !arg.includes('=') && !!rawArgs[i + 1] && !rawArgs[i + 1].startsWith('--');
54
+ if (consumesNext)
55
+ i++;
56
+ continue;
57
+ }
58
+ positional.push(arg);
59
+ }
60
+ return positional;
61
+ }
62
+ /**
63
+ * Swap a UW-family extension for another, matching the longest known suffix
64
+ * case-insensitively while preserving the original casing of the stem. A path
65
+ * with no known suffix gets the extension appended.
66
+ */
67
+ export function replaceUWExtension(file, extension) {
68
+ const lower = file.toLowerCase();
69
+ for (const suffix of [UWX_EXTENSION, '.uw.csv.zip', '.uw.md', '.uw.json', '.uw.xml']) {
70
+ if (lower.endsWith(suffix))
71
+ return `${file.slice(0, -suffix.length)}${extension}`;
72
+ }
73
+ return `${file}${extension}`;
74
+ }
75
+ /** The `--tier` flag as a ViewerTier, or undefined for absent/boolean forms. */
76
+ export function hostTierFlag(flags) {
77
+ const tier = flags['tier'];
78
+ return typeof tier === 'string' ? tier : undefined;
79
+ }
80
+ /** Where fragments live for a record, unless told otherwise. */
81
+ export function defaultPartsDir(file) {
82
+ return resolve(dirname(resolve(file)), 'parts');
83
+ }
84
+ /** Read and parse a JSON manifest, returning a result union instead of exiting. */
85
+ export function readManifestFile(path) {
86
+ try {
87
+ return { ok: true, manifest: JSON.parse(readFileSync(resolve(path), 'utf-8')) };
88
+ }
89
+ catch (e) {
90
+ return { ok: false, message: e instanceof Error ? e.message : String(e) };
91
+ }
92
+ }
93
+ //# sourceMappingURL=cli-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"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"}