aontu 0.51.0 → 0.52.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 (179) hide show
  1. package/bin/aontu-lsp.js +6 -0
  2. package/bin/aontu.js +7 -0
  3. package/dist/aontu.d.ts +1 -1
  4. package/dist/aontu.js +4 -7
  5. package/dist/aontu.js.map +1 -1
  6. package/dist/cli.d.ts +0 -1
  7. package/dist/cli.js +10 -46
  8. package/dist/cli.js.map +1 -1
  9. package/dist/ctx.js +1 -1
  10. package/dist/ctx.js.map +1 -1
  11. package/dist/err.js +3 -2
  12. package/dist/err.js.map +1 -1
  13. package/dist/exactjson.js +1 -1
  14. package/dist/exactjson.js.map +1 -1
  15. package/dist/hints.d.ts +3 -1
  16. package/dist/hints.js +126 -1
  17. package/dist/hints.js.map +1 -1
  18. package/dist/keyorder.js +1 -1
  19. package/dist/keyorder.js.map +1 -1
  20. package/dist/lang.js +64 -27
  21. package/dist/lang.js.map +1 -1
  22. package/dist/lsp-server.d.ts +2 -2
  23. package/dist/lsp-server.js +10 -10
  24. package/dist/lsp-server.js.map +1 -1
  25. package/dist/lsp.js +27 -19
  26. package/dist/lsp.js.map +1 -1
  27. package/dist/site.js +1 -1
  28. package/dist/site.js.map +1 -1
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/dist/unify.js +48 -1
  31. package/dist/unify.js.map +1 -1
  32. package/dist/utility.js +3 -8
  33. package/dist/utility.js.map +1 -1
  34. package/dist/val/BagVal.js +1 -1
  35. package/dist/val/BagVal.js.map +1 -1
  36. package/dist/val/BigDecimalVal.js +2 -2
  37. package/dist/val/BigDecimalVal.js.map +1 -1
  38. package/dist/val/BigIntegerVal.js +2 -2
  39. package/dist/val/BigIntegerVal.js.map +1 -1
  40. package/dist/val/BooleanVal.js +1 -1
  41. package/dist/val/BooleanVal.js.map +1 -1
  42. package/dist/val/CloseFuncVal.js +1 -1
  43. package/dist/val/CloseFuncVal.js.map +1 -1
  44. package/dist/val/ConjunctVal.js +1 -1
  45. package/dist/val/ConjunctVal.js.map +1 -1
  46. package/dist/val/ConstraintVal.d.ts +56 -0
  47. package/dist/val/ConstraintVal.js +407 -0
  48. package/dist/val/ConstraintVal.js.map +1 -0
  49. package/dist/val/CopyFuncVal.js +1 -1
  50. package/dist/val/CopyFuncVal.js.map +1 -1
  51. package/dist/val/Decimal.js +1 -1
  52. package/dist/val/Decimal.js.map +1 -1
  53. package/dist/val/DisjunctVal.js +1 -29
  54. package/dist/val/DisjunctVal.js.map +1 -1
  55. package/dist/val/ExpectVal.js +1 -1
  56. package/dist/val/ExpectVal.js.map +1 -1
  57. package/dist/val/FeatureVal.js +1 -1
  58. package/dist/val/FeatureVal.js.map +1 -1
  59. package/dist/val/FuncBaseVal.js +1 -1
  60. package/dist/val/FuncBaseVal.js.map +1 -1
  61. package/dist/val/HideFuncVal.js +1 -1
  62. package/dist/val/HideFuncVal.js.map +1 -1
  63. package/dist/val/IntegerVal.js +2 -2
  64. package/dist/val/IntegerVal.js.map +1 -1
  65. package/dist/val/JunctionVal.js +1 -1
  66. package/dist/val/JunctionVal.js.map +1 -1
  67. package/dist/val/KeyFuncVal.js +1 -1
  68. package/dist/val/KeyFuncVal.js.map +1 -1
  69. package/dist/val/ListVal.js +7 -7
  70. package/dist/val/ListVal.js.map +1 -1
  71. package/dist/val/LowerFuncVal.js +1 -1
  72. package/dist/val/LowerFuncVal.js.map +1 -1
  73. package/dist/val/MapVal.js +11 -9
  74. package/dist/val/MapVal.js.map +1 -1
  75. package/dist/val/MoveFuncVal.js +1 -1
  76. package/dist/val/MoveFuncVal.js.map +1 -1
  77. package/dist/val/NilVal.d.ts +1 -0
  78. package/dist/val/NilVal.js +10 -3
  79. package/dist/val/NilVal.js.map +1 -1
  80. package/dist/val/NullVal.js +1 -1
  81. package/dist/val/NullVal.js.map +1 -1
  82. package/dist/val/NumberVal.js +2 -2
  83. package/dist/val/NumberVal.js.map +1 -1
  84. package/dist/val/OpBaseVal.js +10 -8
  85. package/dist/val/OpBaseVal.js.map +1 -1
  86. package/dist/val/OpenFuncVal.js +1 -1
  87. package/dist/val/OpenFuncVal.js.map +1 -1
  88. package/dist/val/PathFuncVal.js +1 -1
  89. package/dist/val/PathFuncVal.js.map +1 -1
  90. package/dist/val/PlusOpVal.js +1 -1
  91. package/dist/val/PlusOpVal.js.map +1 -1
  92. package/dist/val/PrefFuncVal.js +1 -1
  93. package/dist/val/PrefFuncVal.js.map +1 -1
  94. package/dist/val/PrefVal.js +4 -3
  95. package/dist/val/PrefVal.js.map +1 -1
  96. package/dist/val/RefVal.d.ts +2 -0
  97. package/dist/val/RefVal.js +78 -9
  98. package/dist/val/RefVal.js.map +1 -1
  99. package/dist/val/ScalarKindVal.js +8 -2
  100. package/dist/val/ScalarKindVal.js.map +1 -1
  101. package/dist/val/ScalarVal.js +2 -2
  102. package/dist/val/ScalarVal.js.map +1 -1
  103. package/dist/val/StringVal.js +1 -1
  104. package/dist/val/StringVal.js.map +1 -1
  105. package/dist/val/SuperFuncVal.js +1 -1
  106. package/dist/val/SuperFuncVal.js.map +1 -1
  107. package/dist/val/TopVal.js +1 -1
  108. package/dist/val/TopVal.js.map +1 -1
  109. package/dist/val/TypeFuncVal.js +1 -1
  110. package/dist/val/TypeFuncVal.js.map +1 -1
  111. package/dist/val/UpperFuncVal.js +1 -1
  112. package/dist/val/UpperFuncVal.js.map +1 -1
  113. package/dist/val/Val.d.ts +1 -1
  114. package/dist/val/Val.js +11 -21
  115. package/dist/val/Val.js.map +1 -1
  116. package/dist/val/VarVal.js +1 -1
  117. package/dist/val/VarVal.js.map +1 -1
  118. package/dist/val/numcmp.d.ts +14 -0
  119. package/dist/val/numcmp.js +134 -0
  120. package/dist/val/numcmp.js.map +1 -0
  121. package/dist/val/numkind.js +1 -1
  122. package/dist/val/numkind.js.map +1 -1
  123. package/package.json +6 -4
  124. package/src/aontu.ts +4 -8
  125. package/src/cli.ts +12 -13
  126. package/src/ctx.ts +1 -1
  127. package/src/err.ts +3 -2
  128. package/src/exactjson.ts +1 -1
  129. package/src/hints.ts +140 -0
  130. package/src/keyorder.ts +1 -1
  131. package/src/lang.ts +75 -27
  132. package/src/lsp-server.ts +17 -15
  133. package/src/lsp.ts +27 -12
  134. package/src/site.ts +1 -1
  135. package/src/type.ts +1 -1
  136. package/src/unify.ts +52 -1
  137. package/src/utility.ts +3 -9
  138. package/src/val/BagVal.ts +1 -1
  139. package/src/val/BigDecimalVal.ts +2 -2
  140. package/src/val/BigIntegerVal.ts +2 -2
  141. package/src/val/BooleanVal.ts +1 -1
  142. package/src/val/CloseFuncVal.ts +1 -1
  143. package/src/val/ConjunctVal.ts +1 -1
  144. package/src/val/ConstraintVal.ts +561 -0
  145. package/src/val/CopyFuncVal.ts +1 -1
  146. package/src/val/Decimal.ts +1 -1
  147. package/src/val/DisjunctVal.ts +1 -37
  148. package/src/val/ExpectVal.ts +1 -1
  149. package/src/val/FeatureVal.ts +1 -1
  150. package/src/val/FuncBaseVal.ts +1 -1
  151. package/src/val/HideFuncVal.ts +1 -1
  152. package/src/val/IntegerVal.ts +2 -2
  153. package/src/val/JunctionVal.ts +1 -1
  154. package/src/val/KeyFuncVal.ts +1 -1
  155. package/src/val/ListVal.ts +3 -5
  156. package/src/val/LowerFuncVal.ts +1 -1
  157. package/src/val/MapVal.ts +7 -5
  158. package/src/val/MoveFuncVal.ts +1 -1
  159. package/src/val/NilVal.ts +13 -3
  160. package/src/val/NullVal.ts +1 -1
  161. package/src/val/NumberVal.ts +2 -2
  162. package/src/val/OpBaseVal.ts +10 -10
  163. package/src/val/OpenFuncVal.ts +1 -1
  164. package/src/val/PathFuncVal.ts +1 -1
  165. package/src/val/PlusOpVal.ts +1 -1
  166. package/src/val/PrefFuncVal.ts +1 -1
  167. package/src/val/PrefVal.ts +4 -3
  168. package/src/val/RefVal.ts +82 -9
  169. package/src/val/ScalarKindVal.ts +8 -2
  170. package/src/val/ScalarVal.ts +2 -2
  171. package/src/val/StringVal.ts +1 -1
  172. package/src/val/SuperFuncVal.ts +1 -1
  173. package/src/val/TopVal.ts +1 -1
  174. package/src/val/TypeFuncVal.ts +1 -1
  175. package/src/val/UpperFuncVal.ts +1 -1
  176. package/src/val/Val.ts +13 -8
  177. package/src/val/VarVal.ts +1 -1
  178. package/src/val/numcmp.ts +189 -0
  179. package/src/val/numkind.ts +1 -1
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ /* Copyright (c) 2025 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.scaledOfFloat = scaledOfFloat;
5
+ exports.scaledOfNumeric = scaledOfNumeric;
6
+ exports.cmpScaled = cmpScaled;
7
+ exports.cmpNumeric = cmpNumeric;
8
+ exports.cmpCodePoints = cmpCodePoints;
9
+ exports.towerRank = towerRank;
10
+ exports.scaledIsIntegral = scaledIsIntegral;
11
+ exports.scaledFloor = scaledFloor;
12
+ const F64 = new DataView(new ArrayBuffer(8));
13
+ // The exact scaled-decimal value of a finite or infinite binary64.
14
+ function scaledOfFloat(f) {
15
+ if (Number.isInteger(f) && Math.abs(f) <= Number.MAX_SAFE_INTEGER) {
16
+ return { unscaled: BigInt(f), scale: 0 };
17
+ }
18
+ if (Infinity === f) {
19
+ return { inf: 1, unscaled: 0n, scale: 0 };
20
+ }
21
+ if (-Infinity === f) {
22
+ return { inf: -1, unscaled: 0n, scale: 0 };
23
+ }
24
+ F64.setFloat64(0, f);
25
+ const hi = BigInt(F64.getUint32(0));
26
+ const lo = BigInt(F64.getUint32(4));
27
+ const bits = (hi << 32n) | lo;
28
+ const sign = (bits >> 63n) & 1n ? -1n : 1n;
29
+ const expBits = Number((bits >> 52n) & 0x7ffn);
30
+ const frac = bits & 0xfffffffffffffn;
31
+ // Normal: implicit leading bit, exponent bias 1023 plus the 52
32
+ // fraction bits. Subnormal: no implicit bit, fixed exponent -1074.
33
+ let mant;
34
+ let exp;
35
+ if (0 === expBits) {
36
+ mant = frac;
37
+ exp = -1074;
38
+ }
39
+ else {
40
+ mant = frac | (1n << 52n);
41
+ exp = expBits - 1075;
42
+ }
43
+ if (0 <= exp) {
44
+ return { unscaled: sign * (mant << BigInt(exp)), scale: 0 };
45
+ }
46
+ // mant * 2^-k == mant * 5^k / 10^k, exactly.
47
+ return { unscaled: sign * mant * 5n ** BigInt(-exp), scale: -exp };
48
+ }
49
+ // The exact scaled-decimal value of any numeric leaf Val.
50
+ function scaledOfNumeric(v) {
51
+ if (v.isBigInteger) {
52
+ return { unscaled: v.peg, scale: 0 };
53
+ }
54
+ if (v.isBigDecimal) {
55
+ const d = v.peg;
56
+ return { unscaled: d.unscaled, scale: d.scale };
57
+ }
58
+ // integer and float leaves both hold a binary64.
59
+ return scaledOfFloat(v.peg);
60
+ }
61
+ function pow10(n) {
62
+ return 10n ** BigInt(n);
63
+ }
64
+ // Exact three-way comparison of two scaled decimals.
65
+ function cmpScaled(a, b) {
66
+ const ai = a.inf ?? 0;
67
+ const bi = b.inf ?? 0;
68
+ if (0 !== ai || 0 !== bi) {
69
+ return ai < bi ? -1 : ai > bi ? 1 : 0;
70
+ }
71
+ let au = a.unscaled;
72
+ let bu = b.unscaled;
73
+ if (a.scale < b.scale) {
74
+ au *= pow10(b.scale - a.scale);
75
+ }
76
+ else if (b.scale < a.scale) {
77
+ bu *= pow10(a.scale - b.scale);
78
+ }
79
+ return au < bu ? -1 : au > bu ? 1 : 0;
80
+ }
81
+ // Exact three-way comparison of two numeric leaf Vals, any leaves.
82
+ function cmpNumeric(a, b) {
83
+ return cmpScaled(scaledOfNumeric(a), scaledOfNumeric(b));
84
+ }
85
+ // Lexical comparison by Unicode CODE POINTS — not UTF-16 code units,
86
+ // which order astral-plane text differently. Go compares strings
87
+ // byte-wise in UTF-8, which IS code-point order, so this is the side
88
+ // that must adapt (a Phase 0 decision, docs/reference-language.md).
89
+ function cmpCodePoints(a, b) {
90
+ let ai = 0;
91
+ let bi = 0;
92
+ while (ai < a.length && bi < b.length) {
93
+ const ac = a.codePointAt(ai);
94
+ const bc = b.codePointAt(bi);
95
+ if (ac !== bc) {
96
+ return ac < bc ? -1 : 1;
97
+ }
98
+ ai += ac > 0xffff ? 2 : 1;
99
+ bi += bc > 0xffff ? 2 : 1;
100
+ }
101
+ const ar = a.length - ai;
102
+ const br = b.length - bi;
103
+ return ar < br ? -1 : ar > br ? 1 : 0;
104
+ }
105
+ // The tower order integer < float < biginteger < bigdecimal, used when
106
+ // two endpoints at the SAME point meet: the survivor is the
107
+ // tower-lowest spelling (docs/reference-language.md, bounds ruling 2).
108
+ function towerRank(v) {
109
+ return v.isBigDecimal ? 3 : v.isBigInteger ? 2 :
110
+ v.isInteger ? 0 : 1;
111
+ }
112
+ // True when the scaled value is integral (an exact whole number).
113
+ function scaledIsIntegral(s) {
114
+ if (s.inf) {
115
+ return false;
116
+ }
117
+ if (0 === s.scale) {
118
+ return true;
119
+ }
120
+ const p = pow10(s.scale);
121
+ return 0n === s.unscaled % p;
122
+ }
123
+ // The exact floor of a scaled value, as a bigint. Infinite inputs are
124
+ // the caller's job to exclude.
125
+ function scaledFloor(s) {
126
+ if (0 === s.scale) {
127
+ return s.unscaled;
128
+ }
129
+ const p = pow10(s.scale);
130
+ const q = s.unscaled / p;
131
+ // BigInt division truncates toward zero; floor rounds down.
132
+ return (s.unscaled < 0n && 0n !== s.unscaled % p) ? q - 1n : q;
133
+ } /* node:coverage ignore next 14 */
134
+ //# sourceMappingURL=numcmp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numcmp.js","sourceRoot":"","sources":["../../src/val/numcmp.ts"],"names":[],"mappings":"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"}
@@ -220,5 +220,5 @@ function stripSep(s) {
220
220
  // select on kind, not merely on the peg being a JS number.
221
221
  function integerDigits(peg) {
222
222
  return BigInt(peg).toString();
223
- }
223
+ } /* node:coverage ignore next 13 */
224
224
  //# sourceMappingURL=numkind.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"numkind.js","sourceRoot":"","sources":["../../src/val/numkind.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"numkind.js","sourceRoot":"","sources":["../../src/val/numkind.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "aontu",
