@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.
Files changed (186) hide show
  1. package/README.md +1 -1
  2. package/dist/{batch-UHLVBMYM.js → batch-OB2FXT47.js} +12 -12
  3. package/dist/{build-4RPXBSAO.js → build-4BL24BG3.js} +13 -13
  4. package/dist/{calibrate-POL5DCJ6.js → calibrate-AEDJ7N7G.js} +13 -13
  5. package/dist/{capture-I7ZYG7NZ.js → capture-TP3P4YNL.js} +12 -12
  6. package/dist/{check-6TEG5TM6.js → check-5IYH42KS.js} +14 -14
  7. package/dist/{check-3O2PZ7TZ.js → check-LU5YC3L4.js} +12 -12
  8. package/dist/{check-V7JUDAPS.js → check-NBN2YK2J.js} +13 -13
  9. package/dist/{check-DGOUTC3V.js → check-S55MH66H.js} +11 -11
  10. package/dist/{chunk-6KONPVHQ.js → chunk-3BVDFQ6Y.js} +2 -2
  11. package/dist/{chunk-JAPSZ44X.js → chunk-3HUCB4Z3.js} +4 -4
  12. package/dist/{chunk-LWMB7JRE.js → chunk-3O6U4ICM.js} +2 -2
  13. package/dist/{chunk-3QUCVYNX.js → chunk-3XGTNN3M.js} +3 -3
  14. package/dist/{chunk-AATCO43N.js → chunk-52WO7ESI.js} +3 -3
  15. package/dist/{chunk-TBAMBLF3.js → chunk-6ZFJWUUH.js} +132 -15
  16. package/dist/chunk-6ZFJWUUH.js.map +1 -0
  17. package/dist/{chunk-7TVIFCGT.js → chunk-7JPL3CUC.js} +2 -2
  18. package/dist/{chunk-RLPWXF5R.js → chunk-7RNONVHI.js} +6 -6
  19. package/dist/{chunk-WWKXPPN5.js → chunk-BMBAAPGN.js} +3 -3
  20. package/dist/{chunk-BGRP44SX.js → chunk-BQXY76JB.js} +4 -4
  21. package/dist/{chunk-N5JSOJY6.js → chunk-CODWRUAD.js} +2 -2
  22. package/dist/{chunk-5OKSFNUV.js → chunk-DQOM3DEU.js} +5 -5
  23. package/dist/{chunk-QUG53QGZ.js → chunk-E6BVUDGY.js} +3 -3
  24. package/dist/{chunk-PSPNIAOP.js → chunk-EQ7E6HMG.js} +8 -8
  25. package/dist/{chunk-7JUIJ7Q5.js → chunk-GWI6JPTT.js} +3 -3
  26. package/dist/{chunk-VXU75N5R.js → chunk-HIEGOW7X.js} +3 -3
  27. package/dist/{chunk-GNUZ37L2.js → chunk-HKTGHLBA.js} +2 -2
  28. package/dist/{chunk-GNUZ37L2.js.map → chunk-HKTGHLBA.js.map} +1 -1
  29. package/dist/{chunk-Y4TDIUG6.js → chunk-HY6ROJTH.js} +2 -2
  30. package/dist/{chunk-PP22XDW2.js → chunk-IGQMBHFY.js} +6 -6
  31. package/dist/{chunk-J4ZOTZII.js → chunk-J5NOWIJ3.js} +6 -6
  32. package/dist/{chunk-XEYS3KAZ.js → chunk-JUL2PRQN.js} +4 -4
  33. package/dist/{chunk-NLELGEKL.js → chunk-KE2F7QES.js} +5 -5
  34. package/dist/{chunk-EBZ4QKKX.js → chunk-LNGSE7V2.js} +2 -2
  35. package/dist/{chunk-EU4HDGG4.js → chunk-LSFXNAHU.js} +7 -7
  36. package/dist/{chunk-SSDSV52B.js → chunk-N6A6DJUO.js} +4 -4
  37. package/dist/{chunk-Z42MO7SO.js → chunk-NSAW7U42.js} +2 -2
  38. package/dist/{chunk-KRKNZ3IV.js → chunk-NTEYYYKL.js} +34 -10
  39. package/dist/chunk-NTEYYYKL.js.map +1 -0
  40. package/dist/{chunk-7QH2ZI4F.js → chunk-NWUXRV6N.js} +52 -27
  41. package/dist/chunk-NWUXRV6N.js.map +1 -0
  42. package/dist/{chunk-QWE3WLV4.js → chunk-OBXCJZ6R.js} +5 -5
  43. package/dist/{chunk-VFL3ERMI.js → chunk-OREHJQNN.js} +2 -2
  44. package/dist/{chunk-DTXLFSAB.js → chunk-OUAH7XF2.js} +2 -2
  45. package/dist/{chunk-ZCJUSQM7.js → chunk-OYIWF3B2.js} +10 -10
  46. package/dist/{chunk-HP43LH7E.js → chunk-PA7CMQGD.js} +2 -2
  47. package/dist/{chunk-5NNPEPVM.js → chunk-PCGBXHSE.js} +3 -3
  48. package/dist/{chunk-TR2XFZPR.js → chunk-QKT67PFE.js} +3 -3
  49. package/dist/{chunk-YGFIQ6Y5.js → chunk-SCLXVTFZ.js} +1 -1
  50. package/dist/{chunk-YGFIQ6Y5.js.map → chunk-SCLXVTFZ.js.map} +1 -1
  51. package/dist/{chunk-PNUM6RHR.js → chunk-TDCOKKMI.js} +3 -3
  52. package/dist/{chunk-X4GQ4HPY.js → chunk-TQ3W6RKG.js} +2 -2
  53. package/dist/{chunk-EX6E2P6Z.js → chunk-ULDV2LUI.js} +2 -2
  54. package/dist/{chunk-XP4RNQZL.js → chunk-UQMLCIRX.js} +242 -15
  55. package/dist/chunk-UQMLCIRX.js.map +1 -0
  56. package/dist/{chunk-KQRYW4DN.js → chunk-VNYXK7TM.js} +3 -3
  57. package/dist/{chunk-3FXPIZXL.js → chunk-VOXOBUTX.js} +2 -2
  58. package/dist/{chunk-4IW6FAUN.js → chunk-VYBYUQIP.js} +7 -7
  59. package/dist/{chunk-4TGIGVFO.js → chunk-WVXCN5DS.js} +4 -4
  60. package/dist/{chunk-J67EOBN3.js → chunk-X4MPUD4B.js} +3 -3
  61. package/dist/{chunk-W7EZJPRX.js → chunk-Y6M4JFKG.js} +3 -3
  62. package/dist/{chunk-U4SY2TJS.js → chunk-YZ4TJLZQ.js} +7 -7
  63. package/dist/{cli-USPQURPP.js → cli-4JHQCPHU.js} +2 -2
  64. package/dist/{cli-UL2IFH3R.js → cli-7DETHSNW.js} +15 -15
  65. package/dist/{cli-4ANSKDPD.js → cli-AZKWTCFV.js} +9 -9
  66. package/dist/{cli-2OQKCKRD.js → cli-BW5VOFOZ.js} +8 -8
  67. package/dist/{cli-5QGP6R63.js → cli-DGFLJ2DD.js} +2 -2
  68. package/dist/{cli-SDTXHLCA.js → cli-ECVT4YXR.js} +16 -16
  69. package/dist/{cli-IE3CYYHA.js → cli-G66X7YMP.js} +54 -15
  70. package/dist/cli-G66X7YMP.js.map +1 -0
  71. package/dist/{cli-2Q5FODAX.js → cli-H5LVGOVT.js} +31 -31
  72. package/dist/{cli-RQRMZKKM.js → cli-KYTCJYXK.js} +16 -16
  73. package/dist/{cli-SGSS6FXE.js → cli-L5B2RVV2.js} +19 -19
  74. package/dist/{cli-RQSCBJJY.js → cli-RP5E7XHC.js} +13 -13
  75. package/dist/cli.js +14 -14
  76. package/dist/docmeta.js +8 -8
  77. package/dist/{github-PBIYRH5S.js → github-DJQ4MWNZ.js} +13 -13
  78. package/dist/{github-RJG2MAWB.js → github-UWTDM2J2.js} +11 -11
  79. package/dist/index.d.ts +76 -4
  80. package/dist/index.js +47 -37
  81. package/dist/index.js.map +1 -1
  82. package/dist/{json-PQURAHQ5.js → json-LCVPMEAM.js} +11 -11
  83. package/dist/{labels-FMLO2URZ.js → labels-OQXBVM4A.js} +10 -10
  84. package/dist/{lint-N2CY66JX.js → lint-O7XRHKFP.js} +13 -13
  85. package/dist/{list-VBFNFEXV.js → list-OOOCLOAL.js} +11 -11
  86. package/dist/{list-OMHTVFDY.js → list-OYQ5XPN2.js} +11 -11
  87. package/dist/{page-X3HYSH6D.js → page-XPX5XJZE.js} +10 -10
  88. package/dist/{prepare-IQMB262G.js → prepare-VMBIQYAM.js} +11 -11
  89. package/dist/{pretty-22PXIEOV.js → pretty-KG6TMOEI.js} +12 -12
  90. package/dist/{pretty-K5BOCKBB.js → pretty-KSTZMBUF.js} +11 -11
  91. package/dist/{reporters-324OWH36.js → reporters-AQU4W3KY.js} +4 -4
  92. package/dist/{reporters-5LIYYE6M.js → reporters-FBYLPKD4.js} +12 -12
  93. package/dist/{run-4EKG6EMI.js → run-KUGTU3TT.js} +11 -11
  94. package/dist/{term-2ADSKGZW.js → term-SI3VM6EM.js} +15 -15
  95. package/dist/{validate-LRYUEZLJ.js → validate-NQO7TFSN.js} +5 -5
  96. package/package.json +1 -1
  97. package/plugin/manni/.claude-plugin/plugin.json +1 -1
  98. package/plugin/manni/skills/fix/SKILL.md +4 -2
  99. package/schemas/lint/template.json +6 -1
  100. package/templates/lint/tgdp/concept.yaml +27 -13
  101. package/templates/lint/tgdp/how-to.yaml +35 -21
  102. package/templates/lint/tgdp/readme.yaml +69 -25
  103. package/templates/lint/tgdp/reference.yaml +44 -31
  104. package/templates/lint/tgdp/release-notes.yaml +48 -19
  105. package/templates/lint/tgdp/troubleshooting.yaml +45 -31
  106. package/templates/lint/tgdp/tutorial.yaml +35 -19
  107. package/dist/chunk-7QH2ZI4F.js.map +0 -1
  108. package/dist/chunk-KRKNZ3IV.js.map +0 -1
  109. package/dist/chunk-TBAMBLF3.js.map +0 -1
  110. package/dist/chunk-XP4RNQZL.js.map +0 -1
  111. package/dist/cli-IE3CYYHA.js.map +0 -1
  112. /package/dist/{batch-UHLVBMYM.js.map → batch-OB2FXT47.js.map} +0 -0
  113. /package/dist/{build-4RPXBSAO.js.map → build-4BL24BG3.js.map} +0 -0
  114. /package/dist/{calibrate-POL5DCJ6.js.map → calibrate-AEDJ7N7G.js.map} +0 -0
  115. /package/dist/{capture-I7ZYG7NZ.js.map → capture-TP3P4YNL.js.map} +0 -0
  116. /package/dist/{check-3O2PZ7TZ.js.map → check-5IYH42KS.js.map} +0 -0
  117. /package/dist/{check-6TEG5TM6.js.map → check-LU5YC3L4.js.map} +0 -0
  118. /package/dist/{check-V7JUDAPS.js.map → check-NBN2YK2J.js.map} +0 -0
  119. /package/dist/{check-DGOUTC3V.js.map → check-S55MH66H.js.map} +0 -0
  120. /package/dist/{chunk-6KONPVHQ.js.map → chunk-3BVDFQ6Y.js.map} +0 -0
  121. /package/dist/{chunk-JAPSZ44X.js.map → chunk-3HUCB4Z3.js.map} +0 -0
  122. /package/dist/{chunk-LWMB7JRE.js.map → chunk-3O6U4ICM.js.map} +0 -0
  123. /package/dist/{chunk-3QUCVYNX.js.map → chunk-3XGTNN3M.js.map} +0 -0
  124. /package/dist/{chunk-AATCO43N.js.map → chunk-52WO7ESI.js.map} +0 -0
  125. /package/dist/{chunk-7TVIFCGT.js.map → chunk-7JPL3CUC.js.map} +0 -0
  126. /package/dist/{chunk-RLPWXF5R.js.map → chunk-7RNONVHI.js.map} +0 -0
  127. /package/dist/{chunk-WWKXPPN5.js.map → chunk-BMBAAPGN.js.map} +0 -0
  128. /package/dist/{chunk-BGRP44SX.js.map → chunk-BQXY76JB.js.map} +0 -0
  129. /package/dist/{chunk-N5JSOJY6.js.map → chunk-CODWRUAD.js.map} +0 -0
  130. /package/dist/{chunk-5OKSFNUV.js.map → chunk-DQOM3DEU.js.map} +0 -0
  131. /package/dist/{chunk-QUG53QGZ.js.map → chunk-E6BVUDGY.js.map} +0 -0
  132. /package/dist/{chunk-PSPNIAOP.js.map → chunk-EQ7E6HMG.js.map} +0 -0
  133. /package/dist/{chunk-7JUIJ7Q5.js.map → chunk-GWI6JPTT.js.map} +0 -0
  134. /package/dist/{chunk-VXU75N5R.js.map → chunk-HIEGOW7X.js.map} +0 -0
  135. /package/dist/{chunk-Y4TDIUG6.js.map → chunk-HY6ROJTH.js.map} +0 -0
  136. /package/dist/{chunk-PP22XDW2.js.map → chunk-IGQMBHFY.js.map} +0 -0
  137. /package/dist/{chunk-J4ZOTZII.js.map → chunk-J5NOWIJ3.js.map} +0 -0
  138. /package/dist/{chunk-XEYS3KAZ.js.map → chunk-JUL2PRQN.js.map} +0 -0
  139. /package/dist/{chunk-NLELGEKL.js.map → chunk-KE2F7QES.js.map} +0 -0
  140. /package/dist/{chunk-EBZ4QKKX.js.map → chunk-LNGSE7V2.js.map} +0 -0
  141. /package/dist/{chunk-EU4HDGG4.js.map → chunk-LSFXNAHU.js.map} +0 -0
  142. /package/dist/{chunk-SSDSV52B.js.map → chunk-N6A6DJUO.js.map} +0 -0
  143. /package/dist/{chunk-Z42MO7SO.js.map → chunk-NSAW7U42.js.map} +0 -0
  144. /package/dist/{chunk-QWE3WLV4.js.map → chunk-OBXCJZ6R.js.map} +0 -0
  145. /package/dist/{chunk-VFL3ERMI.js.map → chunk-OREHJQNN.js.map} +0 -0
  146. /package/dist/{chunk-DTXLFSAB.js.map → chunk-OUAH7XF2.js.map} +0 -0
  147. /package/dist/{chunk-ZCJUSQM7.js.map → chunk-OYIWF3B2.js.map} +0 -0
  148. /package/dist/{chunk-HP43LH7E.js.map → chunk-PA7CMQGD.js.map} +0 -0
  149. /package/dist/{chunk-5NNPEPVM.js.map → chunk-PCGBXHSE.js.map} +0 -0
  150. /package/dist/{chunk-TR2XFZPR.js.map → chunk-QKT67PFE.js.map} +0 -0
  151. /package/dist/{chunk-PNUM6RHR.js.map → chunk-TDCOKKMI.js.map} +0 -0
  152. /package/dist/{chunk-X4GQ4HPY.js.map → chunk-TQ3W6RKG.js.map} +0 -0
  153. /package/dist/{chunk-EX6E2P6Z.js.map → chunk-ULDV2LUI.js.map} +0 -0
  154. /package/dist/{chunk-KQRYW4DN.js.map → chunk-VNYXK7TM.js.map} +0 -0
  155. /package/dist/{chunk-3FXPIZXL.js.map → chunk-VOXOBUTX.js.map} +0 -0
  156. /package/dist/{chunk-4IW6FAUN.js.map → chunk-VYBYUQIP.js.map} +0 -0
  157. /package/dist/{chunk-4TGIGVFO.js.map → chunk-WVXCN5DS.js.map} +0 -0
  158. /package/dist/{chunk-J67EOBN3.js.map → chunk-X4MPUD4B.js.map} +0 -0
  159. /package/dist/{chunk-W7EZJPRX.js.map → chunk-Y6M4JFKG.js.map} +0 -0
  160. /package/dist/{chunk-U4SY2TJS.js.map → chunk-YZ4TJLZQ.js.map} +0 -0
  161. /package/dist/{cli-USPQURPP.js.map → cli-4JHQCPHU.js.map} +0 -0
  162. /package/dist/{cli-UL2IFH3R.js.map → cli-7DETHSNW.js.map} +0 -0
  163. /package/dist/{cli-4ANSKDPD.js.map → cli-AZKWTCFV.js.map} +0 -0
  164. /package/dist/{cli-2OQKCKRD.js.map → cli-BW5VOFOZ.js.map} +0 -0
  165. /package/dist/{cli-5QGP6R63.js.map → cli-DGFLJ2DD.js.map} +0 -0
  166. /package/dist/{cli-SDTXHLCA.js.map → cli-ECVT4YXR.js.map} +0 -0
  167. /package/dist/{cli-2Q5FODAX.js.map → cli-H5LVGOVT.js.map} +0 -0
  168. /package/dist/{cli-RQRMZKKM.js.map → cli-KYTCJYXK.js.map} +0 -0
  169. /package/dist/{cli-SGSS6FXE.js.map → cli-L5B2RVV2.js.map} +0 -0
  170. /package/dist/{cli-RQSCBJJY.js.map → cli-RP5E7XHC.js.map} +0 -0
  171. /package/dist/{github-PBIYRH5S.js.map → github-DJQ4MWNZ.js.map} +0 -0
  172. /package/dist/{github-RJG2MAWB.js.map → github-UWTDM2J2.js.map} +0 -0
  173. /package/dist/{json-PQURAHQ5.js.map → json-LCVPMEAM.js.map} +0 -0
  174. /package/dist/{labels-FMLO2URZ.js.map → labels-OQXBVM4A.js.map} +0 -0
  175. /package/dist/{lint-N2CY66JX.js.map → lint-O7XRHKFP.js.map} +0 -0
  176. /package/dist/{list-OMHTVFDY.js.map → list-OOOCLOAL.js.map} +0 -0
  177. /package/dist/{list-VBFNFEXV.js.map → list-OYQ5XPN2.js.map} +0 -0
  178. /package/dist/{page-X3HYSH6D.js.map → page-XPX5XJZE.js.map} +0 -0
  179. /package/dist/{prepare-IQMB262G.js.map → prepare-VMBIQYAM.js.map} +0 -0
  180. /package/dist/{pretty-22PXIEOV.js.map → pretty-KG6TMOEI.js.map} +0 -0
  181. /package/dist/{pretty-K5BOCKBB.js.map → pretty-KSTZMBUF.js.map} +0 -0
  182. /package/dist/{reporters-324OWH36.js.map → reporters-AQU4W3KY.js.map} +0 -0
  183. /package/dist/{reporters-5LIYYE6M.js.map → reporters-FBYLPKD4.js.map} +0 -0
  184. /package/dist/{run-4EKG6EMI.js.map → run-KUGTU3TT.js.map} +0 -0
  185. /package/dist/{term-2ADSKGZW.js.map → term-SI3VM6EM.js.map} +0 -0
  186. /package/dist/{validate-LRYUEZLJ.js.map → validate-NQO7TFSN.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lint/core/infer.ts","../src/lint/commands/templates.ts","../src/lint/commands/tools.ts","../src/lint/reporters/template-show.ts"],"sourcesContent":["/**\n * Write a first template from a page that already has the shape its author\n * wants.\n *\n * The format is strict by default: every rule is one occurrence, and a section\n * no rule describes is a finding. A new author's first run against a\n * hand-written template is therefore a screen of unexpected sections, and this\n * is the escape. Proposal 0061's stress test 5 records it, and says the two\n * ship together.\n *\n * Two rules govern everything here.\n *\n * **The output must lint its input clean.** That is the whole contract, and it\n * is why each inference below is the weakest claim that still describes the\n * page. `contains:` lists only the kinds that are there, at `min: 1`, so a\n * section holding more of something still passes. A table's `columns:` is\n * claimed only where every table in that section agrees about them, and a code\n * block's `language:` only where every block in that section declares one -\n * both rules report per offending node, so a claim drawn from one node would\n * fail on its neighbour. A template that fails the page it was inferred from is\n * worse than no template: it hands a new author findings about the very\n * document they pointed at.\n *\n * **Nothing is optional and nothing repeats.** One page cannot show what\n * varies, so no `min: 0`, no `max`, no `repeat` and no `pattern` is invented.\n * Two sections with one heading are two rules. Loosening a heading into a list\n * or a pattern, marking a rule optional, and adding a trailing wildcard are the\n * author's edits, and the reference page says so.\n */\nimport { stringify as stringifyYaml } from \"yaml\";\nimport { LintError } from \"../types.js\";\nimport type {\n CodeNode,\n ContentKind,\n ContentNode,\n DocumentTree,\n Position,\n SectionNode,\n TableNode,\n} from \"../types.js\";\nimport { BLOCK_KINDS, BLOCK_KIND_NODE } from \"./template.js\";\nimport type {\n BlockKind,\n BlockRule,\n HeadingRule,\n Rule,\n Template,\n TemplateFile,\n} from \"./template.js\";\n\n/** How an inferred template is written out. */\nexport const INFER_FORMATS = [\"yaml\", \"json\"] as const;\nexport type InferFormat = (typeof INFER_FORMATS)[number];\n\nexport function isInferFormat(value: string): value is InferFormat {\n return (INFER_FORMATS as readonly string[]).includes(value);\n}\n\n/**\n * Template names the schema's `templates` map accepts.\n *\n * Checked here rather than left to Ajv. `templates` is `additionalProperties:\n * false` beside a `patternProperties` key, so a name outside the pattern is\n * reported as an unexpected property - which names the offending key and says\n * nothing whatsoever about what is wrong with it.\n */\nconst TEMPLATE_NAME = /^[A-Za-z][A-Za-z0-9\\-_]*$/;\n\n/** The node each block-rule key counts, inverted: `codeBlock` -> `codeBlocks`. */\nconst KIND_KEY = new Map<ContentKind, BlockKind>(\n BLOCK_KINDS.map((key) => [BLOCK_KIND_NODE[key], key]),\n);\n\n/* -------------------------------------------------------------------------- *\n * The page as the template's subject\n * -------------------------------------------------------------------------- */\n\n/** A zero-width span at the top of a file, for a document with no sections. */\nfunction origin(): Position {\n return {\n start: { line: 1, column: 1, offset: 0 },\n end: { line: 1, column: 1, offset: 0 },\n };\n}\n\n/** First section's start through the last one's end. */\nfunction span(sections: SectionNode[]): Position {\n const first = sections[0];\n const last = sections[sections.length - 1];\n if (!first || !last) return origin();\n return { start: { ...first.position.start }, end: { ...last.position.end } };\n}\n\n/**\n * The section the template describes: the page itself.\n *\n * Deliberately the same reading `validator.ts` applies, because the template\n * this produces is checked by that one. A page whose body is a single `# Title`\n * *is* that section; anything else - several top-level headings, or a body that\n * starts at `##` with no lead content - has no section standing for the page,\n * so one is synthesised with no heading of its own. The duplication is small\n * and the alternative is worse: an inference that read the page differently\n * from the checker would produce templates that fail their own source.\n */\nfunction pageSection(tree: DocumentTree): SectionNode {\n const [only] = tree.sections;\n if (tree.sections.length === 1 && only && only.level <= 1) return only;\n return {\n slug: \"\",\n title: \"\",\n level: 0,\n order: 0,\n parentSlug: null,\n titlePosition: null,\n position: span(tree.sections),\n children: [],\n sections: tree.sections,\n };\n}\n\n/* -------------------------------------------------------------------------- *\n * Content\n * -------------------------------------------------------------------------- */\n\n/** The header row's cells, in order, or none where the table has no header. */\nfunction headerCells(table: TableNode): string[] {\n const header = table.children.find((row) => row.header);\n return header ? header.children.map((cell) => cell.text) : [];\n}\n\n/**\n * `columns:` for a run of tables, where they all agree about it.\n *\n * `tables.columns` reports once per table whose header differs, so a claim\n * taken from the first of two unlike tables fails on the second - in the very\n * page it was drawn from. Where the tables disagree, or any of them has no\n * header row, the count alone is what the page can honestly be said to show.\n */\nfunction columnsOf(tables: TableNode[]): { columns?: string[] } {\n const headers = tables.map(headerCells);\n const [first] = headers;\n if (first === undefined || first.length === 0) return {};\n const same = (cells: string[]): boolean =>\n cells.length === first.length && cells.every((c, i) => c === first[i]);\n return headers.every(same) ? { columns: [...first] } : {};\n}\n\n/**\n * `language:` for a run of code blocks, where every one of them declares one.\n *\n * `codeBlocks.language` holds every block in the run to the accepted set, so a\n * section mixing a tagged fence with a bare one can claim nothing: the bare one\n * would fail. Where the tags differ the list form says what the page shows,\n * which is what \"one of these\" is for.\n */\nfunction languageOf(blocks: CodeNode[]): { language?: string | string[] } {\n const declared: string[] = [];\n for (const block of blocks) {\n if (block.language === undefined || block.language.length === 0) return {};\n declared.push(block.language);\n }\n const distinct = [...new Set(declared)];\n const [only] = distinct;\n if (only === undefined) return {};\n return { language: distinct.length === 1 ? only : distinct };\n}\n\n/**\n * What a section holds, as a `contains:` rule, or nothing where it holds none\n * of the kinds a template can count.\n *\n * `contains` rather than `sequence`: the page shows one order, and asserting it\n * would make moving a paragraph below a list a finding. Order is a claim its\n * author makes deliberately.\n */\nfunction inferContains(children: ContentNode[]): BlockRule | undefined {\n const byKey = new Map<BlockKind, ContentNode[]>();\n for (const node of children) {\n const key = KIND_KEY.get(node.kind);\n if (key === undefined) continue;\n const bucket = byKey.get(key);\n if (bucket) bucket.push(node);\n else byKey.set(key, [node]);\n }\n\n const rule: BlockRule = {};\n let any = false;\n // In `BLOCK_KINDS` order, not the order the page happens to put them in, so\n // two pages holding the same kinds produce byte-identical rules.\n for (const key of BLOCK_KINDS) {\n const nodes = byKey.get(key);\n if (nodes === undefined) continue;\n any = true;\n if (key === \"tables\") {\n rule.tables = { min: 1, ...columnsOf(nodes as TableNode[]) };\n } else if (key === \"codeBlocks\") {\n rule.codeBlocks = { min: 1, ...languageOf(nodes as CodeNode[]) };\n } else {\n // A computed key, as `validator.ts` does it: every other block rule is a\n // bare count, and nine near-identical branches would say less.\n Object.assign(rule, { [key]: { min: 1 } });\n }\n }\n return any ? rule : undefined;\n}\n\n/* -------------------------------------------------------------------------- *\n * Rules\n * -------------------------------------------------------------------------- */\n\n/**\n * A section's heading, as a rule about it.\n *\n * Exact text, because that is what the page shows; a one-of list or a pattern\n * is a generalisation only its author can make. `false` for a section with no\n * heading of its own - the implicit lead section, and the synthesised page -\n * because that is as specific a claim as naming one.\n *\n * An empty title is the one case with no spelling: the schema's `heading`\n * requires a non-empty string, and `false` would be a lie about a section that\n * does have a heading. The key is omitted, which matches any heading.\n */\nfunction inferHeading(section: SectionNode): HeadingRule | undefined {\n if (section.titlePosition === null) return false;\n return section.title.length > 0 ? section.title : undefined;\n}\n\n/** One section, and every section under it. */\nfunction inferRule(section: SectionNode): Rule {\n const rule: Rule = {};\n const heading = inferHeading(section);\n if (heading !== undefined) rule.heading = heading;\n const contains = inferContains(section.children);\n if (contains) rule.contains = contains;\n // Omitted, never `[]`. An absent `sections:` says nothing about the\n // subsections; an empty list says none are permitted.\n if (section.sections.length > 0) {\n rule.sections = section.sections.map(inferRule);\n }\n return rule;\n}\n\n/** The template one page describes: the page rule, with its sections under it. */\nexport function inferTemplate(tree: DocumentTree): Template {\n return inferRule(pageSection(tree));\n}\n\n/* -------------------------------------------------------------------------- *\n * The file\n * -------------------------------------------------------------------------- */\n\n/** Refuse a name the `templates` map cannot hold, in words that name the rule. */\nexport function assertTemplateName(name: string): string {\n if (TEMPLATE_NAME.test(name)) return name;\n throw new LintError(\n `\"${name}\" is not a usable template name. A name starts with a letter and ` +\n `holds only letters, digits, \"-\" and \"_\". Pass --name <name>.`,\n );\n}\n\n/** A one-template file, ready to serialize. */\nexport function inferTemplateFile(\n tree: DocumentTree,\n name: string,\n): TemplateFile {\n return { templates: { [assertTemplateName(name)]: inferTemplate(tree) } };\n}\n\n/**\n * Serialize a template file.\n *\n * `lineWidth: 0` turns off YAML's folding. A folded heading still parses back\n * to the same string, but a template is read and edited by hand, and a heading\n * broken across two lines is the one thing in this output a reader would\n * mistrust.\n */\nexport function renderTemplateFile(\n file: TemplateFile,\n format: InferFormat,\n): string {\n const text =\n format === \"json\"\n ? JSON.stringify(file, null, 2)\n : stringifyYaml(file, { lineWidth: 0 });\n return text.endsWith(\"\\n\") ? text : `${text}\\n`;\n}\n","/**\n * `templates` command cores.\n *\n * `runTemplates` reports the templates a run could resolve: the built-ins, plus\n * the named templates in any files given by `--templates` or by\n * `lint.templates` in the config, with the doctypes each serves.\n *\n * The `types` column is the part worth printing. It is what frontmatter\n * routing will match a page against, so seeing it is how someone works out\n * which `type:` value to write in a page - or that no template claims the one\n * they already wrote.\n *\n * `runTemplatesInfer` writes a first template from a page that already has the\n * shape its author wants. The inference itself is `../core/infer.ts`; what\n * lives here is the plumbing around it - which parser reads the page, what the\n * template is called, and where the file goes.\n *\n * `runTemplateShow` resolves one ref the way `--template` does and returns the\n * template it names, for `src/lint/reporters/template-show.ts` to print.\n *\n * All three return data; `src/lint/reporters/index.ts` renders the listing, and\n * an inferred template is already the text it will be written as.\n */\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readFile } from \"node:fs/promises\";\nimport { basename, dirname, extname, resolve } from \"node:path\";\nimport { errorMessage, ToolError } from \"../../shared/errors.js\";\nimport { writeTextAtomic } from \"../../shared/write-file.js\";\nimport { LintError } from \"../types.js\";\nimport type { DocumentParser, DocumentTree } from \"../types.js\";\nimport {\n parserByName,\n parserForExtension,\n unsupportedFormatMessage,\n} from \"../parsers/index.js\";\nimport {\n assertTemplateName,\n inferTemplateFile,\n isInferFormat,\n renderTemplateFile,\n type InferFormat,\n} from \"../core/infer.js\";\nimport type { Template, TemplateFile } from \"../core/template.js\";\nimport { resolveLintRun } from \"../core/config.js\";\nimport {\n classifyRef,\n listBuiltins,\n loadResolvedTemplate,\n loadTemplate,\n loadTemplateFile,\n} from \"../core/template-registry.js\";\n\n/** `TemplateInfo.source` for a template that ships with the tool. */\nexport const BUILTIN_SOURCE = \"builtin\";\n\nexport interface TemplateInfo {\n /** The ref to pass to `--template`. */\n id: string;\n /**\n * Human-readable title. Empty for templates read from a user file: the\n * template DSL has no title field, only the built-in registry carries one.\n */\n title: string;\n /** Doctypes the template serves, matched against a page `type`. */\n types: string[];\n /** `builtin`, or the template file this entry came from. */\n source: string;\n /** Link to the author's guide for the doctype, or null when it names none. */\n guide: string | null;\n}\n\nexport interface TemplatesInfo {\n templates: TemplateInfo[];\n}\n\nexport interface TemplatesOptions {\n /** Template files whose entries join the built-ins. */\n templates?: string | string[];\n}\n\nexport async function runTemplates(\n opts: TemplatesOptions = {},\n): Promise<TemplatesInfo> {\n // A built-in's guide lives in its YAML, not the manifest, so each is loaded.\n // They are cached, and a run that lints pages loads them anyway.\n const templates: TemplateInfo[] = await Promise.all(\n listBuiltins().map(async (builtin) => ({\n id: builtin.id,\n title: builtin.title,\n types: builtin.types,\n source: BUILTIN_SOURCE,\n guide: (await loadTemplate(builtin.id)).guide ?? null,\n })),\n );\n\n // Listed after the built-ins, in the order supplied - the same order\n // `buildTypeIndex` applies them in, so a later entry claiming the same\n // doctype is the one that would win.\n const paths =\n opts.templates == null\n ? []\n : Array.isArray(opts.templates)\n ? opts.templates\n : [opts.templates];\n\n for (const path of paths) {\n const file = await loadTemplateFile(path);\n for (const [id, template] of Object.entries(file.templates ?? {})) {\n templates.push({\n id,\n title: \"\",\n types: template.types ?? [],\n source: path,\n guide: template.guide ?? null,\n });\n }\n }\n\n return { templates };\n}\n\n/* -------------------------------------------------------------------------- *\n * infer\n * -------------------------------------------------------------------------- */\n\n/** The token that means stdin, in every command of the family. */\nconst STDIN = \"-\";\n\n/** What a page read from stdin is called when nothing else names it. */\nconst STDIN_NAME = \"stdin\";\n\nexport interface TemplatesInferOptions {\n /** The one page to infer from: a path, or `-` for stdin. */\n page: string;\n /** `--as`: force an input format, by parser name. */\n as?: string;\n /** `--name`: what to call the template. Defaults to the page's own doctype. */\n name?: string;\n /** `-f/--format`: how the file is written. Defaults to `yaml`. */\n format?: InferFormat;\n /** `-o/--out`: write here instead of returning text for stdout. */\n out?: string;\n /** `--force`: replace an existing `--out`. */\n force?: boolean;\n cwd?: string;\n /** Content for the `-` page, injected by the CLI and by tests. */\n stdinContent?: string;\n /** `-c/--config`. */\n configPath?: string;\n /** `--no-config`: skip discovery. */\n noConfig?: boolean;\n /** Told which config governed the run, and where it came from. */\n onConfigLoaded?: (info: { path: string; dir: string }) => void;\n}\n\nexport interface TemplatesInferResult {\n /** The name the template was written under. */\n name: string;\n /** The inferred file, for a caller that wants the data rather than the text. */\n file: TemplateFile;\n /** The serialized template file, exactly as written. */\n text: string;\n /** Where it was written. Absent without `--out`. */\n written?: string;\n}\n\n/**\n * The parser that reads this page.\n *\n * Resolved before anything is read, as `runLint` does it: a typo in `--as`\n * should fail immediately rather than after a file was opened it was going to\n * mis-parse anyway. A name no parser answers to is unknown whatever it was\n * meant to name, so the message points at the one command that lists them.\n */\nfunction parserFor(page: string, as: string | undefined): DocumentParser {\n if (as !== undefined) {\n const forced = parserByName(as);\n if (forced) return forced;\n throw new LintError(\n `Unknown format \"${as}\". Run \"manni lint tools\" to see the formats manni lint reads.`,\n );\n }\n if (page === STDIN) {\n throw new LintError(\n \"Reading from stdin (-) requires --as <format> to choose a parser.\",\n );\n }\n const ext = extname(page);\n const parser = parserForExtension(ext);\n if (parser) return parser;\n throw new LintError(unsupportedFormatMessage(ext || page));\n}\n\n/**\n * What the template is called: `--name`, else the page's own doctype, else the\n * file's stem.\n *\n * The doctype first because that is the handle the page already carries, and\n * the one `types:` will route on once the author adds it. A file read from\n * stdin has no stem, so it falls back to a word rather than to `-`.\n */\nfunction defaultName(tree: DocumentTree, page: string): string {\n const declared = tree.frontmatter?.[\"type\"];\n if (typeof declared === \"string\" && declared.trim().length > 0) {\n return declared.trim();\n }\n if (page === STDIN) return STDIN_NAME;\n return basename(page, extname(page)) || STDIN_NAME;\n}\n\n/**\n * Infer a template from one page.\n *\n * One page, never a set. A template is a generalisation, and this makes exactly\n * the generalisation one exemplar supports; inferring from several would mean\n * deciding which differences are variation and which are mistakes, which is the\n * author's judgment and not the tool's.\n */\nexport async function runTemplatesInfer(\n opts: TemplatesInferOptions,\n): Promise<TemplatesInferResult> {\n const format = opts.format ?? \"yaml\";\n if (!isInferFormat(format)) {\n throw new LintError(\n `Unknown --format \"${String(format)}\". Use yaml or json.`,\n );\n }\n\n // Which config governs the run, said once, the way every other lint verb\n // says it. With a page typed on the command line the base stays the working\n // directory, so the path means what it looked like it meant.\n const run = await resolveLintRun({\n cwd: opts.cwd ?? process.cwd(),\n ...(opts.configPath === undefined ? {} : { configPath: opts.configPath }),\n ...(opts.noConfig === undefined ? {} : { noConfig: opts.noConfig }),\n inputs: [opts.page],\n ...(opts.onConfigLoaded === undefined\n ? {}\n : { onConfigLoaded: opts.onConfigLoaded }),\n });\n const cwd = run.base;\n\n const parser = parserFor(opts.page, opts.as);\n // A name the schema cannot hold is refused before the page is read, beside\n // the other refusals: a run that is going to fail should leave the working\n // tree, and the reader's terminal, exactly as it found them.\n if (opts.name !== undefined) assertTemplateName(opts.name);\n\n // Every refusal happens before the write, and the `--out` guard happens\n // before the read - the ordering `meta schemas infer` established. The path\n // is echoed as it was typed, because that is the string the reader will edit.\n let absOut: string | undefined;\n if (opts.out !== undefined) {\n absOut = resolve(cwd, opts.out);\n if (opts.force !== true && existsSync(absOut)) {\n throw new LintError(`${opts.out} exists. Pass --force to overwrite it.`);\n }\n }\n\n let content: string;\n if (opts.page === STDIN) {\n content = opts.stdinContent ?? \"\";\n } else {\n try {\n content = await readFile(resolve(cwd, opts.page), \"utf8\");\n } catch (err) {\n // The OS message travels verbatim: \"permission denied\" and \"no such\n // file\" send the reader to different places, and this cannot tell which.\n throw new LintError(\n `\"${opts.page}\" could not be read: ${errorMessage(err)}`,\n );\n }\n }\n\n let tree: DocumentTree;\n try {\n tree = parser.parse(content, opts.page === STDIN ? \"<stdin>\" : opts.page);\n } catch (err) {\n // A page that will not parse has no shape to infer, and the parser's own\n // message already names the file and the syntax it choked on.\n if (err instanceof ToolError) throw new LintError(err.message);\n throw err;\n }\n\n const name = opts.name ?? defaultName(tree, opts.page);\n const file = inferTemplateFile(tree, name);\n const text = renderTemplateFile(file, format);\n\n if (absOut === undefined) return { name, file, text };\n\n await mkdir(dirname(absOut), { recursive: true });\n await writeTextAtomic(absOut, text);\n return { name, file, text, written: opts.out };\n}\n\n/* -------------------------------------------------------------------------- *\n * show\n * -------------------------------------------------------------------------- */\n\nexport interface TemplateShowOptions {\n /** A built-in id, a path, a `path#name`, or a URL: what `--template` takes. */\n ref: string;\n}\n\n/** One resolved template, after `extends` and `$ref`, with where it came from. */\nexport interface TemplateShow extends Omit<Template, \"extends\" | \"id\"> {\n /** The built-in id, or the template's name inside its file. */\n id: string;\n /** `builtin`, or the file or URL the template came from. */\n source: string;\n}\n\n/**\n * Resolve one template ref and return the template it names.\n *\n * The loader is `--template`'s own, so a ref that fails there fails here with\n * the same message, and a template that inherits shows what it inherited.\n */\nexport async function runTemplateShow(\n opts: TemplateShowOptions,\n): Promise<TemplateShow> {\n const template = await loadResolvedTemplate(opts.ref);\n const { extends: _extends, id: _id, ...body } = template;\n\n if (classifyRef(opts.ref).kind === \"builtin\") {\n const title = listBuiltins().find((b) => b.id === opts.ref)?.title;\n return { id: opts.ref, source: BUILTIN_SOURCE, ...(title ? { title } : {}), ...body };\n }\n\n // A file names its template by fragment, or holds only one - the loader\n // above has already refused anything else.\n const hash = opts.ref.lastIndexOf(\"#\");\n const source = hash === -1 ? opts.ref : opts.ref.slice(0, hash);\n const fragment = hash === -1 ? \"\" : opts.ref.slice(hash + 1);\n const id =\n fragment ||\n // The `?? \"\"` is unreachable: loadResolvedTemplate already refused a file\n // with no templates, and one with several but no fragment.\n (Object.keys((await loadTemplateFile(source)).templates ?? {})[0] ?? \"\");\n return { id, source, ...body };\n}\n","/**\n * `tools` command core. One row per lint job: which tool performs it, whether\n * this checkout can run it, what it read its settings from, and the input\n * formats it understands.\n *\n * It replaces `formats`, which reported the parser registry alone. Proposal\n * 0050 records the rename. The registry is here as one column of the job that\n * reads it, because the formats belong to the tool performing that job.\n *\n * The column lists exactly the formats the tool reads, so a row carries no\n * state: a listed format is one that is read, and `--as` accepts every name in\n * it.\n *\n * Returns data; `src/lint/reporters/index.ts` renders it.\n */\nimport type { ContentKind } from \"../types.js\";\nimport { BLOCK_KIND_NODE } from \"../core/template.js\";\nimport { resolveStructureTool } from \"../tools/index.js\";\nimport {\n LINT_JOBS,\n resolveLintRun,\n type LintConfig,\n type LintJob,\n type LintTool,\n} from \"../core/config.js\";\n\n/**\n * The content kinds a template rule can actually name - `BLOCK_KIND_NODE`'s\n * values, the nine block-rule keys map onto. `manni lint tools` lists this\n * column to answer \"can my rule run against this format\", and a rule can\n * never ask about `listItem`, `tableRow`, `tableCell`, or `definitionItem`:\n * those are structural kinds a parser reports so the content model can\n * describe a list's items or a table's cells, not kinds a `sections:` rule\n * counts on its own. What a parser *declares* (`DocumentParser.kinds`, read by\n * the pruner in `validator.ts`) is untouched - this is a display decision, so\n * it belongs here rather than trimming the declaration itself.\n */\nconst REPORTABLE_KINDS = new Set<ContentKind>(Object.values(BLOCK_KIND_NODE));\n\nexport interface FormatInfo {\n /** Parser name, also what `--as` accepts. */\n name: string;\n label: string;\n extensions: string[];\n /** The content kinds this format's parser actually emits today. */\n kinds: ContentKind[];\n}\n\n/** One job, and the tool that would perform it on this run. */\nexport interface ToolInfo {\n job: LintJob;\n tool: LintTool;\n /** Whether the config declares this job, or anything the job's tool reads. */\n configured: boolean;\n /** Whether the tool can run here, as its own probe reported it. */\n available: boolean;\n /**\n * The version the probe reported, or null when it reported none.\n *\n * Null rather than a placeholder string, because this is the shape\n * `-f json` emits: a consumer can test for an absent version, where a dash\n * would be a value it has to know to recognize. The pretty reporter renders\n * the dash.\n */\n version: string | null;\n /** Where the tool read its settings: the config file, or the defaults. */\n config: string;\n /** The input formats the tool reads. */\n formats: FormatInfo[];\n}\n\nexport interface ToolsOptions {\n cwd?: string;\n /** `-c/--config`. */\n configPath?: string;\n /** `--no-config`: ignore any discovered config file. */\n noConfig?: boolean;\n}\n\n/** What a run with no config file to read reports in the `config` column. */\nexport const BUILT_IN_DEFAULTS = \"built-in defaults\";\n\n/**\n * Whether the config says anything about this job.\n *\n * The job's own mapping counts, and so does every key its tool reads: a repo\n * that has written `templates:` and `overrides:` has configured the structure\n * job whether or not it also spelled `structure:` out. Saying otherwise would\n * report \"not configured\" beside a run those keys visibly govern.\n */\nfunction isConfigured(job: LintJob, config: LintConfig): boolean {\n if (config[job] !== undefined) return true;\n return (\n config.templates !== undefined ||\n config.template !== undefined ||\n config.types !== undefined ||\n config.overrides !== undefined\n );\n}\n\nexport async function runTools(opts: ToolsOptions = {}): Promise<ToolInfo[]> {\n // The same resolution every other command does, so a config this command\n // cannot read is the same exit 2 with the same message, rather than a row\n // saying \"built-in defaults\" over a file that is really there and broken.\n const cwd = opts.cwd ?? process.cwd();\n const run = await resolveLintRun({\n cwd,\n configPath: opts.configPath,\n noConfig: opts.noConfig,\n inputs: [],\n });\n\n return await Promise.all(\n LINT_JOBS.map(async (job) => {\n const tool: LintTool = run.config[job]?.tool ?? \"manni\";\n // The row is the tool's own answer about itself. It used to be two\n // literals that happened to be right while manni was the only tool:\n // \"available\" was hard-coded true, and the version was this package's\n // whatever performed the job.\n const descriptor = resolveStructureTool(tool);\n // The family's `tools:` travels with the probe: a tool outside the\n // package is found where its own `tools.<tool>` says it is, so probing\n // without it would report \"not available\" over the very installation the\n // run would go on to use.\n const probed = await descriptor.probe({\n cwd,\n tools: run.tools,\n ...(run.configDir === undefined ? {} : { configDir: run.configDir }),\n });\n return {\n job,\n tool,\n configured: isConfigured(job, run.config),\n available: probed.available,\n version: probed.version,\n config: run.configSource ?? BUILT_IN_DEFAULTS,\n formats: descriptor.formats().map((format) => ({\n ...format,\n kinds: format.kinds.filter((kind) => REPORTABLE_KINDS.has(kind)),\n })),\n };\n }),\n );\n}\n","/**\n * `manni lint templates show`: what a template asks for, as a reader scans it\n * (`pretty`), as data (`json`), or as a page to start writing from\n * (`markdown`).\n *\n * The content lines use the nouns the count findings use, so \"Contains at\n * least 1 table.\" here and \"Expected at least 1 table\" in a finding read as\n * the same rule.\n */\nimport { palette, type Colors } from \"../../shared/color.js\";\nimport { quoteList } from \"../rules/index.js\";\nimport {\n BLOCK_KINDS,\n occurrenceRange,\n type BlockKind,\n type BlockRule,\n type HeadingRule,\n type Occurrences,\n type Rule,\n} from \"../core/template.js\";\nimport type { TemplateShow } from \"../commands/templates.js\";\nimport type { ReportOptions } from \"./index.js\";\n\n/** `templates show -f`. */\nexport const SHOW_FORMATS = [\"pretty\", \"json\", \"markdown\"] as const;\nexport type ShowFormat = (typeof SHOW_FORMATS)[number];\n\nexport function isShowFormat(value: string): value is ShowFormat {\n return (SHOW_FORMATS as readonly string[]).includes(value);\n}\n\n/** How often a rule may occur, in words. */\nexport function occurrenceWords(rule: Occurrences): string {\n const { min, max } = occurrenceRange(rule);\n if (max === 0) return \"forbidden\";\n if (max === null) {\n if (min === 0) return \"optional, repeats\";\n if (min === 1) return \"required, repeats\";\n return `at least ${min}`;\n }\n if (min === 1 && max === 1) return \"required\";\n if (min === 0 && max === 1) return \"optional\";\n return `${min} to ${max}`;\n}\n\nfunction headingForm(heading: HeadingRule | undefined): string {\n if (heading === undefined) return \"(any heading)\";\n if (heading === false) return \"(no heading)\";\n if (typeof heading === \"string\") return heading;\n if (Array.isArray(heading)) return heading.join(\" | \");\n return `/${heading.pattern}/`;\n}\n\nconst NOUNS: Record<BlockKind, string> = {\n paragraphs: \"paragraph\",\n codeBlocks: \"code block\",\n lists: \"list\",\n tables: \"table\",\n admonitions: \"admonition\",\n images: \"image\",\n blockquotes: \"blockquote\",\n definitionLists: \"definition list\",\n elements: \"element\",\n};\n\n/** The noun one kind's rule counts, narrowed the way its count finding is. */\nfunction noun(kind: BlockKind, block: BlockRule): string {\n if (kind === \"lists\" && block.lists?.ordered !== undefined) {\n return block.lists.ordered ? \"numbered list\" : \"bulleted list\";\n }\n if (kind === \"admonitions\" && block.admonitions?.variant !== undefined) {\n return `${block.admonitions.variant} admonition`;\n }\n const tag = block.elements?.tag;\n if (kind === \"elements\" && tag !== undefined) {\n const tags = Array.isArray(tag) ? tag : [tag];\n return `${tags.map((t) => `\"${t}\"`).join(\" or \")} element`;\n }\n return NOUNS[kind];\n}\n\nfunction plural(word: string, n: number): string {\n return n === 1 ? word : `${word}s`;\n}\n\n/** `at least 1 table`, `at most 3 lists`, `no images`. */\nfunction counted(range: Occurrences, word: string): string {\n const { min, max } = occurrenceRange(range);\n if (max === 0) return `no ${plural(word, 0)}`;\n if (max === null) {\n return min === 0 ? `any number of ${plural(word, 0)}` : `at least ${min} ${plural(word, min)}`;\n }\n if (min === 0) return `at most ${max} ${plural(word, max)}`;\n if (min === max) return `exactly ${min} ${plural(word, min)}`;\n return `${min} to ${max} ${plural(word, max)}`;\n}\n\n/** What else a kind's rule asks of each thing it counts. */\nfunction qualifiers(block: BlockRule): string {\n const parts: string[] = [];\n if (block.paragraphs?.pattern !== undefined) {\n parts.push(`each matching /${block.paragraphs.pattern}/`);\n }\n const language = block.codeBlocks?.language;\n if (language !== undefined) {\n parts.push(`in ${(Array.isArray(language) ? language : [language]).join(\" or \")}`);\n }\n if (block.codeBlocks?.fenceInfo !== undefined) {\n parts.push(`with fence info \"${block.codeBlocks.fenceInfo}\"`);\n }\n if (block.lists?.items !== undefined) {\n parts.push(`each with ${counted(block.lists.items, \"item\")}`);\n }\n if (block.tables?.columns !== undefined) {\n parts.push(`with columns ${quoteList(block.tables.columns)}`);\n }\n return parts.map((p) => `, ${p}`).join(\"\");\n}\n\n/** The content minimums a rule sets, one line per kind, then its order. */\nfunction contentLines(rule: Rule): string[] {\n const lines: string[] = [];\n const contains = rule.contains;\n if (contains !== undefined) {\n for (const kind of BLOCK_KINDS) {\n const range = contains[kind];\n if (range === undefined) continue;\n lines.push(\n `Contains ${counted(range, noun(kind, contains))}${qualifiers({ [kind]: range })}.`,\n );\n }\n }\n if (rule.sequence !== undefined) {\n const kinds = rule.sequence.flatMap((entry) => {\n const kind = BLOCK_KINDS.find((k) => entry[k] !== undefined);\n return kind === undefined ? [] : [noun(kind, entry)];\n });\n lines.push(`In order: ${kinds.join(\", \")}.`);\n }\n return lines;\n}\n\nfunction detailLines(rule: Rule): string[] {\n return [...contentLines(rule), ...(rule.description === undefined ? [] : [rule.description])];\n}\n\n/* -------------------------------------------------------------------------- *\n * pretty\n * -------------------------------------------------------------------------- */\n\nfunction prettyRule(c: Colors, rule: Rule, level: number, indent: number, out: string[]): void {\n const pad = \" \".repeat(indent);\n const hashes = \"#\".repeat(level);\n const occurs = c.dim(occurrenceWords(rule));\n if (rule.repeat !== undefined) {\n const group = rule.id === undefined ? \"(group)\" : `(group ${rule.id})`;\n out.push(`${pad}${hashes} ${group} ${occurs}`);\n } else {\n const id = rule.id === undefined ? \"\" : `${c.cyan(rule.id)} · `;\n out.push(`${pad}${hashes} ${headingForm(rule.heading)} ${id}${occurs}`);\n }\n for (const line of detailLines(rule)) out.push(`${pad} ${line}`);\n for (const member of rule.repeat ?? []) prettyRule(c, member, level, indent + 2, out);\n for (const section of rule.sections ?? []) {\n prettyRule(c, section, level + 1, indent + 2, out);\n }\n}\n\nfunction renderPrettyShow(show: TemplateShow, c: Colors): string {\n const title = show.title ? ` ${c.dim(\"—\")} ${show.title}` : \"\";\n const lines = [`${c.bold(show.id)}${title}`];\n if (show.types !== undefined && show.types.length > 0) {\n lines.push(` types: ${show.types.join(\", \")}`);\n }\n if (show.description !== undefined) lines.push(` ${show.description}`);\n for (const line of contentLines(show)) lines.push(` ${line}`);\n if (show.guide !== undefined) lines.push(` Guide: ${show.guide}`);\n const sections = show.sections ?? [];\n if (sections.length > 0) lines.push(\"\");\n for (const section of sections) prettyRule(c, section, 2, 2, lines);\n return lines.join(\"\\n\");\n}\n\n/* -------------------------------------------------------------------------- *\n * markdown\n * -------------------------------------------------------------------------- */\n\n/** The rules a skeleton writes: no catch-all at the end, nothing forbidden. */\nfunction skeletonRules(rules: Rule[] | undefined): Rule[] {\n const kept = (rules ?? []).filter((rule) => occurrenceRange(rule).max !== 0);\n const last = kept[kept.length - 1];\n if (\n last !== undefined &&\n last.id === undefined &&\n last.heading === undefined &&\n last.repeat === undefined\n ) {\n kept.pop();\n }\n return kept;\n}\n\nfunction sentence(text: string): string {\n const trimmed = text.trim();\n return /[.!?]$/.test(trimmed) ? trimmed : `${trimmed}.`;\n}\n\n/** One HTML comment. `--` may not appear inside one, so dashes are spaced. */\nfunction comment(parts: string[]): string {\n return `<!-- ${parts.join(\" \").replace(/-(?=-)/g, \"- \")} -->`;\n}\n\nfunction capitalise(text: string): string {\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\n/** The heading a skeleton writes: the exact text, or the first of a list. */\nfunction headingText(heading: HeadingRule | undefined): string | undefined {\n if (typeof heading === \"string\") return heading;\n return Array.isArray(heading) ? heading[0] : undefined;\n}\n\nfunction markdownRule(rule: Rule, level: number, out: string[]): void {\n if (rule.repeat !== undefined) {\n for (const member of skeletonRules(rule.repeat)) markdownRule(member, level, out);\n } else {\n if (rule.heading !== false) {\n const text = headingText(rule.heading) ?? `{${rule.id ?? \"section\"}}`;\n out.push(`${\"#\".repeat(level)} ${text}`, \"\");\n }\n out.push(\n comment([sentence(capitalise(occurrenceWords(rule))), ...detailLines(rule).map(sentence)]),\n \"\",\n );\n }\n for (const section of skeletonRules(rule.sections)) markdownRule(section, level + 1, out);\n}\n\nfunction renderMarkdownShow(show: TemplateShow): string {\n const lines: string[] = [];\n const type = show.types?.[0];\n if (type !== undefined) lines.push(\"---\", `type: ${type}`, \"---\", \"\");\n lines.push(`# ${headingText(show.heading) ?? \"{Title}\"}`, \"\");\n const parts = [\n sentence(show.id),\n ...contentLines(show),\n ...(show.description === undefined ? [] : [sentence(show.description)]),\n ...(show.guide === undefined ? [] : [`Guide: ${show.guide}`]),\n ];\n lines.push(comment(parts), \"\");\n for (const section of skeletonRules(show.sections)) markdownRule(section, 2, lines);\n return lines.join(\"\\n\").trimEnd();\n}\n\n/** Render one shown template. */\nexport function renderTemplateShow(\n show: TemplateShow,\n format: ShowFormat,\n opts: ReportOptions = {},\n): string {\n if (format === \"json\") return JSON.stringify(show, null, 2);\n if (format === \"markdown\") return renderMarkdownShow(show);\n return renderPrettyShow(show, palette(opts.color ?? false));\n}\n"],"mappings":"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","names":[]}
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  resultFor,
4
4
  splitBaselined
