aontu 0.52.0 → 0.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -0
- package/bin/aontu-mcp.js +4 -0
- package/dist/agentsmd.d.ts +16 -0
- package/dist/agentsmd.js +107 -0
- package/dist/agentsmd.js.map +1 -0
- package/dist/aontu.d.ts +14 -3
- package/dist/aontu.js +145 -4
- package/dist/aontu.js.map +1 -1
- package/dist/cli.d.ts +44 -1
- package/dist/cli.js +2401 -44
- package/dist/cli.js.map +1 -1
- package/dist/ctx.d.ts +16 -0
- package/dist/ctx.js +44 -0
- package/dist/ctx.js.map +1 -1
- package/dist/diff.d.ts +22 -0
- package/dist/diff.js +141 -0
- package/dist/diff.js.map +1 -0
- package/dist/err.d.ts +3 -1
- package/dist/err.js +48 -8
- package/dist/err.js.map +1 -1
- package/dist/graph.d.ts +16 -0
- package/dist/graph.js +73 -0
- package/dist/graph.js.map +1 -0
- package/dist/hcanon.d.ts +3 -0
- package/dist/hcanon.js +146 -0
- package/dist/hcanon.js.map +1 -0
- package/dist/hints.js +223 -5
- package/dist/hints.js.map +1 -1
- package/dist/jsonschema.d.ts +20 -0
- package/dist/jsonschema.js +391 -0
- package/dist/jsonschema.js.map +1 -0
- package/dist/lang.js +698 -35
- package/dist/lang.js.map +1 -1
- package/dist/lsp.d.ts +9 -2
- package/dist/lsp.js +262 -46
- package/dist/lsp.js.map +1 -1
- package/dist/mcp-server.d.ts +20 -0
- package/dist/mcp-server.js +147 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp.d.ts +42 -0
- package/dist/mcp.js +814 -0
- package/dist/mcp.js.map +1 -0
- package/dist/mod-tool.d.ts +58 -0
- package/dist/mod-tool.js +498 -0
- package/dist/mod-tool.js.map +1 -0
- package/dist/mod.d.ts +31 -0
- package/dist/mod.js +250 -0
- package/dist/mod.js.map +1 -0
- package/dist/patch.d.ts +44 -0
- package/dist/patch.js +506 -0
- package/dist/patch.js.map +1 -0
- package/dist/provenance.d.ts +40 -0
- package/dist/provenance.js +335 -0
- package/dist/provenance.js.map +1 -0
- package/dist/query.d.ts +27 -0
- package/dist/query.js +294 -0
- package/dist/query.js.map +1 -0
- package/dist/reach.d.ts +14 -0
- package/dist/reach.js +140 -0
- package/dist/reach.js.map +1 -0
- package/dist/relation.d.ts +19 -0
- package/dist/relation.js +305 -0
- package/dist/relation.js.map +1 -0
- package/dist/report-sarif.d.ts +14 -0
- package/dist/report-sarif.js +102 -0
- package/dist/report-sarif.js.map +1 -0
- package/dist/site.d.ts +4 -0
- package/dist/site.js +31 -0
- package/dist/site.js.map +1 -1
- package/dist/std.d.ts +1 -0
- package/dist/std.js +73 -0
- package/dist/std.js.map +1 -0
- package/dist/subsume.d.ts +39 -0
- package/dist/subsume.js +526 -0
- package/dist/subsume.js.map +1 -0
- package/dist/trim.d.ts +19 -0
- package/dist/trim.js +155 -0
- package/dist/trim.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/type.d.ts +17 -1
- package/dist/type.js.map +1 -1
- package/dist/unify.d.ts +3 -1
- package/dist/unify.js +287 -18
- package/dist/unify.js.map +1 -1
- package/dist/utility.d.ts +9 -1
- package/dist/utility.js +122 -1
- package/dist/utility.js.map +1 -1
- package/dist/val/AggFuncVal.d.ts +33 -0
- package/dist/val/AggFuncVal.js +202 -0
- package/dist/val/AggFuncVal.js.map +1 -0
- package/dist/val/ArithFuncVal.d.ts +31 -0
- package/dist/val/ArithFuncVal.js +62 -0
- package/dist/val/ArithFuncVal.js.map +1 -0
- package/dist/val/BagVal.d.ts +5 -0
- package/dist/val/BagVal.js +96 -5
- package/dist/val/BagVal.js.map +1 -1
- package/dist/val/CloseFuncVal.js +9 -1
- package/dist/val/CloseFuncVal.js.map +1 -1
- package/dist/val/ConjunctVal.d.ts +1 -1
- package/dist/val/ConjunctVal.js +19 -0
- package/dist/val/ConjunctVal.js.map +1 -1
- package/dist/val/ConstraintVal.d.ts +48 -1
- package/dist/val/ConstraintVal.js +1501 -110
- package/dist/val/ConstraintVal.js.map +1 -1
- package/dist/val/CopyFuncVal.d.ts +1 -2
- package/dist/val/CopyFuncVal.js +7 -0
- package/dist/val/CopyFuncVal.js.map +1 -1
- package/dist/val/Decimal.d.ts +1 -0
- package/dist/val/Decimal.js +13 -0
- package/dist/val/Decimal.js.map +1 -1
- package/dist/val/DeprecateFuncVal.d.ts +11 -0
- package/dist/val/DeprecateFuncVal.js +47 -0
- package/dist/val/DeprecateFuncVal.js.map +1 -0
- package/dist/val/DisjunctVal.js +130 -21
- package/dist/val/DisjunctVal.js.map +1 -1
- package/dist/val/EachFuncVal.d.ts +15 -0
- package/dist/val/EachFuncVal.js +75 -0
- package/dist/val/EachFuncVal.js.map +1 -0
- package/dist/val/ExpectVal.d.ts +1 -0
- package/dist/val/ExpectVal.js +41 -4
- package/dist/val/ExpectVal.js.map +1 -1
- package/dist/val/FeatureVal.js +1 -1
- package/dist/val/FeatureVal.js.map +1 -1
- package/dist/val/FilterFuncVal.d.ts +15 -0
- package/dist/val/FilterFuncVal.js +91 -0
- package/dist/val/FilterFuncVal.js.map +1 -0
- package/dist/val/FuncBaseVal.d.ts +6 -1
- package/dist/val/FuncBaseVal.js +178 -2
- package/dist/val/FuncBaseVal.js.map +1 -1
- package/dist/val/HideFuncVal.js.map +1 -1
- package/dist/val/IdFuncVal.d.ts +13 -0
- package/dist/val/IdFuncVal.js +54 -0
- package/dist/val/IdFuncVal.js.map +1 -0
- package/dist/val/JunctionVal.js +7 -1
- package/dist/val/JunctionVal.js.map +1 -1
- package/dist/val/KeyFuncVal.d.ts +1 -1
- package/dist/val/KeyFuncVal.js +38 -30
- package/dist/val/KeyFuncVal.js.map +1 -1
- package/dist/val/ListVal.js +117 -17
- package/dist/val/ListVal.js.map +1 -1
- package/dist/val/LowerFuncVal.js.map +1 -1
- package/dist/val/MapVal.js +102 -8
- package/dist/val/MapVal.js.map +1 -1
- package/dist/val/MatchFuncVal.d.ts +15 -0
- package/dist/val/MatchFuncVal.js +107 -0
- package/dist/val/MatchFuncVal.js.map +1 -0
- package/dist/val/MoveFuncVal.js.map +1 -1
- package/dist/val/NilVal.js +24 -0
- package/dist/val/NilVal.js.map +1 -1
- package/dist/val/OpBaseVal.d.ts +1 -1
- package/dist/val/OpBaseVal.js +24 -2
- package/dist/val/OpBaseVal.js.map +1 -1
- package/dist/val/OpenFuncVal.js +4 -1
- package/dist/val/OpenFuncVal.js.map +1 -1
- package/dist/val/PackFuncVal.d.ts +15 -0
- package/dist/val/PackFuncVal.js +108 -0
- package/dist/val/PackFuncVal.js.map +1 -0
- package/dist/val/PathFuncVal.js.map +1 -1
- package/dist/val/PlaceVal.d.ts +13 -0
- package/dist/val/PlaceVal.js +131 -0
- package/dist/val/PlaceVal.js.map +1 -0
- package/dist/val/PlusOpVal.js +11 -2
- package/dist/val/PlusOpVal.js.map +1 -1
- package/dist/val/PrefFuncVal.js.map +1 -1
- package/dist/val/PrefVal.d.ts +2 -2
- package/dist/val/PrefVal.js +78 -23
- package/dist/val/PrefVal.js.map +1 -1
- package/dist/val/RefVal.d.ts +1 -1
- package/dist/val/RefVal.js +158 -30
- package/dist/val/RefVal.js.map +1 -1
- package/dist/val/ReferFuncVal.d.ts +36 -0
- package/dist/val/ReferFuncVal.js +303 -0
- package/dist/val/ReferFuncVal.js.map +1 -0
- package/dist/val/ScalarKindVal.d.ts +1 -2
- package/dist/val/ScalarKindVal.js +0 -11
- package/dist/val/ScalarKindVal.js.map +1 -1
- package/dist/val/TopVal.js.map +1 -1
- package/dist/val/TypeFuncVal.js.map +1 -1
- package/dist/val/UpperFuncVal.js.map +1 -1
- package/dist/val/Val.d.ts +9 -2
- package/dist/val/Val.js +150 -4
- package/dist/val/Val.js.map +1 -1
- package/dist/val/VarVal.js.map +1 -1
- package/dist/val/arith.d.ts +6 -0
- package/dist/val/arith.js +170 -0
- package/dist/val/arith.js.map +1 -0
- package/dist/vet.d.ts +45 -0
- package/dist/vet.js +776 -0
- package/dist/vet.js.map +1 -0
- package/dist/walk.d.ts +2 -0
- package/dist/walk.js +91 -0
- package/dist/walk.js.map +1 -0
- package/grammar/aontu.gbnf +130 -0
- package/grammar/aontu.lark +113 -0
- package/package.json +30 -15
- package/skill/SKILL.md +37 -0
- package/skill/error-codes.md +62 -0
- package/skill/examples.md +99 -0
- package/skill/grammar-card.md +57 -0
- package/src/agentsmd.ts +135 -0
- package/src/aontu.ts +192 -4
- package/src/cli.ts +2858 -71
- package/src/ctx.ts +81 -0
- package/src/diff.ts +196 -0
- package/src/err.ts +52 -8
- package/src/graph.ts +135 -0
- package/src/hcanon.ts +169 -0
- package/src/hints.ts +271 -5
- package/src/jsonschema.ts +511 -0
- package/src/lang.ts +779 -37
- package/src/lsp.ts +281 -47
- package/src/mcp-server.ts +187 -0
- package/src/mcp.ts +993 -0
- package/src/mod-tool.ts +679 -0
- package/src/mod.ts +344 -0
- package/src/patch.ts +624 -0
- package/src/provenance.ts +430 -0
- package/src/query.ts +379 -0
- package/src/reach.ts +184 -0
- package/src/relation.ts +395 -0
- package/src/report-sarif.ts +137 -0
- package/src/site.ts +36 -1
- package/src/std.ts +73 -0
- package/src/subsume.ts +690 -0
- package/src/trim.ts +195 -0
- package/src/tsconfig.json +10 -4
- package/src/type.ts +51 -2
- package/src/unify.ts +311 -16
- package/src/utility.ts +139 -1
- package/src/val/AggFuncVal.ts +319 -0
- package/src/val/ArithFuncVal.ts +108 -0
- package/src/val/BagVal.ts +101 -4
- package/src/val/CloseFuncVal.ts +9 -1
- package/src/val/ConjunctVal.ts +20 -0
- package/src/val/ConstraintVal.ts +1699 -116
- package/src/val/CopyFuncVal.ts +7 -1
- package/src/val/Decimal.ts +15 -0
- package/src/val/DeprecateFuncVal.ts +84 -0
- package/src/val/DisjunctVal.ts +139 -28
- package/src/val/EachFuncVal.ts +133 -0
- package/src/val/ExpectVal.ts +43 -6
- package/src/val/FeatureVal.ts +1 -1
- package/src/val/FilterFuncVal.ts +154 -0
- package/src/val/FuncBaseVal.ts +200 -3
- package/src/val/HideFuncVal.ts +0 -2
- package/src/val/IdFuncVal.ts +91 -0
- package/src/val/JunctionVal.ts +7 -1
- package/src/val/KeyFuncVal.ts +39 -35
- package/src/val/ListVal.ts +125 -18
- package/src/val/LowerFuncVal.ts +0 -1
- package/src/val/MapVal.ts +110 -8
- package/src/val/MatchFuncVal.ts +176 -0
- package/src/val/MoveFuncVal.ts +0 -2
- package/src/val/NilVal.ts +25 -0
- package/src/val/OpBaseVal.ts +26 -3
- package/src/val/OpenFuncVal.ts +4 -2
- package/src/val/PackFuncVal.ts +175 -0
- package/src/val/PathFuncVal.ts +0 -1
- package/src/val/PlaceVal.ts +193 -0
- package/src/val/PlusOpVal.ts +11 -2
- package/src/val/PrefFuncVal.ts +0 -1
- package/src/val/PrefVal.ts +79 -36
- package/src/val/RefVal.ts +163 -30
- package/src/val/ReferFuncVal.ts +387 -0
- package/src/val/ScalarKindVal.ts +0 -13
- package/src/val/TopVal.ts +0 -1
- package/src/val/TypeFuncVal.ts +0 -2
- package/src/val/UpperFuncVal.ts +0 -1
- package/src/val/Val.ts +213 -3
- package/src/val/VarVal.ts +0 -1
- package/src/val/arith.ts +316 -0
- package/src/vet.ts +992 -0
- package/src/walk.ts +99 -0
package/dist/err.js
CHANGED
|
@@ -5,10 +5,41 @@ exports.AontuError = void 0;
|
|
|
5
5
|
exports.getHint = getHint;
|
|
6
6
|
exports.makeNilErr = makeNilErr;
|
|
7
7
|
exports.descErr = descErr;
|
|
8
|
+
exports.setColor = setColor;
|
|
9
|
+
exports.colorActive = colorActive;
|
|
8
10
|
const jsonic_1 = require("@tabnas/jsonic");
|
|
9
11
|
const NilVal_1 = require("./val/NilVal");
|
|
10
12
|
const hints_1 = require("./hints");
|
|
11
13
|
const { errmsg, strinject } = jsonic_1.util;
|
|
14
|
+
// COLOUR IS A DECISION ABOUT THE DESTINATION, not about the message.
|
|
15
|
+
// Every error frame hardcoded the ANSI escapes, so a piped report and
|
|
16
|
+
// a `--jsonl` answer carried terminal control codes into whatever read
|
|
17
|
+
// them -- a log file, a CI annotation, an agent's parser (the review's
|
|
18
|
+
// finding F).
|
|
19
|
+
//
|
|
20
|
+
// NO_COLOR (no-color.org: set, to anything, means no colour) turns them
|
|
21
|
+
// off everywhere, library callers included. The CLI additionally turns
|
|
22
|
+
// them off when its stderr is not a terminal, through setColor: a
|
|
23
|
+
// library cannot see the destination, and a caller who has one is the
|
|
24
|
+
// only one who can say.
|
|
25
|
+
let COLOR;
|
|
26
|
+
function setColor(on) {
|
|
27
|
+
COLOR = on;
|
|
28
|
+
}
|
|
29
|
+
function colorActive() {
|
|
30
|
+
if (null != COLOR) {
|
|
31
|
+
return COLOR;
|
|
32
|
+
}
|
|
33
|
+
// `globalThis` always exists; `process` need not (this library runs
|
|
34
|
+
// in a browser too), so the optional chain starts at the part that
|
|
35
|
+
// can actually be missing -- and stays a CHAIN rather than becoming
|
|
36
|
+
// an `if`, because the browser arm is unreachable from any test this
|
|
37
|
+
// suite can run and ADR-002 does not accept an arm nothing takes.
|
|
38
|
+
// Set-but-EMPTY is the documented exception and does not disable
|
|
39
|
+
// colour (no-color.org).
|
|
40
|
+
const no = globalThis.process?.env?.NO_COLOR;
|
|
41
|
+
return null == no || '' === no;
|
|
42
|
+
}
|
|
12
43
|
function getHint(why, details) {
|
|
13
44
|
if (hints_1.hints[why]) {
|
|
14
45
|
let txt = hints_1.hints[why];
|
|
@@ -40,16 +71,25 @@ function descErr(err, errctx) {
|
|
|
40
71
|
if (null == err.msg || '' === err.msg) {
|
|
41
72
|
let v1 = err.primary;
|
|
42
73
|
let v2 = err.secondary;
|
|
43
|
-
let v1src = resolveSrc(v1, errctx
|
|
44
|
-
let v2src = resolveSrc(v2, errctx
|
|
45
|
-
|
|
74
|
+
let v1src = resolveSrc(v1, errctx);
|
|
75
|
+
let v2src = resolveSrc(v2, errctx);
|
|
76
|
+
// STRICT `!==` against the empty string. The loose `!=` here dropped
|
|
77
|
+
// the list index 0, because `'' != 0` is FALSE in JavaScript ('' and
|
|
78
|
+
// 0 are both coerced to 0): `a:[1]&[2]` reported its conflict at
|
|
79
|
+
// `$.a` while `a:[1,5]&[1,6]` reported `$.a.1`, so the one index a
|
|
80
|
+
// reader is most likely to meet was the one silently erased, and a
|
|
81
|
+
// nested `a:[[1]]&[[2]]` lost both segments (issue #37). Numeric
|
|
82
|
+
// segments arrive here as numbers, so only `===`/`!==` compares them
|
|
83
|
+
// for what they are. `null != p` stays loose on purpose -- it is the
|
|
84
|
+
// idiomatic null-and-undefined test.
|
|
85
|
+
let path = ['$', ...err.path].filter((p) => null != p && '' !== p);
|
|
46
86
|
// '$' is neither null nor '', so the filter always leaves it.
|
|
47
87
|
let valpath = path.join('.');
|
|
48
88
|
let attempt = null != err.attempt ? err.attempt : (null == v2 ? 'resolve' : 'unify');
|
|
49
89
|
const details = err.details;
|
|
50
90
|
err.msg = [
|
|
51
91
|
errmsg({
|
|
52
|
-
color: { active:
|
|
92
|
+
color: { active: colorActive() },
|
|
53
93
|
name: 'aontu',
|
|
54
94
|
code: err.why,
|
|
55
95
|
txts: {
|
|
@@ -63,7 +103,7 @@ function descErr(err, errctx) {
|
|
|
63
103
|
'\n',
|
|
64
104
|
(null != v1 && errmsg({
|
|
65
105
|
// TODO: color should come from jsonic config
|
|
66
|
-
color: { active:
|
|
106
|
+
color: { active: colorActive(), line: '\x1b[34m' },
|
|
67
107
|
txts: {
|
|
68
108
|
msg: 'Cannot ' + attempt + ' value: ' + v1.canon +
|
|
69
109
|
(null == v2 ? '' : ' with value: ' + v2.canon), // + ' #' + err.id,
|
|
@@ -78,7 +118,7 @@ function descErr(err, errctx) {
|
|
|
78
118
|
})),
|
|
79
119
|
(null != v2 && errmsg({
|
|
80
120
|
// TODO: color should come from jsonic config
|
|
81
|
-
color: { active:
|
|
121
|
+
color: { active: colorActive(), line: '\x1b[34m' },
|
|
82
122
|
txts: {
|
|
83
123
|
msg: 'Cannot ' + attempt + ' value: ' + v2.canon +
|
|
84
124
|
' with value: ' + v1.canon, // + ' #' + err.id,
|
|
@@ -109,7 +149,7 @@ function resolveFile(url) {
|
|
|
109
149
|
out = out === cwd || '' === out ? '<no-file>' : out;
|
|
110
150
|
return out;
|
|
111
151
|
}
|
|
112
|
-
function resolveSrc(v, errctx
|
|
152
|
+
function resolveSrc(v, errctx) {
|
|
113
153
|
let src = undefined;
|
|
114
154
|
const url = v?.site.url;
|
|
115
155
|
// Cache reads on errctx for the lifetime of the error-formatting pass.
|
|
@@ -156,6 +196,6 @@ class AontuError extends Error {
|
|
|
156
196
|
.filter(line => !line.match(/aontu\/(src|dist)\//))
|
|
157
197
|
.join('\n');
|
|
158
198
|
}
|
|
159
|
-
} /* node:coverage ignore next
|
|
199
|
+
} /* node:coverage ignore next 11 */
|
|
160
200
|
exports.AontuError = AontuError;
|
|
161
201
|
//# sourceMappingURL=err.js.map
|
package/dist/err.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"err.js","sourceRoot":"","sources":["../src/err.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;
|
|
1
|
+
{"version":3,"file":"err.js","sourceRoot":"","sources":["../src/err.ts"],"names":[],"mappings":"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"}
|
package/dist/graph.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Val } from './type';
|
|
2
|
+
export type EntityEntry = {
|
|
3
|
+
id: string;
|
|
4
|
+
paths: string[];
|
|
5
|
+
};
|
|
6
|
+
export type Edge = {
|
|
7
|
+
from: string;
|
|
8
|
+
key: string;
|
|
9
|
+
to: string;
|
|
10
|
+
at: string;
|
|
11
|
+
};
|
|
12
|
+
export type Graph = {
|
|
13
|
+
entities: EntityEntry[];
|
|
14
|
+
edges: Edge[];
|
|
15
|
+
};
|
|
16
|
+
export declare function graphOf(root: Val): Graph;
|
package/dist/graph.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Copyright (c) 2025 Richard Rodger, MIT License */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.graphOf = graphOf;
|
|
5
|
+
const keyorder_1 = require("./keyorder");
|
|
6
|
+
const formatPath = (path) => 0 === path.length ? '$' : '$.' + path.join('.');
|
|
7
|
+
// The nearest map key on the path below an entity: list indices are
|
|
8
|
+
// positions within a relation, not relations of their own. Digits-only
|
|
9
|
+
// segments are the indices, which is exactly how the rest of the engine
|
|
10
|
+
// spells them.
|
|
11
|
+
const relationKey = (tail) => {
|
|
12
|
+
for (let i = tail.length - 1; 0 <= i; i--) {
|
|
13
|
+
if (!/^[0-9]+$/.test(tail[i])) {
|
|
14
|
+
return tail[i];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return '';
|
|
18
|
+
};
|
|
19
|
+
// The graph of an evaluated tree. Walks POSITIONS, not values: two
|
|
20
|
+
// positions of one entity share a value object after the merge, so a
|
|
21
|
+
// walk guarded by object identity would find the entity once and miss
|
|
22
|
+
// every other place it is declared. The guard is therefore the
|
|
23
|
+
// ancestor chain — which is what a cycle actually is.
|
|
24
|
+
function graphOf(root) {
|
|
25
|
+
const byId = new Map();
|
|
26
|
+
const edges = [];
|
|
27
|
+
const visit = (node, path, entity, tail, ancestors) => {
|
|
28
|
+
if (null == node || true !== node.isVal || ancestors.has(node)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
let inside = entity;
|
|
32
|
+
let below = tail;
|
|
33
|
+
const name = node.entity;
|
|
34
|
+
if (null != name) {
|
|
35
|
+
let paths = byId.get(name);
|
|
36
|
+
if (undefined === paths) {
|
|
37
|
+
paths = [];
|
|
38
|
+
byId.set(name, paths);
|
|
39
|
+
}
|
|
40
|
+
paths.push(formatPath(path));
|
|
41
|
+
// A nested entity is not a component of the one above it: the
|
|
42
|
+
// key path restarts at the identified node.
|
|
43
|
+
inside = name;
|
|
44
|
+
below = [];
|
|
45
|
+
}
|
|
46
|
+
const link = node.link;
|
|
47
|
+
if (null != link) {
|
|
48
|
+
edges.push({
|
|
49
|
+
from: inside,
|
|
50
|
+
key: relationKey(below),
|
|
51
|
+
to: link,
|
|
52
|
+
at: formatPath(path),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if ((true === node.isMap || true === node.isList) && null != node.peg) {
|
|
56
|
+
ancestors.add(node);
|
|
57
|
+
for (const k of Object.keys(node.peg)) {
|
|
58
|
+
visit(node.peg[k], [...path, k], inside, [...below, k], ancestors);
|
|
59
|
+
}
|
|
60
|
+
ancestors.delete(node);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
visit(root, [], '', [], new Set());
|
|
64
|
+
// DETERMINISTIC by construction, not by luck: ids in code-point
|
|
65
|
+
// order, each id's paths in code-point order, edges by the position
|
|
66
|
+
// they are written at (which is unique — one link, one place).
|
|
67
|
+
const entities = [...byId.keys()]
|
|
68
|
+
.sort(keyorder_1.cmpCodePoint)
|
|
69
|
+
.map((id) => ({ id, paths: byId.get(id).sort(keyorder_1.cmpCodePoint) }));
|
|
70
|
+
edges.sort((a, b) => (0, keyorder_1.cmpCodePoint)(a.at, b.at));
|
|
71
|
+
return { entities, edges };
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
|
package/dist/hcanon.d.ts
ADDED
package/dist/hcanon.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Copyright (c) 2025 Richard Rodger, MIT License */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.hcanon = hcanon;
|
|
5
|
+
exports.canonHash = canonHash;
|
|
6
|
+
// The HASH FORM (G6 phase 0, docs/capability-review/g6-distribution.md):
|
|
7
|
+
// exactly the unify-level canon with the additions that close its
|
|
8
|
+
// semantic gaps, so that two documents with the same hash form have the
|
|
9
|
+
// same meaning:
|
|
10
|
+
//
|
|
11
|
+
// - a CLOSED map or list renders wrapped: close({...}), close([...])
|
|
12
|
+
// (canon drops closedness);
|
|
13
|
+
// - the type/hide MARKS render as their builtin wrappers: type(x),
|
|
14
|
+
// hide(x) (canon drops marks).
|
|
15
|
+
//
|
|
16
|
+
// Both additions reuse existing parseable syntax, so the hash form
|
|
17
|
+
// remains valid Aontu source and round-trips:
|
|
18
|
+
// hcanon(unify(parse(hcanon(v)))) == hcanon(v) is a spec-suite property
|
|
19
|
+
// (test/spec/hcanon.tsv). User-facing canon is UNCHANGED — hcanon is a
|
|
20
|
+
// separate rendering.
|
|
21
|
+
//
|
|
22
|
+
// The marks PROPAGATE to every descendant at unification (walkMark), so
|
|
23
|
+
// a wrapper is emitted only where a mark STARTS: the walk carries the
|
|
24
|
+
// inherited marks down and a child whose mark the parent already
|
|
25
|
+
// carries renders bare. Without that, hide({a:1}) would render every
|
|
26
|
+
// leaf re-wrapped — still correct, never minimal, and not what the
|
|
27
|
+
// source said.
|
|
28
|
+
//
|
|
29
|
+
// canonHash (G6 phase 1) is the pin built on it:
|
|
30
|
+
// "aon1-" + base64url( SHA-256( UTF-8( hcanon(v) ) ) )
|
|
31
|
+
// (unpadded base64url, RFC 4648 section 5). The "aon1-" scheme id
|
|
32
|
+
// exists so a future semantically-stronger normal form is an upgrade,
|
|
33
|
+
// not a breakage. This is a CANONICAL-TEXT hash, not a semantic
|
|
34
|
+
// equivalence class: the failure direction is the safe one — a false
|
|
35
|
+
// "changed" forces a needless re-review; a false "unchanged" would need
|
|
36
|
+
// two hash forms with the same bytes and different meanings, which is
|
|
37
|
+
// exactly the gap the close/mark wrappers exist to shut.
|
|
38
|
+
const node_crypto_1 = require("node:crypto");
|
|
39
|
+
const keyorder_1 = require("./keyorder");
|
|
40
|
+
// One node's rendering, carrying the marks the ANCESTORS already
|
|
41
|
+
// wrapped. Bags and junctions recurse structurally (their canon getters
|
|
42
|
+
// render children through plain canon, which would drop a nested
|
|
43
|
+
// close); everything else — scalars, kinds, funcs, refs, constraints —
|
|
44
|
+
// delegates to its own canon, whose text is already in cross-port
|
|
45
|
+
// parity. The non-Val arm mirrors MapVal.canon's raw-peg fallback and
|
|
46
|
+
// is unreachable through an evaluated tree (direct-tested, ADR-002).
|
|
47
|
+
function render(v, inh) {
|
|
48
|
+
if (true !== v?.isVal) {
|
|
49
|
+
return String(v);
|
|
50
|
+
}
|
|
51
|
+
const mtype = true === v.mark?.type;
|
|
52
|
+
const mhide = true === v.mark?.hide;
|
|
53
|
+
const inner = {
|
|
54
|
+
type: inh.type || mtype,
|
|
55
|
+
hide: inh.hide || mhide,
|
|
56
|
+
};
|
|
57
|
+
let s;
|
|
58
|
+
if (true === v.isMap) {
|
|
59
|
+
const keys = Object.keys(v.peg).sort(keyorder_1.cmpCodePoint);
|
|
60
|
+
s = '{' +
|
|
61
|
+
(v.spread.cj ? '&:' + render(v.spread.cj, inner) +
|
|
62
|
+
(0 < keys.length ? ',' : '') : '') +
|
|
63
|
+
keys.map((k) => JSON.stringify(k) +
|
|
64
|
+
(v.optionalKeys.includes(k) ? '?' : '') +
|
|
65
|
+
':' +
|
|
66
|
+
render(v.peg[k], inner)).join(',') +
|
|
67
|
+
'}';
|
|
68
|
+
if (true === v.closed) {
|
|
69
|
+
s = 'close(' + s + ')';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (true === v.isList) {
|
|
73
|
+
const keys = Object.keys(v.peg);
|
|
74
|
+
s = '[' +
|
|
75
|
+
(v.spread.cj ? '&:' + render(v.spread.cj, inner) +
|
|
76
|
+
(0 < keys.length ? ',' : '') : '') +
|
|
77
|
+
keys.map((k) => render(v.peg[k], inner)).join(',') +
|
|
78
|
+
']';
|
|
79
|
+
if (true === v.closed) {
|
|
80
|
+
s = 'close(' + s + ')';
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else if (true === v.isPref) {
|
|
84
|
+
s = '*' + render(v.peg, inner);
|
|
85
|
+
}
|
|
86
|
+
else if (true === v.isConjunct || true === v.isDisjunct) {
|
|
87
|
+
s = junctionText(v, true === v.isConjunct ? '&' : '|', inner);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
s = v.canon;
|
|
91
|
+
}
|
|
92
|
+
// The IDENTITY is innermost, exactly as canon writes it (G4 phase
|
|
93
|
+
// 1). It is IN the hash — a node declared `id(svc/auth)` and the
|
|
94
|
+
// same node declared `id(svc/billing)` describe different systems,
|
|
95
|
+
// and a pin that could not tell them apart would be a pin on the
|
|
96
|
+
// shape rather than on the meaning.
|
|
97
|
+
const e = v.entity;
|
|
98
|
+
if (null != e) {
|
|
99
|
+
s = 'id(' + JSON.stringify(e) + ')&' + s;
|
|
100
|
+
}
|
|
101
|
+
if (mtype && !inh.type) {
|
|
102
|
+
s = 'type(' + s + ')';
|
|
103
|
+
}
|
|
104
|
+
if (mhide && !inh.hide) {
|
|
105
|
+
s = 'hide(' + s + ')';
|
|
106
|
+
}
|
|
107
|
+
// The deprecation record rides outermost, as canonRiders
|
|
108
|
+
// renders it (the wrappers are all reparseable calls, so order only
|
|
109
|
+
// has to be FIXED, and this matches the canon the G3 rows pinned).
|
|
110
|
+
const d = v.deprecation;
|
|
111
|
+
if (null != d) {
|
|
112
|
+
const dkeys = Object.keys(d).sort();
|
|
113
|
+
const rec = dkeys.map((k) => JSON.stringify(k) + ':' + JSON.stringify(d[k])).join(',');
|
|
114
|
+
s = 'deprecate(' + s + ('' === rec ? '' : ',{' + rec + '}') + ')';
|
|
115
|
+
}
|
|
116
|
+
return s;
|
|
117
|
+
}
|
|
118
|
+
// The JunctionVal.canon parenthesisation rule, kept: a member that is
|
|
119
|
+
// itself a junction with more than one term keeps its parens so the
|
|
120
|
+
// text reparses with the same structure (`(1|2)&3`, not the
|
|
121
|
+
// differently-parsing `1|2&3`). Post-unification junctions are
|
|
122
|
+
// flattened by norm, so no SOURCE reaches the wrapping arm -- it is
|
|
123
|
+
// pinned by direct tests over constructed Vals in both ports, because
|
|
124
|
+
// a hash form that could render ambiguously would be a pin that
|
|
125
|
+
// silently agrees with a document it should not.
|
|
126
|
+
function junctionText(v, sym, inner) {
|
|
127
|
+
return v.peg.map((m) => true === m?.isJunction && 1 < m.peg.length
|
|
128
|
+
? '(' + render(m, inner) + ')'
|
|
129
|
+
: render(m, inner))
|
|
130
|
+
.join(sym);
|
|
131
|
+
}
|
|
132
|
+
// The hash form of an EVALUATED Val (unify first; parse-level canon
|
|
133
|
+
// parenthesisation differs between the ports and is excluded by
|
|
134
|
+
// construction — AGENTS.md).
|
|
135
|
+
function hcanon(v) {
|
|
136
|
+
return render(v, { type: false, hide: false });
|
|
137
|
+
}
|
|
138
|
+
// The canon-hash pin. Scoped to the module evaluated STANDALONE: its
|
|
139
|
+
// own include closure resolved and unified at its own root, before any
|
|
140
|
+
// consumer context — which is what makes the pin transitive (an edit
|
|
141
|
+
// two includes deep changes the unified root, hence the hash).
|
|
142
|
+
function canonHash(v) {
|
|
143
|
+
return 'aon1-' +
|
|
144
|
+
(0, node_crypto_1.createHash)('sha256').update(hcanon(v), 'utf8').digest('base64url');
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=hcanon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hcanon.js","sourceRoot":"","sources":["../src/hcanon.ts"],"names":[],"mappings":"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"}
|