aontu 0.61.0 → 0.63.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 +4 -4
- package/dist/agentsmd.d.ts +1 -0
- package/dist/agentsmd.js +7 -28
- package/dist/agentsmd.js.map +1 -1
- package/dist/alias.js.map +1 -1
- package/dist/allow.d.ts +23 -0
- package/dist/allow.js +138 -0
- package/dist/allow.js.map +1 -0
- package/dist/aontu.d.ts +4 -2
- package/dist/aontu.js +4 -80
- package/dist/aontu.js.map +1 -1
- package/dist/aontumodel.d.ts +4 -0
- package/dist/aontumodel.js +33 -0
- package/dist/aontumodel.js.map +1 -0
- package/dist/cli.d.ts +10 -1
- package/dist/cli.js +877 -479
- package/dist/cli.js.map +1 -1
- package/dist/ctx.js +0 -48
- package/dist/ctx.js.map +1 -1
- package/dist/diff.js +0 -32
- package/dist/diff.js.map +1 -1
- package/dist/err.js +0 -40
- package/dist/err.js.map +1 -1
- package/dist/escape.js +0 -45
- package/dist/escape.js.map +1 -1
- package/dist/exactjson.d.ts +0 -35
- package/dist/exactjson.js +0 -131
- package/dist/exactjson.js.map +1 -1
- package/dist/format.js +55 -189
- package/dist/format.js.map +1 -1
- package/dist/grammar.d.ts +9 -0
- package/dist/grammar.js +54 -0
- package/dist/grammar.js.map +1 -0
- package/dist/graph.js +0 -26
- package/dist/graph.js.map +1 -1
- package/dist/hcanon.js +0 -82
- package/dist/hcanon.js.map +1 -1
- package/dist/helpdoc.d.ts +16 -0
- package/dist/helpdoc.js +59 -0
- package/dist/helpdoc.js.map +1 -0
- package/dist/hints.d.ts +0 -6
- package/dist/hints.js +59 -47
- package/dist/hints.js.map +1 -1
- package/dist/jsonschema.js +0 -114
- package/dist/jsonschema.js.map +1 -1
- package/dist/keyorder.d.ts +0 -7
- package/dist/keyorder.js +0 -41
- package/dist/keyorder.js.map +1 -1
- package/dist/lang.js +32 -877
- package/dist/lang.js.map +1 -1
- package/dist/lower.d.ts +3 -0
- package/dist/lower.js +14 -61
- package/dist/lower.js.map +1 -1
- package/dist/lsp-server.js +0 -16
- package/dist/lsp-server.js.map +1 -1
- package/dist/lsp.d.ts +1 -1
- package/dist/lsp.js +12 -159
- package/dist/lsp.js.map +1 -1
- package/dist/mcp-server.js +0 -26
- package/dist/mcp-server.js.map +1 -1
- package/dist/mcp.js +0 -113
- package/dist/mcp.js.map +1 -1
- package/dist/mod-tool.js +0 -130
- package/dist/mod-tool.js.map +1 -1
- package/dist/mod.js +0 -162
- package/dist/mod.js.map +1 -1
- package/dist/patch.js +0 -217
- package/dist/patch.js.map +1 -1
- package/dist/provenance.js +0 -140
- package/dist/provenance.js.map +1 -1
- package/dist/query.js +0 -75
- package/dist/query.js.map +1 -1
- package/dist/reach.js +0 -43
- package/dist/reach.js.map +1 -1
- package/dist/relation.d.ts +2 -0
- package/dist/relation.js +3 -58
- package/dist/relation.js.map +1 -1
- package/dist/render.js +33 -143
- package/dist/render.js.map +1 -1
- package/dist/report-sarif.d.ts +0 -11
- package/dist/report-sarif.js +0 -28
- package/dist/report-sarif.js.map +1 -1
- package/dist/sig.js +0 -35
- package/dist/sig.js.map +1 -1
- package/dist/sigdecl.js +1 -1
- package/dist/sigdecl.js.map +1 -1
- package/dist/siggate.js +0 -4
- package/dist/siggate.js.map +1 -1
- package/dist/site.js +3 -29
- package/dist/site.js.map +1 -1
- package/dist/subsume.d.ts +0 -10
- package/dist/subsume.js +0 -137
- package/dist/subsume.js.map +1 -1
- package/dist/template.d.ts +2 -1
- package/dist/template.js +58 -138
- package/dist/template.js.map +1 -1
- package/dist/trim.js +0 -41
- package/dist/trim.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/type.js.map +1 -1
- package/dist/unify.js +12 -242
- package/dist/unify.js.map +1 -1
- package/dist/utility.js +0 -22
- package/dist/utility.js.map +1 -1
- package/dist/val/AbnfFuncVal.d.ts +18 -0
- package/dist/val/AbnfFuncVal.js +132 -0
- package/dist/val/AbnfFuncVal.js.map +1 -0
- package/dist/val/AbsentVal.d.ts +11 -0
- package/dist/val/AbsentVal.js +30 -0
- package/dist/val/AbsentVal.js.map +1 -0
- package/dist/val/AggFuncVal.d.ts +10 -1
- package/dist/val/AggFuncVal.js +104 -116
- package/dist/val/AggFuncVal.js.map +1 -1
- package/dist/val/ArithFuncVal.js +0 -12
- package/dist/val/ArithFuncVal.js.map +1 -1
- package/dist/val/BagVal.js +1 -78
- package/dist/val/BagVal.js.map +1 -1
- package/dist/val/BigDecimalVal.js +0 -16
- package/dist/val/BigDecimalVal.js.map +1 -1
- package/dist/val/BigIntegerVal.js +0 -16
- package/dist/val/BigIntegerVal.js.map +1 -1
- package/dist/val/CloseFuncVal.js +0 -9
- package/dist/val/CloseFuncVal.js.map +1 -1
- package/dist/val/CmpFuncVal.d.ts +20 -0
- package/dist/val/CmpFuncVal.js +188 -0
- package/dist/val/CmpFuncVal.js.map +1 -0
- package/dist/val/ConjunctVal.js +0 -29
- package/dist/val/ConjunctVal.js.map +1 -1
- package/dist/val/ConstraintVal.js +0 -500
- package/dist/val/ConstraintVal.js.map +1 -1
- package/dist/val/ContainerKindVal.js +0 -2
- package/dist/val/ContainerKindVal.js.map +1 -1
- package/dist/val/CopyFuncVal.js +0 -3
- package/dist/val/CopyFuncVal.js.map +1 -1
- package/dist/val/Decimal.js +0 -179
- package/dist/val/Decimal.js.map +1 -1
- package/dist/val/DeprecateFuncVal.js.map +1 -1
- package/dist/val/DisjunctVal.js +0 -152
- package/dist/val/DisjunctVal.js.map +1 -1
- package/dist/val/EachFuncVal.d.ts +1 -2
- package/dist/val/EachFuncVal.js +12 -29
- package/dist/val/EachFuncVal.js.map +1 -1
- package/dist/val/EmitFuncVal.d.ts +1 -1
- package/dist/val/EmitFuncVal.js +6 -119
- package/dist/val/EmitFuncVal.js.map +1 -1
- package/dist/val/ExpectVal.js +0 -62
- package/dist/val/ExpectVal.js.map +1 -1
- package/dist/val/FilterFuncVal.js +0 -25
- package/dist/val/FilterFuncVal.js.map +1 -1
- package/dist/val/FuncBaseVal.d.ts +1 -0
- package/dist/val/FuncBaseVal.js +7 -127
- package/dist/val/FuncBaseVal.js.map +1 -1
- package/dist/val/GraphAtomVal.js +0 -15
- package/dist/val/GraphAtomVal.js.map +1 -1
- package/dist/val/HideFuncVal.js +0 -13
- package/dist/val/HideFuncVal.js.map +1 -1
- package/dist/val/IntegerVal.js +0 -61
- package/dist/val/IntegerVal.js.map +1 -1
- package/dist/val/JunctionVal.js +0 -20
- package/dist/val/JunctionVal.js.map +1 -1
- package/dist/val/KeyFuncVal.js +0 -46
- package/dist/val/KeyFuncVal.js.map +1 -1
- package/dist/val/ListVal.js +0 -57
- package/dist/val/ListVal.js.map +1 -1
- package/dist/val/LowerFuncVal.js +11 -6
- package/dist/val/LowerFuncVal.js.map +1 -1
- package/dist/val/MapVal.js +0 -151
- package/dist/val/MapVal.js.map +1 -1
- package/dist/val/MatchFuncVal.js +0 -27
- package/dist/val/MatchFuncVal.js.map +1 -1
- package/dist/val/{FormFuncVal.d.ts → MaybeFuncVal.d.ts} +5 -5
- package/dist/val/MaybeFuncVal.js +50 -0
- package/dist/val/MaybeFuncVal.js.map +1 -0
- package/dist/val/MoveFuncVal.js +0 -18
- package/dist/val/MoveFuncVal.js.map +1 -1
- package/dist/val/NilVal.js +2 -36
- package/dist/val/NilVal.js.map +1 -1
- package/dist/val/NomFuncVal.d.ts +12 -0
- package/dist/val/NomFuncVal.js +153 -0
- package/dist/val/NomFuncVal.js.map +1 -0
- package/dist/val/NumberVal.js +0 -15
- package/dist/val/NumberVal.js.map +1 -1
- package/dist/val/OpBaseVal.d.ts +1 -0
- package/dist/val/OpBaseVal.js +3 -15
- package/dist/val/OpBaseVal.js.map +1 -1
- package/dist/val/PackFuncVal.js +0 -34
- package/dist/val/PackFuncVal.js.map +1 -1
- package/dist/val/PathFuncVal.js +0 -6
- package/dist/val/PathFuncVal.js.map +1 -1
- package/dist/val/PathVal.js +0 -41
- package/dist/val/PathVal.js.map +1 -1
- package/dist/val/PlaceVal.js +0 -25
- package/dist/val/PlaceVal.js.map +1 -1
- package/dist/val/PlusOpVal.d.ts +1 -7
- package/dist/val/PlusOpVal.js +13 -74
- package/dist/val/PlusOpVal.js.map +1 -1
- package/dist/val/PrefFuncVal.js +0 -1
- package/dist/val/PrefFuncVal.js.map +1 -1
- package/dist/val/PrefVal.js +0 -167
- package/dist/val/PrefVal.js.map +1 -1
- package/dist/val/RecurseVal.js +0 -55
- package/dist/val/RecurseVal.js.map +1 -1
- package/dist/val/RefVal.js +0 -282
- package/dist/val/RefVal.js.map +1 -1
- package/dist/val/ReferFuncVal.js +0 -232
- package/dist/val/ReferFuncVal.js.map +1 -1
- package/dist/val/ScalarKindVal.js +0 -49
- package/dist/val/ScalarKindVal.js.map +1 -1
- package/dist/val/ScalarVal.js +0 -11
- package/dist/val/ScalarVal.js.map +1 -1
- package/dist/val/StrFuncVal.js +0 -18
- package/dist/val/StrFuncVal.js.map +1 -1
- package/dist/val/SuperFuncVal.js +0 -32
- package/dist/val/SuperFuncVal.js.map +1 -1
- package/dist/val/TopVal.js +0 -1
- package/dist/val/TopVal.js.map +1 -1
- package/dist/val/TranslateFuncVal.d.ts +12 -0
- package/dist/val/TranslateFuncVal.js +99 -0
- package/dist/val/TranslateFuncVal.js.map +1 -0
- package/dist/val/UpperFuncVal.js +11 -6
- package/dist/val/UpperFuncVal.js.map +1 -1
- package/dist/val/Val.d.ts +1 -0
- package/dist/val/Val.js +2 -133
- package/dist/val/Val.js.map +1 -1
- package/dist/val/VarVal.js +0 -12
- package/dist/val/VarVal.js.map +1 -1
- package/dist/val/arith.js +0 -37
- package/dist/val/arith.js.map +1 -1
- package/dist/val/caserange.d.ts +3 -0
- package/dist/val/caserange.js +49 -0
- package/dist/val/caserange.js.map +1 -0
- package/dist/val/members.js +0 -6
- package/dist/val/members.js.map +1 -1
- package/dist/val/numcmp.js +0 -11
- package/dist/val/numcmp.js.map +1 -1
- package/dist/val/numkind.js +0 -145
- package/dist/val/numkind.js.map +1 -1
- package/dist/val/valutil.js +0 -16
- package/dist/val/valutil.js.map +1 -1
- package/dist/vet.d.ts +12 -0
- package/dist/vet.js +159 -412
- package/dist/vet.js.map +1 -1
- package/dist/view.js +0 -414
- package/dist/view.js.map +1 -1
- package/dist/walk.js +0 -41
- package/dist/walk.js.map +1 -1
- package/grammar/aontu.abnf +9 -7
- package/grammar/aontu.gbnf +5 -5
- package/grammar/aontu.lark +5 -5
- package/grammar/aontu.tmLanguage.json +1 -1
- package/package.json +4 -2
- package/skill/SKILL.md +8 -0
- package/skill/init/check.sh +28 -0
- package/skill/init/data.aon +12 -0
- package/skill/init/model.aon +19 -0
- package/skill/tasks.md +151 -0
- package/src/agentsmd.ts +8 -32
- package/src/alias.ts +0 -39
- package/src/allow.ts +221 -0
- package/src/aontu.ts +10 -108
- package/src/aontumodel.ts +32 -0
- package/src/cli.ts +1009 -540
- package/src/ctx.ts +0 -103
- package/src/diff.ts +0 -40
- package/src/err.ts +0 -40
- package/src/escape.ts +0 -46
- package/src/exactjson.ts +0 -131
- package/src/format.ts +63 -234
- package/src/grammar.ts +72 -0
- package/src/graph.ts +0 -61
- package/src/hcanon.ts +0 -82
- package/src/helpdoc.ts +77 -0
- package/src/hints.ts +72 -49
- package/src/jsonschema.ts +0 -123
- package/src/keyorder.ts +0 -42
- package/src/lang.ts +39 -895
- package/src/lower.ts +15 -65
- package/src/lsp-server.ts +0 -16
- package/src/lsp.ts +12 -180
- package/src/mcp-server.ts +0 -31
- package/src/mcp.ts +0 -130
- package/src/mod-tool.ts +0 -158
- package/src/mod.ts +0 -178
- package/src/patch.ts +0 -232
- package/src/provenance.ts +0 -183
- package/src/query.ts +0 -84
- package/src/reach.ts +0 -53
- package/src/relation.ts +7 -71
- package/src/render.ts +33 -180
- package/src/report-sarif.ts +0 -48
- package/src/sig.ts +0 -35
- package/src/sigdecl.ts +1 -1
- package/src/siggate.ts +0 -30
- package/src/site.ts +3 -29
- package/src/subsume.ts +1 -161
- package/src/template.ts +69 -140
- package/src/trim.ts +0 -53
- package/src/type.ts +2 -45
- package/src/unify.ts +13 -251
- package/src/utility.ts +0 -31
- package/src/val/AbnfFuncVal.ts +181 -0
- package/src/val/AbsentVal.ts +54 -0
- package/src/val/AggFuncVal.ts +152 -188
- package/src/val/ArithFuncVal.ts +0 -20
- package/src/val/BagVal.ts +1 -78
- package/src/val/BigDecimalVal.ts +0 -16
- package/src/val/BigIntegerVal.ts +0 -16
- package/src/val/CloseFuncVal.ts +0 -9
- package/src/val/CmpFuncVal.ts +249 -0
- package/src/val/ConjunctVal.ts +0 -33
- package/src/val/ConstraintVal.ts +2 -537
- package/src/val/ContainerKindVal.ts +0 -18
- package/src/val/CopyFuncVal.ts +0 -5
- package/src/val/Decimal.ts +1 -185
- package/src/val/DeprecateFuncVal.ts +0 -10
- package/src/val/DisjunctVal.ts +0 -157
- package/src/val/EachFuncVal.ts +12 -53
- package/src/val/EmitFuncVal.ts +8 -208
- package/src/val/ExpectVal.ts +0 -62
- package/src/val/FilterFuncVal.ts +0 -55
- package/src/val/FuncBaseVal.ts +9 -130
- package/src/val/GraphAtomVal.ts +0 -42
- package/src/val/HideFuncVal.ts +0 -15
- package/src/val/IntegerVal.ts +0 -61
- package/src/val/JunctionVal.ts +0 -20
- package/src/val/KeyFuncVal.ts +0 -48
- package/src/val/ListVal.ts +0 -59
- package/src/val/LowerFuncVal.ts +12 -7
- package/src/val/MapVal.ts +0 -151
- package/src/val/MatchFuncVal.ts +0 -59
- package/src/val/MaybeFuncVal.ts +86 -0
- package/src/val/MoveFuncVal.ts +0 -20
- package/src/val/NilVal.ts +2 -36
- package/src/val/NomFuncVal.ts +200 -0
- package/src/val/NumberVal.ts +0 -16
- package/src/val/OpBaseVal.ts +4 -17
- package/src/val/PackFuncVal.ts +0 -63
- package/src/val/PathFuncVal.ts +0 -32
- package/src/val/PathVal.ts +0 -66
- package/src/val/PlaceVal.ts +0 -45
- package/src/val/PlusOpVal.ts +18 -75
- package/src/val/PrefFuncVal.ts +0 -1
- package/src/val/PrefVal.ts +0 -179
- package/src/val/RecurseVal.ts +0 -81
- package/src/val/RefVal.ts +1 -285
- package/src/val/ReferFuncVal.ts +0 -255
- package/src/val/ScalarKindVal.ts +0 -50
- package/src/val/ScalarVal.ts +0 -12
- package/src/val/StrFuncVal.ts +0 -44
- package/src/val/SuperFuncVal.ts +0 -42
- package/src/val/TopVal.ts +0 -1
- package/src/val/TranslateFuncVal.ts +132 -0
- package/src/val/UpperFuncVal.ts +12 -7
- package/src/val/Val.ts +3 -192
- package/src/val/VarVal.ts +0 -15
- package/src/val/arith.ts +0 -92
- package/src/val/caserange.ts +53 -0
- package/src/val/members.ts +0 -23
- package/src/val/numcmp.ts +1 -27
- package/src/val/numkind.ts +0 -149
- package/src/val/valutil.ts +0 -16
- package/src/vet.ts +209 -504
- package/src/view.ts +0 -507
- package/src/walk.ts +0 -41
- package/dist/std.d.ts +0 -3
- package/dist/std.js +0 -637
- package/dist/std.js.map +0 -1
- package/dist/val/FormFuncVal.js +0 -55
- package/dist/val/FormFuncVal.js.map +0 -1
- package/src/std.ts +0 -648
- package/src/val/FormFuncVal.ts +0 -119
package/dist/template.js
CHANGED
|
@@ -6,68 +6,7 @@ exports.desugarTemplate = desugarTemplate;
|
|
|
6
6
|
exports.resugarTemplate = resugarTemplate;
|
|
7
7
|
exports.templateOutputs = templateOutputs;
|
|
8
8
|
exports.markerFor = markerFor;
|
|
9
|
-
|
|
10
|
-
// A generator written in the TARGET's own syntax: a marked line is
|
|
11
|
-
// aontu source, and every other line is a line of output.
|
|
12
|
-
//
|
|
13
|
-
// //- code: units: [{ path: "hi.ts", lang: "typescript", decls: [{
|
|
14
|
-
// //- k: "frag", of: emit($.svc, { match: { n: string }, body: [
|
|
15
|
-
// export const NAME = "world"
|
|
16
|
-
// //- ]}) }] }]
|
|
17
|
-
//
|
|
18
|
-
// That is the whole desugaring, and it is LINE-ORIENTED: nothing here
|
|
19
|
-
// parses aontu, and nothing here reads the target's syntax beyond its
|
|
20
|
-
// comment token. A marker line contributes its text to the document; an
|
|
21
|
-
// unmarked line contributes one quoted string, which is a body element
|
|
22
|
-
// where the marker lines left a list open.
|
|
23
|
-
//
|
|
24
|
-
// WHY A COMMENT TOKEN PLUS A DASH (D2). The generator file must stay
|
|
25
|
-
// valid in its own language -- so an editor highlights it, a compiler
|
|
26
|
-
// parses it, and a reviewer reads it -- and the one thing every
|
|
27
|
-
// language has that the target's own tools already ignore is a
|
|
28
|
-
// comment. Adding a dash distinguishes a marker from an ordinary
|
|
29
|
-
// comment, and derives for a language this table has never seen: the
|
|
30
|
-
// caller passes the token.
|
|
31
|
-
//
|
|
32
|
-
// A MARKER IS RECOGNISED AFTER LEADING WHITESPACE, AND THE INDENTATION
|
|
33
|
-
// THE RESUGARING WRITES IS THE AONTU'S (D2, amended 2026-09-07). An
|
|
34
|
-
// output line is verbatim -- a line indented two spaces in the template
|
|
35
|
-
// is indented two spaces in the generated file (D7) -- and that is the
|
|
36
|
-
// half a reader of the TARGET needs. The other half is the document:
|
|
37
|
-
// the marker lines carry a tree, and a tree nobody can see the shape of
|
|
38
|
-
// is the one thing this surface took away. So the marker stands at the
|
|
39
|
-
// left margin and the aontu is indented AFTER it, which `aontu fmt`
|
|
40
|
-
// (FMT.0.md M-BM-'3.14) is what writes.
|
|
41
|
-
//
|
|
42
|
-
// Reading is unchanged and stays generous: a marker after leading
|
|
43
|
-
// whitespace is a marker, and its own indentation still counts toward
|
|
44
|
-
// the aontu it carries, so a template written the other way desugars to
|
|
45
|
-
// the same document. What changes is the spelling the round trip
|
|
46
|
-
// answers, and `template --check` names the difference as the drift it
|
|
47
|
-
// is.
|
|
48
|
-
//
|
|
49
|
-
// THE SUGAR IS THE FIXPOINT OF THE TWO TRANSFORMS (D6), and that is
|
|
50
|
-
// the whole of the resugaring's safety. A canonical line that looks
|
|
51
|
-
// like a body element is rebuilt as a target line, the rebuild is
|
|
52
|
-
// desugared, and the rebuild is taken ONLY if that reproduces the
|
|
53
|
-
// canonical line. A line no target line can carry -- one that would
|
|
54
|
-
// itself read as a marker -- fails that test and stays where it is, so
|
|
55
|
-
// there is no table of escapes to get wrong and no line the round trip
|
|
56
|
-
// can lose.
|
|
57
|
-
//
|
|
58
|
-
// WHITESPACE CONTROL IS ABSENT AND UNNEEDED (D8): a marker line is not
|
|
59
|
-
// an output line at all, so no construct can leak a newline into the
|
|
60
|
-
// output. What IS significant is the template's own trailing
|
|
61
|
-
// whitespace -- a line of two spaces is two spaces of output -- which
|
|
62
|
-
// is why the canonical form quotes every body line explicitly. Note
|
|
63
|
-
// what `template --check` does and does not catch: it holds the FILE
|
|
64
|
-
// to the spelling these two transforms answer, so a marker written
|
|
65
|
-
// without its space or with its aontu indented after it is named; a
|
|
66
|
-
// body line an editor trimmed is still a valid template, and what
|
|
67
|
-
// names that is `render --check` against the committed output.
|
|
68
|
-
// A marker is a comment token plus a dash. These are the tokens the
|
|
69
|
-
// verb derives from a file's extension; any other language passes its
|
|
70
|
-
// own, which is why the surface needs no table of languages.
|
|
9
|
+
exports.markerFromProfiles = markerFromProfiles;
|
|
71
10
|
const MARKERS = {
|
|
72
11
|
c: '//-',
|
|
73
12
|
cc: '//-',
|
|
@@ -82,6 +21,8 @@ const MARKERS = {
|
|
|
82
21
|
jsx: '//-',
|
|
83
22
|
kt: '//-',
|
|
84
23
|
lua: '---',
|
|
24
|
+
markdown: '<!---',
|
|
25
|
+
md: '<!---',
|
|
85
26
|
php: '//-',
|
|
86
27
|
pl: '#-',
|
|
87
28
|
py: '#-',
|
|
@@ -101,30 +42,53 @@ const MARKERS = {
|
|
|
101
42
|
// C-family line comment, which is the one the note is written in.
|
|
102
43
|
const DEFAULT_MARKER = '//-';
|
|
103
44
|
exports.DEFAULT_MARKER = DEFAULT_MARKER;
|
|
104
|
-
// A
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
45
|
+
// A marker outside this table names its closer itself.
|
|
46
|
+
const IMPLIED_CLOSE = [
|
|
47
|
+
['<!--', '-->'],
|
|
48
|
+
['/*', '*/'],
|
|
49
|
+
];
|
|
50
|
+
function extensionOf(path) {
|
|
51
|
+
const dot = path.lastIndexOf('.');
|
|
52
|
+
const slash = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\'));
|
|
53
|
+
return dot > slash ? path.slice(dot + 1).toLowerCase() : '';
|
|
54
|
+
}
|
|
109
55
|
// The marker for a file, by its extension, or the C-family default.
|
|
110
56
|
// The extension decides, exactly as it decides what an include is
|
|
111
57
|
// (ADR-012) -- one rule, and no flag to remember for the common case.
|
|
112
58
|
function markerFor(path) {
|
|
113
|
-
|
|
114
|
-
const slash = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\'));
|
|
115
|
-
const ext = dot > slash ? path.slice(dot + 1).toLowerCase() : '';
|
|
116
|
-
return MARKERS[ext] ?? DEFAULT_MARKER;
|
|
59
|
+
return MARKERS[extensionOf(path)] ?? DEFAULT_MARKER;
|
|
117
60
|
}
|
|
118
|
-
//
|
|
119
|
-
|
|
120
|
-
|
|
61
|
+
// What reaches a language the table has no entry for by FILENAME
|
|
62
|
+
// rather than by a flag on every call.
|
|
63
|
+
function markerFromProfiles(profiles, path) {
|
|
64
|
+
const ext = extensionOf(path);
|
|
65
|
+
if ('' === ext) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
for (const profile of profiles) {
|
|
69
|
+
const tmpl = profile?.template;
|
|
70
|
+
if (null == tmpl || !Array.isArray(tmpl.ext) || !tmpl.ext.includes(ext)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
return null == tmpl.close ? tmpl.marker : tmpl.marker + ' ' + tmpl.close;
|
|
74
|
+
}
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
function markerForm(marker) {
|
|
78
|
+
const cut = marker.indexOf(' ');
|
|
79
|
+
if (-1 < cut) {
|
|
80
|
+
return {
|
|
81
|
+
open: marker.slice(0, cut),
|
|
82
|
+
close: trimLine(marker.slice(cut + 1)),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
for (const [open, close] of IMPLIED_CLOSE) {
|
|
86
|
+
if (marker.startsWith(open)) {
|
|
87
|
+
return { open: marker, close };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { open: marker, close: '' };
|
|
121
91
|
}
|
|
122
|
-
// INDENTATION IS SPACES AND TABS, and nothing else. A host trim is not
|
|
123
|
-
// the same set in the two ports -- JavaScript's trims every Unicode
|
|
124
|
-
// space, Go's `TrimSpace` trims a different list -- and a line of a
|
|
125
|
-
// template file that began with one of the characters they disagree
|
|
126
|
-
// about would be a marker line in one engine and a line of output in
|
|
127
|
-
// the other. Twin of templateIndent in go/template.go.
|
|
128
92
|
function indentOf(line) {
|
|
129
93
|
let i = 0;
|
|
130
94
|
while (i < line.length && (' ' === line[i] || '\t' === line[i])) {
|
|
@@ -144,56 +108,32 @@ function trimEnd(line) {
|
|
|
144
108
|
function trimLine(line) {
|
|
145
109
|
return trimEnd(line).slice(indentOf(line));
|
|
146
110
|
}
|
|
147
|
-
function readLine(line,
|
|
111
|
+
function readLine(line, form) {
|
|
148
112
|
const cut = indentOf(line);
|
|
149
113
|
const indent = line.slice(0, cut);
|
|
150
114
|
const rest = line.slice(cut);
|
|
151
|
-
if (!rest.startsWith(
|
|
115
|
+
if (!rest.startsWith(form.open)) {
|
|
152
116
|
return { marker: false, indent: '', text: line };
|
|
153
117
|
}
|
|
154
|
-
let body = rest.slice(
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
// language's own parser would not read it as a comment either.
|
|
158
|
-
// Only the TRAILING space goes: what stands between the opener and
|
|
159
|
-
// the aontu is the aontu's indentation, exactly as it is for a line
|
|
160
|
-
// marker, and the one-space rule below takes the marker's own.
|
|
161
|
-
if (isBlock(marker)) {
|
|
162
|
-
const end = body.lastIndexOf(BLOCK_CLOSE);
|
|
118
|
+
let body = rest.slice(form.open.length);
|
|
119
|
+
if ('' !== form.close) {
|
|
120
|
+
const end = body.lastIndexOf(form.close);
|
|
163
121
|
if (end < 0) {
|
|
164
122
|
return { marker: false, indent: '', text: line };
|
|
165
123
|
}
|
|
166
124
|
body = trimEnd(body.slice(0, end));
|
|
167
125
|
}
|
|
168
|
-
// ONE SPACE AFTER THE MARKER IS THE MARKER'S, so `//- x: 1` carries
|
|
169
|
-
// `x: 1` and the resugaring writes the space back. A marker written
|
|
170
|
-
// without it carries the same aontu and is normalised on the round
|
|
171
|
-
// trip, which `--check` reports as the drift it is.
|
|
172
126
|
if (body.startsWith(' ')) {
|
|
173
127
|
body = body.slice(1);
|
|
174
128
|
}
|
|
175
129
|
return { marker: true, indent, text: body };
|
|
176
130
|
}
|
|
177
|
-
// THE CANONICAL QUOTE IS CHOSEN PER LINE (D6). A backtick string
|
|
178
|
-
// carries `"` and `'` unescaped, which is most of what target code
|
|
179
|
-
// holds, so a line takes one unless it holds a backtick itself.
|
|
180
|
-
//
|
|
181
|
-
// A BACKSLASH IS ESCAPED IN EITHER QUOTE, and that is not what the
|
|
182
|
-
// design note assumed: this engine reads the escapes of a backtick
|
|
183
|
-
// string exactly as it reads a quoted one, and an unknown escape drops
|
|
184
|
-
// its backslash (`\p` is `p`), so a target line holding `\n` inside a
|
|
185
|
-
// string of its own would arrive in the output as a newline. Only the
|
|
186
|
-
// delimiter differs between the two forms.
|
|
187
131
|
function quoteLine(text) {
|
|
188
132
|
const escaped = text.replace(/\\/g, '\\\\');
|
|
189
133
|
return text.includes('`') ?
|
|
190
134
|
'"' + escaped.replace(/"/g, '\\"') + '"' :
|
|
191
135
|
'`' + escaped + '`';
|
|
192
136
|
}
|
|
193
|
-
// The line a quoted body element carries, or undefined when the line
|
|
194
|
-
// is not one: anything but a lone string literal, and any escape the
|
|
195
|
-
// quoting above does not write. The fixpoint test below is what makes
|
|
196
|
-
// being conservative here safe -- a line this refuses stays aontu.
|
|
197
137
|
function unquoteLine(text) {
|
|
198
138
|
const t = trimLine(text);
|
|
199
139
|
if (2 > t.length) {
|
|
@@ -223,12 +163,8 @@ function unquoteLine(text) {
|
|
|
223
163
|
}
|
|
224
164
|
return out;
|
|
225
165
|
}
|
|
226
|
-
// DESUGAR: a template file becomes the canonical aontu document.
|
|
227
|
-
// A marker line is its own text, at its own indentation; every other
|
|
228
|
-
// line is one quoted string, which lands wherever the marker lines
|
|
229
|
-
// left a list open.
|
|
230
166
|
function desugarTemplate(src, marker) {
|
|
231
|
-
const
|
|
167
|
+
const form = markerForm(marker ?? DEFAULT_MARKER);
|
|
232
168
|
const lines = src.split('\n');
|
|
233
169
|
// A trailing newline is the file's, not a line of output: a text
|
|
234
170
|
// file ends with one, and the round trip must not grow an empty
|
|
@@ -238,28 +174,20 @@ function desugarTemplate(src, marker) {
|
|
|
238
174
|
lines.pop();
|
|
239
175
|
}
|
|
240
176
|
const out = lines.map((line) => {
|
|
241
|
-
const read = readLine(line,
|
|
177
|
+
const read = readLine(line, form);
|
|
242
178
|
return read.marker ? read.indent + read.text : quoteLine(read.text);
|
|
243
179
|
});
|
|
244
180
|
return out.join('\n') + (tail ? '\n' : '');
|
|
245
181
|
}
|
|
246
|
-
// RESUGAR: the canonical document becomes a template file. Every line
|
|
247
|
-
// is a marker line unless it is a body element that survives the
|
|
248
|
-
// fixpoint -- rebuild the target line, desugar the rebuild, and take
|
|
249
|
-
// it only if that answers the canonical line back.
|
|
250
182
|
function resugarTemplate(src, marker) {
|
|
251
183
|
const mark = marker ?? DEFAULT_MARKER;
|
|
184
|
+
const form = markerForm(mark);
|
|
252
185
|
const lines = src.split('\n');
|
|
253
186
|
const tail = 1 < lines.length && '' === lines[lines.length - 1];
|
|
254
187
|
if (tail) {
|
|
255
188
|
lines.pop();
|
|
256
189
|
}
|
|
257
190
|
const out = lines.map((line) => {
|
|
258
|
-
// THE ELEMENT'S OWN INDENTATION IS NOT PART OF IT: the target line
|
|
259
|
-
// is the string's content, and where the canonical form puts the
|
|
260
|
-
// element on the page is the formatter's business. Comparing the
|
|
261
|
-
// whole line instead would refuse every body element of a document
|
|
262
|
-
// `aontu fmt` had indented, which is every document it has seen.
|
|
263
191
|
const target = unquoteLine(line);
|
|
264
192
|
if (undefined !== target && desugarTemplate(target, mark) === trimLine(line)) {
|
|
265
193
|
return target;
|
|
@@ -268,26 +196,18 @@ function resugarTemplate(src, marker) {
|
|
|
268
196
|
// is written after it, so the aontu's own shape is on the page.
|
|
269
197
|
// The one space is the marker's, which the reading takes back.
|
|
270
198
|
const text = trimEnd(line);
|
|
271
|
-
const close =
|
|
272
|
-
return '' === text ?
|
|
199
|
+
const close = '' === form.close ? '' : ' ' + form.close;
|
|
200
|
+
return '' === text ? form.open + close :
|
|
201
|
+
form.open + ' ' + text + close;
|
|
273
202
|
});
|
|
274
203
|
return out.join('\n') + (tail ? '\n' : '');
|
|
275
204
|
}
|
|
276
|
-
// WHICH LINES OF THE DESUGARED DOCUMENT ARE THE TARGET'S. The
|
|
277
|
-
// desugaring is line for line, so this is one flag per line of what
|
|
278
|
-
// `desugarTemplate` returns: true where the template's line was not a
|
|
279
|
-
// marker, and so where the document's line is one quoted line of the
|
|
280
|
-
// generated file.
|
|
281
|
-
//
|
|
282
|
-
// `aontu fmt` reads it (FMT.0.md M-BM-'3.14) to hold those lines on lines of
|
|
283
|
-
// their own. A body element is a string like any other, and the packing
|
|
284
|
-
// budget would put three of them on one line -- which is aontu where
|
|
285
|
-
// three lines of output were, and a generator that writes them as one.
|
|
286
205
|
function templateOutputs(src, marker) {
|
|
206
|
+
const form = markerForm(marker);
|
|
287
207
|
const lines = src.split('\n');
|
|
288
208
|
if (1 < lines.length && '' === lines[lines.length - 1]) {
|
|
289
209
|
lines.pop();
|
|
290
210
|
}
|
|
291
|
-
return lines.map((line) => !readLine(line,
|
|
292
|
-
} /* node:coverage ignore next
|
|
211
|
+
return lines.map((line) => !readLine(line, form).marker);
|
|
212
|
+
} /* node:coverage ignore next 10 */
|
|
293
213
|
//# sourceMappingURL=template.js.map
|
package/dist/template.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}
|
package/dist/trim.js
CHANGED
|
@@ -6,39 +6,11 @@ exports.evalCanon = evalCanon;
|
|
|
6
6
|
exports.trimCheck = trimCheck;
|
|
7
7
|
/* Copyright (c) 2025 Richard Rodger, MIT License */
|
|
8
8
|
const utility_1 = require("./utility");
|
|
9
|
-
// The trim reporter (G3 phase 6,
|
|
10
|
-
// docs/capability-review/g3-subsumption-evolution.md): report REDUNDANT
|
|
11
|
-
// map entries — entries whose removal leaves the evaluated result
|
|
12
|
-
// unchanged, the spread-implied case included — as paths. Report-only,
|
|
13
|
-
// deliberately: canon discards comments and layout, so REWRITING the
|
|
14
|
-
// file needs G7's format-preserving patch surface; trim ships as a
|
|
15
|
-
// reporter here and becomes an editor there.
|
|
16
|
-
//
|
|
17
|
-
// The test is EVALUATE-AND-COMPARE: for each candidate entry, re-parse
|
|
18
|
-
// the source, delete the entry from the parsed tree, evaluate, and
|
|
19
|
-
// compare canons. This subsumes the design's spread case — an entry a
|
|
20
|
-
// spread template re-supplies evaluates to the same canon without its
|
|
21
|
-
// explicit spelling — and is honest about everything the fixpoint can
|
|
22
|
-
// see (references, templates, duplicate-key merges), where a purely
|
|
23
|
-
// structural test would guess. A removal that ERRORS is not redundant:
|
|
24
|
-
// the entry is load-bearing.
|
|
25
|
-
//
|
|
26
|
-
// Parsed trees are single-use (docs/reference-api.md), so every probe
|
|
27
|
-
// is its own parse: one evaluation per candidate plus one for the
|
|
28
|
-
// baseline. A reporter can afford that; an editor loop belongs to G7.
|
|
29
9
|
const aontu_1 = require("./aontu");
|
|
30
10
|
const vet_1 = require("./vet");
|
|
31
11
|
function pathText(path) {
|
|
32
12
|
return '$' + (0 < path.length ? '.' + path.join('.') : '');
|
|
33
13
|
}
|
|
34
|
-
// Every (map, key) pair in a PARSED tree, parent-first. Candidates come
|
|
35
|
-
// from the parse rather than the evaluation: an entry the fixpoint
|
|
36
|
-
// erases or rewrites still has to be addressable for deletion. The
|
|
37
|
-
// non-Val guard is for a bag's raw peg entries, which degenerate
|
|
38
|
-
// parses can leave behind. Exported (with deleteAt and evalCanon) for
|
|
39
|
-
// the direct unit tests (ADR-002, ts/test/coverage3.test.ts): the
|
|
40
|
-
// defensive arms are unreachable through trimCheck, whose candidates
|
|
41
|
-
// come from an identical parse.
|
|
42
14
|
function candidates(v, path, out) {
|
|
43
15
|
if (null == v || true !== v.isVal) {
|
|
44
16
|
return;
|
|
@@ -81,19 +53,10 @@ function deleteAt(root, path) {
|
|
|
81
53
|
node.optionalKeys = node.optionalKeys.filter((k) => k !== key);
|
|
82
54
|
return true;
|
|
83
55
|
}
|
|
84
|
-
// One evaluation: parse (deleting the entry at delPath, when given),
|
|
85
|
-
// unify under collect, and answer the canon — or undefined when the
|
|
86
|
-
// source does not stand up, which for the baseline is the caller's
|
|
87
|
-
// error verdict and for a probe means "load-bearing".
|
|
88
56
|
function evalCanon(src, opts, delPath, sink) {
|
|
89
57
|
const aontu = new aontu_1.Aontu((0, utility_1.includeOpts)(opts));
|
|
90
58
|
const ctx = aontu.ctx({ collect: true });
|
|
91
59
|
const parseOpts = null == opts.path ? undefined : { path: opts.path };
|
|
92
|
-
// WHY the run failed, for the one caller that reports it. The
|
|
93
|
-
// BASELINE run passes a sink and a probe does not: a probe's failure
|
|
94
|
-
// means "load-bearing", which is an answer rather than a fault, and
|
|
95
|
-
// reporting it would bury the one real finding under one entry's
|
|
96
|
-
// worth of noise per candidate.
|
|
97
60
|
const fail = (failed) => {
|
|
98
61
|
if (null != sink) {
|
|
99
62
|
sink.ctx = ctx;
|
|
@@ -117,10 +80,6 @@ function evalCanon(src, opts, delPath, sink) {
|
|
|
117
80
|
}
|
|
118
81
|
return v.canon;
|
|
119
82
|
}
|
|
120
|
-
// The whole reporter: the baseline canon, then one probe per candidate
|
|
121
|
-
// entry, parent-first — and a child of a redundant parent is SKIPPED,
|
|
122
|
-
// because "remove the whole entry" already covers it and reporting
|
|
123
|
-
// both would tell the author to delete the same text twice.
|
|
124
83
|
function trimCheck(src, opts) {
|
|
125
84
|
const options = opts ?? {};
|
|
126
85
|
const sink = {};
|
package/dist/trim.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trim.js","sourceRoot":"","sources":["../src/trim.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAoD;AACpD,uCAAuC;
|
|
1
|
+
{"version":3,"file":"trim.js","sourceRoot":"","sources":["../src/trim.ts"],"names":[],"mappings":"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"}
|