5
- } from "./chunk-7JUIJ7Q5.js";
5
+ } from "./chunk-GWI6JPTT.js";
6
6
  import {
7
7
  errorSite
8
- } from "./chunk-4TGIGVFO.js";
8
+ } from "./chunk-WVXCN5DS.js";
9
9
  import {
10
10
  escapeWorkflowCommandMessage,
11
11
  escapeWorkflowCommandProperty
@@ -51,4 +51,4 @@ export {
51
51
  findingMessage,
52
52
  renderCheckGithub
53
53
  };
54
- //# sourceMappingURL=chunk-KQRYW4DN.js.map
54
+ //# sourceMappingURL=chunk-VNYXK7TM.js.map
@@ -8,7 +8,7 @@ import {
8
8
  newAvailability,
9
9
  newReplay,
10
10
  remapAvailability
11
- } from "./chunk-QUG53QGZ.js";
11
+ } from "./chunk-E6BVUDGY.js";
12
12
  import {
13
13
  makeRedactor
14
14
  } from "./chunk-CU57HT2E.js";
@@ -864,4 +864,4 @@ export {
864
864
  parseTraceContent,
865
865
  renderTrace
866
866
  };
867
- //# sourceMappingURL=chunk-3FXPIZXL.js.map
867
+ //# sourceMappingURL=chunk-VOXOBUTX.js.map
@@ -22,7 +22,7 @@ import {
22
22
  runRelocate,
23
23
  runVendorSchema,
24
24
  terminalConfirm
25
- } from "./chunk-PP22XDW2.js";
25
+ } from "./chunk-IGQMBHFY.js";
26
26
  import {
27
27
  COMMON_FORMATS,
28
28
  COMMON_FORMAT_LIST,
@@ -38,11 +38,11 @@ import {
38
38
  isQueryFormat,
39
39
  isReportFormat,
40
40
  render
41
- } from "./chunk-WWKXPPN5.js";
41
+ } from "./chunk-BMBAAPGN.js";
42
42
  import {
43
43
  rowsToFindings,
44
44
  runValidate
45
- } from "./chunk-AATCO43N.js";
45
+ } from "./chunk-52WO7ESI.js";
46
46
  import {
47
47
  LOCATION_EXTERNAL_SCHEMA,
48
48
  LOCATION_PAGE_SCHEMA,
@@ -60,7 +60,7 @@ import {
60
60
  relocationContext,
61
61
  reportConfig,
62
62
  splitList
63
- } from "./chunk-EBZ4QKKX.js";
63
+ } from "./chunk-LNGSE7V2.js";
64
64
  import {
65
65
  DocmetaError,
66
66
  STDIN_LABEL,
@@ -70,7 +70,7 @@ import {
70
70
  schemaLoadOptions,
71
71
  supportedExtensions,
72
72
  toJsonText
73
- } from "./chunk-Y4TDIUG6.js";
73
+ } from "./chunk-HY6ROJTH.js";
74
74
  import {
75
75
  palette,
76
76
  shouldColor
@@ -87,7 +87,7 @@ import {
87
87
  } from "./chunk-VM7VAFJW.js";
88
88
  import {
89
89
  package_default
90
- } from "./chunk-GNUZ37L2.js";
90
+ } from "./chunk-HKTGHLBA.js";
91
91
  import {
92
92
  programName
93
93
  } from "./chunk-OWBRDNRZ.js";