3
- "version": "0.51.0",
3
+ "version": "0.52.0",
4
4
  "main": "dist/aontu.js",
5
5
  "type": "commonjs",
6
6
  "types": "dist/aontu.d.ts",
7
7
  "bin": {
8
- "aontu": "dist/cli.js",
9
- "aontu-lsp": "dist/lsp-server.js"
8
+ "aontu": "bin/aontu.js",
9
+ "aontu-lsp": "bin/aontu-lsp.js"
10
10
  },
11
11
  "description": "Unifier.",
12
12
  "homepage": "https://github.com/rjrodger/aontu",
@@ -20,7 +20,8 @@
20
20
  },
21
21
  "scripts": {
22
22
  "test": "node --enable-source-maps --test \"dist-test/**/*.test.js\"",
23
- "test-cov": "node --enable-source-maps --experimental-test-coverage --test \"dist-test/**/*.test.js\"",
23
+ "test-cov": "node --enable-source-maps --experimental-test-coverage --test-coverage-exclude=\"dist-test/**\" --test-coverage-exclude=\"test/**\" --test-coverage-exclude=\"bin/**\" --test \"dist-test/**/*.test.js\"",
24
+ "test-cov-check": "node test/covrun.js",
24
25
  "test-some": "node --enable-source-maps --test-name-pattern=\"$TEST_PATTERN\" --test \"dist-test/**/*.test.js\"",
25
26
  "watch": "tsc --build src test -w",
26
27
  "build": "tsc --build src test",
@@ -42,6 +43,7 @@
42
43
  "node": ">=24"
43
44
  },
