@hawkeyexl/manni 2.3.8 → 2.3.9
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/{chunk-L73SKPCW.js → chunk-HOLRWVCO.js} +2 -2
- package/dist/{chunk-EYD2RYKV.js → chunk-LC4H35XX.js} +11 -12
- package/dist/chunk-LC4H35XX.js.map +1 -0
- package/dist/{chunk-TIZE6GXU.js → chunk-YSI2VNKE.js} +14 -8
- package/dist/chunk-YSI2VNKE.js.map +1 -0
- package/dist/cli.js +105 -38
- package/dist/cli.js.map +1 -1
- package/dist/docmeta.js +2 -2
- package/dist/index.d.ts +18 -6
- package/dist/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-EYD2RYKV.js.map +0 -1
- package/dist/chunk-TIZE6GXU.js.map +0 -1
- /package/dist/{chunk-L73SKPCW.js.map → chunk-HOLRWVCO.js.map} +0 -0
package/dist/cli.js
CHANGED
|
@@ -7,15 +7,19 @@ import {
|
|
|
7
7
|
readStdin,
|
|
8
8
|
reportConfig,
|
|
9
9
|
splitList
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-HOLRWVCO.js";
|
|
11
11
|
import {
|
|
12
12
|
CiteError,
|
|
13
13
|
KeyError,
|
|
14
|
+
RULE_ID_PREFIX,
|
|
14
15
|
SEVERITIES,
|
|
15
16
|
SEVERITY_LIST,
|
|
16
17
|
asCiteError,
|
|
17
18
|
codeEndAt,
|
|
18
19
|
codeRegions,
|
|
20
|
+
errorSite,
|
|
21
|
+
findingMessage,
|
|
22
|
+
isCiteRule,
|
|
19
23
|
isSeverity,
|
|
20
24
|
meetsSeverity,
|
|
21
25
|
renderCheckGithub,
|
|
@@ -32,7 +36,7 @@ import {
|
|
|
32
36
|
shortPin,
|
|
33
37
|
shortSrc,
|
|
34
38
|
spellSource
|
|
35
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-YSI2VNKE.js";
|
|
36
40
|
import {
|
|
37
41
|
COMMON_FORMAT_LIST,
|
|
38
42
|
OMITTED_WHEN_CLEAN,
|
|
@@ -59,7 +63,6 @@ import {
|
|
|
59
63
|
palette,
|
|
60
64
|
programName,
|
|
61
65
|
readConfigFile,
|
|
62
|
-
render,
|
|
63
66
|
renderJunit,
|
|
64
67
|
renderSarif,
|
|
65
68
|
resolveBaselineRequest,
|
|
@@ -71,7 +74,7 @@ import {
|
|
|
71
74
|
splitPageArgument,
|
|
72
75
|
terminalConfirm,
|
|
73
76
|
valeConfigPath
|
|
74
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-LC4H35XX.js";
|
|
75
78
|
|
|
76
79
|
// src/cli.ts
|
|
77
80
|
import { Command as Command5 } from "commander";
|
|
@@ -762,7 +765,7 @@ var A11Y_FORMAT_LIST = A11Y_FORMATS.join(" | ");
|
|
|
762
765
|
function isA11yFormat(value) {
|
|
763
766
|
return A11Y_FORMATS.includes(value);
|
|
764
767
|
}
|
|
765
|
-
function
|
|
768
|
+
function render(format, run, opts) {
|
|
766
769
|
switch (format) {
|
|
767
770
|
case "pretty":
|
|
768
771
|
return renderPretty(run, opts);
|
|
@@ -971,7 +974,7 @@ function buildProgram2() {
|
|
|
971
974
|
{ analyzer: createPlaywrightAnalyzer(), onProgress: progress.listener }
|
|
972
975
|
);
|
|
973
976
|
const color = resolveColor(parent, process.stdout);
|
|
974
|
-
const text2 =
|
|
977
|
+
const text2 = render(format, run, { color, quiet: Boolean(options.quiet) });
|
|
975
978
|
if (text2.length > 0 || format !== "github") {
|
|
976
979
|
process.stdout.write(`${text2}
|
|
977
980
|
`);
|
|
@@ -987,7 +990,71 @@ function buildProgram2() {
|
|
|
987
990
|
|
|
988
991
|
// src/cite/cli.ts
|
|
989
992
|
import { Command as Command2, Option } from "commander";
|
|
993
|
+
|
|
994
|
+
// src/cite/reporters/sarif.ts
|
|
995
|
+
var INFORMATION_URI = "https://hawkeyexl.github.io/manni/cite/";
|
|
996
|
+
var RULES_URI = "https://hawkeyexl.github.io/manni/cite/reference/citations/";
|
|
997
|
+
var RULE_DESCRIPTIONS = {
|
|
998
|
+
"source-moved": "The cited source lines moved to one other place in the file.",
|
|
999
|
+
"source-moved-ambiguous": "The cited source lines now match at several places in the file.",
|
|
1000
|
+
"source-changed": "The cited source lines changed since the citation pinned them.",
|
|
1001
|
+
"source-never-true": "The pin never matched the source at the recorded commit.",
|
|
1002
|
+
"source-missing": "The cited source file is not tracked under the root, or cannot be decrypted.",
|
|
1003
|
+
"claim-moved": "The cited sentence moved to other lines of the page.",
|
|
1004
|
+
"claim-moved-ambiguous": "The cited sentence now appears at several places on the page.",
|
|
1005
|
+
"claim-changed": "The cited sentence was edited since the citation pinned it.",
|
|
1006
|
+
"marker-orphan": "A marker names an id no citation has.",
|
|
1007
|
+
"marker-invalid": "A marker is malformed, or the page has too many markers.",
|
|
1008
|
+
"marker-repeated": "Two markers name the same citation id.",
|
|
1009
|
+
"anchor-invalid": "A citation's anchor cannot work.",
|
|
1010
|
+
"entry-invalid": "A citation entry is malformed.",
|
|
1011
|
+
"quote-drift": "A quoted block no longer reproduces its source."
|
|
1012
|
+
};
|
|
1013
|
+
var ENTRY_LABEL = /^(?:\(root\)|\/citations\/\d+) /;
|
|
1014
|
+
function withFindingMessages(run) {
|
|
1015
|
+
return run.results.map((result) => {
|
|
1016
|
+
const page = run.pages.find((p) => p.file === result.file);
|
|
1017
|
+
if (page === void 0) return result;
|
|
1018
|
+
const errors = result.errors.map((error) => {
|
|
1019
|
+
const finding = page.findings.find(
|
|
1020
|
+
(f) => f.rule === error.keyword && (f.index === void 0 ? "" : `/citations/${String(f.index)}`) === error.instancePath && f.message === error.message && (errorSite(f).line ?? null) === (error.line ?? null)
|
|
1021
|
+
);
|
|
1022
|
+
return finding === void 0 ? error : { ...error, message: findingMessage(finding) };
|
|
1023
|
+
});
|
|
1024
|
+
return { ...result, errors };
|
|
1025
|
+
});
|
|
1026
|
+
}
|
|
1027
|
+
function describe(rule) {
|
|
1028
|
+
const name = rule.id.slice(RULE_ID_PREFIX.length + 1);
|
|
1029
|
+
if (!isCiteRule(name)) return rule;
|
|
1030
|
+
return { id: rule.id, shortDescription: { text: RULE_DESCRIPTIONS[name] }, helpUri: `${RULES_URI}#${name}` };
|
|
1031
|
+
}
|
|
1032
|
+
function renderCheckSarif(run, opts = {}) {
|
|
1033
|
+
const log = JSON.parse(
|
|
1034
|
+
renderSarif(withFindingMessages(run), {
|
|
1035
|
+
frame: run.frame,
|
|
1036
|
+
...opts.onNotice === void 0 ? {} : { onNotice: opts.onNotice }
|
|
1037
|
+
})
|
|
1038
|
+
);
|
|
1039
|
+
for (const sarifRun of log.runs) {
|
|
1040
|
+
sarifRun.tool.driver.informationUri = INFORMATION_URI;
|
|
1041
|
+
sarifRun.tool.driver.rules = sarifRun.tool.driver.rules.map(describe);
|
|
1042
|
+
for (const result of sarifRun.results) result.message.text = result.message.text.replace(ENTRY_LABEL, "");
|
|
1043
|
+
}
|
|
1044
|
+
return JSON.stringify(log, null, 2);
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
// src/cite/reporters/junit.ts
|
|
990
1048
|
var JUNIT_CLASSNAME = "manni.cite";
|
|
1049
|
+
var MESSAGE_LABEL = new RegExp(`message="${ENTRY_LABEL.source.replace(/^\^/, "")}`, "g");
|
|
1050
|
+
function renderCheckJunit(run) {
|
|
1051
|
+
return renderJunit(withFindingMessages(run), { frame: run.frame, classname: JUNIT_CLASSNAME }).replace(
|
|
1052
|
+
MESSAGE_LABEL,
|
|
1053
|
+
'message="'
|
|
1054
|
+
);
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
// src/cite/cli.ts
|
|
991
1058
|
var UPDATE_FORMATS = ["pretty", "json"];
|
|
992
1059
|
function colorFor(command, isTTY, env) {
|
|
993
1060
|
const noColor = colorOwner(command).opts().color === false;
|
|
@@ -1122,12 +1189,12 @@ function buildProgram3() {
|
|
|
1122
1189
|
case "github":
|
|
1123
1190
|
text2 = renderCheckGithub(run);
|
|
1124
1191
|
break;
|
|
1125
|
-
|
|
1126
|
-
text2 =
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1192
|
+
case "sarif":
|
|
1193
|
+
text2 = renderCheckSarif(run, { onNotice: notice });
|
|
1194
|
+
break;
|
|
1195
|
+
case "junit":
|
|
1196
|
+
text2 = renderCheckJunit(run);
|
|
1197
|
+
break;
|
|
1131
1198
|
}
|
|
1132
1199
|
if (text2.length > 0 || !OMITTED_WHEN_CLEAN.has(format)) {
|
|
1133
1200
|
process.stdout.write(`${text2}
|
|
@@ -1694,7 +1761,7 @@ async function resolveTermRun(opts) {
|
|
|
1694
1761
|
}
|
|
1695
1762
|
|
|
1696
1763
|
// src/term/core/severity.ts
|
|
1697
|
-
var
|
|
1764
|
+
var RULE_ID_PREFIX2 = "manni:term";
|
|
1698
1765
|
var DEFAULT_SEVERITY = {
|
|
1699
1766
|
"undefined-term": "error",
|
|
1700
1767
|
"duplicate-id": "error",
|
|
@@ -1708,10 +1775,10 @@ var DEFAULT_SEVERITY = {
|
|
|
1708
1775
|
"unused-term": "notice"
|
|
1709
1776
|
};
|
|
1710
1777
|
function ruleId(rule) {
|
|
1711
|
-
return `${
|
|
1778
|
+
return `${RULE_ID_PREFIX2}/${rule}`;
|
|
1712
1779
|
}
|
|
1713
1780
|
function proseRuleId(check) {
|
|
1714
|
-
return `${
|
|
1781
|
+
return `${RULE_ID_PREFIX2}/prose/${check}`;
|
|
1715
1782
|
}
|
|
1716
1783
|
function isTermRule2(value) {
|
|
1717
1784
|
return TERM_RULES.includes(value);
|
|
@@ -1928,11 +1995,11 @@ var FINDING_FORMATS = ["pretty", "json", "github", "sarif", "junit"];
|
|
|
1928
1995
|
var JUNIT_CLASSNAME2 = "manni.term";
|
|
1929
1996
|
var LINE_REFERENCE = /:\d+\b/g;
|
|
1930
1997
|
function toFieldError(finding) {
|
|
1931
|
-
const keyword = finding.ruleId.startsWith(`${
|
|
1998
|
+
const keyword = finding.ruleId.startsWith(`${RULE_ID_PREFIX2}/`) ? finding.ruleId.slice(RULE_ID_PREFIX2.length + 1) : finding.ruleId;
|
|
1932
1999
|
const { field } = finding;
|
|
1933
2000
|
const subject = [finding.id ?? "", field ?? "", finding.message.replace(LINE_REFERENCE, "")].join("\0");
|
|
1934
2001
|
const error = {
|
|
1935
|
-
schema:
|
|
2002
|
+
schema: RULE_ID_PREFIX2,
|
|
1936
2003
|
instancePath: field === void 0 ? "" : `/${field}`,
|
|
1937
2004
|
message: finding.message,
|
|
1938
2005
|
keyword,
|
|
@@ -1957,7 +2024,7 @@ function toResults(set, findings) {
|
|
|
1957
2024
|
}
|
|
1958
2025
|
const results = [...byFile.keys()].sort().map((file) => {
|
|
1959
2026
|
const errors = byFile.get(file) ?? [];
|
|
1960
|
-
return { file, format: "term", ok: !errors.some(isErrorSeverity), schemas: [
|
|
2027
|
+
return { file, format: "term", ok: !errors.some(isErrorSeverity), schemas: [RULE_ID_PREFIX2], errors };
|
|
1961
2028
|
});
|
|
1962
2029
|
return { results, origin };
|
|
1963
2030
|
}
|
|
@@ -4429,9 +4496,9 @@ var INTERCHANGE_LABELS = {
|
|
|
4429
4496
|
};
|
|
4430
4497
|
function rendered(writers, format, construct) {
|
|
4431
4498
|
return writers.some((writer) => {
|
|
4432
|
-
const
|
|
4433
|
-
if (
|
|
4434
|
-
return writer.shapes.some((shape) =>
|
|
4499
|
+
const render2 = DOCUMENT_RENDERS[writer.format];
|
|
4500
|
+
if (render2?.input !== format) return false;
|
|
4501
|
+
return writer.shapes.some((shape) => render2.shapes[shape] === construct);
|
|
4435
4502
|
});
|
|
4436
4503
|
}
|
|
4437
4504
|
function listFormats(opts = {}) {
|
|
@@ -4868,14 +4935,14 @@ async function runWrite(opts) {
|
|
|
4868
4935
|
const shape = format === "vale" || /[\\/]$/.test(opts.out ?? "") || isDirectory(targetPath) ? "directory" : "file";
|
|
4869
4936
|
const target = { path: targetPath, shape };
|
|
4870
4937
|
const existing = await existingFor(target);
|
|
4871
|
-
let
|
|
4938
|
+
let render2;
|
|
4872
4939
|
try {
|
|
4873
|
-
|
|
4940
|
+
render2 = writer.render(set.terms, target, { existing });
|
|
4874
4941
|
} catch (error) {
|
|
4875
4942
|
if (error instanceof TermError) throw relativized(error, [...existing.keys(), targetPath], cwd);
|
|
4876
4943
|
throw error;
|
|
4877
4944
|
}
|
|
4878
|
-
const changes = await applyChanges(
|
|
4945
|
+
const changes = await applyChanges(render2.files, render2.removals, existing, cwd, !check && !dryRun);
|
|
4879
4946
|
const shown = format === "vale" ? displayPath(join4(targetPath, STYLE2), cwd) : opts.out ?? displayPath(targetPath, cwd);
|
|
4880
4947
|
return {
|
|
4881
4948
|
mode: "render",
|
|
@@ -4884,11 +4951,11 @@ async function runWrite(opts) {
|
|
|
4884
4951
|
target: shown,
|
|
4885
4952
|
terms: set.terms.length,
|
|
4886
4953
|
changes,
|
|
4887
|
-
files:
|
|
4954
|
+
files: render2.files.map((file) => ({ path: displayPath(file.path, cwd), content: file.content })),
|
|
4888
4955
|
// A Vale style holds designations only, by design; its dropped definitions are not news.
|
|
4889
|
-
dropped: format === "vale" ? [] :
|
|
4956
|
+
dropped: format === "vale" ? [] : render2.dropped,
|
|
4890
4957
|
droppedFrom: droppedFrom(format, shape, readers),
|
|
4891
|
-
skipped:
|
|
4958
|
+
skipped: render2.skipped,
|
|
4892
4959
|
check,
|
|
4893
4960
|
dryRun,
|
|
4894
4961
|
...wiring === void 0 ? {} : { wiring }
|
|
@@ -5034,9 +5101,9 @@ function renderFormatsJson(rows) {
|
|
|
5034
5101
|
}
|
|
5035
5102
|
|
|
5036
5103
|
// src/term/reporters/sarif.ts
|
|
5037
|
-
var
|
|
5038
|
-
var
|
|
5039
|
-
var
|
|
5104
|
+
var INFORMATION_URI2 = "https://hawkeyexl.github.io/manni/term/";
|
|
5105
|
+
var RULES_URI2 = "https://hawkeyexl.github.io/manni/term/reference/rules/";
|
|
5106
|
+
var RULE_DESCRIPTIONS2 = {
|
|
5040
5107
|
"undefined-term": "A page's concepts: names a label no entry claims as its preferred label.",
|
|
5041
5108
|
"duplicate-id": "Two entries share an id.",
|
|
5042
5109
|
"label-collision": "Two entries claim the same preferred label, ignoring case.",
|
|
@@ -5048,16 +5115,16 @@ var RULE_DESCRIPTIONS = {
|
|
|
5048
5115
|
"abstract-too-long": "An abstract is longer than term.abstractMaxLength.",
|
|
5049
5116
|
"unused-term": "No page's concepts: names the entry's preferred label."
|
|
5050
5117
|
};
|
|
5051
|
-
var PROSE_PREFIX = `${
|
|
5118
|
+
var PROSE_PREFIX = `${RULE_ID_PREFIX2}/prose/`;
|
|
5052
5119
|
var FIELD_LABEL = new RegExp(`^(?:\\(root\\)|/(?:${TERM_FIELDS.join("|")})) `);
|
|
5053
|
-
function
|
|
5120
|
+
function describe2(rule) {
|
|
5054
5121
|
if (rule.id.startsWith(PROSE_PREFIX)) {
|
|
5055
5122
|
const check = rule.id.slice(PROSE_PREFIX.length);
|
|
5056
5123
|
return { id: rule.id, shortDescription: { text: `Vale's ${check} rule flagged the prose of an entry's field.` } };
|
|
5057
5124
|
}
|
|
5058
|
-
const name = rule.id.slice(
|
|
5125
|
+
const name = rule.id.slice(RULE_ID_PREFIX2.length + 1);
|
|
5059
5126
|
if (!isTermRule2(name)) return rule;
|
|
5060
|
-
return { id: rule.id, shortDescription: { text:
|
|
5127
|
+
return { id: rule.id, shortDescription: { text: RULE_DESCRIPTIONS2[name] }, helpUri: `${RULES_URI2}#${name}` };
|
|
5061
5128
|
}
|
|
5062
5129
|
function renderFindingsSarif(report, opts = {}) {
|
|
5063
5130
|
const log = JSON.parse(
|
|
@@ -5067,18 +5134,18 @@ function renderFindingsSarif(report, opts = {}) {
|
|
|
5067
5134
|
})
|
|
5068
5135
|
);
|
|
5069
5136
|
for (const run of log.runs) {
|
|
5070
|
-
run.tool.driver.informationUri =
|
|
5071
|
-
run.tool.driver.rules = run.tool.driver.rules.map(
|
|
5137
|
+
run.tool.driver.informationUri = INFORMATION_URI2;
|
|
5138
|
+
run.tool.driver.rules = run.tool.driver.rules.map(describe2);
|
|
5072
5139
|
for (const result of run.results) result.message.text = result.message.text.replace(FIELD_LABEL, "");
|
|
5073
5140
|
}
|
|
5074
5141
|
return JSON.stringify(log, null, 2);
|
|
5075
5142
|
}
|
|
5076
5143
|
|
|
5077
5144
|
// src/term/reporters/junit.ts
|
|
5078
|
-
var
|
|
5145
|
+
var MESSAGE_LABEL2 = new RegExp(`message="${FIELD_LABEL.source.slice(1)}`, "g");
|
|
5079
5146
|
function renderFindingsJunit(report) {
|
|
5080
5147
|
return renderJunit(report.results, { frame: report.frame, classname: JUNIT_CLASSNAME2 }).replace(
|
|
5081
|
-
|
|
5148
|
+
MESSAGE_LABEL2,
|
|
5082
5149
|
'message="'
|
|
5083
5150
|
);
|
|
5084
5151
|
}
|