@@ -1525,4 +1525,4 @@ export {
1525
1525
  parseQueryParams,
1526
1526
  buildProgram
1527
1527
  };
1528
- //# sourceMappingURL=chunk-4IW6FAUN.js.map
1528
+ //# sourceMappingURL=chunk-VYBYUQIP.js.map
@@ -15,7 +15,7 @@ import {
15
15
  paragraphAfter,
16
16
  parseSrc,
17
17
  ruleId
18
- } from "./chunk-J67EOBN3.js";
18
+ } from "./chunk-X4MPUD4B.js";
19
19
  import {
20
20
  findWindows,
21
21
  hashLines,
@@ -24,10 +24,10 @@ import {
24
24
  spellLines,
25
25
  toBodyLines,
26
26
  toFileLines
27
- } from "./chunk-EBZ4QKKX.js";
27
+ } from "./chunk-LNGSE7V2.js";
28
28
  import {
29
29
  isErrorSeverity
30
- } from "./chunk-Y4TDIUG6.js";
30
+ } from "./chunk-HY6ROJTH.js";
31
31
 
32
32
  // src/cite/core/spell.ts
33
33
  function shortPin(integrity) {
@@ -619,4 +619,4 @@ export {
619
619
  errorSite,
620
620
  toValidationResult
621
621
  };
622
- //# sourceMappingURL=chunk-4TGIGVFO.js.map
622
+ //# sourceMappingURL=chunk-WVXCN5DS.js.map
@@ -12,7 +12,7 @@ import {
12
12
  lineSpec,
13
13
  parseLines,
14
14
  sliceLines
15
- } from "./chunk-EBZ4QKKX.js";
15
+ } from "./chunk-LNGSE7V2.js";
16
16
  import {
17
17
  __default3 as __default,
18
18
  extractorByName,
@@ -20,7 +20,7 @@ import {
20
20
  hasFrontmatterFence,
21
21
  locateFrontmatter,
22
22
  supportedExtensions
23
- } from "./chunk-Y4TDIUG6.js";
23
+ } from "./chunk-HY6ROJTH.js";
24
24
  import {
25
25
  isEncryptedValue
26
26
  } from "./chunk-OTJOBZJ5.js";