44
45
  "files": [
46
+ "bin",
45
47
  "src",
46
48
  "dist",
47
49
  "LICENSE"
package/src/aontu.ts CHANGED
@@ -22,7 +22,7 @@ import { makeNilErr, descErr, AontuError } from './err'
22
22
  // Kept in step with package.json by the `version` npm lifecycle script,
23
23
  // which runs on `npm version` / `npm run repo-bump`. version.test.ts
24
24
  // fails if the two ever drift.
25
- const VERSION = '0.51.0'
25
+ const VERSION = '0.52.0'
26
26
 
27
27
 
28
28
  class Aontu {
@@ -108,15 +108,11 @@ class Aontu {
108
108
  let uni = new Unify(pval, this.lang, ac, src)
109
109
  errs = uni.err
110
110
 
111
+ // Never nullish: Unify.res starts as the root Val, unite() returns a
112
+ // Val on every arm, and its catch-all turns a throwing node into an
113
+ // 'internal' NilVal.
111
114
  out = uni.res
112
115
 
113
- if (null == out) {
114
- out = makeNilErr(ac, 'unify_no_res')
115
- if (0 === errs.length) {
116
- errs = [out]
117
- }
118
- }
119
-
120
116
  out.deps = pval.deps
121
117
  out.err = errs
122
118
  ac.root = out
package/src/cli.ts CHANGED
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env node
2
1
  /* Copyright (c) 2025 Richard Rodger, MIT License */
3
2
 
4
3
  // Command-line interface for Aontu.
@@ -9,9 +8,11 @@
9
8
  // With no file on an interactive terminal, a REPL is started. With no
10
9
  // file and piped input, the source is read from stdin. See HELP below.
11
10
 
12
- import * as Fs from 'node:fs'
13
- import * as Path from 'node:path'
14
- import * as Readline from 'node:readline'
11
+ // Named imports, not `import * as`: the namespace form makes tsc emit the
12
+ // __importStar downlevel helper, whose branches no supported Node takes.
13
+ import { readFileSync } from 'node:fs'
14
+ import { join, resolve } from 'node:path'
15
+ import { createInterface } from 'node:readline'
15
16
 
16
17
  import { Aontu, AontuError, exactJSON } from './aontu'
17
18
 
@@ -40,7 +41,7 @@ REPL commands:
40
41
 
41
42
  function version(): string {
42
43
  try {
43
- const txt = Fs.readFileSync(Path.join(__dirname, '..', 'package.json'), 'utf8')
44
+ const txt = readFileSync(join(__dirname, '..', 'package.json'), 'utf8')
44
45
  return JSON.parse(txt).version ?? '0.0.0'
45
46
  }
46
47
  catch {
@@ -80,14 +81,14 @@ function evalSource(
80
81
  function runFile(file: string, mode: Mode): number {
81
82
  let src: string
82
83
  try {
83
- src = Fs.readFileSync(file, 'utf8')
84
+ src = readFileSync(file, 'utf8')
84
85
  }
85
86
  catch (err: any) {
86
87
  process.stderr.write(`aontu: cannot read ${file}: ${err.message}\n`)
87
88
  return 1
88
89
  }
89
90
 
90
- const aontu = new Aontu({ path: Path.resolve(file) })
91
+ const aontu = new Aontu({ path: resolve(file) })
91
92
  const res = evalSource(aontu, src, mode)
92
93
  ;(res.ok ? process.stdout : process.stderr).write(res.text + '\n')
93
94
  return res.ok ? 0 : 1
@@ -111,7 +112,7 @@ function runStdin(mode: Mode): Promise<number> {
111
112
  function runRepl(initialMode: Mode): void {
112
113
  let mode = initialMode
113
114
  const aontu = new Aontu()
114
- const rl = Readline.createInterface({
115
+ const rl = createInterface({
115
116
  input: process.stdin,
116
117
  output: process.stdout,
117
118
  prompt: 'aontu> ',
@@ -209,13 +210,11 @@ function main(argv: string[]): void {
209
210
  else {
210
211
  runStdin(mode).then((code) => finish(code))
211
212
  }
212
- }
213
+ } /* node:coverage ignore next 8 */
213
214
 
214
215
 
215
- // Only run when invoked as a program, not when imported (e.g. by tests).
216
- if (require.main === module) {
217
- main(process.argv)
218
- }
216
+ // No require.main guard here: bin/aontu.js is the executable entry and
217
+ // calls main(process.argv) itself, so this module stays import-only.
219
218
 
220
219
 
221
220
  export { evalSource, main }
package/src/ctx.ts CHANGED
@@ -285,7 +285,7 @@ class AontuContext {
285
285
  return this._pathstr ??
286
286
  (this._pathstr = this.path.map(p => p.replaceAll('.', '\\.')).join('.'))
287
287
  }
288
- }
288
+ } /* node:coverage ignore next 8 */
289
289
 
290
290
 
291
291
 
package/src/err.ts CHANGED
@@ -66,7 +66,8 @@ function descErr<NILS extends NilVal | NilVal[]>(
66
66
 
67
67
  let path = ['$', ...err.path].filter((p: any) => null != p && '' != p)
68
68
 
69
- let valpath = (0 < path.length ? path.join('.') : '')
69
+ // '$' is neither null nor '', so the filter always leaves it.
70
+ let valpath = path.join('.')
70
71
  let attempt = null != err.attempt ? err.attempt : (null == v2 ? 'resolve' : 'unify')
71
72
 
72
73
  const details = err.details
@@ -200,7 +201,7 @@ class AontuError extends Error {
200
201
  }
201
202
 
202
203
  errs: () => NilVal[]
203
- }
204
+ } /* node:coverage ignore next 9 */
204
205
 
205
206
 
206
207
  export {
package/src/exactjson.ts CHANGED
@@ -246,7 +246,7 @@ function emit(v: any, unit: string, pad: string, seen: Set<any>): string {
246
246
  */
247
247
  function exactJSON(value: any, indent?: number | string): string {
248
248
  return emit(value, indentUnit(indent), '', new Set())
249
- }
249
+ } /* node:coverage ignore next 6 */
250
250
 
251
251
 
252
252
  export {
package/src/hints.ts CHANGED
@@ -61,6 +61,26 @@ const hints: Record<string, string> = {
61
61
 
62
62
  unify_cycle: 'Circular reference detected during unification.',
63
63
 
64
+ constraint:
65
+ 'This value does not satisfy the constraint. A constraint is the\n' +
66
+ 'meet of bound atoms (min, max, above, below) and exclusions (neq)\n' +
67
+ 'over one domain; the expected form shown is the normalised\n' +
68
+ 'residual the value must satisfy.' +
69
+ '\n \nExamples:\n' +
70
+ ' min(0) & 3 -> 3 # Admitted (3 >= 0);\n' +
71
+ ' min(0) & 0d5 -> 0d5 # Bounds are leaf-agnostic;\n' +
72
+ ' max(65535) & 99999 -> nil # Above the bound;\n' +
73
+ ' min(5) & max(3) -> nil # Empty at composition time;\n' +
74
+ ' integer & above(1) & below(2) -> nil # No integer in the gap;\n' +
75
+ ' neq(1) & 1.0 -> 1.0 # neq excludes leaf AND value.',
76
+
77
+ budget_passes:
78
+ 'The evaluation budget of {limit} fixpoint passes was spent before\n' +
79
+ 'the model converged; still refining: {paths}.\n' +
80
+ 'This is the evaluator giving up, not a contradiction in the model:\n' +
81
+ 'raising the budget helps only a model that is still converging --\n' +
82
+ 'a genuine cycle never converges at any budget.',
83
+
64
84
  conjunct:
65
85
  'This conjunction (& operator) could not be completed as some terms\n' +
66
86
  'could not be resolved.',
@@ -201,6 +221,126 @@ const hints: Record<string, string> = {
201
221
  }
202
222
 
203
223
 
224
+ // codeClasses assigns every error code a CLASS: conflict | incomplete |
225
+ // reference | parse | budget | internal. The contract lives in
226
+ // test/spec/errcodes.tsv (mode `errcode`): the spec suite executes one
227
+ // row per code against this table and asserts SET EQUALITY between the
228
+ // file and these keys, in both implementations (go/hints.go mirrors
229
+ // this map exactly). Codes are append-only and never renamed; a class
230
+ // change is a breaking change. Class rulings (why decimal_budget and
231
+ // lossy_integer_literal are conflict, not budget; why unknown_function
232
+ // is reference) are documented in the tsv header.
233
+ const codeClasses: Record<string, string> = {
234
+ // parse -- the source text is malformed or unusable
235
+ parse: 'parse',
236
+ syntax: 'parse',
237
+ parse_unknown: 'parse',
238
+ parse_bad_src: 'parse',
239
+ unify_no_src: 'parse',
240
+ incomplete_expression: 'parse',
241
+ not_number: 'parse',
242
+ negative: 'parse',
243
+ decimal_syntax: 'parse',
244
+
245
+ // conflict -- no common lower bound, or a value refused by a rule
246
+ // (constraint covers the whole algebra family: membership failure,
247
+ // empty meets at composition time, and domain/kind mixing.)
248
+ constraint: 'conflict',
249
+ scalar_value: 'conflict',
250
+ scalar_kind: 'conflict',
251
+ no_scalar_unify: 'conflict',
252
+ 'scalar-type': 'conflict',
253
+ 'not-scalar-type': 'conflict',
254
+ map: 'conflict',
255
+ list: 'conflict',
256
+ closed: 'conflict',
257
+ literal_nil: 'conflict',
258
+ nil_gen: 'conflict',
259
+ unite: 'conflict',
260
+ '|:empty': 'conflict',
261
+ '|:empty-dist': 'conflict',
262
+ exact_float_mix: 'conflict',
263
+ inexact_integer_sum: 'conflict',
264
+ decimal_budget: 'conflict',
265
+ lossy_integer_literal: 'conflict',
266
+ arg: 'conflict',
267
+ 'invalid-arg': 'conflict',
268
+ no_first_arg: 'conflict',
269
+ key_level: 'conflict',
270
+ func: 'conflict',
271
+ 'func:': 'conflict',
272
+ op: 'conflict',
273
+ 'op:': 'conflict',
274
+ 'op[': 'conflict',
275
+ make: 'conflict',
276
+ resolve: 'conflict',
277
+ operate: 'conflict',
278
+ close: 'conflict',
279
+
280
+ // incomplete -- residue: the truth requires more than was supplied
281
+ no_gen: 'incomplete',
282
+ conjunct: 'incomplete',
283
+ mapval_no_gen: 'incomplete',
284
+ mapval_required: 'incomplete',
285
+ mapval_spread_required: 'incomplete',
286
+ listval_no_gen: 'incomplete',
287
+ listval_required: 'incomplete',
288
+ listval_spread_required: 'incomplete',
289
+ required_listelem: 'incomplete',
290
+
291
+ // reference -- a name or path that does not resolve
292
+ no_path: 'reference',
293
+ // A PROVEN structural cycle is a defect of the model, not a spent
294
+ // evaluation bound: raising a budget never fixes it (G5's ruling --
295
+ // class budget means "retry with more may help", path_cycle means
296
+ // "fix the model").
297
+ path_cycle: 'reference',
298
+ ref: 'reference',
299
+ 'ref[': 'reference',
300
+ var: 'reference',
301
+ 'var[': 'reference',
302
+ unknown_var: 'reference',
303
+ invalid_var_kind: 'reference',
304
+ unknown_function: 'reference',
305
+ multisource_not_found: 'reference',
306
+
307
+ // budget -- an evaluation bound was exceeded
308
+ unify_cycle: 'budget',
309
+ max_depth: 'budget',
310
+ budget_passes: 'budget',
311
+
312
+ // internal -- the engine reached a state it should not reach
313
+ internal: 'internal',
314
+ unify_no_res: 'internal',
315
+ unknown_op: 'internal',
316
+ }
317
+
318
+
319
+ // Dynamic-prefix families: the engine appends a name or value to these
320
+ // (e.g. `func:upper`, `op:+`, `var[string]`, `ref[$.x]`, `op[+]`), so
321
+ // class lookup falls back to the registered prefix.
322
+ const CODE_PREFIXES = ['func:', 'op:', 'op[', 'var[', 'ref[']
323
+
324
+
325
+ // The class of an error code: an exact registry entry, else the
326
+ // registered dynamic prefix it extends, else `internal` -- an
327
+ // unregistered code is an engine defect, not a user error.
328
+ function codeClass(code: string): string {
329
+ const cls = codeClasses[code]
330
+ if (null != cls) {
331
+ return cls
332
+ }
333
+ for (const prefix of CODE_PREFIXES) {
334
+ if (code.startsWith(prefix)) {
335
+ return codeClasses[prefix]
336
+ }
337
+ }
338
+ return 'internal'
339
+ } /* node:coverage ignore next 8 */
340
+
341
+
204
342
  export {
205
343
  hints,
344
+ codeClasses,
345
+ codeClass,
206
346
  }
package/src/keyorder.ts CHANGED
@@ -65,7 +65,7 @@ function cmpCodePoint(a: string, b: string): number {
65
65
  return xc < yc ? -1 : 1
66
66
  }
67
67
  }
68
- }
68
+ } /* node:coverage ignore next 6 */
69
69
 
70
70
 
71
71
  export {