@hawkeyexl/manni 4.8.0 → 4.9.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 +1 -1
- package/dist/{batch-6LJJZTT7.js → batch-W5GXL2P4.js} +10 -10
- package/dist/{build-QKFXKAXT.js → build-Q56FEXR6.js} +9 -9
- package/dist/{calibrate-UQJR3WCU.js → calibrate-XFE56P4M.js} +11 -11
- package/dist/{capture-HQ2PGM5Z.js → capture-GMYH4ATL.js} +10 -10
- package/dist/{check-BF56QRWL.js → check-HBRX4FOR.js} +9 -9
- package/dist/{check-NSDC5LSE.js → check-KUBELO5G.js} +13 -13
- package/dist/check-KUBELO5G.js.map +1 -0
- package/dist/{check-3DZOMJ7R.js → check-ZE5HIDOW.js} +10 -10
- package/dist/{chunk-GEX2HDAT.js → chunk-23UAGEKP.js} +2 -2
- package/dist/{chunk-KWAXJCKS.js → chunk-2EHDJ47Y.js} +4 -4
- package/dist/{chunk-ALAH6HNY.js → chunk-35WTFPQS.js} +2 -2
- package/dist/{chunk-QRAKST62.js → chunk-3CDZWY6M.js} +4 -4
- package/dist/{chunk-A36QDIXZ.js → chunk-3XGGF5JW.js} +809 -4
- package/dist/chunk-3XGGF5JW.js.map +1 -0
- package/dist/{chunk-ZH3VTIBL.js → chunk-3XMG4CZY.js} +7 -7
- package/dist/{chunk-J3IK5IGO.js → chunk-5EB6RIXJ.js} +2 -2
- package/dist/{chunk-G4T6SF3C.js → chunk-5LBEQ4ZU.js} +129 -26
- package/dist/chunk-5LBEQ4ZU.js.map +1 -0
- package/dist/{chunk-WZFA33SD.js → chunk-5WME4CB6.js} +6 -6
- package/dist/{chunk-W7RSTW55.js → chunk-76I6I5N2.js} +21 -3
- package/dist/{chunk-W7RSTW55.js.map → chunk-76I6I5N2.js.map} +1 -1
- package/dist/{chunk-TVKYNKB3.js → chunk-BSTXARMY.js} +10 -10
- package/dist/{chunk-UZGSFQLT.js → chunk-DTGIUMZV.js} +4 -4
- package/dist/{chunk-ZYRHDBVS.js → chunk-FGUXMZXO.js} +5 -5
- package/dist/{chunk-HYT242KI.js → chunk-FSBIPCWE.js} +6 -6
- package/dist/{chunk-UMGAACCP.js → chunk-GEMXGXPR.js} +3 -3
- package/dist/{chunk-ZJNE4BKG.js → chunk-GRILZZGS.js} +2 -2
- package/dist/{chunk-BP7LGVF3.js → chunk-HRXDM6H6.js} +7 -7
- package/dist/{chunk-AZXCL5WH.js → chunk-IN6DWNVE.js} +4 -4
- package/dist/{chunk-CGO5MNRD.js → chunk-KX5IYIOO.js} +2 -2
- package/dist/{chunk-CGO5MNRD.js.map → chunk-KX5IYIOO.js.map} +1 -1
- package/dist/{chunk-22G33NL2.js → chunk-M6GH3FGJ.js} +3 -3
- package/dist/{chunk-LRU5BK3L.js → chunk-MHAYLDBK.js} +3 -3
- package/dist/{chunk-EOGF6VCA.js → chunk-ND2S5BXB.js} +2 -2
- package/dist/{chunk-H3LM7D6K.js → chunk-OVOYKWCM.js} +4 -4
- package/dist/{chunk-RGB7WBFD.js → chunk-OWSNXPPX.js} +3 -3
- package/dist/{chunk-77WI6LJW.js → chunk-Q2H7J3FF.js} +5 -5
- package/dist/{chunk-2QEHLWYM.js → chunk-Q45PZX2D.js} +2 -2
- package/dist/{chunk-426TGC2Q.js → chunk-QAKJNPY3.js} +5 -5
- package/dist/{chunk-KRSLDZ7N.js → chunk-QCCAHV6A.js} +34 -7
- package/dist/{chunk-KRSLDZ7N.js.map → chunk-QCCAHV6A.js.map} +1 -1
- package/dist/{chunk-W6AZHTGB.js → chunk-QKE3XS2L.js} +2 -2
- package/dist/{chunk-CHDADR7F.js → chunk-RFSGKF4O.js} +35 -17
- package/dist/chunk-RFSGKF4O.js.map +1 -0
- package/dist/{chunk-GWGR7BDP.js → chunk-TKTRIZT4.js} +5 -5
- package/dist/{chunk-VCQOUFTZ.js → chunk-TMI2YF6D.js} +4 -4
- package/dist/{chunk-OA2GKJVM.js → chunk-UDUHRXJ4.js} +2 -2
- package/dist/{chunk-BMRZFTAD.js → chunk-VKWZCEWB.js} +3 -3
- package/dist/{chunk-ZDYW7XTS.js → chunk-X6WLCNKC.js} +3 -3
- package/dist/{chunk-JUN4DUHG.js → chunk-XHFHXOQQ.js} +6 -6
- package/dist/{chunk-TKVGEFMH.js → chunk-XTAHZTES.js} +3 -3
- package/dist/{chunk-HOE2C42K.js → chunk-YEUQ7OKT.js} +1291 -125
- package/dist/chunk-YEUQ7OKT.js.map +1 -0
- package/dist/{chunk-LXFY64QR.js → chunk-YUZ2ECZY.js} +3 -3
- package/dist/{cli-PNK2HTIC.js → cli-B7SFJDZA.js} +11 -11
- package/dist/{cli-EOSY3WVX.js → cli-BJ7JXJ2U.js} +10 -10
- package/dist/{cli-X24QGW6Y.js → cli-EMQXRN6E.js} +11 -11
- package/dist/{cli-WGONI6PJ.js → cli-J35OPSTP.js} +7 -7
- package/dist/{cli-CSXPJZVM.js → cli-MEPJTS2V.js} +14 -14
- package/dist/{cli-JER6KIUJ.js → cli-TPONWND4.js} +17 -17
- package/dist/{cli-IX3WSFV4.js → cli-URNPOMOH.js} +2 -2
- package/dist/{cli-IYC7F5OJ.js → cli-YDMMIL2U.js} +13 -13
- package/dist/{cli-7OIV7UXF.js → cli-ZJRHU7MO.js} +28 -28
- package/dist/cli.js +11 -11
- package/dist/docmeta.js +6 -6
- package/dist/{github-LL5LHQFG.js → github-63CZJGZS.js} +11 -11
- package/dist/{github-GFTLEZ3D.js → github-IYOVHWHG.js} +9 -9
- package/dist/index.d.ts +11 -1
- package/dist/index.js +30 -30
- package/dist/{json-XDV4CZEU.js → json-JIUPGOUQ.js} +9 -9
- package/dist/{lint-NO4GIR3Z.js → lint-TBE35CCW.js} +9 -9
- package/dist/{list-4GJ6KI4U.js → list-IZ4RIM72.js} +9 -9
- package/dist/{list-4G6F5BX2.js → list-TNEJ3J77.js} +9 -9
- package/dist/{page-4VJQELH5.js → page-WQ3GQF76.js} +8 -8
- package/dist/{prepare-TGHFPUYE.js → prepare-ZUTYXTUZ.js} +9 -9
- package/dist/{pretty-ZMKG3AJR.js → pretty-CBV5XSMZ.js} +9 -9
- package/dist/{pretty-HFA6ITJY.js → pretty-Q3C433DW.js} +10 -10
- package/dist/{reporters-DZTHBJEA.js → reporters-DH5HPFXJ.js} +8 -8
- package/dist/{reporters-FRM5BHPL.js → reporters-TTYGOUAF.js} +4 -4
- package/dist/{run-BRC64Y7B.js → run-LZXKVTM7.js} +9 -9
- package/dist/{term-PNWS7F5B.js → term-DL3YFL43.js} +278 -149
- package/dist/term-DL3YFL43.js.map +1 -0
- package/dist/{validate-ULPJI4GQ.js → validate-UVDMC5LT.js} +4 -4
- package/package.json +1 -1
- package/plugin/manni/.claude-plugin/plugin.json +1 -1
- package/dist/check-NSDC5LSE.js.map +0 -1
- package/dist/chunk-A36QDIXZ.js.map +0 -1
- package/dist/chunk-CHDADR7F.js.map +0 -1
- package/dist/chunk-G4T6SF3C.js.map +0 -1
- package/dist/chunk-HOE2C42K.js.map +0 -1
- package/dist/term-PNWS7F5B.js.map +0 -1
- /package/dist/{batch-6LJJZTT7.js.map → batch-W5GXL2P4.js.map} +0 -0
- /package/dist/{build-QKFXKAXT.js.map → build-Q56FEXR6.js.map} +0 -0
- /package/dist/{calibrate-UQJR3WCU.js.map → calibrate-XFE56P4M.js.map} +0 -0
- /package/dist/{capture-HQ2PGM5Z.js.map → capture-GMYH4ATL.js.map} +0 -0
- /package/dist/{check-3DZOMJ7R.js.map → check-HBRX4FOR.js.map} +0 -0
- /package/dist/{check-BF56QRWL.js.map → check-ZE5HIDOW.js.map} +0 -0
- /package/dist/{chunk-GEX2HDAT.js.map → chunk-23UAGEKP.js.map} +0 -0
- /package/dist/{chunk-KWAXJCKS.js.map → chunk-2EHDJ47Y.js.map} +0 -0
- /package/dist/{chunk-ALAH6HNY.js.map → chunk-35WTFPQS.js.map} +0 -0
- /package/dist/{chunk-QRAKST62.js.map → chunk-3CDZWY6M.js.map} +0 -0
- /package/dist/{chunk-ZH3VTIBL.js.map → chunk-3XMG4CZY.js.map} +0 -0
- /package/dist/{chunk-J3IK5IGO.js.map → chunk-5EB6RIXJ.js.map} +0 -0
- /package/dist/{chunk-WZFA33SD.js.map → chunk-5WME4CB6.js.map} +0 -0
- /package/dist/{chunk-TVKYNKB3.js.map → chunk-BSTXARMY.js.map} +0 -0
- /package/dist/{chunk-UZGSFQLT.js.map → chunk-DTGIUMZV.js.map} +0 -0
- /package/dist/{chunk-ZYRHDBVS.js.map → chunk-FGUXMZXO.js.map} +0 -0
- /package/dist/{chunk-HYT242KI.js.map → chunk-FSBIPCWE.js.map} +0 -0
- /package/dist/{chunk-UMGAACCP.js.map → chunk-GEMXGXPR.js.map} +0 -0
- /package/dist/{chunk-ZJNE4BKG.js.map → chunk-GRILZZGS.js.map} +0 -0
- /package/dist/{chunk-BP7LGVF3.js.map → chunk-HRXDM6H6.js.map} +0 -0
- /package/dist/{chunk-AZXCL5WH.js.map → chunk-IN6DWNVE.js.map} +0 -0
- /package/dist/{chunk-22G33NL2.js.map → chunk-M6GH3FGJ.js.map} +0 -0
- /package/dist/{chunk-LRU5BK3L.js.map → chunk-MHAYLDBK.js.map} +0 -0
- /package/dist/{chunk-EOGF6VCA.js.map → chunk-ND2S5BXB.js.map} +0 -0
- /package/dist/{chunk-H3LM7D6K.js.map → chunk-OVOYKWCM.js.map} +0 -0
- /package/dist/{chunk-RGB7WBFD.js.map → chunk-OWSNXPPX.js.map} +0 -0
- /package/dist/{chunk-77WI6LJW.js.map → chunk-Q2H7J3FF.js.map} +0 -0
- /package/dist/{chunk-2QEHLWYM.js.map → chunk-Q45PZX2D.js.map} +0 -0
- /package/dist/{chunk-426TGC2Q.js.map → chunk-QAKJNPY3.js.map} +0 -0
- /package/dist/{chunk-W6AZHTGB.js.map → chunk-QKE3XS2L.js.map} +0 -0
- /package/dist/{chunk-GWGR7BDP.js.map → chunk-TKTRIZT4.js.map} +0 -0
- /package/dist/{chunk-VCQOUFTZ.js.map → chunk-TMI2YF6D.js.map} +0 -0
- /package/dist/{chunk-OA2GKJVM.js.map → chunk-UDUHRXJ4.js.map} +0 -0
- /package/dist/{chunk-BMRZFTAD.js.map → chunk-VKWZCEWB.js.map} +0 -0
- /package/dist/{chunk-ZDYW7XTS.js.map → chunk-X6WLCNKC.js.map} +0 -0
- /package/dist/{chunk-JUN4DUHG.js.map → chunk-XHFHXOQQ.js.map} +0 -0
- /package/dist/{chunk-TKVGEFMH.js.map → chunk-XTAHZTES.js.map} +0 -0
- /package/dist/{chunk-LXFY64QR.js.map → chunk-YUZ2ECZY.js.map} +0 -0
- /package/dist/{cli-PNK2HTIC.js.map → cli-B7SFJDZA.js.map} +0 -0
- /package/dist/{cli-EOSY3WVX.js.map → cli-BJ7JXJ2U.js.map} +0 -0
- /package/dist/{cli-X24QGW6Y.js.map → cli-EMQXRN6E.js.map} +0 -0
- /package/dist/{cli-WGONI6PJ.js.map → cli-J35OPSTP.js.map} +0 -0
- /package/dist/{cli-CSXPJZVM.js.map → cli-MEPJTS2V.js.map} +0 -0
- /package/dist/{cli-JER6KIUJ.js.map → cli-TPONWND4.js.map} +0 -0
- /package/dist/{cli-IX3WSFV4.js.map → cli-URNPOMOH.js.map} +0 -0
- /package/dist/{cli-IYC7F5OJ.js.map → cli-YDMMIL2U.js.map} +0 -0
- /package/dist/{cli-7OIV7UXF.js.map → cli-ZJRHU7MO.js.map} +0 -0
- /package/dist/{github-GFTLEZ3D.js.map → github-63CZJGZS.js.map} +0 -0
- /package/dist/{github-LL5LHQFG.js.map → github-IYOVHWHG.js.map} +0 -0
- /package/dist/{json-XDV4CZEU.js.map → json-JIUPGOUQ.js.map} +0 -0
- /package/dist/{lint-NO4GIR3Z.js.map → lint-TBE35CCW.js.map} +0 -0
- /package/dist/{list-4G6F5BX2.js.map → list-IZ4RIM72.js.map} +0 -0
- /package/dist/{list-4GJ6KI4U.js.map → list-TNEJ3J77.js.map} +0 -0
- /package/dist/{page-4VJQELH5.js.map → page-WQ3GQF76.js.map} +0 -0
- /package/dist/{prepare-TGHFPUYE.js.map → prepare-ZUTYXTUZ.js.map} +0 -0
- /package/dist/{pretty-HFA6ITJY.js.map → pretty-CBV5XSMZ.js.map} +0 -0
- /package/dist/{pretty-ZMKG3AJR.js.map → pretty-Q3C433DW.js.map} +0 -0
- /package/dist/{reporters-DZTHBJEA.js.map → reporters-DH5HPFXJ.js.map} +0 -0
- /package/dist/{reporters-FRM5BHPL.js.map → reporters-TTYGOUAF.js.map} +0 -0
- /package/dist/{run-BRC64Y7B.js.map → run-LZXKVTM7.js.map} +0 -0
- /package/dist/{validate-ULPJI4GQ.js.map → validate-UVDMC5LT.js.map} +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
parseTraceFile,
|
|
4
4
|
renderTrace
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-76I6I5N2.js";
|
|
6
6
|
import {
|
|
7
7
|
evaluateWhen,
|
|
8
8
|
matchesGlob,
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
extractEvals,
|
|
31
31
|
findManifest,
|
|
32
32
|
resolveArtifacts
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-XTAHZTES.js";
|
|
34
34
|
import {
|
|
35
35
|
discoverTraces
|
|
36
36
|
} from "./chunk-4TSWU2SU.js";
|
|
@@ -68,7 +68,7 @@ import {
|
|
|
68
68
|
} from "./chunk-GLP5PSXB.js";
|
|
69
69
|
import {
|
|
70
70
|
declaredAt
|
|
71
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-M6GH3FGJ.js";
|
|
72
72
|
import {
|
|
73
73
|
PATH_JOIN,
|
|
74
74
|
externalMetadataJoin,
|
|
@@ -76,15 +76,15 @@ import {
|
|
|
76
76
|
loadExternalMetadata,
|
|
77
77
|
memberOf,
|
|
78
78
|
mergeWithMarks
|
|
79
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-QCCAHV6A.js";
|
|
80
80
|
import {
|
|
81
81
|
xmlEscape
|
|
82
|
-
} from "./chunk-
|
|
82
|
+
} from "./chunk-X6WLCNKC.js";
|
|
83
83
|
import {
|
|
84
84
|
DocmetaError,
|
|
85
85
|
classifyRef,
|
|
86
86
|
extractFrontmatter
|
|
87
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-3XGGF5JW.js";
|
|
88
88
|
import {
|
|
89
89
|
palette
|
|
90
90
|
} from "./chunk-RNVYGWIC.js";
|
|
@@ -3132,4 +3132,4 @@ export {
|
|
|
3132
3132
|
resolveBatchTraces,
|
|
3133
3133
|
runBatch
|
|
3134
3134
|
};
|
|
3135
|
-
//# sourceMappingURL=chunk-
|
|
3135
|
+
//# sourceMappingURL=chunk-3XMG4CZY.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
displayPath
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YEUQ7OKT.js";
|
|
5
5
|
import {
|
|
6
6
|
escapeWorkflowCommandMessage,
|
|
7
7
|
escapeWorkflowCommandProperty
|
|
@@ -20,4 +20,4 @@ function renderFindingsGithub(report) {
|
|
|
20
20
|
export {
|
|
21
21
|
renderFindingsGithub
|
|
22
22
|
};
|
|
23
|
-
//# sourceMappingURL=chunk-
|
|
23
|
+
//# sourceMappingURL=chunk-5EB6RIXJ.js.map
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
+
TERM_AUX_FIELDS,
|
|
4
|
+
TERM_DESIGNATION_FIELDS,
|
|
3
5
|
TERM_FIELDS,
|
|
4
6
|
displayPath,
|
|
7
|
+
isMultilingual,
|
|
8
|
+
languageOf,
|
|
5
9
|
plural
|
|
6
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-YEUQ7OKT.js";
|
|
7
11
|
import {
|
|
8
12
|
palette
|
|
9
13
|
} from "./chunk-RNVYGWIC.js";
|
|
@@ -46,9 +50,13 @@ function hanging(first, lines) {
|
|
|
46
50
|
function renderListPretty(terms) {
|
|
47
51
|
const idWidth = Math.max(0, ...terms.map((t) => t.id.length)) + 3;
|
|
48
52
|
const labelWidth = Math.max(0, ...terms.map((t) => t.record.label.length)) + 3;
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
)
|
|
53
|
+
const multilingual = isMultilingual(terms);
|
|
54
|
+
const languageWidth = Math.max(0, ...terms.map((t) => languageOf(t).length)) + 3;
|
|
55
|
+
const rows = terms.map((t) => {
|
|
56
|
+
const language = multilingual ? languageOf(t).padEnd(languageWidth) : "";
|
|
57
|
+
const alts = (t.record["alt-labels"] ?? []).join(", ");
|
|
58
|
+
return `${t.id.padEnd(idWidth)}${language}${t.record.label.padEnd(labelWidth)}${alts}`.trimEnd();
|
|
59
|
+
});
|
|
52
60
|
return [...rows, plural(terms.length, "term")].join("\n");
|
|
53
61
|
}
|
|
54
62
|
var GET_FIELDS = [
|
|
@@ -60,23 +68,88 @@ var GET_FIELDS = [
|
|
|
60
68
|
"see",
|
|
61
69
|
"abstract",
|
|
62
70
|
"scope-note",
|
|
71
|
+
"subject-field",
|
|
72
|
+
"contexts",
|
|
73
|
+
"notes",
|
|
74
|
+
"sources",
|
|
75
|
+
"customer-subsets",
|
|
76
|
+
"project-subsets",
|
|
77
|
+
"cross-references",
|
|
78
|
+
"external-cross-references",
|
|
79
|
+
"graphics",
|
|
80
|
+
"transactions",
|
|
63
81
|
"definition"
|
|
64
82
|
];
|
|
65
|
-
var
|
|
83
|
+
var SHOWN_AUX = TERM_AUX_FIELDS.filter((field) => field !== "tbx-elements");
|
|
84
|
+
var MIN_KEY_WIDTH = 15;
|
|
85
|
+
function linkText(link) {
|
|
86
|
+
return link.text === void 0 ? link.target : `${link.text} (${link.target})`;
|
|
87
|
+
}
|
|
88
|
+
function transactionText(transaction) {
|
|
89
|
+
return [transaction.type, transaction.date, transaction.responsibility].filter((part) => part !== void 0).join(" ");
|
|
90
|
+
}
|
|
91
|
+
function valueText(value) {
|
|
92
|
+
if (typeof value === "string") return value;
|
|
93
|
+
return value.map((item) => typeof item === "string" ? item : "target" in item ? linkText(item) : transactionText(item)).join(", ");
|
|
94
|
+
}
|
|
95
|
+
function designationLine(designation) {
|
|
96
|
+
const parts = [];
|
|
97
|
+
for (const key of TERM_DESIGNATION_FIELDS) {
|
|
98
|
+
const value = designation[key];
|
|
99
|
+
if (value !== void 0) parts.push(`${key} ${value}`);
|
|
100
|
+
}
|
|
101
|
+
const comments = designation["transfer-comments"];
|
|
102
|
+
if (comments !== void 0) parts.push(`transfer-comments ${valueText(comments)}`);
|
|
103
|
+
for (const key of SHOWN_AUX) {
|
|
104
|
+
const value = designation[key];
|
|
105
|
+
if (value !== void 0) parts.push(`${key} ${valueText(value)}`);
|
|
106
|
+
}
|
|
107
|
+
return parts.length === 0 ? void 0 : `${designation.term}: ${parts.join(", ")}`;
|
|
108
|
+
}
|
|
109
|
+
function passThroughText(record) {
|
|
110
|
+
const parts = [];
|
|
111
|
+
const count = (items, where) => {
|
|
112
|
+
if (items !== void 0) parts.push(`${String(items.length)} ${where}`);
|
|
113
|
+
};
|
|
114
|
+
count(record["tbx-elements"], "at the root");
|
|
115
|
+
for (const designation of record.designations ?? []) count(designation["tbx-elements"], `on ${designation.term}`);
|
|
116
|
+
count(record["concept-entry"]?.["tbx-elements"], "in concept-entry");
|
|
117
|
+
return parts.length === 0 ? void 0 : parts.join(", ");
|
|
118
|
+
}
|
|
66
119
|
function renderGetPretty(term, opts) {
|
|
67
120
|
const c = palette(opts.color);
|
|
121
|
+
const { record } = term;
|
|
68
122
|
const where = `${displayPath(term.location.file, opts.cwd ?? process.cwd())}:${String(term.location.line)}`;
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
const prefix = ` ${key.padEnd(KEY_WIDTH)}`;
|
|
72
|
-
lines.push(...hanging(prefix, wrapWords(value, WIDTH - prefix.length)));
|
|
73
|
-
};
|
|
74
|
-
row("id", term.id);
|
|
75
|
-
if (term.language !== void 0) row("language", term.language);
|
|
123
|
+
const rows = [["id", [term.id]]];
|
|
124
|
+
if (term.language !== void 0) rows.push(["language", [term.language]]);
|
|
76
125
|
for (const field of GET_FIELDS) {
|
|
77
|
-
const value =
|
|
78
|
-
if (value
|
|
79
|
-
|
|
126
|
+
const value = record[field];
|
|
127
|
+
if (value !== void 0) rows.push([field, [valueText(value)]]);
|
|
128
|
+
}
|
|
129
|
+
const concept = record["concept-entry"];
|
|
130
|
+
if (concept !== void 0) {
|
|
131
|
+
const lines2 = SHOWN_AUX.flatMap((key) => {
|
|
132
|
+
const value = concept[key];
|
|
133
|
+
return value === void 0 ? [] : [`${key}: ${valueText(value)}`];
|
|
134
|
+
});
|
|
135
|
+
if (lines2.length > 0) rows.push(["concept-entry", lines2]);
|
|
136
|
+
}
|
|
137
|
+
const designations = (record.designations ?? []).map(designationLine).filter((line) => line !== void 0);
|
|
138
|
+
if (designations.length > 0) rows.push(["designations", designations]);
|
|
139
|
+
if (record["tbx-markup"] !== void 0) rows.push(["tbx-markup", record["tbx-markup"]]);
|
|
140
|
+
const passThrough = passThroughText(record);
|
|
141
|
+
if (passThrough !== void 0) rows.push(["tbx-elements", [passThrough]]);
|
|
142
|
+
const others = opts.others ?? [];
|
|
143
|
+
if (others.length > 0) {
|
|
144
|
+
rows.push(["other languages", [others.map((t) => `${languageOf(t)} (${t.record.label})`).join(", ")]]);
|
|
145
|
+
}
|
|
146
|
+
const keyWidth = Math.max(MIN_KEY_WIDTH, ...rows.map(([key]) => key.length + 2));
|
|
147
|
+
const lines = [`${c.bold(record.label.padEnd(40))}${c.dim(where)}`];
|
|
148
|
+
for (const [key, values] of rows) {
|
|
149
|
+
values.forEach((value, i) => {
|
|
150
|
+
const prefix = ` ${(i === 0 ? key : "").padEnd(keyWidth)}`;
|
|
151
|
+
lines.push(...hanging(prefix, wrapWords(value, WIDTH - prefix.length)));
|
|
152
|
+
});
|
|
80
153
|
}
|
|
81
154
|
return lines.join("\n");
|
|
82
155
|
}
|
|
@@ -164,24 +237,53 @@ function valeLines(report) {
|
|
|
164
237
|
}
|
|
165
238
|
function droppedLine(report) {
|
|
166
239
|
if (report.dropped.length === 0) return void 0;
|
|
167
|
-
const
|
|
168
|
-
for (const {
|
|
169
|
-
|
|
170
|
-
set.add(id);
|
|
171
|
-
ids.set(field, set);
|
|
172
|
-
}
|
|
173
|
-
const fields = [...ids.entries()].map(([field, set]) => ({ field, n: set.size })).sort((a, b) => a.n - b.n || TERM_FIELDS.indexOf(a.field) - TERM_FIELDS.indexOf(b.field));
|
|
240
|
+
const counts2 = /* @__PURE__ */ new Map();
|
|
241
|
+
for (const { field } of report.dropped) counts2.set(field, (counts2.get(field) ?? 0) + 1);
|
|
242
|
+
const fields = [...counts2.entries()].map(([field, n]) => ({ field, n })).sort((a, b) => a.n - b.n || TERM_FIELDS.indexOf(a.field) - TERM_FIELDS.indexOf(b.field));
|
|
174
243
|
const parts = fields.map(({ field, n }, i) => `${field} on ${i === 0 ? plural(n, "term") : String(n)}`);
|
|
175
244
|
return ` dropped from ${report.droppedFrom ?? report.format ?? "the render"}: ${parts.join(", ")}`;
|
|
176
245
|
}
|
|
246
|
+
function droppedHeadersLine(report) {
|
|
247
|
+
const files = report.droppedHeaders ?? [];
|
|
248
|
+
if (files.length === 0) return void 0;
|
|
249
|
+
const what = files.length === 1 ? "the header of" : "the headers of";
|
|
250
|
+
return ` dropped from ${report.droppedFrom ?? report.format ?? "the render"}: ${what} ${files.join(", ")}`;
|
|
251
|
+
}
|
|
177
252
|
function skippedLine(report) {
|
|
178
253
|
if (report.skipped.length === 0) return void 0;
|
|
179
254
|
const construct = report.droppedFrom ?? report.format ?? "the render";
|
|
180
255
|
const count = plural(report.skipped.length, "term");
|
|
181
256
|
return ` skipped ${count} ${construct} cannot read without a definition: ${report.skipped.join(", ")}`;
|
|
182
257
|
}
|
|
258
|
+
function otherLanguagesLine(report) {
|
|
259
|
+
const other = report.otherLanguages;
|
|
260
|
+
if (other === void 0 || other.terms.length === 0) return void 0;
|
|
261
|
+
const terms = other.terms.map(({ id, language }) => `${id} (${language})`).join(", ");
|
|
262
|
+
return ` skipped ${plural(other.terms.length, "term")} in another language than ${other.written}: ${terms}`;
|
|
263
|
+
}
|
|
264
|
+
function conflictsLine(report) {
|
|
265
|
+
const conflicts = report.conflicts ?? [];
|
|
266
|
+
if (conflicts.length === 0) return void 0;
|
|
267
|
+
const ids = /* @__PURE__ */ new Map();
|
|
268
|
+
for (const { id, field } of conflicts) {
|
|
269
|
+
const set = ids.get(field) ?? /* @__PURE__ */ new Set();
|
|
270
|
+
set.add(id);
|
|
271
|
+
ids.set(field, set);
|
|
272
|
+
}
|
|
273
|
+
const fields = [...ids.entries()].map(([field, set]) => ({ field, n: set.size })).sort((a, b) => a.n - b.n);
|
|
274
|
+
const parts = fields.map(({ field, n }, i) => `${field} on ${i === 0 ? plural(n, "concept") : String(n)}`);
|
|
275
|
+
return ` kept the first language's value where languages differ: ${parts.join(", ")}`;
|
|
276
|
+
}
|
|
183
277
|
function renderNotes(report) {
|
|
184
|
-
return [
|
|
278
|
+
return [
|
|
279
|
+
droppedLine(report),
|
|
280
|
+
droppedHeadersLine(report),
|
|
281
|
+
skippedLine(report),
|
|
282
|
+
otherLanguagesLine(report),
|
|
283
|
+
conflictsLine(report)
|
|
284
|
+
].filter(
|
|
285
|
+
(line) => line !== void 0
|
|
286
|
+
);
|
|
185
287
|
}
|
|
186
288
|
function unchangedLine(report) {
|
|
187
289
|
return report.mode === "in-place" ? "Nothing to write" : `${report.target ?? ""} is up to date`;
|
|
@@ -195,10 +297,11 @@ function renderWritePretty(report) {
|
|
|
195
297
|
return [...changes, ...renderNotes(report)].join("\n");
|
|
196
298
|
}
|
|
197
299
|
if (report.mode === "in-place") {
|
|
198
|
-
|
|
300
|
+
const wrote = report.changes.length === 0 ? "Nothing to write" : `Wrote ${plural(report.changes.length, "file")}`;
|
|
301
|
+
return [wrote, ...renderNotes(report)].join("\n");
|
|
199
302
|
}
|
|
200
303
|
const each = report.shape === "directory" && report.format !== "vale" ? ", one file each" : "";
|
|
201
|
-
const written = report.terms - report.skipped.length;
|
|
304
|
+
const written = report.terms - report.skipped.length - (report.otherLanguages?.terms.length ?? 0);
|
|
202
305
|
const lines = [`Wrote ${plural(written, "term")} to ${report.target ?? ""}${each}`];
|
|
203
306
|
if (report.format === "vale") lines.push(...valeLines(report));
|
|
204
307
|
lines.push(...renderNotes(report));
|
|
@@ -227,4 +330,4 @@ export {
|
|
|
227
330
|
renderValeWiring,
|
|
228
331
|
renderFormatsPretty
|
|
229
332
|
};
|
|
230
|
-
//# sourceMappingURL=chunk-
|
|
333
|
+
//# sourceMappingURL=chunk-5LBEQ4ZU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/term/reporters/pretty.ts"],"sourcesContent":["/**\n * Human output for every `manni term` command, in the shapes the ladder of\n * proposal 0052 prints. Columns are padded to their widest value; prose wraps\n * to 80 columns under its own column, so a long definition or message never\n * runs back to the left edge.\n */\nimport { palette, type Colors } from \"../../shared/color.js\";\nimport type { TermReport } from \"../commands/findings.js\";\nimport type { FormatRow } from \"../commands/formats.js\";\nimport { displayPath, plural } from \"../commands/run.js\";\nimport type { ValeWiring, WriteReport } from \"../commands/write.js\";\nimport type { Severity } from \"../../shared/severity.js\";\nimport { isMultilingual, languageOf } from \"../core/writers/render-util.js\";\nimport {\n TERM_AUX_FIELDS,\n TERM_DESIGNATION_FIELDS,\n TERM_FIELDS,\n type Term,\n type TermDesignation,\n type TermField,\n type TermFinding,\n type TermLink,\n type TermRecord,\n type TermTransaction,\n} from \"../types.js\";\n\nconst WIDTH = 80;\n\n/** Words packed into lines of at most `width` characters; a longer word stands alone. */\nfunction wrapWords(text: string, width: number): string[] {\n const lines: string[] = [];\n let line = \"\";\n for (const word of text.split(/\\s+/).filter((w) => w !== \"\")) {\n if (line === \"\") line = word;\n else if (line.length + 1 + word.length <= width) line = `${line} ${word}`;\n else {\n lines.push(line);\n line = word;\n }\n }\n if (line !== \"\") lines.push(line);\n return lines.length === 0 ? [\"\"] : lines;\n}\n\n/** Sentences packed into lines of at most `width`; a message that fits stays whole. */\nfunction wrapSentences(text: string, width: number): string[] {\n if (text.length <= width) return [text];\n const lines: string[] = [];\n let line = \"\";\n for (const sentence of text.split(/(?<=\\.)\\s+(?=\\S)/)) {\n if (line === \"\") line = sentence;\n else if (line.length + 1 + sentence.length <= width) line = `${line} ${sentence}`;\n else {\n lines.push(line);\n line = sentence;\n }\n }\n if (line !== \"\") lines.push(line);\n return lines;\n}\n\nfunction hanging(first: string, lines: readonly string[]): string[] {\n const indent = \" \".repeat(first.length);\n return lines.map((line, i) => `${i === 0 ? first : indent}${line}`.trimEnd());\n}\n\n// ---------------------------------------------------------------------------\n// list\n\nexport function renderListPretty(terms: readonly Term[]): string {\n const idWidth = Math.max(0, ...terms.map((t) => t.id.length)) + 3;\n const labelWidth = Math.max(0, ...terms.map((t) => t.record.label.length)) + 3;\n // The language column appears only when it tells the rows apart.\n const multilingual = isMultilingual(terms);\n const languageWidth = Math.max(0, ...terms.map((t) => languageOf(t).length)) + 3;\n const rows = terms.map((t) => {\n const language = multilingual ? languageOf(t).padEnd(languageWidth) : \"\";\n const alts = (t.record[\"alt-labels\"] ?? []).join(\", \");\n return `${t.id.padEnd(idWidth)}${language}${t.record.label.padEnd(labelWidth)}${alts}`.trimEnd();\n });\n return [...rows, plural(terms.length, \"term\")].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// get\n\n/** A root field `get` shows as one row of text. */\ntype RowField = Exclude<TermField, \"label\" | \"concept-entry\" | \"designations\" | \"tbx-markup\" | \"tbx-elements\">;\n\n/** The order `get` shows root fields in: names first, then what they mean, the definition last. */\nconst GET_FIELDS: readonly RowField[] = [\n \"alt-labels\",\n \"hidden-labels\",\n \"broader\",\n \"narrower\",\n \"related-terms\",\n \"see\",\n \"abstract\",\n \"scope-note\",\n \"subject-field\",\n \"contexts\",\n \"notes\",\n \"sources\",\n \"customer-subsets\",\n \"project-subsets\",\n \"cross-references\",\n \"external-cross-references\",\n \"graphics\",\n \"transactions\",\n \"definition\",\n];\n\n/** The aux fields a block's line shows; its `tbx-elements` are counted on a row of their own. */\nconst SHOWN_AUX = TERM_AUX_FIELDS.filter((field) => field !== \"tbx-elements\");\n\n/** The key column's narrowest width: the widest 1.0.0 field, `related-terms`, plus two. */\nconst MIN_KEY_WIDTH = 15;\n\nfunction linkText(link: TermLink): string {\n return link.text === undefined ? link.target : `${link.text} (${link.target})`;\n}\n\nfunction transactionText(transaction: TermTransaction): string {\n return [transaction.type, transaction.date, transaction.responsibility].filter((part) => part !== undefined).join(\" \");\n}\n\n/** One value as `get` prints it: a list joined with commas, a link as its text and target, a transaction as its parts. */\nfunction valueText(value: string | readonly (string | TermLink | TermTransaction)[]): string {\n if (typeof value === \"string\") return value;\n return value\n .map((item) => (typeof item === \"string\" ? item : \"target\" in item ? linkText(item) : transactionText(item)))\n .join(\", \");\n}\n\n/** `progressive lens: part-of-speech noun, term-type fullForm`, or `undefined` when it says nothing but its term. */\nfunction designationLine(designation: TermDesignation): string | undefined {\n const parts: string[] = [];\n for (const key of TERM_DESIGNATION_FIELDS) {\n const value = designation[key];\n if (value !== undefined) parts.push(`${key} ${value}`);\n }\n const comments = designation[\"transfer-comments\"];\n if (comments !== undefined) parts.push(`transfer-comments ${valueText(comments)}`);\n for (const key of SHOWN_AUX) {\n const value = designation[key];\n if (value !== undefined) parts.push(`${key} ${valueText(value)}`);\n }\n return parts.length === 0 ? undefined : `${designation.term}: ${parts.join(\", \")}`;\n}\n\n/** `1 at the root, 1 on PAL, 1 in concept-entry`: where the record keeps elements no named field maps. */\nfunction passThroughText(record: TermRecord): string | undefined {\n const parts: string[] = [];\n const count = (items: readonly string[] | undefined, where: string): void => {\n if (items !== undefined) parts.push(`${String(items.length)} ${where}`);\n };\n count(record[\"tbx-elements\"], \"at the root\");\n for (const designation of record.designations ?? []) count(designation[\"tbx-elements\"], `on ${designation.term}`);\n count(record[\"concept-entry\"]?.[\"tbx-elements\"], \"in concept-entry\");\n return parts.length === 0 ? undefined : parts.join(\", \");\n}\n\nexport interface GetPrettyOptions {\n color: boolean;\n cwd?: string;\n /** The entry in its other languages: the set's other terms with the same id. */\n others?: readonly Term[];\n}\n\nexport function renderGetPretty(term: Term, opts: GetPrettyOptions): string {\n const c = palette(opts.color);\n const { record } = term;\n const where = `${displayPath(term.location.file, opts.cwd ?? process.cwd())}:${String(term.location.line)}`;\n\n // Each row is a key and its lines, collected first so the key column fits the widest key shown.\n const rows: [string, string[]][] = [[\"id\", [term.id]]];\n if (term.language !== undefined) rows.push([\"language\", [term.language]]);\n for (const field of GET_FIELDS) {\n const value = record[field];\n if (value !== undefined) rows.push([field, [valueText(value)]]);\n }\n const concept = record[\"concept-entry\"];\n if (concept !== undefined) {\n const lines = SHOWN_AUX.flatMap((key) => {\n const value = concept[key];\n return value === undefined ? [] : [`${key}: ${valueText(value)}`];\n });\n if (lines.length > 0) rows.push([\"concept-entry\", lines]);\n }\n const designations = (record.designations ?? []).map(designationLine).filter((line) => line !== undefined);\n if (designations.length > 0) rows.push([\"designations\", designations]);\n if (record[\"tbx-markup\"] !== undefined) rows.push([\"tbx-markup\", record[\"tbx-markup\"]]);\n const passThrough = passThroughText(record);\n if (passThrough !== undefined) rows.push([\"tbx-elements\", [passThrough]]);\n const others = opts.others ?? [];\n if (others.length > 0) {\n rows.push([\"other languages\", [others.map((t) => `${languageOf(t)} (${t.record.label})`).join(\", \")]]);\n }\n\n const keyWidth = Math.max(MIN_KEY_WIDTH, ...rows.map(([key]) => key.length + 2));\n const lines = [`${c.bold(record.label.padEnd(40))}${c.dim(where)}`];\n for (const [key, values] of rows) {\n values.forEach((value, i) => {\n const prefix = ` ${(i === 0 ? key : \"\").padEnd(keyWidth)}`;\n lines.push(...hanging(prefix, wrapWords(value, WIDTH - prefix.length)));\n });\n }\n return lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// check and lint\n\nconst RULE_WIDTH = 32;\n\nfunction severityText(c: Colors, severity: Severity): string {\n const padded = severity.padEnd(6);\n if (severity === \"error\") return c.red(padded);\n if (severity === \"warning\") return c.yellow(padded);\n return c.cyan(padded);\n}\n\nfunction counts(findings: readonly TermFinding[]): string {\n const parts: string[] = [];\n const n = (severity: Severity): number => findings.filter((f) => f.severity === severity).length;\n if (n(\"error\") > 0) parts.push(plural(n(\"error\"), \"error\"));\n if (n(\"warning\") > 0) parts.push(plural(n(\"warning\"), \"warning\"));\n if (n(\"notice\") > 0) parts.push(plural(n(\"notice\"), \"notice\"));\n return parts.join(\", \");\n}\n\nexport interface FindingsPrettyOptions {\n color: boolean;\n /** Whether the clean line counts references: `check` reads them, `lint` does not. */\n references?: boolean;\n}\n\nexport function renderFindingsPretty(report: TermReport, opts: FindingsPrettyOptions): string {\n const c = palette(opts.color);\n const { baseline } = report;\n if (baseline?.written === true) {\n return `${c.green(\"✓\")} ${plural(report.found, \"finding\")} recorded in ${baseline.path}`;\n }\n const baselined = baseline !== undefined && baseline.suppressed > 0 ? `, ${String(baseline.suppressed)} baselined` : \"\";\n const terms = plural(report.terms, \"term\");\n\n if (report.findings.length === 0) {\n const references = opts.references === false ? \"\" : `, ${plural(report.references, \"reference\")}`;\n return `${c.green(\"✓\")} ${terms}${references}, no findings${baselined}`;\n }\n\n const ruleWidth = Math.max(RULE_WIDTH, ...report.findings.map((f) => f.ruleId.length + 2));\n const lines: string[] = [];\n let group: string | undefined;\n for (const finding of report.findings) {\n const file = displayPath(finding.file, report.cwd);\n const header = finding.line === undefined ? file : `${file}:${String(finding.line)}`;\n if (header !== group) {\n lines.push(c.bold(header));\n group = header;\n }\n const prefixWidth = 2 + 6 + 1 + ruleWidth;\n const message = wrapSentences(finding.message, WIDTH - prefixWidth);\n const indent = \" \".repeat(prefixWidth);\n message.forEach((text, i) => {\n lines.push(\n i === 0 ? ` ${severityText(c, finding.severity)} ${finding.ruleId.padEnd(ruleWidth)}${text}` : `${indent}${text}`,\n );\n });\n }\n lines.push(\"\", `${counts(report.findings)} in ${terms}${baselined}`);\n return lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// write\n\nfunction changeLine(change: WriteReport[\"changes\"][number]): string {\n switch (change.action) {\n case \"create\":\n return `${change.path} would be created`;\n case \"change\":\n return `${change.path} would change`;\n case \"remove\":\n return `${change.path} would be removed`;\n }\n}\n\n/** A generated Vale rule file's `swap:` entries. */\nfunction swapCount(content: string): number {\n const lines = content.split(/\\r?\\n/);\n const start = lines.indexOf(\"swap:\");\n if (start === -1) return 0;\n return lines.slice(start + 1).filter((line) => line.startsWith(\" \")).length;\n}\n\nfunction baseName(path: string): string {\n return path.split(/[\\\\/]/).pop() ?? path;\n}\n\nconst CASING_RULES = new Set([\"Casing.yml\", \"Lowercase.yml\", \"SentenceStart.yml\"]);\n\n/** What each file of a Vale style holds: rule files by name, the acronym files together. */\nfunction valeLines(report: WriteReport): string[] {\n const rows: [string, string][] = [];\n const acronyms: string[] = [];\n for (const file of report.files) {\n const name = baseName(file.path);\n // A casing rule swaps each label and alt-label, so what it counts is labels.\n if (CASING_RULES.has(name)) rows.push([name, plural(swapCount(file.content), \"label\")]);\n else if (name === \"Deprecated.yml\") rows.push([name, plural(swapCount(file.content), \"swap\")]);\n else acronyms.push(name);\n }\n if (acronyms.length > 0) rows.push([acronyms.join(\", \"), plural(acronyms.length, \"acronym\")]);\n const width = Math.max(0, ...rows.map(([name]) => name.length)) + 2;\n return rows.map(([name, what]) => ` ${name.padEnd(width)}${what}`);\n}\n\n/** ` dropped from a definition list: scope-note on 3 terms, hidden-labels on 12`. */\nfunction droppedLine(report: WriteReport): string | undefined {\n if (report.dropped.length === 0) return undefined;\n // One entry per term per field, so counting entries counts terms: an id in two languages is two terms.\n const counts = new Map<TermField, number>();\n for (const { field } of report.dropped) counts.set(field, (counts.get(field) ?? 0) + 1);\n const fields = [...counts.entries()]\n .map(([field, n]) => ({ field, n }))\n .sort((a, b) => a.n - b.n || TERM_FIELDS.indexOf(a.field) - TERM_FIELDS.indexOf(b.field));\n const parts = fields.map(({ field, n }, i) => `${field} on ${i === 0 ? plural(n, \"term\") : String(n)}`);\n return ` dropped from ${report.droppedFrom ?? report.format ?? \"the render\"}: ${parts.join(\", \")}`;\n}\n\n/** ` dropped from tbx3: the headers of glossary.tbx, <stdin>`. */\nfunction droppedHeadersLine(report: WriteReport): string | undefined {\n const files = report.droppedHeaders ?? [];\n if (files.length === 0) return undefined;\n const what = files.length === 1 ? \"the header of\" : \"the headers of\";\n return ` dropped from ${report.droppedFrom ?? report.format ?? \"the render\"}: ${what} ${files.join(\", \")}`;\n}\n\n/** ` skipped 2 terms a definition list cannot read without a definition: varifocal, bifocal`. */\nfunction skippedLine(report: WriteReport): string | undefined {\n if (report.skipped.length === 0) return undefined;\n const construct = report.droppedFrom ?? report.format ?? \"the render\";\n const count = plural(report.skipped.length, \"term\");\n return ` skipped ${count} ${construct} cannot read without a definition: ${report.skipped.join(\", \")}`;\n}\n\n/** ` skipped 2 terms in another language than en: spectacle-lens (de), progressive-lens (de)`. */\nfunction otherLanguagesLine(report: WriteReport): string | undefined {\n const other = report.otherLanguages;\n if (other === undefined || other.terms.length === 0) return undefined;\n const terms = other.terms.map(({ id, language }) => `${id} (${language})`).join(\", \");\n return ` skipped ${plural(other.terms.length, \"term\")} in another language than ${other.written}: ${terms}`;\n}\n\n/**\n * ` kept the first language's value where languages differ: concept-entry.subject-field on 1 concept`.\n * Fields are counted in concepts, fewest first, as the dropped line counts terms.\n */\nfunction conflictsLine(report: WriteReport): string | undefined {\n const conflicts = report.conflicts ?? [];\n if (conflicts.length === 0) return undefined;\n const ids = new Map<string, Set<string>>();\n for (const { id, field } of conflicts) {\n const set = ids.get(field) ?? new Set<string>();\n set.add(id);\n ids.set(field, set);\n }\n // A stable sort keeps fields of one count in the order they were first reported.\n const fields = [...ids.entries()].map(([field, set]) => ({ field, n: set.size })).sort((a, b) => a.n - b.n);\n const parts = fields.map(({ field, n }, i) => `${field} on ${i === 0 ? plural(n, \"concept\") : String(n)}`);\n return ` kept the first language's value where languages differ: ${parts.join(\", \")}`;\n}\n\n/** The dropped, dropped-header, skipped and conflict lines, which a write and a dry run print alike. */\nfunction renderNotes(report: WriteReport): string[] {\n return [\n droppedLine(report),\n droppedHeadersLine(report),\n skippedLine(report),\n otherLanguagesLine(report),\n conflictsLine(report),\n ].filter(\n (line) => line !== undefined,\n );\n}\n\nfunction unchangedLine(report: WriteReport): string {\n return report.mode === \"in-place\" ? \"Nothing to write\" : `${report.target ?? \"\"} is up to date`;\n}\n\nexport function renderWritePretty(report: WriteReport): string {\n if (report.check) {\n return report.changes.length > 0 ? report.changes.map(changeLine).join(\"\\n\") : unchangedLine(report);\n }\n if (report.dryRun) {\n const changes = report.changes.length > 0 ? report.changes.map(changeLine) : [unchangedLine(report)];\n return [...changes, ...renderNotes(report)].join(\"\\n\");\n }\n if (report.mode === \"in-place\") {\n const wrote = report.changes.length === 0 ? \"Nothing to write\" : `Wrote ${plural(report.changes.length, \"file\")}`;\n return [wrote, ...renderNotes(report)].join(\"\\n\");\n }\n const each = report.shape === \"directory\" && report.format !== \"vale\" ? \", one file each\" : \"\";\n const written = report.terms - report.skipped.length - (report.otherLanguages?.terms.length ?? 0);\n const lines = [`Wrote ${plural(written, \"term\")} to ${report.target ?? \"\"}${each}`];\n if (report.format === \"vale\") lines.push(...valeLines(report));\n lines.push(...renderNotes(report));\n return lines.join(\"\\n\");\n}\n\n/** The notice `write -f vale` prints when no section of Vale's config uses the style, or there is no section. */\nexport function renderValeWiring(wiring: ValeWiring): string {\n return [\n wiring.addSection\n ? `notice: ${wiring.rootIni} has no section with BasedOnStyles. Add one that uses the Terms style:`\n : `notice: no section of ${wiring.rootIni} uses the Terms style. Add it to BasedOnStyles:`,\n ` [${wiring.section}]`,\n ` BasedOnStyles = ${wiring.styles.join(\", \")}`,\n ].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// formats\n\nexport function renderFormatsPretty(rows: readonly FormatRow[]): string {\n const formatWidth = Math.max(0, ...rows.map((r) => r.format.length)) + 3;\n const labelWidth = Math.max(0, ...rows.map((r) => r.label.length)) + 3;\n return rows\n .map((r) =>\n `${r.format.padEnd(formatWidth)}${r.label.padEnd(labelWidth)}${r.read ? \"read \" : \" \"}${r.write ? \"write\" : \"\"}`.trimEnd(),\n )\n .join(\"\\n\");\n}\n"],"mappings":"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","names":["lines","counts"]}
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
runRelocate,
|
|
23
23
|
runVendorSchema,
|
|
24
24
|
terminalConfirm
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-IN6DWNVE.js";
|
|
26
26
|
import {
|
|
27
27
|
LOCATION_EXTERNAL_SCHEMA,
|
|
28
28
|
LOCATION_PAGE_SCHEMA,
|
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
rowsToFindings,
|
|
43
43
|
runValidate,
|
|
44
44
|
splitList
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-QCCAHV6A.js";
|
|
46
46
|
import {
|
|
47
47
|
COMMON_FORMATS,
|
|
48
48
|
COMMON_FORMAT_LIST,
|
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
isQueryFormat,
|
|
59
59
|
isReportFormat,
|
|
60
60
|
render
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-X6WLCNKC.js";
|
|
62
62
|
import {
|
|
63
63
|
DocmetaError,
|
|
64
64
|
STDIN_LABEL,
|
|
@@ -68,7 +68,7 @@ import {
|
|
|
68
68
|
schemaLoadOptions,
|
|
69
69
|
supportedExtensions,
|
|
70
70
|
toJsonText
|
|
71
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-3XGGF5JW.js";
|
|
72
72
|
import {
|
|
73
73
|
fail
|
|
74
74
|
} from "./chunk-YEUYKR62.js";
|
|
@@ -85,7 +85,7 @@ import {
|
|
|
85
85
|
} from "./chunk-QCHVR4ZM.js";
|
|
86
86
|
import {
|
|
87
87
|
package_default
|
|
88
|
-
} from "./chunk-
|
|
88
|
+
} from "./chunk-KX5IYIOO.js";
|
|
89
89
|
import {
|
|
90
90
|
programName
|
|
91
91
|
} from "./chunk-OWBRDNRZ.js";
|
|
@@ -1523,4 +1523,4 @@ export {
|
|
|
1523
1523
|
parseQueryParams,
|
|
1524
1524
|
buildProgram
|
|
1525
1525
|
};
|
|
1526
|
-
//# sourceMappingURL=chunk-
|
|
1526
|
+
//# sourceMappingURL=chunk-5WME4CB6.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
newAvailability,
|
|
9
9
|
newReplay,
|
|
10
10
|
remapAvailability
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-XTAHZTES.js";
|
|
12
12
|
import {
|
|
13
13
|
makeRedactor
|
|
14
14
|
} from "./chunk-CU57HT2E.js";
|
|
@@ -718,6 +718,7 @@ var DEFAULTS = {
|
|
|
718
718
|
};
|
|
719
719
|
var MIN_TIMELINE_CHARS = 200;
|
|
720
720
|
var HEADER_TRUNCATED = "\n[... header truncated ...]";
|
|
721
|
+
var TURN_HEADING = "## The last turn";
|
|
721
722
|
var TIMELINE_SHELL = "\n\n## Timeline\n";
|
|
722
723
|
function renderTrace(trace, options = {}, plan) {
|
|
723
724
|
const { maxBlockChars, maxTotalChars, redact } = { ...DEFAULTS, ...options };
|
|
@@ -788,7 +789,12 @@ function renderTrace(trace, options = {}, plan) {
|
|
|
788
789
|
}
|
|
789
790
|
const lines = [];
|
|
790
791
|
let branch;
|
|
792
|
+
let turnAt;
|
|
791
793
|
for (const event of events) {
|
|
794
|
+
if (turnAt === void 0 && options.turnFrom !== void 0 && event.index >= options.turnFrom) {
|
|
795
|
+
turnAt = lines.length;
|
|
796
|
+
if (turnAt > 0) lines.push(TURN_HEADING);
|
|
797
|
+
}
|
|
792
798
|
const tag = event.branchId ? `:${label(event.branchId)}` : event.sidechain ? ":sidechain" : "";
|
|
793
799
|
let line;
|
|
794
800
|
switch (event.kind) {
|
|
@@ -820,11 +826,23 @@ function renderTrace(trace, options = {}, plan) {
|
|
|
820
826
|
lines.push(line);
|
|
821
827
|
}
|
|
822
828
|
if (branch !== void 0) lines.push(`[/subagent ${label(branch)}]`);
|
|
823
|
-
let timeline = scrub(lines.join("\n"));
|
|
824
829
|
const budget = Math.max(
|
|
825
830
|
maxTotalChars - header.length - TIMELINE_SHELL.length,
|
|
826
831
|
MIN_TIMELINE_CHARS
|
|
827
832
|
);
|
|
833
|
+
if (turnAt !== void 0 && turnAt > 0) {
|
|
834
|
+
let size = lines.reduce((n, l) => n + l.length + 1, -1);
|
|
835
|
+
let cut = 0;
|
|
836
|
+
while (cut < turnAt && size > budget) {
|
|
837
|
+
size -= (lines[cut]?.length ?? 0) + 1;
|
|
838
|
+
cut += 1;
|
|
839
|
+
}
|
|
840
|
+
if (cut > 0) {
|
|
841
|
+
options.onTruncated?.();
|
|
842
|
+
lines.splice(0, cut, `[... ${String(cut)} earlier lines left out ...]`);
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
let timeline = scrub(lines.join("\n"));
|
|
828
846
|
if (timeline.length > budget) {
|
|
829
847
|
options.onTruncated?.();
|
|
830
848
|
const marker = (omitted2) => `
|
|
@@ -846,4 +864,4 @@ export {
|
|
|
846
864
|
parseTraceContent,
|
|
847
865
|
renderTrace
|
|
848
866
|
};
|
|
849
|
-
//# sourceMappingURL=chunk-
|
|
867
|
+
//# sourceMappingURL=chunk-76I6I5N2.js.map
|