@@ -971,4 +971,4 @@ export {
971
971
  citationInputs,
972
972
  readPage
973
973
  };
974
- //# sourceMappingURL=chunk-J67EOBN3.js.map
974
+ //# sourceMappingURL=chunk-X4MPUD4B.js.map
@@ -8,11 +8,11 @@ import {
8
8
  parseGraph,
9
9
  renderQuestionSummary,
10
10
  validateGraph
11
- } from "./chunk-XEYS3KAZ.js";
11
+ } from "./chunk-JUL2PRQN.js";
12
12
  import {
13
13
  documentBase,
14
14
  loadRunConfig
15
- } from "./chunk-J4ZOTZII.js";
15
+ } from "./chunk-J5NOWIJ3.js";
16
16
  import {
17
17
  escapeWorkflowCommandMessage,
18
18
  escapeWorkflowCommandProperty
@@ -114,4 +114,4 @@ export {
114
114
  runCheck,
115
115
  renderCheck
116
116
  };
117
- //# sourceMappingURL=chunk-W7EZJPRX.js.map
117
+ //# sourceMappingURL=chunk-Y6M4JFKG.js.map
@@ -21,7 +21,7 @@ import {
21
21
  sidecarsFor,
22
22
  sourceIndexFor,
23
23
  wordShare
24
- } from "./chunk-5OKSFNUV.js";
24
+ } from "./chunk-DQOM3DEU.js";
25
25
  import {
26
26
  applyMarkerMoves,
27
27
  blockMatches,
@@ -34,7 +34,7 @@ import {
34
34
  spellAt,
35
35
  spellElsewhere,
36
36
  unitAt
37
- } from "./chunk-4TGIGVFO.js";
37
+ } from "./chunk-WVXCN5DS.js";
38
38
  import {
39
39
  ANY_FENCE,
40
40
  CiteError,
@@ -61,10 +61,10 @@ import {
61
61
  spellSource,
62
62
  tooWide,
63
63
  unitHolding
64
- } from "./chunk-J67EOBN3.js";
64
+ } from "./chunk-X4MPUD4B.js";
65
65
  import {
66
66
  ensureEncryptionKey
67
- } from "./chunk-PP22XDW2.js";
67
+ } from "./chunk-IGQMBHFY.js";
68
68
  import {
69
69
  ENCRYPTION_KEY_ENV,
70
70
  STDIN_REQUIRES_AS,
@@ -84,7 +84,7 @@ import {
84
84
  splitLines,
85
85
  toBodyLines,
86
86
  toFileLines
87
- } from "./chunk-EBZ4QKKX.js";
87
+ } from "./chunk-LNGSE7V2.js";
88
88
  import {
89
89
  DocmetaError,
90
90
  STDIN_LABEL,
@@ -92,7 +92,7 @@ import {
92
92
  extractorByName,
93
93
  locateFrontmatter,
94
94
  writeFileAtomic
95
- } from "./chunk-Y4TDIUG6.js";
95
+ } from "./chunk-HY6ROJTH.js";
96
96
  import {
97
97
  isEncryptedValue
98
98
  } from "./chunk-OTJOBZJ5.js";
