@hawkeyexl/manni 4.12.4 → 4.13.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-UHLVBMYM.js → batch-OB2FXT47.js} +12 -12
- package/dist/{build-4RPXBSAO.js → build-4BL24BG3.js} +13 -13
- package/dist/{calibrate-POL5DCJ6.js → calibrate-AEDJ7N7G.js} +13 -13
- package/dist/{capture-I7ZYG7NZ.js → capture-TP3P4YNL.js} +12 -12
- package/dist/{check-6TEG5TM6.js → check-5IYH42KS.js} +14 -14
- package/dist/{check-3O2PZ7TZ.js → check-LU5YC3L4.js} +12 -12
- package/dist/{check-V7JUDAPS.js → check-NBN2YK2J.js} +13 -13
- package/dist/{check-DGOUTC3V.js → check-S55MH66H.js} +11 -11
- package/dist/{chunk-6KONPVHQ.js → chunk-3BVDFQ6Y.js} +2 -2
- package/dist/{chunk-JAPSZ44X.js → chunk-3HUCB4Z3.js} +4 -4
- package/dist/{chunk-LWMB7JRE.js → chunk-3O6U4ICM.js} +2 -2
- package/dist/{chunk-3QUCVYNX.js → chunk-3XGTNN3M.js} +3 -3
- package/dist/{chunk-AATCO43N.js → chunk-52WO7ESI.js} +3 -3
- package/dist/{chunk-TBAMBLF3.js → chunk-6ZFJWUUH.js} +132 -15
- package/dist/chunk-6ZFJWUUH.js.map +1 -0
- package/dist/{chunk-7TVIFCGT.js → chunk-7JPL3CUC.js} +2 -2
- package/dist/{chunk-RLPWXF5R.js → chunk-7RNONVHI.js} +6 -6
- package/dist/{chunk-WWKXPPN5.js → chunk-BMBAAPGN.js} +3 -3
- package/dist/{chunk-BGRP44SX.js → chunk-BQXY76JB.js} +4 -4
- package/dist/{chunk-N5JSOJY6.js → chunk-CODWRUAD.js} +2 -2
- package/dist/{chunk-5OKSFNUV.js → chunk-DQOM3DEU.js} +5 -5
- package/dist/{chunk-QUG53QGZ.js → chunk-E6BVUDGY.js} +3 -3
- package/dist/{chunk-PSPNIAOP.js → chunk-EQ7E6HMG.js} +8 -8
- package/dist/{chunk-7JUIJ7Q5.js → chunk-GWI6JPTT.js} +3 -3
- package/dist/{chunk-VXU75N5R.js → chunk-HIEGOW7X.js} +3 -3
- package/dist/{chunk-GNUZ37L2.js → chunk-HKTGHLBA.js} +2 -2
- package/dist/{chunk-GNUZ37L2.js.map → chunk-HKTGHLBA.js.map} +1 -1
- package/dist/{chunk-Y4TDIUG6.js → chunk-HY6ROJTH.js} +2 -2
- package/dist/{chunk-PP22XDW2.js → chunk-IGQMBHFY.js} +6 -6
- package/dist/{chunk-J4ZOTZII.js → chunk-J5NOWIJ3.js} +6 -6
- package/dist/{chunk-XEYS3KAZ.js → chunk-JUL2PRQN.js} +4 -4
- package/dist/{chunk-NLELGEKL.js → chunk-KE2F7QES.js} +5 -5
- package/dist/{chunk-EBZ4QKKX.js → chunk-LNGSE7V2.js} +2 -2
- package/dist/{chunk-EU4HDGG4.js → chunk-LSFXNAHU.js} +7 -7
- package/dist/{chunk-SSDSV52B.js → chunk-N6A6DJUO.js} +4 -4
- package/dist/{chunk-Z42MO7SO.js → chunk-NSAW7U42.js} +2 -2
- package/dist/{chunk-KRKNZ3IV.js → chunk-NTEYYYKL.js} +34 -10
- package/dist/chunk-NTEYYYKL.js.map +1 -0
- package/dist/{chunk-7QH2ZI4F.js → chunk-NWUXRV6N.js} +52 -27
- package/dist/chunk-NWUXRV6N.js.map +1 -0
- package/dist/{chunk-QWE3WLV4.js → chunk-OBXCJZ6R.js} +5 -5
- package/dist/{chunk-VFL3ERMI.js → chunk-OREHJQNN.js} +2 -2
- package/dist/{chunk-DTXLFSAB.js → chunk-OUAH7XF2.js} +2 -2
- package/dist/{chunk-ZCJUSQM7.js → chunk-OYIWF3B2.js} +10 -10
- package/dist/{chunk-HP43LH7E.js → chunk-PA7CMQGD.js} +2 -2
- package/dist/{chunk-5NNPEPVM.js → chunk-PCGBXHSE.js} +3 -3
- package/dist/{chunk-TR2XFZPR.js → chunk-QKT67PFE.js} +3 -3
- package/dist/{chunk-YGFIQ6Y5.js → chunk-SCLXVTFZ.js} +1 -1
- package/dist/{chunk-YGFIQ6Y5.js.map → chunk-SCLXVTFZ.js.map} +1 -1
- package/dist/{chunk-PNUM6RHR.js → chunk-TDCOKKMI.js} +3 -3
- package/dist/{chunk-X4GQ4HPY.js → chunk-TQ3W6RKG.js} +2 -2
- package/dist/{chunk-EX6E2P6Z.js → chunk-ULDV2LUI.js} +2 -2
- package/dist/{chunk-XP4RNQZL.js → chunk-UQMLCIRX.js} +242 -15
- package/dist/chunk-UQMLCIRX.js.map +1 -0
- package/dist/{chunk-KQRYW4DN.js → chunk-VNYXK7TM.js} +3 -3
- package/dist/{chunk-3FXPIZXL.js → chunk-VOXOBUTX.js} +2 -2
- package/dist/{chunk-4IW6FAUN.js → chunk-VYBYUQIP.js} +7 -7
- package/dist/{chunk-4TGIGVFO.js → chunk-WVXCN5DS.js} +4 -4
- package/dist/{chunk-J67EOBN3.js → chunk-X4MPUD4B.js} +3 -3
- package/dist/{chunk-W7EZJPRX.js → chunk-Y6M4JFKG.js} +3 -3
- package/dist/{chunk-U4SY2TJS.js → chunk-YZ4TJLZQ.js} +7 -7
- package/dist/{cli-USPQURPP.js → cli-4JHQCPHU.js} +2 -2
- package/dist/{cli-UL2IFH3R.js → cli-7DETHSNW.js} +15 -15
- package/dist/{cli-4ANSKDPD.js → cli-AZKWTCFV.js} +9 -9
- package/dist/{cli-2OQKCKRD.js → cli-BW5VOFOZ.js} +8 -8
- package/dist/{cli-5QGP6R63.js → cli-DGFLJ2DD.js} +2 -2
- package/dist/{cli-SDTXHLCA.js → cli-ECVT4YXR.js} +16 -16
- package/dist/{cli-IE3CYYHA.js → cli-G66X7YMP.js} +54 -15
- package/dist/cli-G66X7YMP.js.map +1 -0
- package/dist/{cli-2Q5FODAX.js → cli-H5LVGOVT.js} +31 -31
- package/dist/{cli-RQRMZKKM.js → cli-KYTCJYXK.js} +16 -16
- package/dist/{cli-SGSS6FXE.js → cli-L5B2RVV2.js} +19 -19
- package/dist/{cli-RQSCBJJY.js → cli-RP5E7XHC.js} +13 -13
- package/dist/cli.js +14 -14
- package/dist/docmeta.js +8 -8
- package/dist/{github-PBIYRH5S.js → github-DJQ4MWNZ.js} +13 -13
- package/dist/{github-RJG2MAWB.js → github-UWTDM2J2.js} +11 -11
- package/dist/index.d.ts +76 -4
- package/dist/index.js +47 -37
- package/dist/index.js.map +1 -1
- package/dist/{json-PQURAHQ5.js → json-LCVPMEAM.js} +11 -11
- package/dist/{labels-FMLO2URZ.js → labels-OQXBVM4A.js} +10 -10
- package/dist/{lint-N2CY66JX.js → lint-O7XRHKFP.js} +13 -13
- package/dist/{list-VBFNFEXV.js → list-OOOCLOAL.js} +11 -11
- package/dist/{list-OMHTVFDY.js → list-OYQ5XPN2.js} +11 -11
- package/dist/{page-X3HYSH6D.js → page-XPX5XJZE.js} +10 -10
- package/dist/{prepare-IQMB262G.js → prepare-VMBIQYAM.js} +11 -11
- package/dist/{pretty-22PXIEOV.js → pretty-KG6TMOEI.js} +12 -12
- package/dist/{pretty-K5BOCKBB.js → pretty-KSTZMBUF.js} +11 -11
- package/dist/{reporters-324OWH36.js → reporters-AQU4W3KY.js} +4 -4
- package/dist/{reporters-5LIYYE6M.js → reporters-FBYLPKD4.js} +12 -12
- package/dist/{run-4EKG6EMI.js → run-KUGTU3TT.js} +11 -11
- package/dist/{term-2ADSKGZW.js → term-SI3VM6EM.js} +15 -15
- package/dist/{validate-LRYUEZLJ.js → validate-NQO7TFSN.js} +5 -5
- package/package.json +1 -1
- package/plugin/manni/.claude-plugin/plugin.json +1 -1
- package/plugin/manni/skills/fix/SKILL.md +4 -2
- package/schemas/lint/template.json +6 -1
- package/templates/lint/tgdp/concept.yaml +27 -13
- package/templates/lint/tgdp/how-to.yaml +35 -21
- package/templates/lint/tgdp/readme.yaml +69 -25
- package/templates/lint/tgdp/reference.yaml +44 -31
- package/templates/lint/tgdp/release-notes.yaml +48 -19
- package/templates/lint/tgdp/troubleshooting.yaml +45 -31
- package/templates/lint/tgdp/tutorial.yaml +35 -19
- package/dist/chunk-7QH2ZI4F.js.map +0 -1
- package/dist/chunk-KRKNZ3IV.js.map +0 -1
- package/dist/chunk-TBAMBLF3.js.map +0 -1
- package/dist/chunk-XP4RNQZL.js.map +0 -1
- package/dist/cli-IE3CYYHA.js.map +0 -1
- /package/dist/{batch-UHLVBMYM.js.map → batch-OB2FXT47.js.map} +0 -0
- /package/dist/{build-4RPXBSAO.js.map → build-4BL24BG3.js.map} +0 -0
- /package/dist/{calibrate-POL5DCJ6.js.map → calibrate-AEDJ7N7G.js.map} +0 -0
- /package/dist/{capture-I7ZYG7NZ.js.map → capture-TP3P4YNL.js.map} +0 -0
- /package/dist/{check-3O2PZ7TZ.js.map → check-5IYH42KS.js.map} +0 -0
- /package/dist/{check-6TEG5TM6.js.map → check-LU5YC3L4.js.map} +0 -0
- /package/dist/{check-V7JUDAPS.js.map → check-NBN2YK2J.js.map} +0 -0
- /package/dist/{check-DGOUTC3V.js.map → check-S55MH66H.js.map} +0 -0
- /package/dist/{chunk-6KONPVHQ.js.map → chunk-3BVDFQ6Y.js.map} +0 -0
- /package/dist/{chunk-JAPSZ44X.js.map → chunk-3HUCB4Z3.js.map} +0 -0
- /package/dist/{chunk-LWMB7JRE.js.map → chunk-3O6U4ICM.js.map} +0 -0
- /package/dist/{chunk-3QUCVYNX.js.map → chunk-3XGTNN3M.js.map} +0 -0
- /package/dist/{chunk-AATCO43N.js.map → chunk-52WO7ESI.js.map} +0 -0
- /package/dist/{chunk-7TVIFCGT.js.map → chunk-7JPL3CUC.js.map} +0 -0
- /package/dist/{chunk-RLPWXF5R.js.map → chunk-7RNONVHI.js.map} +0 -0
- /package/dist/{chunk-WWKXPPN5.js.map → chunk-BMBAAPGN.js.map} +0 -0
- /package/dist/{chunk-BGRP44SX.js.map → chunk-BQXY76JB.js.map} +0 -0
- /package/dist/{chunk-N5JSOJY6.js.map → chunk-CODWRUAD.js.map} +0 -0
- /package/dist/{chunk-5OKSFNUV.js.map → chunk-DQOM3DEU.js.map} +0 -0
- /package/dist/{chunk-QUG53QGZ.js.map → chunk-E6BVUDGY.js.map} +0 -0
- /package/dist/{chunk-PSPNIAOP.js.map → chunk-EQ7E6HMG.js.map} +0 -0
- /package/dist/{chunk-7JUIJ7Q5.js.map → chunk-GWI6JPTT.js.map} +0 -0
- /package/dist/{chunk-VXU75N5R.js.map → chunk-HIEGOW7X.js.map} +0 -0
- /package/dist/{chunk-Y4TDIUG6.js.map → chunk-HY6ROJTH.js.map} +0 -0
- /package/dist/{chunk-PP22XDW2.js.map → chunk-IGQMBHFY.js.map} +0 -0
- /package/dist/{chunk-J4ZOTZII.js.map → chunk-J5NOWIJ3.js.map} +0 -0
- /package/dist/{chunk-XEYS3KAZ.js.map → chunk-JUL2PRQN.js.map} +0 -0
- /package/dist/{chunk-NLELGEKL.js.map → chunk-KE2F7QES.js.map} +0 -0
- /package/dist/{chunk-EBZ4QKKX.js.map → chunk-LNGSE7V2.js.map} +0 -0
- /package/dist/{chunk-EU4HDGG4.js.map → chunk-LSFXNAHU.js.map} +0 -0
- /package/dist/{chunk-SSDSV52B.js.map → chunk-N6A6DJUO.js.map} +0 -0
- /package/dist/{chunk-Z42MO7SO.js.map → chunk-NSAW7U42.js.map} +0 -0
- /package/dist/{chunk-QWE3WLV4.js.map → chunk-OBXCJZ6R.js.map} +0 -0
- /package/dist/{chunk-VFL3ERMI.js.map → chunk-OREHJQNN.js.map} +0 -0
- /package/dist/{chunk-DTXLFSAB.js.map → chunk-OUAH7XF2.js.map} +0 -0
- /package/dist/{chunk-ZCJUSQM7.js.map → chunk-OYIWF3B2.js.map} +0 -0
- /package/dist/{chunk-HP43LH7E.js.map → chunk-PA7CMQGD.js.map} +0 -0
- /package/dist/{chunk-5NNPEPVM.js.map → chunk-PCGBXHSE.js.map} +0 -0
- /package/dist/{chunk-TR2XFZPR.js.map → chunk-QKT67PFE.js.map} +0 -0
- /package/dist/{chunk-PNUM6RHR.js.map → chunk-TDCOKKMI.js.map} +0 -0
- /package/dist/{chunk-X4GQ4HPY.js.map → chunk-TQ3W6RKG.js.map} +0 -0
- /package/dist/{chunk-EX6E2P6Z.js.map → chunk-ULDV2LUI.js.map} +0 -0
- /package/dist/{chunk-KQRYW4DN.js.map → chunk-VNYXK7TM.js.map} +0 -0
- /package/dist/{chunk-3FXPIZXL.js.map → chunk-VOXOBUTX.js.map} +0 -0
- /package/dist/{chunk-4IW6FAUN.js.map → chunk-VYBYUQIP.js.map} +0 -0
- /package/dist/{chunk-4TGIGVFO.js.map → chunk-WVXCN5DS.js.map} +0 -0
- /package/dist/{chunk-J67EOBN3.js.map → chunk-X4MPUD4B.js.map} +0 -0
- /package/dist/{chunk-W7EZJPRX.js.map → chunk-Y6M4JFKG.js.map} +0 -0
- /package/dist/{chunk-U4SY2TJS.js.map → chunk-YZ4TJLZQ.js.map} +0 -0
- /package/dist/{cli-USPQURPP.js.map → cli-4JHQCPHU.js.map} +0 -0
- /package/dist/{cli-UL2IFH3R.js.map → cli-7DETHSNW.js.map} +0 -0
- /package/dist/{cli-4ANSKDPD.js.map → cli-AZKWTCFV.js.map} +0 -0
- /package/dist/{cli-2OQKCKRD.js.map → cli-BW5VOFOZ.js.map} +0 -0
- /package/dist/{cli-5QGP6R63.js.map → cli-DGFLJ2DD.js.map} +0 -0
- /package/dist/{cli-SDTXHLCA.js.map → cli-ECVT4YXR.js.map} +0 -0
- /package/dist/{cli-2Q5FODAX.js.map → cli-H5LVGOVT.js.map} +0 -0
- /package/dist/{cli-RQRMZKKM.js.map → cli-KYTCJYXK.js.map} +0 -0
- /package/dist/{cli-SGSS6FXE.js.map → cli-L5B2RVV2.js.map} +0 -0
- /package/dist/{cli-RQSCBJJY.js.map → cli-RP5E7XHC.js.map} +0 -0
- /package/dist/{github-PBIYRH5S.js.map → github-DJQ4MWNZ.js.map} +0 -0
- /package/dist/{github-RJG2MAWB.js.map → github-UWTDM2J2.js.map} +0 -0
- /package/dist/{json-PQURAHQ5.js.map → json-LCVPMEAM.js.map} +0 -0
- /package/dist/{labels-FMLO2URZ.js.map → labels-OQXBVM4A.js.map} +0 -0
- /package/dist/{lint-N2CY66JX.js.map → lint-O7XRHKFP.js.map} +0 -0
- /package/dist/{list-OMHTVFDY.js.map → list-OOOCLOAL.js.map} +0 -0
- /package/dist/{list-VBFNFEXV.js.map → list-OYQ5XPN2.js.map} +0 -0
- /package/dist/{page-X3HYSH6D.js.map → page-XPX5XJZE.js.map} +0 -0
- /package/dist/{prepare-IQMB262G.js.map → prepare-VMBIQYAM.js.map} +0 -0
- /package/dist/{pretty-22PXIEOV.js.map → pretty-KG6TMOEI.js.map} +0 -0
- /package/dist/{pretty-K5BOCKBB.js.map → pretty-KSTZMBUF.js.map} +0 -0
- /package/dist/{reporters-324OWH36.js.map → reporters-AQU4W3KY.js.map} +0 -0
- /package/dist/{reporters-5LIYYE6M.js.map → reporters-FBYLPKD4.js.map} +0 -0
- /package/dist/{run-4EKG6EMI.js.map → run-KUGTU3TT.js.map} +0 -0
- /package/dist/{term-2ADSKGZW.js.map → term-SI3VM6EM.js.map} +0 -0
- /package/dist/{validate-LRYUEZLJ.js.map → validate-NQO7TFSN.js.map} +0 -0
|
@@ -19,22 +19,22 @@ import {
|
|
|
19
19
|
} from "./chunk-SE4JN5XN.js";
|
|
20
20
|
import {
|
|
21
21
|
declaredAt
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-HIEGOW7X.js";
|
|
23
23
|
import {
|
|
24
24
|
metaProvenanceEntries
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-OUAH7XF2.js";
|
|
26
26
|
import {
|
|
27
27
|
familyMarks,
|
|
28
28
|
loadExternalMetadata,
|
|
29
29
|
memberOf,
|
|
30
30
|
mergeWithMarks,
|
|
31
31
|
provenanceEntries
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-LNGSE7V2.js";
|
|
33
33
|
import {
|
|
34
34
|
__default,
|
|
35
35
|
classifyRef,
|
|
36
36
|
extractFrontmatter
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-HY6ROJTH.js";
|
|
38
38
|
import {
|
|
39
39
|
findConfigFileSync,
|
|
40
40
|
ownsKey,
|
|
@@ -2960,4 +2960,4 @@ export {
|
|
|
2960
2960
|
applySelection,
|
|
2961
2961
|
runEvals
|
|
2962
2962
|
};
|
|
2963
|
-
//# sourceMappingURL=chunk-
|
|
2963
|
+
//# sourceMappingURL=chunk-OBXCJZ6R.js.map
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
resolvePages,
|
|
9
9
|
runConfigOptions,
|
|
10
10
|
withExternalMetadata
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-OBXCJZ6R.js";
|
|
12
12
|
import {
|
|
13
13
|
SUMMARY_FORMATS,
|
|
14
14
|
parseFormat
|
|
@@ -93,4 +93,4 @@ export {
|
|
|
93
93
|
runList,
|
|
94
94
|
renderList
|
|
95
95
|
};
|
|
96
|
-
//# sourceMappingURL=chunk-
|
|
96
|
+
//# sourceMappingURL=chunk-OREHJQNN.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
offerPrompt,
|
|
6
6
|
planRelocation,
|
|
7
7
|
relocationOffers
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-LNGSE7V2.js";
|
|
9
9
|
|
|
10
10
|
// src/meta/core/location-writes.ts
|
|
11
11
|
import { LineCounter, isMap, isNode, isScalar, parseDocument } from "yaml";
|
|
@@ -161,4 +161,4 @@ export {
|
|
|
161
161
|
mergeMetaProvenance,
|
|
162
162
|
metaProvenanceEntries
|
|
163
163
|
};
|
|
164
|
-
//# sourceMappingURL=chunk-
|
|
164
|
+
//# sourceMappingURL=chunk-OUAH7XF2.js.map
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
spliceEntryField,
|
|
17
17
|
unifiedDiff,
|
|
18
18
|
withClaimLines
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-YZ4TJLZQ.js";
|
|
20
20
|
import {
|
|
21
21
|
CITATIONS_KEY,
|
|
22
22
|
CITE_SECTION,
|
|
@@ -54,10 +54,10 @@ import {
|
|
|
54
54
|
stripMarkers,
|
|
55
55
|
twoManifestsRefusal,
|
|
56
56
|
urlManifestRefusal
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-DQOM3DEU.js";
|
|
58
58
|
import {
|
|
59
59
|
renderCheckGithub
|
|
60
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-VNYXK7TM.js";
|
|
61
61
|
import {
|
|
62
62
|
refusalLine,
|
|
63
63
|
removalLine,
|
|
@@ -65,7 +65,7 @@ import {
|
|
|
65
65
|
renderRemovePretty,
|
|
66
66
|
renderUpdatePretty,
|
|
67
67
|
rewriteLine
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-GWI6JPTT.js";
|
|
69
69
|
import {
|
|
70
70
|
blockMatches,
|
|
71
71
|
claimEnd,
|
|
@@ -94,7 +94,7 @@ import {
|
|
|
94
94
|
toValidationResult,
|
|
95
95
|
unitAt,
|
|
96
96
|
unitText
|
|
97
|
-
} from "./chunk-
|
|
97
|
+
} from "./chunk-WVXCN5DS.js";
|
|
98
98
|
import {
|
|
99
99
|
CITE_RULES,
|
|
100
100
|
CiteError,
|
|
@@ -134,7 +134,7 @@ import {
|
|
|
134
134
|
spellSource,
|
|
135
135
|
statementForms,
|
|
136
136
|
validateEntry
|
|
137
|
-
} from "./chunk-
|
|
137
|
+
} from "./chunk-X4MPUD4B.js";
|
|
138
138
|
import {
|
|
139
139
|
renderCheckJson,
|
|
140
140
|
renderRemoveJson,
|
|
@@ -143,7 +143,7 @@ import {
|
|
|
143
143
|
import {
|
|
144
144
|
reencryptData,
|
|
145
145
|
reencryptMetadata
|
|
146
|
-
} from "./chunk-
|
|
146
|
+
} from "./chunk-HIEGOW7X.js";
|
|
147
147
|
import {
|
|
148
148
|
ENCRYPTION_KEY_ENV,
|
|
149
149
|
MAX_RANGE_LINES,
|
|
@@ -170,7 +170,7 @@ import {
|
|
|
170
170
|
toBodyLines,
|
|
171
171
|
toFileLines,
|
|
172
172
|
writeEncryptionKey
|
|
173
|
-
} from "./chunk-
|
|
173
|
+
} from "./chunk-LNGSE7V2.js";
|
|
174
174
|
import {
|
|
175
175
|
LEGACY_CONFIG_NAMES,
|
|
176
176
|
STDIN_TOKEN,
|
|
@@ -181,7 +181,7 @@ import {
|
|
|
181
181
|
resolveTargetSet,
|
|
182
182
|
supportedExtensions,
|
|
183
183
|
writeFileAtomic
|
|
184
|
-
} from "./chunk-
|
|
184
|
+
} from "./chunk-HY6ROJTH.js";
|
|
185
185
|
import {
|
|
186
186
|
findConfigFile,
|
|
187
187
|
findFamilyConfigFile,
|
|
@@ -931,4 +931,4 @@ export {
|
|
|
931
931
|
runKeyRotate,
|
|
932
932
|
runKeySet
|
|
933
933
|
};
|
|
934
|
-
//# sourceMappingURL=chunk-
|
|
934
|
+
//# sourceMappingURL=chunk-OYIWF3B2.js.map
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
isMultilingual,
|
|
8
8
|
languageOf,
|
|
9
9
|
plural
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-3XGTNN3M.js";
|
|
11
11
|
import {
|
|
12
12
|
palette
|
|
13
13
|
} from "./chunk-RNVYGWIC.js";
|
|
@@ -336,4 +336,4 @@ export {
|
|
|
336
336
|
renderValeWiring,
|
|
337
337
|
renderFormatsPretty
|
|
338
338
|
};
|
|
339
|
-
//# sourceMappingURL=chunk-
|
|
339
|
+
//# sourceMappingURL=chunk-PA7CMQGD.js.map
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
listInTree,
|
|
11
11
|
resolveArtifacts,
|
|
12
12
|
safeRead
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-E6BVUDGY.js";
|
|
14
14
|
import {
|
|
15
15
|
makeRedactor
|
|
16
16
|
} from "./chunk-CU57HT2E.js";
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
} from "./chunk-4TSWU2SU.js";
|
|
20
20
|
import {
|
|
21
21
|
extractFrontmatter
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-HY6ROJTH.js";
|
|
23
23
|
|
|
24
24
|
// src/tracevals/rules/turn.ts
|
|
25
25
|
var INJECTED = /<(system-reminder|task-notification|ci-monitor-event|local-command-stdout|local-command-stderr|local-command-caveat)>[\s\S]*?<\/\1>/g;
|
|
@@ -671,4 +671,4 @@ export {
|
|
|
671
671
|
resolveTurnSources,
|
|
672
672
|
pathKey
|
|
673
673
|
};
|
|
674
|
-
//# sourceMappingURL=chunk-
|
|
674
|
+
//# sourceMappingURL=chunk-PCGBXHSE.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
discoverArtifacts
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-3O6U4ICM.js";
|
|
5
5
|
import {
|
|
6
6
|
parseHookPayload,
|
|
7
7
|
readStdin
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
relPosix,
|
|
13
13
|
sha256Hex,
|
|
14
14
|
writeManifest
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-E6BVUDGY.js";
|
|
16
16
|
import {
|
|
17
17
|
loadConfig
|
|
18
18
|
} from "./chunk-OKMTUAWO.js";
|
|
@@ -212,4 +212,4 @@ export {
|
|
|
212
212
|
runCapture,
|
|
213
213
|
renderCapture
|
|
214
214
|
};
|
|
215
|
-
//# sourceMappingURL=chunk-
|
|
215
|
+
//# sourceMappingURL=chunk-QKT67PFE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lint/types.ts"],"sourcesContent":["/**\n * The contract every other module is written against.\n *\n * Two shapes matter. `DocumentTree` is what a parser owes the rest of the tool:\n * a nested section tree with real source positions, in a vocabulary that has\n * nothing to do with Markdown. `Finding` is what the tool owes its caller.\n * Everything between the two - matching, rules, reporting - touches neither\n * mdast nor Asciidoctor nor parse5, which is what lets a new input format be\n * one file plus a line in the parser registry.\n */\n\nimport { ToolError } from \"../shared/errors.js\";\nimport type { Severity } from \"../shared/severity.js\";\n\n/**\n * Operational/usage failure. Exits 2; never used for lint findings.\n *\n * Extends the umbrella's `ToolError`, which is what the shared bin runner\n * matches on; the subclass stays so this tool's tests and library callers can\n * match on it by name. Named for its domain, as `A11yError`, `CiteError` and\n * `KeyError` are.\n */\nexport class LintError extends ToolError {\n constructor(message: string) {\n super(message);\n this.name = \"LintError\";\n }\n}\n\n/** A point in a source file. Line and column are 1-based, offset 0-based. */\nexport interface Point {\n line: number;\n column: number;\n offset: number;\n}\n\n/** A half-open source span, `start` inclusive and `end` exclusive. */\nexport interface Position {\n start: Point;\n end: Point;\n}\n\n/**\n * Content kinds a section can hold, named generically so a rule written once\n * works on every format. Each parser maps its own AST onto these: mdast\n * `paragraph`/`code`/`list`, Asciidoctor `paragraph`/`listing`/`ulist`|`olist`,\n * HTML `<p>`/`<pre>`/`<ul>` - all three onto `paragraph`/`codeBlock`/`list`.\n *\n * The vocabulary is wider than any one parser emits today. `table`,\n * `admonition`, `image`, `blockquote`, `definitionList`, and `element` are\n * declared here, and in each `DocumentParser.kinds`, only once a parser\n * actually produces them - see `src/lint/parsers/index.ts`.\n */\nexport type ContentKind =\n | \"paragraph\"\n | \"codeBlock\"\n | \"list\"\n | \"listItem\"\n | \"table\"\n | \"tableRow\"\n | \"tableCell\"\n | \"admonition\"\n | \"image\"\n | \"blockquote\"\n | \"definitionList\"\n | \"definitionItem\"\n | \"element\";\n\nexport interface ContentNodeBase {\n kind: ContentKind;\n position: Position;\n /** Plain-text rendering, used by pattern rules. */\n text: string;\n}\n\nexport interface ParagraphNode extends ContentNodeBase {\n kind: \"paragraph\";\n}\n\nexport interface CodeNode extends ContentNodeBase {\n kind: \"codeBlock\";\n /** Language, when the format carries one. */\n language?: string;\n /** The info-string tail after the language, when the format carries one. */\n fenceInfo?: string;\n}\n\nexport interface ListItemNode {\n kind: \"listItem\";\n position: Position;\n text: string;\n /** Nested content, so item-level paragraph/code/list rules can run. */\n children: ContentNode[];\n}\n\nexport interface ListNode extends ContentNodeBase {\n kind: \"list\";\n ordered: boolean;\n items: ListItemNode[];\n}\n\nexport interface TableCellNode extends ContentNodeBase {\n kind: \"tableCell\";\n children: ContentNode[];\n}\n\nexport interface TableRowNode extends ContentNodeBase {\n kind: \"tableRow\";\n header: boolean;\n children: TableCellNode[];\n}\n\nexport interface TableNode extends ContentNodeBase {\n kind: \"table\";\n children: TableRowNode[];\n}\n\n/**\n * A callout, and the flavor the source gave it.\n *\n * `variant` is optional because not every format names one this vocabulary\n * has. reStructuredText has `hint`, `attention`, `error` and a generic\n * `admonition` directive, and a bare HTML `<aside>` says nothing at all. Those\n * produce an admonition with no variant rather than an invented equivalence:\n * mapping `hint` onto `tip` would make `variant: tip` pass on a page that\n * never said tip. A `variant:` rule reports such a node as a mismatch, and a\n * plain count rule still counts it.\n */\nexport interface AdmonitionNode extends ContentNodeBase {\n kind: \"admonition\";\n variant?: \"note\" | \"tip\" | \"important\" | \"caution\" | \"warning\" | \"danger\";\n children: ContentNode[];\n}\n\nexport interface ImageNode extends ContentNodeBase {\n kind: \"image\";\n url: string;\n alt: string;\n title?: string;\n}\n\nexport interface BlockquoteNode extends ContentNodeBase {\n kind: \"blockquote\";\n children: ContentNode[];\n}\n\nexport interface DefinitionItemNode {\n kind: \"definitionItem\";\n position: Position;\n text: string;\n term: string;\n definition: ContentNode[];\n}\n\nexport interface DefinitionListNode extends ContentNodeBase {\n kind: \"definitionList\";\n children: DefinitionItemNode[];\n}\n\n/**\n * A named wrapper - an MDX/JSX component today, and where HTML and DITA may\n * eventually anchor a custom element. Its children are its own content, never\n * the enclosing section's: a rule reading a section's `children` must not see\n * inside an `<Element>` it did not ask about.\n */\nexport interface ElementNode extends ContentNodeBase {\n kind: \"element\";\n name: string;\n attributes?: Record<string, string | true>;\n children: ContentNode[];\n}\n\nexport type ContentNode =\n | ParagraphNode\n | CodeNode\n | ListNode\n | TableNode\n | AdmonitionNode\n | ImageNode\n | BlockquoteNode\n | DefinitionListNode\n | ElementNode;\n\n/**\n * One section of a document, demarcated by a heading.\n *\n * `slug`/`title`/`level`/`order`/`parentSlug` intentionally match manni graph's\n * `Section` (dockg/src/types.ts), so its graph can be built from this tree.\n *\n * `children` is in document order and is the single source of truth: the\n * paragraph/codeBlock/list counts every rule needs are queries over it, not\n * separately maintained arrays.\n */\nexport interface SectionNode {\n /** Slug of the heading, disambiguated across the document (`install-1`). */\n slug: string;\n /** Heading text, with inline markup flattened. */\n title: string;\n /** Heading level, 1-6. 0 for the implicit lead section before any heading. */\n level: number;\n /** 1-based position among siblings under the same parent. */\n order: number;\n /** Slug of the enclosing section, or null at the top level. */\n parentSlug: string | null;\n /** Span of the title itself. Null for the implicit lead section. */\n titlePosition: Position | null;\n /**\n * The anchor the source itself gives this section, verbatim - an HTML `id`,\n * a DITA `@id`, an AsciiDoc `[[id]]`, a reST `.. _label:` - when it gives\n * one. `slug` stays the slugged title either way: a link written against\n * the source's own id resolves through this, and nothing lint matches on\n * reads it.\n */\n id?: string;\n /**\n * Set on the level-1 section `withMetadataTitle` made from a metadata\n * `title`, so a consumer can tell it from a heading the author wrote. Its\n * `titlePosition` is not enough: a reST title read back as docinfo shares\n * its span with the frontmatter, written or not.\n */\n synthetic?: true;\n /** Span of the whole section: its heading through the last node before the next sibling heading. */\n position: Position;\n /** Direct content, in document order, excluding anything owned by a subsection. */\n children: ContentNode[];\n /** Nested sections, in document order. */\n sections: SectionNode[];\n}\n\n/** What a parser returns for one file. */\nexport interface DocumentTree {\n /** Name of the parser that produced this (`markdown`, `asciidoc`, ...). */\n format: string;\n /** Path the content came from, for error messages. */\n filePath: string;\n /** Raw frontmatter/metadata values, or null when the file carries none. */\n frontmatter: Record<string, unknown> | null;\n /** Span of the frontmatter block, for anchoring findings about it. */\n frontmatterPosition: Position | null;\n /** Top-level sections, in document order. */\n sections: SectionNode[];\n /**\n * Link targets exactly as the source wrote them, in document order, for\n * `manni graph`. No lint rule reads them. Each parser decides what counts:\n * an anchor to elsewhere does, and a stylesheet, a heading's own permalink,\n * or a key reference resolved only at build time does not.\n */\n links: { target: string; position: Position }[];\n}\n\n/**\n * A parser for one input format.\n *\n * Shaped after docmeta's `MetadataExtractor` so the two registries read the\n * same way. A format is registered only when its parser reads it, so every\n * registered format is one the tool reads, and an extension no parser claims is\n * skipped by name rather than parsed as Markdown.\n */\nexport interface DocumentParser {\n /** Stable name, also used as `DocumentTree.format`. */\n name: string;\n /** Human-readable label for `manni lint tools`. */\n label: string;\n /**\n * The content kinds this parser actually emits today. A capability\n * declaration, not the full `ContentKind` vocabulary: a kind absent here is\n * one no rule will ever see from this parser's trees, whatever the format\n * could in principle represent.\n */\n kinds: ContentKind[];\n /** Lowercase file extensions this parser handles, incl. dot (e.g. \".md\"). */\n extensions: string[];\n /**\n * Extensions safe to collect from a directory walk. Defaults to\n * `extensions`.\n *\n * The two differ when an extension is a generic container rather than a\n * documentation format. `.xml` is the case: this parser can read a DocBook\n * or DITA document named explicitly, but a docs tree also contains\n * `pom.xml`, `sitemap.xml`, and `.csproj`, and sweeping those in turns a\n * clean run into a failure about files the user never asked to lint.\n */\n walkExtensions?: string[];\n /** Parse raw file content into the generic tree. */\n parse(content: string, filePath: string): DocumentTree;\n}\n\n/**\n * How much a finding weighs, on the one scale every manni tool speaks\n * (`src/shared/severity.ts`): `notice | warning | error`.\n *\n * Almost every structural finding is an `error`, since a template either\n * describes a document or it does not. `unsupported_content_kind` is the\n * exception and is a `warning`: the rule never ran, so the page may still be\n * fine, and a warning never moves the exit code.\n *\n * The scale is the family's and not this tool's private pair, because a flag\n * or config key two domains both have carries the same name *and* the same\n * values. Re-exported so `lint.Severity` names the same type a caller already\n * has.\n */\nexport type { Severity };\n\n/**\n * One structural violation.\n *\n * The field set is pinned by manni docevals' tool adapter, which reads\n * `{ type, heading, message, position }` off the JSON reporter. Additions are\n * safe; renames are not.\n */\nexport interface Finding {\n /** Machine-readable rule id, e.g. `missing_section`. */\n type: string;\n /** Heading of the section the finding is anchored to, if any. */\n heading: string | null;\n message: string;\n position: Position;\n severity: Severity;\n}\n\n/**\n * Why a file was not linted.\n *\n * `unreadable` is the one that is not about the document: the file was found,\n * claimed by a parser, and then could not be opened - a denied permission, a\n * symlink loop, a page a doc build moved between the walk and the read. It is a\n * skip rather than a finding because nothing was checked, and calling it a\n * finding would report the docs as wrong when the filesystem was.\n */\nexport type SkipReason = \"no-template\" | \"unsupported-format\" | \"unreadable\";\n\n/** Result of linting one file. */\nexport interface FileResult {\n file: string;\n /** True when the file was linted and produced no findings. */\n success: boolean;\n findings: Finding[];\n /** Template id/ref applied, or null when skipped. */\n template: string | null;\n /** Set when the file was skipped rather than linted. */\n skipped?: SkipReason;\n}\n"],"mappings":";;;;;;AAsBO,IAAM,YAAN,cAAwB,UAAU;AAAA,EACvC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/lint/types.ts"],"sourcesContent":["/**\n * The contract every other module is written against.\n *\n * Two shapes matter. `DocumentTree` is what a parser owes the rest of the tool:\n * a nested section tree with real source positions, in a vocabulary that has\n * nothing to do with Markdown. `Finding` is what the tool owes its caller.\n * Everything between the two - matching, rules, reporting - touches neither\n * mdast nor Asciidoctor nor parse5, which is what lets a new input format be\n * one file plus a line in the parser registry.\n */\n\nimport { ToolError } from \"../shared/errors.js\";\nimport type { Severity } from \"../shared/severity.js\";\n\n/**\n * Operational/usage failure. Exits 2; never used for lint findings.\n *\n * Extends the umbrella's `ToolError`, which is what the shared bin runner\n * matches on; the subclass stays so this tool's tests and library callers can\n * match on it by name. Named for its domain, as `A11yError`, `CiteError` and\n * `KeyError` are.\n */\nexport class LintError extends ToolError {\n constructor(message: string) {\n super(message);\n this.name = \"LintError\";\n }\n}\n\n/** A point in a source file. Line and column are 1-based, offset 0-based. */\nexport interface Point {\n line: number;\n column: number;\n offset: number;\n}\n\n/** A half-open source span, `start` inclusive and `end` exclusive. */\nexport interface Position {\n start: Point;\n end: Point;\n}\n\n/**\n * Content kinds a section can hold, named generically so a rule written once\n * works on every format. Each parser maps its own AST onto these: mdast\n * `paragraph`/`code`/`list`, Asciidoctor `paragraph`/`listing`/`ulist`|`olist`,\n * HTML `<p>`/`<pre>`/`<ul>` - all three onto `paragraph`/`codeBlock`/`list`.\n *\n * The vocabulary is wider than any one parser emits today. `table`,\n * `admonition`, `image`, `blockquote`, `definitionList`, and `element` are\n * declared here, and in each `DocumentParser.kinds`, only once a parser\n * actually produces them - see `src/lint/parsers/index.ts`.\n */\nexport type ContentKind =\n | \"paragraph\"\n | \"codeBlock\"\n | \"list\"\n | \"listItem\"\n | \"table\"\n | \"tableRow\"\n | \"tableCell\"\n | \"admonition\"\n | \"image\"\n | \"blockquote\"\n | \"definitionList\"\n | \"definitionItem\"\n | \"element\";\n\nexport interface ContentNodeBase {\n kind: ContentKind;\n position: Position;\n /** Plain-text rendering, used by pattern rules. */\n text: string;\n}\n\nexport interface ParagraphNode extends ContentNodeBase {\n kind: \"paragraph\";\n}\n\nexport interface CodeNode extends ContentNodeBase {\n kind: \"codeBlock\";\n /** Language, when the format carries one. */\n language?: string;\n /** The info-string tail after the language, when the format carries one. */\n fenceInfo?: string;\n}\n\nexport interface ListItemNode {\n kind: \"listItem\";\n position: Position;\n text: string;\n /** Nested content, so item-level paragraph/code/list rules can run. */\n children: ContentNode[];\n}\n\nexport interface ListNode extends ContentNodeBase {\n kind: \"list\";\n ordered: boolean;\n items: ListItemNode[];\n}\n\nexport interface TableCellNode extends ContentNodeBase {\n kind: \"tableCell\";\n children: ContentNode[];\n}\n\nexport interface TableRowNode extends ContentNodeBase {\n kind: \"tableRow\";\n header: boolean;\n children: TableCellNode[];\n}\n\nexport interface TableNode extends ContentNodeBase {\n kind: \"table\";\n children: TableRowNode[];\n}\n\n/**\n * A callout, and the flavor the source gave it.\n *\n * `variant` is optional because not every format names one this vocabulary\n * has. reStructuredText has `hint`, `attention`, `error` and a generic\n * `admonition` directive, and a bare HTML `<aside>` says nothing at all. Those\n * produce an admonition with no variant rather than an invented equivalence:\n * mapping `hint` onto `tip` would make `variant: tip` pass on a page that\n * never said tip. A `variant:` rule reports such a node as a mismatch, and a\n * plain count rule still counts it.\n */\nexport interface AdmonitionNode extends ContentNodeBase {\n kind: \"admonition\";\n variant?: \"note\" | \"tip\" | \"important\" | \"caution\" | \"warning\" | \"danger\";\n children: ContentNode[];\n}\n\nexport interface ImageNode extends ContentNodeBase {\n kind: \"image\";\n url: string;\n alt: string;\n title?: string;\n}\n\nexport interface BlockquoteNode extends ContentNodeBase {\n kind: \"blockquote\";\n children: ContentNode[];\n}\n\nexport interface DefinitionItemNode {\n kind: \"definitionItem\";\n position: Position;\n text: string;\n term: string;\n definition: ContentNode[];\n}\n\nexport interface DefinitionListNode extends ContentNodeBase {\n kind: \"definitionList\";\n children: DefinitionItemNode[];\n}\n\n/**\n * A named wrapper - an MDX/JSX component today, and where HTML and DITA may\n * eventually anchor a custom element. Its children are its own content, never\n * the enclosing section's: a rule reading a section's `children` must not see\n * inside an `<Element>` it did not ask about.\n */\nexport interface ElementNode extends ContentNodeBase {\n kind: \"element\";\n name: string;\n attributes?: Record<string, string | true>;\n children: ContentNode[];\n}\n\nexport type ContentNode =\n | ParagraphNode\n | CodeNode\n | ListNode\n | TableNode\n | AdmonitionNode\n | ImageNode\n | BlockquoteNode\n | DefinitionListNode\n | ElementNode;\n\n/**\n * One section of a document, demarcated by a heading.\n *\n * `slug`/`title`/`level`/`order`/`parentSlug` intentionally match manni graph's\n * `Section` (dockg/src/types.ts), so its graph can be built from this tree.\n *\n * `children` is in document order and is the single source of truth: the\n * paragraph/codeBlock/list counts every rule needs are queries over it, not\n * separately maintained arrays.\n */\nexport interface SectionNode {\n /** Slug of the heading, disambiguated across the document (`install-1`). */\n slug: string;\n /** Heading text, with inline markup flattened. */\n title: string;\n /** Heading level, 1-6. 0 for the implicit lead section before any heading. */\n level: number;\n /** 1-based position among siblings under the same parent. */\n order: number;\n /** Slug of the enclosing section, or null at the top level. */\n parentSlug: string | null;\n /** Span of the title itself. Null for the implicit lead section. */\n titlePosition: Position | null;\n /**\n * The anchor the source itself gives this section, verbatim - an HTML `id`,\n * a DITA `@id`, an AsciiDoc `[[id]]`, a reST `.. _label:` - when it gives\n * one. `slug` stays the slugged title either way: a link written against\n * the source's own id resolves through this, and nothing lint matches on\n * reads it.\n */\n id?: string;\n /**\n * Set on the level-1 section `withMetadataTitle` made from a metadata\n * `title`, so a consumer can tell it from a heading the author wrote. Its\n * `titlePosition` is not enough: a reST title read back as docinfo shares\n * its span with the frontmatter, written or not.\n */\n synthetic?: true;\n /** Span of the whole section: its heading through the last node before the next sibling heading. */\n position: Position;\n /** Direct content, in document order, excluding anything owned by a subsection. */\n children: ContentNode[];\n /** Nested sections, in document order. */\n sections: SectionNode[];\n}\n\n/** What a parser returns for one file. */\nexport interface DocumentTree {\n /** Name of the parser that produced this (`markdown`, `asciidoc`, ...). */\n format: string;\n /** Path the content came from, for error messages. */\n filePath: string;\n /** Raw frontmatter/metadata values, or null when the file carries none. */\n frontmatter: Record<string, unknown> | null;\n /** Span of the frontmatter block, for anchoring findings about it. */\n frontmatterPosition: Position | null;\n /** Top-level sections, in document order. */\n sections: SectionNode[];\n /**\n * Link targets exactly as the source wrote them, in document order, for\n * `manni graph`. No lint rule reads them. Each parser decides what counts:\n * an anchor to elsewhere does, and a stylesheet, a heading's own permalink,\n * or a key reference resolved only at build time does not.\n */\n links: { target: string; position: Position }[];\n}\n\n/**\n * A parser for one input format.\n *\n * Shaped after docmeta's `MetadataExtractor` so the two registries read the\n * same way. A format is registered only when its parser reads it, so every\n * registered format is one the tool reads, and an extension no parser claims is\n * skipped by name rather than parsed as Markdown.\n */\nexport interface DocumentParser {\n /** Stable name, also used as `DocumentTree.format`. */\n name: string;\n /** Human-readable label for `manni lint tools`. */\n label: string;\n /**\n * The content kinds this parser actually emits today. A capability\n * declaration, not the full `ContentKind` vocabulary: a kind absent here is\n * one no rule will ever see from this parser's trees, whatever the format\n * could in principle represent.\n */\n kinds: ContentKind[];\n /** Lowercase file extensions this parser handles, incl. dot (e.g. \".md\"). */\n extensions: string[];\n /**\n * Extensions safe to collect from a directory walk. Defaults to\n * `extensions`.\n *\n * The two differ when an extension is a generic container rather than a\n * documentation format. `.xml` is the case: this parser can read a DocBook\n * or DITA document named explicitly, but a docs tree also contains\n * `pom.xml`, `sitemap.xml`, and `.csproj`, and sweeping those in turns a\n * clean run into a failure about files the user never asked to lint.\n */\n walkExtensions?: string[];\n /** Parse raw file content into the generic tree. */\n parse(content: string, filePath: string): DocumentTree;\n}\n\n/**\n * How much a finding weighs, on the one scale every manni tool speaks\n * (`src/shared/severity.ts`): `notice | warning | error`.\n *\n * Almost every structural finding is an `error`, since a template either\n * describes a document or it does not. `unsupported_content_kind` is the\n * exception and is a `warning`: the rule never ran, so the page may still be\n * fine, and a warning never moves the exit code.\n *\n * The scale is the family's and not this tool's private pair, because a flag\n * or config key two domains both have carries the same name *and* the same\n * values. Re-exported so `lint.Severity` names the same type a caller already\n * has.\n */\nexport type { Severity };\n\n/**\n * One structural violation.\n *\n * The field set is pinned by manni docevals' tool adapter, which reads\n * `{ type, heading, message, position }` off the JSON reporter. Additions are\n * safe; renames are not.\n */\nexport interface Finding {\n /** Machine-readable rule id, e.g. `missing_section`. */\n type: string;\n /** Heading of the section the finding is anchored to, if any. */\n heading: string | null;\n message: string;\n position: Position;\n severity: Severity;\n /**\n * The template that judged the page and the rule this finding is about, so\n * an author reads what the section is for beside what is wrong with it.\n * `null` when no template stands behind the finding: a parse failure, an\n * unknown doctype, a broken template, or a tool other than manni.\n */\n template?: FindingTemplate | null;\n}\n\n/** What a template asks for, as a finding carries it. */\nexport interface FindingTemplate {\n /** The template's ref, as `manni lint templates` lists it and `--template` takes it. */\n id: string;\n /** The rule's `id`. `null` for a rule without one, the template itself, or no rule at all. */\n rule: string | null;\n /** The rule's `description`, or `null` when it has none. */\n description: string | null;\n /** The template's `guide`, after `extends`, or `null`. */\n guide: string | null;\n}\n\n/**\n * Why a file was not linted.\n *\n * `unreadable` is the one that is not about the document: the file was found,\n * claimed by a parser, and then could not be opened - a denied permission, a\n * symlink loop, a page a doc build moved between the walk and the read. It is a\n * skip rather than a finding because nothing was checked, and calling it a\n * finding would report the docs as wrong when the filesystem was.\n */\nexport type SkipReason = \"no-template\" | \"unsupported-format\" | \"unreadable\";\n\n/** Result of linting one file. */\nexport interface FileResult {\n file: string;\n /** True when the file was linted and produced no findings. */\n success: boolean;\n findings: Finding[];\n /** Template id/ref applied, or null when skipped. */\n template: string | null;\n /** Set when the file was skipped rather than linted. */\n skipped?: SkipReason;\n}\n"],"mappings":";;;;;;AAsBO,IAAM,YAAN,cAAwB,UAAU;AAAA,EACvC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;","names":[]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
LintError
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SCLXVTFZ.js";
|
|
5
5
|
import {
|
|
6
6
|
extractFrontmatter,
|
|
7
7
|
extractorForExtension,
|
|
8
8
|
locateFrontmatter
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-HY6ROJTH.js";
|
|
10
10
|
import {
|
|
11
11
|
errorMessage
|
|
12
12
|
} from "./chunk-G3T47CFV.js";
|
|
@@ -3247,4 +3247,4 @@ export {
|
|
|
3247
3247
|
unsupportedFormatMessage,
|
|
3248
3248
|
listFormats
|
|
3249
3249
|
};
|
|
3250
|
-
//# sourceMappingURL=chunk-
|
|
3250
|
+
//# sourceMappingURL=chunk-TDCOKKMI.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
pathKey
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PCGBXHSE.js";
|
|
5
5
|
import {
|
|
6
6
|
DEFAULT_CAPTURE_DIR,
|
|
7
7
|
makeRedactor
|
|
@@ -230,4 +230,4 @@ export {
|
|
|
230
230
|
rollup,
|
|
231
231
|
writeLedger
|
|
232
232
|
};
|
|
233
|
-
//# sourceMappingURL=chunk-
|
|
233
|
+
//# sourceMappingURL=chunk-TQ3W6RKG.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
TERM_FIELDS,
|
|
4
4
|
displayPath
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-3XGTNN3M.js";
|
|
6
6
|
|
|
7
7
|
// src/term/reporters/json.ts
|
|
8
8
|
function termEntry(term) {
|
|
@@ -49,4 +49,4 @@ export {
|
|
|
49
49
|
renderFindingsJson,
|
|
50
50
|
renderFormatsJson
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
52
|
+
//# sourceMappingURL=chunk-ULDV2LUI.js.map
|
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
LINT_JOBS,
|
|
4
|
+
classifyRef,
|
|
4
5
|
listBuiltins,
|
|
6
|
+
loadResolvedTemplate,
|
|
7
|
+
loadTemplate,
|
|
5
8
|
loadTemplateFile,
|
|
6
9
|
resolveLintRun,
|
|
7
10
|
resolveStructureTool
|
|
8
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-NWUXRV6N.js";
|
|
9
12
|
import {
|
|
10
13
|
parserByName,
|
|
11
14
|
parserForExtension,
|
|
12
15
|
unsupportedFormatMessage
|
|
13
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-TDCOKKMI.js";
|
|
14
17
|
import {
|
|
15
18
|
BLOCK_KINDS,
|
|
16
|
-
BLOCK_KIND_NODE
|
|
17
|
-
|
|
19
|
+
BLOCK_KIND_NODE,
|
|
20
|
+
occurrenceRange,
|
|
21
|
+
quoteList
|
|
22
|
+
} from "./chunk-6ZFJWUUH.js";
|
|
18
23
|
import {
|
|
19
24
|
LintError
|
|
20
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-SCLXVTFZ.js";
|
|
21
26
|
import {
|
|
22
27
|
writeTextAtomic
|
|
23
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-LNGSE7V2.js";
|
|
29
|
+
import {
|
|
30
|
+
palette
|
|
31
|
+
} from "./chunk-RNVYGWIC.js";
|
|
24
32
|
import {
|
|
25
33
|
ToolError,
|
|
26
34
|
errorMessage
|
|
@@ -149,12 +157,15 @@ import { mkdir, readFile } from "node:fs/promises";
|
|
|
149
157
|
import { basename, dirname, extname, resolve } from "node:path";
|
|
150
158
|
var BUILTIN_SOURCE = "builtin";
|
|
151
159
|
async function runTemplates(opts = {}) {
|
|
152
|
-
const templates =
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
160
|
+
const templates = await Promise.all(
|
|
161
|
+
listBuiltins().map(async (builtin) => ({
|
|
162
|
+
id: builtin.id,
|
|
163
|
+
title: builtin.title,
|
|
164
|
+
types: builtin.types,
|
|
165
|
+
source: BUILTIN_SOURCE,
|
|
166
|
+
guide: (await loadTemplate(builtin.id)).guide ?? null
|
|
167
|
+
}))
|
|
168
|
+
);
|
|
158
169
|
const paths = opts.templates == null ? [] : Array.isArray(opts.templates) ? opts.templates : [opts.templates];
|
|
159
170
|
for (const path of paths) {
|
|
160
171
|
const file = await loadTemplateFile(path);
|
|
@@ -163,7 +174,8 @@ async function runTemplates(opts = {}) {
|
|
|
163
174
|
id,
|
|
164
175
|
title: "",
|
|
165
176
|
types: template.types ?? [],
|
|
166
|
-
source: path
|
|
177
|
+
source: path,
|
|
178
|
+
guide: template.guide ?? null
|
|
167
179
|
});
|
|
168
180
|
}
|
|
169
181
|
}
|
|
@@ -248,6 +260,21 @@ async function runTemplatesInfer(opts) {
|
|
|
248
260
|
await writeTextAtomic(absOut, text);
|
|
249
261
|
return { name, file, text, written: opts.out };
|
|
250
262
|
}
|
|
263
|
+
async function runTemplateShow(opts) {
|
|
264
|
+
const template = await loadResolvedTemplate(opts.ref);
|
|
265
|
+
const { extends: _extends, id: _id, ...body } = template;
|
|
266
|
+
if (classifyRef(opts.ref).kind === "builtin") {
|
|
267
|
+
const title = listBuiltins().find((b) => b.id === opts.ref)?.title;
|
|
268
|
+
return { id: opts.ref, source: BUILTIN_SOURCE, ...title ? { title } : {}, ...body };
|
|
269
|
+
}
|
|
270
|
+
const hash = opts.ref.lastIndexOf("#");
|
|
271
|
+
const source = hash === -1 ? opts.ref : opts.ref.slice(0, hash);
|
|
272
|
+
const fragment = hash === -1 ? "" : opts.ref.slice(hash + 1);
|
|
273
|
+
const id = fragment || // The `?? ""` is unreachable: loadResolvedTemplate already refused a file
|
|
274
|
+
// with no templates, and one with several but no fragment.
|
|
275
|
+
(Object.keys((await loadTemplateFile(source)).templates ?? {})[0] ?? "");
|
|
276
|
+
return { id, source, ...body };
|
|
277
|
+
}
|
|
251
278
|
|
|
252
279
|
// src/lint/commands/tools.ts
|
|
253
280
|
var REPORTABLE_KINDS = new Set(Object.values(BLOCK_KIND_NODE));
|
|
@@ -289,13 +316,213 @@ async function runTools(opts = {}) {
|
|
|
289
316
|
);
|
|
290
317
|
}
|
|
291
318
|
|
|
319
|
+
// src/lint/reporters/template-show.ts
|
|
320
|
+
var SHOW_FORMATS = ["pretty", "json", "markdown"];
|
|
321
|
+
function isShowFormat(value) {
|
|
322
|
+
return SHOW_FORMATS.includes(value);
|
|
323
|
+
}
|
|
324
|
+
function occurrenceWords(rule) {
|
|
325
|
+
const { min, max } = occurrenceRange(rule);
|
|
326
|
+
if (max === 0) return "forbidden";
|
|
327
|
+
if (max === null) {
|
|
328
|
+
if (min === 0) return "optional, repeats";
|
|
329
|
+
if (min === 1) return "required, repeats";
|
|
330
|
+
return `at least ${min}`;
|
|
331
|
+
}
|
|
332
|
+
if (min === 1 && max === 1) return "required";
|
|
333
|
+
if (min === 0 && max === 1) return "optional";
|
|
334
|
+
return `${min} to ${max}`;
|
|
335
|
+
}
|
|
336
|
+
function headingForm(heading) {
|
|
337
|
+
if (heading === void 0) return "(any heading)";
|
|
338
|
+
if (heading === false) return "(no heading)";
|
|
339
|
+
if (typeof heading === "string") return heading;
|
|
340
|
+
if (Array.isArray(heading)) return heading.join(" | ");
|
|
341
|
+
return `/${heading.pattern}/`;
|
|
342
|
+
}
|
|
343
|
+
var NOUNS = {
|
|
344
|
+
paragraphs: "paragraph",
|
|
345
|
+
codeBlocks: "code block",
|
|
346
|
+
lists: "list",
|
|
347
|
+
tables: "table",
|
|
348
|
+
admonitions: "admonition",
|
|
349
|
+
images: "image",
|
|
350
|
+
blockquotes: "blockquote",
|
|
351
|
+
definitionLists: "definition list",
|
|
352
|
+
elements: "element"
|
|
353
|
+
};
|
|
354
|
+
function noun(kind, block) {
|
|
355
|
+
if (kind === "lists" && block.lists?.ordered !== void 0) {
|
|
356
|
+
return block.lists.ordered ? "numbered list" : "bulleted list";
|
|
357
|
+
}
|
|
358
|
+
if (kind === "admonitions" && block.admonitions?.variant !== void 0) {
|
|
359
|
+
return `${block.admonitions.variant} admonition`;
|
|
360
|
+
}
|
|
361
|
+
const tag = block.elements?.tag;
|
|
362
|
+
if (kind === "elements" && tag !== void 0) {
|
|
363
|
+
const tags = Array.isArray(tag) ? tag : [tag];
|
|
364
|
+
return `${tags.map((t) => `"${t}"`).join(" or ")} element`;
|
|
365
|
+
}
|
|
366
|
+
return NOUNS[kind];
|
|
367
|
+
}
|
|
368
|
+
function plural(word, n) {
|
|
369
|
+
return n === 1 ? word : `${word}s`;
|
|
370
|
+
}
|
|
371
|
+
function counted(range, word) {
|
|
372
|
+
const { min, max } = occurrenceRange(range);
|
|
373
|
+
if (max === 0) return `no ${plural(word, 0)}`;
|
|
374
|
+
if (max === null) {
|
|
375
|
+
return min === 0 ? `any number of ${plural(word, 0)}` : `at least ${min} ${plural(word, min)}`;
|
|
376
|
+
}
|
|
377
|
+
if (min === 0) return `at most ${max} ${plural(word, max)}`;
|
|
378
|
+
if (min === max) return `exactly ${min} ${plural(word, min)}`;
|
|
379
|
+
return `${min} to ${max} ${plural(word, max)}`;
|
|
380
|
+
}
|
|
381
|
+
function qualifiers(block) {
|
|
382
|
+
const parts = [];
|
|
383
|
+
if (block.paragraphs?.pattern !== void 0) {
|
|
384
|
+
parts.push(`each matching /${block.paragraphs.pattern}/`);
|
|
385
|
+
}
|
|
386
|
+
const language = block.codeBlocks?.language;
|
|
387
|
+
if (language !== void 0) {
|
|
388
|
+
parts.push(`in ${(Array.isArray(language) ? language : [language]).join(" or ")}`);
|
|
389
|
+
}
|
|
390
|
+
if (block.codeBlocks?.fenceInfo !== void 0) {
|
|
391
|
+
parts.push(`with fence info "${block.codeBlocks.fenceInfo}"`);
|
|
392
|
+
}
|
|
393
|
+
if (block.lists?.items !== void 0) {
|
|
394
|
+
parts.push(`each with ${counted(block.lists.items, "item")}`);
|
|
395
|
+
}
|
|
396
|
+
if (block.tables?.columns !== void 0) {
|
|
397
|
+
parts.push(`with columns ${quoteList(block.tables.columns)}`);
|
|
398
|
+
}
|
|
399
|
+
return parts.map((p) => `, ${p}`).join("");
|
|
400
|
+
}
|
|
401
|
+
function contentLines(rule) {
|
|
402
|
+
const lines = [];
|
|
403
|
+
const contains = rule.contains;
|
|
404
|
+
if (contains !== void 0) {
|
|
405
|
+
for (const kind of BLOCK_KINDS) {
|
|
406
|
+
const range = contains[kind];
|
|
407
|
+
if (range === void 0) continue;
|
|
408
|
+
lines.push(
|
|
409
|
+
`Contains ${counted(range, noun(kind, contains))}${qualifiers({ [kind]: range })}.`
|
|
410
|
+
);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
if (rule.sequence !== void 0) {
|
|
414
|
+
const kinds = rule.sequence.flatMap((entry) => {
|
|
415
|
+
const kind = BLOCK_KINDS.find((k) => entry[k] !== void 0);
|
|
416
|
+
return kind === void 0 ? [] : [noun(kind, entry)];
|
|
417
|
+
});
|
|
418
|
+
lines.push(`In order: ${kinds.join(", ")}.`);
|
|
419
|
+
}
|
|
420
|
+
return lines;
|
|
421
|
+
}
|
|
422
|
+
function detailLines(rule) {
|
|
423
|
+
return [...contentLines(rule), ...rule.description === void 0 ? [] : [rule.description]];
|
|
424
|
+
}
|
|
425
|
+
function prettyRule(c, rule, level, indent, out) {
|
|
426
|
+
const pad = " ".repeat(indent);
|
|
427
|
+
const hashes = "#".repeat(level);
|
|
428
|
+
const occurs = c.dim(occurrenceWords(rule));
|
|
429
|
+
if (rule.repeat !== void 0) {
|
|
430
|
+
const group = rule.id === void 0 ? "(group)" : `(group ${rule.id})`;
|
|
431
|
+
out.push(`${pad}${hashes} ${group} ${occurs}`);
|
|
432
|
+
} else {
|
|
433
|
+
const id = rule.id === void 0 ? "" : `${c.cyan(rule.id)} \xB7 `;
|
|
434
|
+
out.push(`${pad}${hashes} ${headingForm(rule.heading)} ${id}${occurs}`);
|
|
435
|
+
}
|
|
436
|
+
for (const line of detailLines(rule)) out.push(`${pad} ${line}`);
|
|
437
|
+
for (const member of rule.repeat ?? []) prettyRule(c, member, level, indent + 2, out);
|
|
438
|
+
for (const section of rule.sections ?? []) {
|
|
439
|
+
prettyRule(c, section, level + 1, indent + 2, out);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
function renderPrettyShow(show, c) {
|
|
443
|
+
const title = show.title ? ` ${c.dim("\u2014")} ${show.title}` : "";
|
|
444
|
+
const lines = [`${c.bold(show.id)}${title}`];
|
|
445
|
+
if (show.types !== void 0 && show.types.length > 0) {
|
|
446
|
+
lines.push(` types: ${show.types.join(", ")}`);
|
|
447
|
+
}
|
|
448
|
+
if (show.description !== void 0) lines.push(` ${show.description}`);
|
|
449
|
+
for (const line of contentLines(show)) lines.push(` ${line}`);
|
|
450
|
+
if (show.guide !== void 0) lines.push(` Guide: ${show.guide}`);
|
|
451
|
+
const sections = show.sections ?? [];
|
|
452
|
+
if (sections.length > 0) lines.push("");
|
|
453
|
+
for (const section of sections) prettyRule(c, section, 2, 2, lines);
|
|
454
|
+
return lines.join("\n");
|
|
455
|
+
}
|
|
456
|
+
function skeletonRules(rules) {
|
|
457
|
+
const kept = (rules ?? []).filter((rule) => occurrenceRange(rule).max !== 0);
|
|
458
|
+
const last = kept[kept.length - 1];
|
|
459
|
+
if (last !== void 0 && last.id === void 0 && last.heading === void 0 && last.repeat === void 0) {
|
|
460
|
+
kept.pop();
|
|
461
|
+
}
|
|
462
|
+
return kept;
|
|
463
|
+
}
|
|
464
|
+
function sentence(text) {
|
|
465
|
+
const trimmed = text.trim();
|
|
466
|
+
return /[.!?]$/.test(trimmed) ? trimmed : `${trimmed}.`;
|
|
467
|
+
}
|
|
468
|
+
function comment(parts) {
|
|
469
|
+
return `<!-- ${parts.join(" ").replace(/-(?=-)/g, "- ")} -->`;
|
|
470
|
+
}
|
|
471
|
+
function capitalise(text) {
|
|
472
|
+
return text.charAt(0).toUpperCase() + text.slice(1);
|
|
473
|
+
}
|
|
474
|
+
function headingText(heading) {
|
|
475
|
+
if (typeof heading === "string") return heading;
|
|
476
|
+
return Array.isArray(heading) ? heading[0] : void 0;
|
|
477
|
+
}
|
|
478
|
+
function markdownRule(rule, level, out) {
|
|
479
|
+
if (rule.repeat !== void 0) {
|
|
480
|
+
for (const member of skeletonRules(rule.repeat)) markdownRule(member, level, out);
|
|
481
|
+
} else {
|
|
482
|
+
if (rule.heading !== false) {
|
|
483
|
+
const text = headingText(rule.heading) ?? `{${rule.id ?? "section"}}`;
|
|
484
|
+
out.push(`${"#".repeat(level)} ${text}`, "");
|
|
485
|
+
}
|
|
486
|
+
out.push(
|
|
487
|
+
comment([sentence(capitalise(occurrenceWords(rule))), ...detailLines(rule).map(sentence)]),
|
|
488
|
+
""
|
|
489
|
+
);
|
|
490
|
+
}
|
|
491
|
+
for (const section of skeletonRules(rule.sections)) markdownRule(section, level + 1, out);
|
|
492
|
+
}
|
|
493
|
+
function renderMarkdownShow(show) {
|
|
494
|
+
const lines = [];
|
|
495
|
+
const type = show.types?.[0];
|
|
496
|
+
if (type !== void 0) lines.push("---", `type: ${type}`, "---", "");
|
|
497
|
+
lines.push(`# ${headingText(show.heading) ?? "{Title}"}`, "");
|
|
498
|
+
const parts = [
|
|
499
|
+
sentence(show.id),
|
|
500
|
+
...contentLines(show),
|
|
501
|
+
...show.description === void 0 ? [] : [sentence(show.description)],
|
|
502
|
+
...show.guide === void 0 ? [] : [`Guide: ${show.guide}`]
|
|
503
|
+
];
|
|
504
|
+
lines.push(comment(parts), "");
|
|
505
|
+
for (const section of skeletonRules(show.sections)) markdownRule(section, 2, lines);
|
|
506
|
+
return lines.join("\n").trimEnd();
|
|
507
|
+
}
|
|
508
|
+
function renderTemplateShow(show, format, opts = {}) {
|
|
509
|
+
if (format === "json") return JSON.stringify(show, null, 2);
|
|
510
|
+
if (format === "markdown") return renderMarkdownShow(show);
|
|
511
|
+
return renderPrettyShow(show, palette(opts.color ?? false));
|
|
512
|
+
}
|
|
513
|
+
|
|
292
514
|
export {
|
|
293
515
|
INFER_FORMATS,
|
|
294
516
|
isInferFormat,
|
|
295
517
|
BUILTIN_SOURCE,
|
|
296
518
|
runTemplates,
|
|
297
519
|
runTemplatesInfer,
|
|
520
|
+
runTemplateShow,
|
|
298
521
|
BUILT_IN_DEFAULTS,
|
|
299
|
-
runTools
|
|
522
|
+
runTools,
|
|
523
|
+
SHOW_FORMATS,
|
|
524
|
+
isShowFormat,
|
|
525
|
+
occurrenceWords,
|
|
526
|
+
renderTemplateShow
|
|
300
527
|
};
|
|
301
|
-
//# sourceMappingURL=chunk-
|
|
528
|
+
//# sourceMappingURL=chunk-UQMLCIRX.js.map
|