@@ -2160,4 +2160,4 @@ export {
2160
2160
  runRemove,
2161
2161
  runUpdate
2162
2162
  };
2163
- //# sourceMappingURL=chunk-U4SY2TJS.js.map
2163
+ //# sourceMappingURL=chunk-YZ4TJLZQ.js.map
@@ -18,7 +18,7 @@ import {
18
18
  import "./chunk-VM7VAFJW.js";
19
19
  import {
20
20
  package_default
21
- } from "./chunk-GNUZ37L2.js";
21
+ } from "./chunk-HKTGHLBA.js";
22
22
  import "./chunk-OWBRDNRZ.js";
23
23
  import {
24
24
  ToolError,
@@ -836,4 +836,4 @@ function buildProgram() {
836
836
  export {
837
837
  buildProgram
838
838
  };
839
- //# sourceMappingURL=cli-USPQURPP.js.map
839
+ //# sourceMappingURL=cli-4JHQCPHU.js.map
@@ -3,33 +3,33 @@ import {
3
3
  runAdd,
4
4
  runRemove,
5
5
  runUpdate
6
- } from "./chunk-U4SY2TJS.js";
6
+ } from "./chunk-YZ4TJLZQ.js";
7
7
  import {
8
8
  runCheck
9
- } from "./chunk-5OKSFNUV.js";
9
+ } from "./chunk-DQOM3DEU.js";
10
10
  import {
11
11
  findingMessage,
12
12
  renderCheckGithub
13
- } from "./chunk-KQRYW4DN.js";
13
+ } from "./chunk-VNYXK7TM.js";
14
14
  import {
15
15
  renderCheckPretty,
16
16
  renderRemovePretty,
17
17
  renderUpdatePretty
18
- } from "./chunk-7JUIJ7Q5.js";
18
+ } from "./chunk-GWI6JPTT.js";
19
19
  import {
20
20
  errorSite,
21
21
  shortCommit,
22
22
  shortLine,
23
23
  shortPin,
24
24
  shortSrc
25
- } from "./chunk-4TGIGVFO.js";
25
+ } from "./chunk-WVXCN5DS.js";
26
26
  import {
27
27
  CiteError,
28
28
  RULE_ID_PREFIX,
29
29
  asCiteError,
30
30
  isCiteRule,
31
31
  spellSource
32
- } from "./chunk-J67EOBN3.js";
32
+ } from "./chunk-X4MPUD4B.js";
33
33
  import {
34
34
  renderCheckJson,
35
35
  renderRemoveJson,
@@ -37,11 +37,11 @@ import {
37
37
  } from "./chunk-PCE7QHXJ.js";
38
38
  import "./chunk-IKEWBMCN.js";
39
39
  import "./chunk-YUTVAMWW.js";
40
- import "./chunk-VXU75N5R.js";
40
+ import "./chunk-HIEGOW7X.js";
41
41
  import {
42
42
  terminalConfirm
43
- } from "./chunk-PP22XDW2.js";
44
- import "./chunk-DTXLFSAB.js";
43
+ } from "./chunk-IGQMBHFY.js";
44
+ import "./chunk-OUAH7XF2.js";
45
45
  import {
46
46
  COMMON_FORMAT_LIST,
47
47
  OMITTED_WHEN_CLEAN,
@@ -51,8 +51,8 @@ import {
51
51
  isReportFormat,
52
52
  renderJunit,
53
53
  renderSarif
54
- } from "./chunk-WWKXPPN5.js";
55
- import "./chunk-AATCO43N.js";
54
+ } from "./chunk-BMBAAPGN.js";
55
+ import "./chunk-52WO7ESI.js";
56
56
  import {
57
57
  collect,
58
58
  configOption,
@@ -61,11 +61,11 @@ import {
61
61
  reportConfig,
62
62
  splitList,
63
63
  splitPageArgument
64
- } from "./chunk-EBZ4QKKX.js";
64
+ } from "./chunk-LNGSE7V2.js";
65
65
  import "./chunk-DSWKBZWW.js";
66
66
  import {
67
67
  STDIN_TOKEN
68
- } from "./chunk-Y4TDIUG6.js";
68
+ } from "./chunk-HY6ROJTH.js";
69
69
  import "./chunk-77AINBYM.js";
70
70
  import "./chunk-MNH7QO4Z.js";
71
71
  import {
@@ -81,7 +81,7 @@ import {
81
81
  import "./chunk-VM7VAFJW.js";
82
82
  import {
83
83
  package_default
84
- } from "./chunk-GNUZ37L2.js";
84
+ } from "./chunk-HKTGHLBA.js";
85
85
  import "./chunk-OWBRDNRZ.js";
86
86
  import "./chunk-G3T47CFV.js";
87
87
  import "./chunk-2H7UOFLK.js";
@@ -551,4 +551,4 @@ export {
551
551
  colorFor,
552
552
  splitPageArgument2 as splitPageArgument
553
553
  };
554
- //# sourceMappingURL=cli-UL2IFH3R.js.map
554
+ //# sourceMappingURL=cli-7DETHSNW.js.map
@@ -4,21 +4,21 @@ import {
4
4
  parseQueryParams,
5
5
  resolveGetInputs,
6
6
  resolveQueryInputs
7
- } from "./chunk-4IW6FAUN.js";
8
- import "./chunk-PP22XDW2.js";
9
- import "./chunk-DTXLFSAB.js";
10
- import "./chunk-WWKXPPN5.js";
11
- import "./chunk-AATCO43N.js";
12
- import "./chunk-EBZ4QKKX.js";
7
+ } from "./chunk-VYBYUQIP.js";
8
+ import "./chunk-IGQMBHFY.js";
9
+ import "./chunk-OUAH7XF2.js";
10
+ import "./chunk-BMBAAPGN.js";
11
+ import "./chunk-52WO7ESI.js";
12
+ import "./chunk-LNGSE7V2.js";
13
13
  import "./chunk-DSWKBZWW.js";
14
- import "./chunk-Y4TDIUG6.js";
14
+ import "./chunk-HY6ROJTH.js";
15
15
  import "./chunk-MNH7QO4Z.js";
16
16
  import "./chunk-RNVYGWIC.js";
17
17
  import "./chunk-YEUYKR62.js";
18
18
  import "./chunk-OTJOBZJ5.js";
19
19
  import "./chunk-HX44GB4Z.js";
20
20
  import "./chunk-VM7VAFJW.js";
21
- import "./chunk-GNUZ37L2.js";
21
+ import "./chunk-HKTGHLBA.js";
22
22
  import "./chunk-OWBRDNRZ.js";
23
23
  import "./chunk-G3T47CFV.js";
24
24
  import "./chunk-2H7UOFLK.js";
@@ -28,4 +28,4 @@ export {
28
28
  resolveGetInputs,
29
29
  resolveQueryInputs
30
30
  };
31
- //# sourceMappingURL=cli-4ANSKDPD.js.map
31
+ //# sourceMappingURL=cli-AZKWTCFV.js.map
@@ -5,15 +5,15 @@ import {
5
5
  renderJson,
6
6
  renderPretty,
7
7
  runTest
8
- } from "./chunk-Z42MO7SO.js";
8
+ } from "./chunk-NSAW7U42.js";
9
9
  import "./chunk-ZPLVANY2.js";
10
- import "./chunk-VXU75N5R.js";
11
- import "./chunk-DTXLFSAB.js";
12
- import "./chunk-WWKXPPN5.js";
10
+ import "./chunk-HIEGOW7X.js";
11
+ import "./chunk-OUAH7XF2.js";
12
+ import "./chunk-BMBAAPGN.js";
13
13
  import {
14
14
  collect
15
- } from "./chunk-EBZ4QKKX.js";
16
- import "./chunk-Y4TDIUG6.js";
15
+ } from "./chunk-LNGSE7V2.js";
16
+ import "./chunk-HY6ROJTH.js";
17
17
  import "./chunk-MNH7QO4Z.js";
18
18
  import {
19
19
  colorFor
@@ -26,7 +26,7 @@ import "./chunk-HX44GB4Z.js";
26
26
  import "./chunk-VM7VAFJW.js";
27
27
  import {
28
28
  package_default
29
- } from "./chunk-GNUZ37L2.js";
29
+ } from "./chunk-HKTGHLBA.js";
30
30
  import "./chunk-OWBRDNRZ.js";
31
31
  import "./chunk-G3T47CFV.js";
32
32
  import "./chunk-2H7UOFLK.js";
@@ -80,4 +80,4 @@ function buildProgram() {
80
80
  export {
81
81
  buildProgram
82
82
  };
83
- //# sourceMappingURL=cli-2OQKCKRD.js.map
83
+ //# sourceMappingURL=cli-BW5VOFOZ.js.map
@@ -27,7 +27,7 @@ import "./chunk-HX44GB4Z.js";
27
27
  import "./chunk-VM7VAFJW.js";
28
28
  import {
29
29
  package_default
30
- } from "./chunk-GNUZ37L2.js";
30
+ } from "./chunk-HKTGHLBA.js";
31
31
  import {
32
32
  programName
33
33
  } from "./chunk-OWBRDNRZ.js";
@@ -1202,4 +1202,4 @@ export {
1202
1202
  resolveCrawl,
1203
1203
  resolveMaxPages
1204
1204
  };
1205
- //# sourceMappingURL=cli-5QGP6R63.js.map
1205
+ //# sourceMappingURL=cli-DGFLJ2DD.js.map
@@ -3,30 +3,30 @@ import {
3
3
  KeyError,
4
4
  runKeyRotate,
5
5
  runKeySet
6
- } from "./chunk-ZCJUSQM7.js";
7
- import "./chunk-U4SY2TJS.js";
8
- import "./chunk-5OKSFNUV.js";
9
- import "./chunk-KQRYW4DN.js";
10
- import "./chunk-7JUIJ7Q5.js";
11
- import "./chunk-4TGIGVFO.js";
12
- import "./chunk-J67EOBN3.js";
6
+ } from "./chunk-OYIWF3B2.js";
7
+ import "./chunk-YZ4TJLZQ.js";
8
+ import "./chunk-DQOM3DEU.js";
9
+ import "./chunk-VNYXK7TM.js";
10
+ import "./chunk-GWI6JPTT.js";
11
+ import "./chunk-WVXCN5DS.js";
12
+ import "./chunk-X4MPUD4B.js";
13
13
  import "./chunk-PCE7QHXJ.js";
14
14
  import "./chunk-IKEWBMCN.js";
15
15
  import "./chunk-YUTVAMWW.js";
16
- import "./chunk-VXU75N5R.js";
17
- import "./chunk-PP22XDW2.js";
18
- import "./chunk-DTXLFSAB.js";
16
+ import "./chunk-HIEGOW7X.js";
17
+ import "./chunk-IGQMBHFY.js";
18
+ import "./chunk-OUAH7XF2.js";
19
19
  import {
20
20
  COMMON_FORMAT_LIST
21
- } from "./chunk-WWKXPPN5.js";
22
- import "./chunk-AATCO43N.js";
21
+ } from "./chunk-BMBAAPGN.js";
22
+ import "./chunk-52WO7ESI.js";
23
23
  import {
24
24
  collect,
25
25
  explicitFalse,
26
26
  splitList
27
- } from "./chunk-EBZ4QKKX.js";
27
+ } from "./chunk-LNGSE7V2.js";
28
28
  import "./chunk-DSWKBZWW.js";
29
- import "./chunk-Y4TDIUG6.js";
29
+ import "./chunk-HY6ROJTH.js";
30
30
  import "./chunk-77AINBYM.js";
31
31
  import "./chunk-MNH7QO4Z.js";
32
32
  import {
@@ -43,7 +43,7 @@ import {
43
43
  import "./chunk-VM7VAFJW.js";
44
44
  import {
45
45
  package_default
46
- } from "./chunk-GNUZ37L2.js";
46
+ } from "./chunk-HKTGHLBA.js";
47
47
  import "./chunk-OWBRDNRZ.js";
48
48
  import "./chunk-G3T47CFV.js";
49
49
  import "./chunk-2H7UOFLK.js";
@@ -232,4 +232,4 @@ function buildProgram() {
232
232
  export {
233
233
  buildProgram
234
234
  };
235
- //# sourceMappingURL=cli-SDTXHLCA.js.map
235
+ //# sourceMappingURL=cli-ECVT4YXR.js.map