@hawkeyexl/manni 4.11.0 → 4.12.1

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 (238) hide show
  1. package/README.md +1 -1
  2. package/dist/{batch-UAULUMGH.js → batch-KMGZMIAQ.js} +20 -19
  3. package/dist/build-NO4AWCYG.js +36 -0
  4. package/dist/calibrate-XQUG5XAK.js +41 -0
  5. package/dist/capture-5XE3ZMXK.js +38 -0
  6. package/dist/{check-YEOYBFST.js → check-HTNPLWOV.js} +19 -18
  7. package/dist/check-RJ45IBA6.js +34 -0
  8. package/dist/{check-VELUQAUW.js → check-W24BQNCT.js} +35 -34
  9. package/dist/{check-VELUQAUW.js.map → check-W24BQNCT.js.map} +1 -1
  10. package/dist/check-WFXSXICD.js +30 -0
  11. package/dist/{chunk-IGSHYP74.js → chunk-23P7KMJM.js} +4 -4
  12. package/dist/{chunk-HA6MQMOY.js → chunk-24J7TYPU.js} +6 -6
  13. package/dist/{chunk-PCS4VJBV.js → chunk-37QJLVS3.js} +9 -9
  14. package/dist/{chunk-4CK6ZSOK.js → chunk-3P6KCU36.js} +3 -3
  15. package/dist/{chunk-54F74XR3.js → chunk-5JBVFWVP.js} +19 -19
  16. package/dist/{chunk-B7XYNRJQ.js → chunk-6KIYVVKL.js} +2 -2
  17. package/dist/{chunk-J6IDQGJL.js → chunk-6TVH4FI7.js} +469 -85
  18. package/dist/chunk-6TVH4FI7.js.map +1 -0
  19. package/dist/{chunk-GDVZ5VII.js → chunk-7A452BPZ.js} +4 -4
  20. package/dist/{chunk-M42DZCOU.js → chunk-7FCLXEAQ.js} +2 -2
  21. package/dist/{chunk-2MJ62AYQ.js → chunk-7MCQHTQ5.js} +4 -3
  22. package/dist/chunk-7MCQHTQ5.js.map +1 -0
  23. package/dist/{chunk-LBSCW232.js → chunk-7NXPQKSB.js} +7 -7
  24. package/dist/{chunk-OPXWPJDA.js → chunk-A3TEDWBZ.js} +14 -14
  25. package/dist/{chunk-BBT6AVUG.js → chunk-BHHXU2D2.js} +2 -2
  26. package/dist/{chunk-D4N2V43Z.js → chunk-CEI2J42X.js} +13 -7
  27. package/dist/chunk-CEI2J42X.js.map +1 -0
  28. package/dist/{chunk-FQXWVS6J.js → chunk-CMMBWHT2.js} +9 -9
  29. package/dist/{chunk-EIFCP6CZ.js → chunk-CO47QJKZ.js} +2 -2
  30. package/dist/{chunk-2DRHT73U.js → chunk-CVZMKWZ5.js} +913 -1398
  31. package/dist/chunk-CVZMKWZ5.js.map +1 -0
  32. package/dist/{chunk-ADMEPUBT.js → chunk-CXWTNT2O.js} +3 -3
  33. package/dist/{chunk-LKP7QDFN.js → chunk-DAQTRAP5.js} +4 -4
  34. package/dist/chunk-DSWKBZWW.js +16 -0
  35. package/dist/chunk-DSWKBZWW.js.map +1 -0
  36. package/dist/{chunk-PWBH7DCQ.js → chunk-EESH6COU.js} +4 -4
  37. package/dist/{chunk-JPQDNYXH.js → chunk-EM67O2ET.js} +8 -2
  38. package/dist/chunk-EM67O2ET.js.map +1 -0
  39. package/dist/{chunk-HQR2ZBHW.js → chunk-I2XQRRP7.js} +36 -7
  40. package/dist/chunk-I2XQRRP7.js.map +1 -0
  41. package/dist/{chunk-NCPWXHDO.js → chunk-JEUFYSFQ.js} +4 -4
  42. package/dist/{chunk-2IR4T5PO.js → chunk-JJ4RSDSY.js} +2 -2
  43. package/dist/chunk-KCB5JCK4.js +2272 -0
  44. package/dist/chunk-KCB5JCK4.js.map +1 -0
  45. package/dist/{chunk-VSEBFHAY.js → chunk-KFKL4VTL.js} +11369 -10218
  46. package/dist/chunk-KFKL4VTL.js.map +1 -0
  47. package/dist/{chunk-PCQ7ELJH.js → chunk-L2TD7DZB.js} +109 -5
  48. package/dist/chunk-L2TD7DZB.js.map +1 -0
  49. package/dist/{chunk-WDWXAYVH.js → chunk-L3RLGGRK.js} +4 -4
  50. package/dist/{chunk-T7JAOYE5.js → chunk-L75CAZG4.js} +6 -6
  51. package/dist/{chunk-U7CTFN2J.js → chunk-MYRPMSOX.js} +7 -7
  52. package/dist/{chunk-Y6DOMTQD.js → chunk-NCF5NQV5.js} +27 -27
  53. package/dist/chunk-NCF5NQV5.js.map +1 -0
  54. package/dist/{chunk-WQWKYAAK.js → chunk-NUQF5F5J.js} +2 -2
  55. package/dist/{chunk-FUCPZVRY.js → chunk-OEN6FBUW.js} +2 -2
  56. package/dist/{chunk-FBMZJEB3.js → chunk-OKMTUAWO.js} +4 -4
  57. package/dist/{chunk-QLWC7MKD.js → chunk-OTJOBZJ5.js} +135 -135
  58. package/dist/chunk-OTJOBZJ5.js.map +1 -0
  59. package/dist/{chunk-R4WXQIOZ.js → chunk-PCEM5FOZ.js} +3 -3
  60. package/dist/{chunk-4D5IZSXM.js → chunk-PXNCRGUL.js} +3 -3
  61. package/dist/chunk-Q2QC5AZB.js +1868 -0
  62. package/dist/chunk-Q2QC5AZB.js.map +1 -0
  63. package/dist/{chunk-ODRPL3WB.js → chunk-Q3ODX5PF.js} +2 -2
  64. package/dist/{chunk-KGEQJ5CC.js → chunk-RRFFUWDL.js} +8 -8
  65. package/dist/{chunk-NSBXVPZL.js → chunk-S3XUYW5K.js} +17 -17
  66. package/dist/{chunk-LPIF5LIE.js → chunk-SAU2WQFC.js} +2 -2
  67. package/dist/{chunk-MSRU4D4P.js → chunk-SFLICIQV.js} +2 -2
  68. package/dist/{chunk-NGTVREIH.js → chunk-U6IHLEWT.js} +2 -2
  69. package/dist/{chunk-QCHVR4ZM.js → chunk-VM7VAFJW.js} +33 -7
  70. package/dist/chunk-VM7VAFJW.js.map +1 -0
  71. package/dist/{chunk-6HWBRZIN.js → chunk-VQYGLU4C.js} +252 -193
  72. package/dist/chunk-VQYGLU4C.js.map +1 -0
  73. package/dist/{chunk-2IAZEB45.js → chunk-WGMFDG6U.js} +229 -821
  74. package/dist/chunk-WGMFDG6U.js.map +1 -0
  75. package/dist/{chunk-GV56WGL2.js → chunk-WO4JYWZK.js} +1036 -883
  76. package/dist/chunk-WO4JYWZK.js.map +1 -0
  77. package/dist/chunk-XYRUDFKS.js +685 -0
  78. package/dist/chunk-XYRUDFKS.js.map +1 -0
  79. package/dist/{chunk-VQK4VHLF.js → chunk-YQV75FIL.js} +2 -2
  80. package/dist/chunk-YUTVAMWW.js +2 -0
  81. package/dist/{chunk-RLT5SEML.js → chunk-Z5MZCCTT.js} +6 -6
  82. package/dist/{chunk-BKVHX6FU.js → chunk-ZIRBFXDW.js} +5 -10
  83. package/dist/chunk-ZIRBFXDW.js.map +1 -0
  84. package/dist/{cli-O4ABTN4Z.js → cli-236TGVJG.js} +31 -30
  85. package/dist/{cli-O4ABTN4Z.js.map → cli-236TGVJG.js.map} +1 -1
  86. package/dist/{cli-3BTCK4AB.js → cli-3FAPJBEY.js} +27 -26
  87. package/dist/{cli-3BTCK4AB.js.map → cli-3FAPJBEY.js.map} +1 -1
  88. package/dist/{cli-JJMOVIKS.js → cli-BS43EVCD.js} +14 -14
  89. package/dist/{cli-RORDPAPE.js → cli-CMR4FYF6.js} +59 -38
  90. package/dist/cli-CMR4FYF6.js.map +1 -0
  91. package/dist/{cli-ONTC5PKT.js → cli-FX53PBQ3.js} +9 -9
  92. package/dist/{cli-6KZTHWGP.js → cli-IQNJLKSN.js} +37 -36
  93. package/dist/{cli-6KZTHWGP.js.map → cli-IQNJLKSN.js.map} +1 -1
  94. package/dist/{cli-4MF37HAQ.js → cli-KOMXVPXX.js} +26 -25
  95. package/dist/{cli-4MF37HAQ.js.map → cli-KOMXVPXX.js.map} +1 -1
  96. package/dist/{cli-I62SRH3R.js → cli-NGL63E53.js} +14 -13
  97. package/dist/{cli-DRMZBZLB.js → cli-QPGS2MR5.js} +43 -42
  98. package/dist/{cli-DRMZBZLB.js.map → cli-QPGS2MR5.js.map} +1 -1
  99. package/dist/{cli-VID7PJS3.js → cli-RKQX4TI3.js} +23 -22
  100. package/dist/{cli-VID7PJS3.js.map → cli-RKQX4TI3.js.map} +1 -1
  101. package/dist/{cli-VUKMWSSF.js → cli-WNEI5L7P.js} +4 -4
  102. package/dist/cli.js +19 -13
  103. package/dist/cli.js.map +1 -1
  104. package/dist/{config-XDA42RJL.js → config-JJW75SBX.js} +5 -5
  105. package/dist/docmeta.js +13 -12
  106. package/dist/docmeta.js.map +1 -1
  107. package/dist/github-4UR67MEN.js +35 -0
  108. package/dist/github-UPGKMVVF.js +30 -0
  109. package/dist/graph/runtime.d.ts +4 -1
  110. package/dist/graph/runtime.js +20 -9
  111. package/dist/graph/runtime.js.map +1 -1
  112. package/dist/{host-6GURH5HE.js → host-YSTYO5DX.js} +3 -3
  113. package/dist/index.d.ts +192 -26
  114. package/dist/index.js +129 -124
  115. package/dist/index.js.map +1 -1
  116. package/dist/{json-BXY44ED7.js → json-DQIELR36.js} +18 -17
  117. package/dist/labels-XSTJJMSG.js +73 -0
  118. package/dist/labels-XSTJJMSG.js.map +1 -0
  119. package/dist/lint-BLBGGOYM.js +34 -0
  120. package/dist/list-B3RRRWFQ.js +32 -0
  121. package/dist/list-ZFRT3JQH.js +35 -0
  122. package/dist/{page-EV7OUBAU.js → page-5ISEVJR5.js} +18 -16
  123. package/dist/{prepare-JHJDJB6I.js → prepare-KFXXG2CJ.js} +22 -21
  124. package/dist/{prepare-JHJDJB6I.js.map → prepare-KFXXG2CJ.js.map} +1 -1
  125. package/dist/{pretty-Q5Y2PA64.js → pretty-Y7CGQLAF.js} +18 -17
  126. package/dist/{pretty-SCRK66M5.js → pretty-ZISH3Q4F.js} +18 -17
  127. package/dist/{provider-527CO4DM.js → provider-LBX4IXGX.js} +3 -3
  128. package/dist/{release-3D5PK6M7.js → release-VV3UTKE5.js} +3 -3
  129. package/dist/{reporters-M6LJ2IYU.js → reporters-26H3N2KW.js} +3 -3
  130. package/dist/{reporters-A5ADKDYR.js → reporters-4STXJJE2.js} +16 -15
  131. package/dist/{reporters-RBYTASMI.js → reporters-74B4U2GZ.js} +7 -7
  132. package/dist/run-DVGTKM52.js +37 -0
  133. package/dist/{term-CQAGNG3Q.js → term-PLJEYJQV.js} +981 -141
  134. package/dist/term-PLJEYJQV.js.map +1 -0
  135. package/dist/validate-CJNFQHMD.js +19 -0
  136. package/package.json +3 -2
  137. package/plugin/manni/.claude-plugin/plugin.json +1 -1
  138. package/shapes/graph/shapes-1.1.0.ttl +785 -0
  139. package/dist/build-QSPNK5AL.js +0 -35
  140. package/dist/calibrate-KXN4URPM.js +0 -40
  141. package/dist/capture-JHTSUPUC.js +0 -37
  142. package/dist/check-MDGXEUWL.js +0 -20
  143. package/dist/check-WOQRKNZK.js +0 -29
  144. package/dist/chunk-2DRHT73U.js.map +0 -1
  145. package/dist/chunk-2IAZEB45.js.map +0 -1
  146. package/dist/chunk-2MJ62AYQ.js.map +0 -1
  147. package/dist/chunk-4VBSTXN6.js +0 -392
  148. package/dist/chunk-4VBSTXN6.js.map +0 -1
  149. package/dist/chunk-6HWBRZIN.js.map +0 -1
  150. package/dist/chunk-BKVHX6FU.js.map +0 -1
  151. package/dist/chunk-D4N2V43Z.js.map +0 -1
  152. package/dist/chunk-EFW7CAG4.js +0 -387
  153. package/dist/chunk-EFW7CAG4.js.map +0 -1
  154. package/dist/chunk-GV56WGL2.js.map +0 -1
  155. package/dist/chunk-HQR2ZBHW.js.map +0 -1
  156. package/dist/chunk-J6IDQGJL.js.map +0 -1
  157. package/dist/chunk-JPQDNYXH.js.map +0 -1
  158. package/dist/chunk-JROBZ7JA.js +0 -818
  159. package/dist/chunk-JROBZ7JA.js.map +0 -1
  160. package/dist/chunk-PCQ7ELJH.js.map +0 -1
  161. package/dist/chunk-QCHVR4ZM.js.map +0 -1
  162. package/dist/chunk-QLWC7MKD.js.map +0 -1
  163. package/dist/chunk-TU2WUBVZ.js +0 -2
  164. package/dist/chunk-VSEBFHAY.js.map +0 -1
  165. package/dist/chunk-Y6DOMTQD.js.map +0 -1
  166. package/dist/cli-RORDPAPE.js.map +0 -1
  167. package/dist/github-RY3FRA6P.js +0 -29
  168. package/dist/github-YKQSH7FS.js +0 -34
  169. package/dist/lint-YJ2L22BW.js +0 -33
  170. package/dist/list-NSG24VVX.js +0 -31
  171. package/dist/list-V6EGCSHX.js +0 -34
  172. package/dist/run-BUE2DDXN.js +0 -36
  173. package/dist/term-CQAGNG3Q.js.map +0 -1
  174. package/dist/validate-ZBW44RHT.js +0 -18
  175. /package/dist/{batch-UAULUMGH.js.map → batch-KMGZMIAQ.js.map} +0 -0
  176. /package/dist/{build-QSPNK5AL.js.map → build-NO4AWCYG.js.map} +0 -0
  177. /package/dist/{calibrate-KXN4URPM.js.map → calibrate-XQUG5XAK.js.map} +0 -0
  178. /package/dist/{capture-JHTSUPUC.js.map → capture-5XE3ZMXK.js.map} +0 -0
  179. /package/dist/{check-MDGXEUWL.js.map → check-HTNPLWOV.js.map} +0 -0
  180. /package/dist/{check-WOQRKNZK.js.map → check-RJ45IBA6.js.map} +0 -0
  181. /package/dist/{check-YEOYBFST.js.map → check-WFXSXICD.js.map} +0 -0
  182. /package/dist/{chunk-IGSHYP74.js.map → chunk-23P7KMJM.js.map} +0 -0
  183. /package/dist/{chunk-HA6MQMOY.js.map → chunk-24J7TYPU.js.map} +0 -0
  184. /package/dist/{chunk-PCS4VJBV.js.map → chunk-37QJLVS3.js.map} +0 -0
  185. /package/dist/{chunk-4CK6ZSOK.js.map → chunk-3P6KCU36.js.map} +0 -0
  186. /package/dist/{chunk-54F74XR3.js.map → chunk-5JBVFWVP.js.map} +0 -0
  187. /package/dist/{chunk-B7XYNRJQ.js.map → chunk-6KIYVVKL.js.map} +0 -0
  188. /package/dist/{chunk-GDVZ5VII.js.map → chunk-7A452BPZ.js.map} +0 -0
  189. /package/dist/{chunk-M42DZCOU.js.map → chunk-7FCLXEAQ.js.map} +0 -0
  190. /package/dist/{chunk-LBSCW232.js.map → chunk-7NXPQKSB.js.map} +0 -0
  191. /package/dist/{chunk-OPXWPJDA.js.map → chunk-A3TEDWBZ.js.map} +0 -0
  192. /package/dist/{chunk-BBT6AVUG.js.map → chunk-BHHXU2D2.js.map} +0 -0
  193. /package/dist/{chunk-FQXWVS6J.js.map → chunk-CMMBWHT2.js.map} +0 -0
  194. /package/dist/{chunk-EIFCP6CZ.js.map → chunk-CO47QJKZ.js.map} +0 -0
  195. /package/dist/{chunk-ADMEPUBT.js.map → chunk-CXWTNT2O.js.map} +0 -0
  196. /package/dist/{chunk-LKP7QDFN.js.map → chunk-DAQTRAP5.js.map} +0 -0
  197. /package/dist/{chunk-PWBH7DCQ.js.map → chunk-EESH6COU.js.map} +0 -0
  198. /package/dist/{chunk-NCPWXHDO.js.map → chunk-JEUFYSFQ.js.map} +0 -0
  199. /package/dist/{chunk-2IR4T5PO.js.map → chunk-JJ4RSDSY.js.map} +0 -0
  200. /package/dist/{chunk-WDWXAYVH.js.map → chunk-L3RLGGRK.js.map} +0 -0
  201. /package/dist/{chunk-T7JAOYE5.js.map → chunk-L75CAZG4.js.map} +0 -0
  202. /package/dist/{chunk-U7CTFN2J.js.map → chunk-MYRPMSOX.js.map} +0 -0
  203. /package/dist/{chunk-WQWKYAAK.js.map → chunk-NUQF5F5J.js.map} +0 -0
  204. /package/dist/{chunk-FUCPZVRY.js.map → chunk-OEN6FBUW.js.map} +0 -0
  205. /package/dist/{chunk-FBMZJEB3.js.map → chunk-OKMTUAWO.js.map} +0 -0
  206. /package/dist/{chunk-R4WXQIOZ.js.map → chunk-PCEM5FOZ.js.map} +0 -0
  207. /package/dist/{chunk-4D5IZSXM.js.map → chunk-PXNCRGUL.js.map} +0 -0
  208. /package/dist/{chunk-ODRPL3WB.js.map → chunk-Q3ODX5PF.js.map} +0 -0
  209. /package/dist/{chunk-KGEQJ5CC.js.map → chunk-RRFFUWDL.js.map} +0 -0
  210. /package/dist/{chunk-NSBXVPZL.js.map → chunk-S3XUYW5K.js.map} +0 -0
  211. /package/dist/{chunk-LPIF5LIE.js.map → chunk-SAU2WQFC.js.map} +0 -0
  212. /package/dist/{chunk-MSRU4D4P.js.map → chunk-SFLICIQV.js.map} +0 -0
  213. /package/dist/{chunk-NGTVREIH.js.map → chunk-U6IHLEWT.js.map} +0 -0
  214. /package/dist/{chunk-VQK4VHLF.js.map → chunk-YQV75FIL.js.map} +0 -0
  215. /package/dist/{chunk-TU2WUBVZ.js.map → chunk-YUTVAMWW.js.map} +0 -0
  216. /package/dist/{chunk-RLT5SEML.js.map → chunk-Z5MZCCTT.js.map} +0 -0
  217. /package/dist/{cli-JJMOVIKS.js.map → cli-BS43EVCD.js.map} +0 -0
  218. /package/dist/{cli-ONTC5PKT.js.map → cli-FX53PBQ3.js.map} +0 -0
  219. /package/dist/{cli-I62SRH3R.js.map → cli-NGL63E53.js.map} +0 -0
  220. /package/dist/{cli-VUKMWSSF.js.map → cli-WNEI5L7P.js.map} +0 -0
  221. /package/dist/{config-XDA42RJL.js.map → config-JJW75SBX.js.map} +0 -0
  222. /package/dist/{github-RY3FRA6P.js.map → github-4UR67MEN.js.map} +0 -0
  223. /package/dist/{github-YKQSH7FS.js.map → github-UPGKMVVF.js.map} +0 -0
  224. /package/dist/{host-6GURH5HE.js.map → host-YSTYO5DX.js.map} +0 -0
  225. /package/dist/{json-BXY44ED7.js.map → json-DQIELR36.js.map} +0 -0
  226. /package/dist/{lint-YJ2L22BW.js.map → lint-BLBGGOYM.js.map} +0 -0
  227. /package/dist/{list-NSG24VVX.js.map → list-B3RRRWFQ.js.map} +0 -0
  228. /package/dist/{list-V6EGCSHX.js.map → list-ZFRT3JQH.js.map} +0 -0
  229. /package/dist/{page-EV7OUBAU.js.map → page-5ISEVJR5.js.map} +0 -0
  230. /package/dist/{pretty-Q5Y2PA64.js.map → pretty-Y7CGQLAF.js.map} +0 -0
  231. /package/dist/{pretty-SCRK66M5.js.map → pretty-ZISH3Q4F.js.map} +0 -0
  232. /package/dist/{provider-527CO4DM.js.map → provider-LBX4IXGX.js.map} +0 -0
  233. /package/dist/{release-3D5PK6M7.js.map → release-VV3UTKE5.js.map} +0 -0
  234. /package/dist/{reporters-A5ADKDYR.js.map → reporters-26H3N2KW.js.map} +0 -0
  235. /package/dist/{reporters-M6LJ2IYU.js.map → reporters-4STXJJE2.js.map} +0 -0
  236. /package/dist/{reporters-RBYTASMI.js.map → reporters-74B4U2GZ.js.map} +0 -0
  237. /package/dist/{run-BUE2DDXN.js.map → run-DVGTKM52.js.map} +0 -0
  238. /package/dist/{validate-ZBW44RHT.js.map → validate-CJNFQHMD.js.map} +0 -0
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  resultFor,
4
4
  splitBaselined
5
- } from "./chunk-4D5IZSXM.js";
5
+ } from "./chunk-PXNCRGUL.js";
6
6
  import {
7
7
  errorSite
8
- } from "./chunk-WDWXAYVH.js";
8
+ } from "./chunk-L3RLGGRK.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-ADMEPUBT.js.map
54
+ //# sourceMappingURL=chunk-CXWTNT2O.js.map
@@ -10,7 +10,7 @@ import {
10
10
  pageMarks,
11
11
  pageSchemaSet,
12
12
  withValueAt
13
- } from "./chunk-GV56WGL2.js";
13
+ } from "./chunk-WO4JYWZK.js";
14
14
  import {
15
15
  DocmetaError,
16
16
  escapePointerSegment,
@@ -20,12 +20,12 @@ import {
20
20
  rebaseConfigSchemaRefs,
21
21
  schemaTrustRoot,
22
22
  supportedExtensions
23
- } from "./chunk-VSEBFHAY.js";
23
+ } from "./chunk-KFKL4VTL.js";
24
24
  import {
25
25
  decryptValue,
26
26
  encryptValue,
27
27
  isEncryptedValue
28
- } from "./chunk-QLWC7MKD.js";
28
+ } from "./chunk-OTJOBZJ5.js";
29
29
  import {
30
30
  errorMessage
31
31
  } from "./chunk-G3T47CFV.js";
@@ -195,4 +195,4 @@ export {
195
195
  metaPageView,
196
196
  declaredAt
197
197
  };
198
- //# sourceMappingURL=chunk-LKP7QDFN.js.map
198
+ //# sourceMappingURL=chunk-DAQTRAP5.js.map
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/shared/term-labels.ts
4
+ var registered;
5
+ function registerTermLabelSource(source) {
6
+ registered = source;
7
+ }
8
+ function termLabelSource() {
9
+ return registered;
10
+ }
11
+
12
+ export {
13
+ registerTermLabelSource,
14
+ termLabelSource
15
+ };
16
+ //# sourceMappingURL=chunk-DSWKBZWW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/term-labels.ts"],"sourcesContent":["/**\n * Where `meta fill` and `graph build` get the termbase from.\n *\n * The layering runs one way: `term` imports `meta`, and nothing under\n * `src/meta` imports `term`. So the `manni` umbrella registers a source here,\n * one that loads the term domain when asked, and `fill` reads it when one is\n * registered. Under the `docmeta` bin, or a library call, nothing registers\n * one, and `fill` offers no term values.\n */\n\n/**\n * One term, as the family outside the term domain reads it: its preferred\n * label and id, and the facts the graph's concept scheme carries. Relations\n * are written as the term wrote them, a label or an id each.\n */\nexport interface TermLabel {\n label: string;\n id: string;\n /** The term's language tag, when it carries one. */\n language?: string;\n altLabels?: readonly string[];\n hiddenLabels?: readonly string[];\n broader?: readonly string[];\n narrower?: readonly string[];\n related?: readonly string[];\n /** A redirect: this entry's label is another term's, named here. */\n see?: string;\n definition?: string;\n scopeNote?: string;\n /** A code that identifies the concept in another system. */\n notation?: string;\n /** IRIs of concepts in other vocabularies, one list per kind of mapping. */\n exactMatches?: readonly string[];\n closeMatches?: readonly string[];\n broadMatches?: readonly string[];\n narrowMatches?: readonly string[];\n relatedMatches?: readonly string[];\n /** Where the term was read: the file, absolute, and its line. */\n file?: string;\n line?: number;\n}\n\n/** What a run tells the source, so it reads the termbase `term check` reads. */\nexport interface TermLabelRequest {\n /** The directory config discovery starts from. */\n cwd: string;\n /** `-c/--config`. */\n configPath?: string;\n /** `--no-config`. */\n noConfig?: boolean;\n}\n\n/** Loads the termbase's terms for one run. */\nexport type TermLabelSource = (request: TermLabelRequest) => Promise<readonly TermLabel[]>;\n\nlet registered: TermLabelSource | undefined;\n\n/** Register the source, or clear it with `undefined`. The last one registered wins. */\nexport function registerTermLabelSource(source: TermLabelSource | undefined): void {\n registered = source;\n}\n\n/** The registered source, or `undefined` when nothing registered one. */\nexport function termLabelSource(): TermLabelSource | undefined {\n return registered;\n}\n"],"mappings":";;;AAuDA,IAAI;AAGG,SAAS,wBAAwB,QAA2C;AACjF,eAAa;AACf;AAGO,SAAS,kBAA+C;AAC7D,SAAO;AACT;","names":[]}
@@ -3,16 +3,16 @@ import {
3
3
  renderCalibration,
4
4
  resolveBatchTraces,
5
5
  runBatch
6
- } from "./chunk-54F74XR3.js";
6
+ } from "./chunk-5JBVFWVP.js";
7
7
  import {
8
8
  discoverConfig,
9
9
  labelKey,
10
10
  loadLabels
11
- } from "./chunk-FBMZJEB3.js";
11
+ } from "./chunk-OKMTUAWO.js";
12
12
  import {
13
13
  assertProviderSelection,
14
14
  selectProvider
15
- } from "./chunk-NGTVREIH.js";
15
+ } from "./chunk-U6IHLEWT.js";
16
16
  import {
17
17
  TracevalsError
18
18
  } from "./chunk-UKZNLVJW.js";
@@ -378,4 +378,4 @@ export {
378
378
  score,
379
379
  runCalibrate
380
380
  };
381
- //# sourceMappingURL=chunk-PWBH7DCQ.js.map
381
+ //# sourceMappingURL=chunk-EESH6COU.js.map
@@ -7,7 +7,7 @@ import {
7
7
  isMultilingual,
8
8
  languageOf,
9
9
  plural
10
- } from "./chunk-J6IDQGJL.js";
10
+ } from "./chunk-6TVH4FI7.js";
11
11
  import {
12
12
  palette
13
13
  } from "./chunk-RNVYGWIC.js";
@@ -68,6 +68,12 @@ var GET_FIELDS = [
68
68
  "see",
69
69
  "abstract",
70
70
  "scope-note",
71
+ "notation",
72
+ "exact-matches",
73
+ "close-matches",
74
+ "broad-matches",
75
+ "narrow-matches",
76
+ "related-matches",
71
77
  "subject-field",
72
78
  "contexts",
73
79
  "notes",
@@ -330,4 +336,4 @@ export {
330
336
  renderValeWiring,
331
337
  renderFormatsPretty
332
338
  };
333
- //# sourceMappingURL=chunk-JPQDNYXH.js.map
339
+ //# sourceMappingURL=chunk-EM67O2ET.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/term/reporters/pretty.ts"],"sourcesContent":["/**\n * Human output for every `manni term` command, in the shapes the ladder of\n * proposal 0052 prints. Columns are padded to their widest value; prose wraps\n * to 80 columns under its own column, so a long definition or message never\n * runs back to the left edge.\n */\nimport { palette, type Colors } from \"../../shared/color.js\";\nimport type { TermReport } from \"../commands/findings.js\";\nimport type { FormatRow } from \"../commands/formats.js\";\nimport { displayPath, plural } from \"../commands/run.js\";\nimport type { ValeWiring, WriteReport } from \"../commands/write.js\";\nimport type { Severity } from \"../../shared/severity.js\";\nimport { isMultilingual, languageOf } from \"../core/writers/render-util.js\";\nimport {\n TERM_AUX_FIELDS,\n TERM_DESIGNATION_FIELDS,\n TERM_FIELDS,\n type Term,\n type TermDesignation,\n type TermField,\n type TermFinding,\n type TermLink,\n type TermRecord,\n type TermTransaction,\n} from \"../types.js\";\n\nconst WIDTH = 80;\n\n/** Words packed into lines of at most `width` characters; a longer word stands alone. */\nfunction wrapWords(text: string, width: number): string[] {\n const lines: string[] = [];\n let line = \"\";\n for (const word of text.split(/\\s+/).filter((w) => w !== \"\")) {\n if (line === \"\") line = word;\n else if (line.length + 1 + word.length <= width) line = `${line} ${word}`;\n else {\n lines.push(line);\n line = word;\n }\n }\n if (line !== \"\") lines.push(line);\n return lines.length === 0 ? [\"\"] : lines;\n}\n\n/** Sentences packed into lines of at most `width`; a message that fits stays whole. */\nfunction wrapSentences(text: string, width: number): string[] {\n if (text.length <= width) return [text];\n const lines: string[] = [];\n let line = \"\";\n for (const sentence of text.split(/(?<=\\.)\\s+(?=\\S)/)) {\n if (line === \"\") line = sentence;\n else if (line.length + 1 + sentence.length <= width) line = `${line} ${sentence}`;\n else {\n lines.push(line);\n line = sentence;\n }\n }\n if (line !== \"\") lines.push(line);\n return lines;\n}\n\nfunction hanging(first: string, lines: readonly string[]): string[] {\n const indent = \" \".repeat(first.length);\n return lines.map((line, i) => `${i === 0 ? first : indent}${line}`.trimEnd());\n}\n\n// ---------------------------------------------------------------------------\n// list\n\nexport function renderListPretty(terms: readonly Term[]): string {\n const idWidth = Math.max(0, ...terms.map((t) => t.id.length)) + 3;\n const labelWidth = Math.max(0, ...terms.map((t) => t.record.label.length)) + 3;\n // The language column appears only when it tells the rows apart.\n const multilingual = isMultilingual(terms);\n const languageWidth = Math.max(0, ...terms.map((t) => languageOf(t).length)) + 3;\n const rows = terms.map((t) => {\n const language = multilingual ? languageOf(t).padEnd(languageWidth) : \"\";\n const alts = (t.record[\"alt-labels\"] ?? []).join(\", \");\n return `${t.id.padEnd(idWidth)}${language}${t.record.label.padEnd(labelWidth)}${alts}`.trimEnd();\n });\n return [...rows, plural(terms.length, \"term\")].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// get\n\n/** A root field `get` shows as one row of text. */\ntype RowField = Exclude<TermField, \"label\" | \"concept-entry\" | \"designations\" | \"tbx-markup\" | \"tbx-elements\">;\n\n/** The order `get` shows root fields in: names first, then what they mean, the definition last. */\nconst GET_FIELDS: readonly RowField[] = [\n \"alt-labels\",\n \"hidden-labels\",\n \"broader\",\n \"narrower\",\n \"related-terms\",\n \"see\",\n \"abstract\",\n \"scope-note\",\n \"notation\",\n \"exact-matches\",\n \"close-matches\",\n \"broad-matches\",\n \"narrow-matches\",\n \"related-matches\",\n \"subject-field\",\n \"contexts\",\n \"notes\",\n \"sources\",\n \"customer-subsets\",\n \"project-subsets\",\n \"cross-references\",\n \"external-cross-references\",\n \"graphics\",\n \"transactions\",\n \"definition\",\n];\n\n/** The aux fields a block's line shows; its `tbx-elements` are counted on a row of their own. */\nconst SHOWN_AUX = TERM_AUX_FIELDS.filter((field) => field !== \"tbx-elements\");\n\n/** The key column's narrowest width: the widest 1.0.0 field, `related-terms`, plus two. */\nconst MIN_KEY_WIDTH = 15;\n\nfunction linkText(link: TermLink): string {\n return link.text === undefined ? link.target : `${link.text} (${link.target})`;\n}\n\nfunction transactionText(transaction: TermTransaction): string {\n return [transaction.type, transaction.date, transaction.responsibility].filter((part) => part !== undefined).join(\" \");\n}\n\n/** One value as `get` prints it: a list joined with commas, a link as its text and target, a transaction as its parts. */\nfunction valueText(value: string | readonly (string | TermLink | TermTransaction)[]): string {\n if (typeof value === \"string\") return value;\n return value\n .map((item) => (typeof item === \"string\" ? item : \"target\" in item ? linkText(item) : transactionText(item)))\n .join(\", \");\n}\n\n/** `progressive lens: part-of-speech noun, term-type fullForm`, or `undefined` when it says nothing but its term. */\nfunction designationLine(designation: TermDesignation): string | undefined {\n const parts: string[] = [];\n for (const key of TERM_DESIGNATION_FIELDS) {\n const value = designation[key];\n if (value !== undefined) parts.push(`${key} ${value}`);\n }\n const comments = designation[\"transfer-comments\"];\n if (comments !== undefined) parts.push(`transfer-comments ${valueText(comments)}`);\n for (const key of SHOWN_AUX) {\n const value = designation[key];\n if (value !== undefined) parts.push(`${key} ${valueText(value)}`);\n }\n return parts.length === 0 ? undefined : `${designation.term}: ${parts.join(\", \")}`;\n}\n\n/** `1 at the root, 1 on PAL, 1 in concept-entry`: where the record keeps elements no named field maps. */\nfunction passThroughText(record: TermRecord): string | undefined {\n const parts: string[] = [];\n const count = (items: readonly string[] | undefined, where: string): void => {\n if (items !== undefined) parts.push(`${String(items.length)} ${where}`);\n };\n count(record[\"tbx-elements\"], \"at the root\");\n for (const designation of record.designations ?? []) count(designation[\"tbx-elements\"], `on ${designation.term}`);\n count(record[\"concept-entry\"]?.[\"tbx-elements\"], \"in concept-entry\");\n return parts.length === 0 ? undefined : parts.join(\", \");\n}\n\nexport interface GetPrettyOptions {\n color: boolean;\n cwd?: string;\n /** The entry in its other languages: the set's other terms with the same id. */\n others?: readonly Term[];\n}\n\nexport function renderGetPretty(term: Term, opts: GetPrettyOptions): string {\n const c = palette(opts.color);\n const { record } = term;\n const where = `${displayPath(term.location.file, opts.cwd ?? process.cwd())}:${String(term.location.line)}`;\n\n // Each row is a key and its lines, collected first so the key column fits the widest key shown.\n const rows: [string, string[]][] = [[\"id\", [term.id]]];\n if (term.language !== undefined) rows.push([\"language\", [term.language]]);\n for (const field of GET_FIELDS) {\n const value = record[field];\n if (value !== undefined) rows.push([field, [valueText(value)]]);\n }\n const concept = record[\"concept-entry\"];\n if (concept !== undefined) {\n const lines = SHOWN_AUX.flatMap((key) => {\n const value = concept[key];\n return value === undefined ? [] : [`${key}: ${valueText(value)}`];\n });\n if (lines.length > 0) rows.push([\"concept-entry\", lines]);\n }\n const designations = (record.designations ?? []).map(designationLine).filter((line) => line !== undefined);\n if (designations.length > 0) rows.push([\"designations\", designations]);\n if (record[\"tbx-markup\"] !== undefined) rows.push([\"tbx-markup\", record[\"tbx-markup\"]]);\n const passThrough = passThroughText(record);\n if (passThrough !== undefined) rows.push([\"tbx-elements\", [passThrough]]);\n const others = opts.others ?? [];\n if (others.length > 0) {\n rows.push([\"other languages\", [others.map((t) => `${languageOf(t)} (${t.record.label})`).join(\", \")]]);\n }\n\n const keyWidth = Math.max(MIN_KEY_WIDTH, ...rows.map(([key]) => key.length + 2));\n const lines = [`${c.bold(record.label.padEnd(40))}${c.dim(where)}`];\n for (const [key, values] of rows) {\n values.forEach((value, i) => {\n const prefix = ` ${(i === 0 ? key : \"\").padEnd(keyWidth)}`;\n lines.push(...hanging(prefix, wrapWords(value, WIDTH - prefix.length)));\n });\n }\n return lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// check and lint\n\nconst RULE_WIDTH = 32;\n\nfunction severityText(c: Colors, severity: Severity): string {\n const padded = severity.padEnd(6);\n if (severity === \"error\") return c.red(padded);\n if (severity === \"warning\") return c.yellow(padded);\n return c.cyan(padded);\n}\n\nfunction counts(findings: readonly TermFinding[]): string {\n const parts: string[] = [];\n const n = (severity: Severity): number => findings.filter((f) => f.severity === severity).length;\n if (n(\"error\") > 0) parts.push(plural(n(\"error\"), \"error\"));\n if (n(\"warning\") > 0) parts.push(plural(n(\"warning\"), \"warning\"));\n if (n(\"notice\") > 0) parts.push(plural(n(\"notice\"), \"notice\"));\n return parts.join(\", \");\n}\n\nexport interface FindingsPrettyOptions {\n color: boolean;\n /** Whether the clean line counts references: `check` reads them, `lint` does not. */\n references?: boolean;\n}\n\nexport function renderFindingsPretty(report: TermReport, opts: FindingsPrettyOptions): string {\n const c = palette(opts.color);\n const { baseline } = report;\n if (baseline?.written === true) {\n return `${c.green(\"✓\")} ${plural(report.found, \"finding\")} recorded in ${baseline.path}`;\n }\n const baselined = baseline !== undefined && baseline.suppressed > 0 ? `, ${String(baseline.suppressed)} baselined` : \"\";\n const terms = plural(report.terms, \"term\");\n\n if (report.findings.length === 0) {\n const references = opts.references === false ? \"\" : `, ${plural(report.references, \"reference\")}`;\n return `${c.green(\"✓\")} ${terms}${references}, no findings${baselined}`;\n }\n\n const ruleWidth = Math.max(RULE_WIDTH, ...report.findings.map((f) => f.ruleId.length + 2));\n const lines: string[] = [];\n let group: string | undefined;\n for (const finding of report.findings) {\n const file = displayPath(finding.file, report.cwd);\n const header = finding.line === undefined ? file : `${file}:${String(finding.line)}`;\n if (header !== group) {\n lines.push(c.bold(header));\n group = header;\n }\n const prefixWidth = 2 + 6 + 1 + ruleWidth;\n const message = wrapSentences(finding.message, WIDTH - prefixWidth);\n const indent = \" \".repeat(prefixWidth);\n message.forEach((text, i) => {\n lines.push(\n i === 0 ? ` ${severityText(c, finding.severity)} ${finding.ruleId.padEnd(ruleWidth)}${text}` : `${indent}${text}`,\n );\n });\n }\n lines.push(\"\", `${counts(report.findings)} in ${terms}${baselined}`);\n return lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// write\n\nfunction changeLine(change: WriteReport[\"changes\"][number]): string {\n switch (change.action) {\n case \"create\":\n return `${change.path} would be created`;\n case \"change\":\n return `${change.path} would change`;\n case \"remove\":\n return `${change.path} would be removed`;\n }\n}\n\n/** A generated Vale rule file's `swap:` entries. */\nfunction swapCount(content: string): number {\n const lines = content.split(/\\r?\\n/);\n const start = lines.indexOf(\"swap:\");\n if (start === -1) return 0;\n return lines.slice(start + 1).filter((line) => line.startsWith(\" \")).length;\n}\n\nfunction baseName(path: string): string {\n return path.split(/[\\\\/]/).pop() ?? path;\n}\n\nconst CASING_RULES = new Set([\"Casing.yml\", \"Lowercase.yml\", \"SentenceStart.yml\"]);\n\n/** What each file of a Vale style holds: rule files by name, the acronym files together. */\nfunction valeLines(report: WriteReport): string[] {\n const rows: [string, string][] = [];\n const acronyms: string[] = [];\n for (const file of report.files) {\n const name = baseName(file.path);\n // A casing rule swaps each label and alt-label, so what it counts is labels.\n if (CASING_RULES.has(name)) rows.push([name, plural(swapCount(file.content), \"label\")]);\n else if (name === \"Deprecated.yml\") rows.push([name, plural(swapCount(file.content), \"swap\")]);\n else acronyms.push(name);\n }\n if (acronyms.length > 0) rows.push([acronyms.join(\", \"), plural(acronyms.length, \"acronym\")]);\n const width = Math.max(0, ...rows.map(([name]) => name.length)) + 2;\n return rows.map(([name, what]) => ` ${name.padEnd(width)}${what}`);\n}\n\n/** ` dropped from a definition list: scope-note on 3 terms, hidden-labels on 12`. */\nfunction droppedLine(report: WriteReport): string | undefined {\n if (report.dropped.length === 0) return undefined;\n // One entry per term per field, so counting entries counts terms: an id in two languages is two terms.\n const counts = new Map<TermField, number>();\n for (const { field } of report.dropped) counts.set(field, (counts.get(field) ?? 0) + 1);\n const fields = [...counts.entries()]\n .map(([field, n]) => ({ field, n }))\n .sort((a, b) => a.n - b.n || TERM_FIELDS.indexOf(a.field) - TERM_FIELDS.indexOf(b.field));\n const parts = fields.map(({ field, n }, i) => `${field} on ${i === 0 ? plural(n, \"term\") : String(n)}`);\n return ` dropped from ${report.droppedFrom ?? report.format ?? \"the render\"}: ${parts.join(\", \")}`;\n}\n\n/** ` dropped from tbx3: the headers of glossary.tbx, <stdin>`. */\nfunction droppedHeadersLine(report: WriteReport): string | undefined {\n const files = report.droppedHeaders ?? [];\n if (files.length === 0) return undefined;\n const what = files.length === 1 ? \"the header of\" : \"the headers of\";\n return ` dropped from ${report.droppedFrom ?? report.format ?? \"the render\"}: ${what} ${files.join(\", \")}`;\n}\n\n/** ` skipped 2 terms a definition list cannot read without a definition: varifocal, bifocal`. */\nfunction skippedLine(report: WriteReport): string | undefined {\n if (report.skipped.length === 0) return undefined;\n const construct = report.droppedFrom ?? report.format ?? \"the render\";\n const count = plural(report.skipped.length, \"term\");\n return ` skipped ${count} ${construct} cannot read without a definition: ${report.skipped.join(\", \")}`;\n}\n\n/** ` skipped 2 terms in another language than en: spectacle-lens (de), progressive-lens (de)`. */\nfunction otherLanguagesLine(report: WriteReport): string | undefined {\n const other = report.otherLanguages;\n if (other === undefined || other.terms.length === 0) return undefined;\n const terms = other.terms.map(({ id, language }) => `${id} (${language})`).join(\", \");\n return ` skipped ${plural(other.terms.length, \"term\")} in another language than ${other.written}: ${terms}`;\n}\n\n/**\n * ` kept the first language's value where languages differ: concept-entry.subject-field on 1 concept`.\n * Fields are counted in concepts, fewest first, as the dropped line counts terms.\n */\nfunction conflictsLine(report: WriteReport): string | undefined {\n const conflicts = report.conflicts ?? [];\n if (conflicts.length === 0) return undefined;\n const ids = new Map<string, Set<string>>();\n for (const { id, field } of conflicts) {\n const set = ids.get(field) ?? new Set<string>();\n set.add(id);\n ids.set(field, set);\n }\n // A stable sort keeps fields of one count in the order they were first reported.\n const fields = [...ids.entries()].map(([field, set]) => ({ field, n: set.size })).sort((a, b) => a.n - b.n);\n const parts = fields.map(({ field, n }, i) => `${field} on ${i === 0 ? plural(n, \"concept\") : String(n)}`);\n return ` kept the first language's value where languages differ: ${parts.join(\", \")}`;\n}\n\n/** The dropped, dropped-header, skipped and conflict lines, which a write and a dry run print alike. */\nfunction renderNotes(report: WriteReport): string[] {\n return [\n droppedLine(report),\n droppedHeadersLine(report),\n skippedLine(report),\n otherLanguagesLine(report),\n conflictsLine(report),\n ].filter(\n (line) => line !== undefined,\n );\n}\n\nfunction unchangedLine(report: WriteReport): string {\n return report.mode === \"in-place\" ? \"Nothing to write\" : `${report.target ?? \"\"} is up to date`;\n}\n\nexport function renderWritePretty(report: WriteReport): string {\n if (report.check) {\n return report.changes.length > 0 ? report.changes.map(changeLine).join(\"\\n\") : unchangedLine(report);\n }\n if (report.dryRun) {\n const changes = report.changes.length > 0 ? report.changes.map(changeLine) : [unchangedLine(report)];\n return [...changes, ...renderNotes(report)].join(\"\\n\");\n }\n if (report.mode === \"in-place\") {\n const wrote = report.changes.length === 0 ? \"Nothing to write\" : `Wrote ${plural(report.changes.length, \"file\")}`;\n return [wrote, ...renderNotes(report)].join(\"\\n\");\n }\n const each = report.shape === \"directory\" && report.format !== \"vale\" ? \", one file each\" : \"\";\n const written = report.terms - report.skipped.length - (report.otherLanguages?.terms.length ?? 0);\n const lines = [`Wrote ${plural(written, \"term\")} to ${report.target ?? \"\"}${each}`];\n if (report.format === \"vale\") lines.push(...valeLines(report));\n lines.push(...renderNotes(report));\n return lines.join(\"\\n\");\n}\n\n/** The notice `write -f vale` prints when no section of Vale's config uses the style, or there is no section. */\nexport function renderValeWiring(wiring: ValeWiring): string {\n return [\n wiring.addSection\n ? `notice: ${wiring.rootIni} has no section with BasedOnStyles. Add one that uses the Terms style:`\n : `notice: no section of ${wiring.rootIni} uses the Terms style. Add it to BasedOnStyles:`,\n ` [${wiring.section}]`,\n ` BasedOnStyles = ${wiring.styles.join(\", \")}`,\n ].join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// formats\n\nexport function renderFormatsPretty(rows: readonly FormatRow[]): string {\n const formatWidth = Math.max(0, ...rows.map((r) => r.format.length)) + 3;\n const labelWidth = Math.max(0, ...rows.map((r) => r.label.length)) + 3;\n return rows\n .map((r) =>\n `${r.format.padEnd(formatWidth)}${r.label.padEnd(labelWidth)}${r.read ? \"read \" : \" \"}${r.write ? \"write\" : \"\"}`.trimEnd(),\n )\n .join(\"\\n\");\n}\n"],"mappings":"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","names":["lines","counts"]}
@@ -1,21 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
+ askSampleQuestions,
3
4
  bundledShapesPath,
4
5
  compactIri,
6
+ compareFindings,
5
7
  loadGraph,
6
8
  parseGraph,
9
+ renderQuestionSummary,
7
10
  validateGraph
8
- } from "./chunk-EFW7CAG4.js";
11
+ } from "./chunk-KCB5JCK4.js";
9
12
  import {
13
+ documentBase,
10
14
  loadRunConfig
11
- } from "./chunk-JROBZ7JA.js";
15
+ } from "./chunk-Q2QC5AZB.js";
12
16
  import {
13
17
  escapeWorkflowCommandMessage,
14
18
  escapeWorkflowCommandProperty
15
19
  } from "./chunk-MNH7QO4Z.js";
16
20
 
17
21
  // src/graph/commands/check.ts
18
- import { resolve } from "node:path";
22
+ import { dirname, resolve } from "node:path";
19
23
 
20
24
  // src/graph/reporters/github.ts
21
25
  function renderCheckGithub(report) {
@@ -41,10 +45,28 @@ async function runCheck(opts = {}) {
41
45
  },
42
46
  cwd
43
47
  );
44
- const store = opts.turtle === void 0 ? loadGraph(resolve(cwd, opts.graph ?? config.out)) : parseGraph(opts.turtle, "the built graph");
48
+ const graphPath = resolve(cwd, opts.graph ?? config.out);
49
+ const store = opts.turtle === void 0 ? loadGraph(graphPath) : parseGraph(opts.turtle, "the built graph");
45
50
  const shapesInput = opts.shapes && opts.shapes.length > 0 ? opts.shapes : config.check.shapes;
46
51
  const shapes = shapesInput.length > 0 ? shapesInput.map((p) => resolve(cwd, p)) : [bundledShapesPath(import.meta.url)];
47
- const findings = await validateGraph(store, shapes);
52
+ const asked = await askSampleQuestions(
53
+ store,
54
+ config.check.questions,
55
+ documentBase(config, {}, cwd),
56
+ dirname(graphPath),
57
+ {
58
+ source: {
59
+ ...opts.config === void 0 ? {} : { configPath: opts.config },
60
+ ...opts.noConfig === void 0 ? {} : { noConfig: opts.noConfig }
61
+ },
62
+ cwd
63
+ },
64
+ config.questionFiles,
65
+ config.configDir
66
+ );
67
+ const findings = [...await validateGraph(store, shapes), ...asked.findings].sort(
68
+ compareFindings
69
+ );
48
70
  const count = (severity) => findings.filter((f) => f.severity === severity).length;
49
71
  const errors = count("error");
50
72
  return {
@@ -53,6 +75,7 @@ async function runCheck(opts = {}) {
53
75
  warnings: count("warning"),
54
76
  notices: count("notice"),
55
77
  shapes,
78
+ ...asked.summary ? { questions: asked.summary } : {},
56
79
  // Only an `error` fails the run; a warning and a notice are reported and
57
80
  // pass, as they were when they were called violations and warnings.
58
81
  exitCode: errors > 0 ? 1 : 0
@@ -66,7 +89,12 @@ function renderCheck(report, format) {
66
89
  const { exitCode: _exitCode, ...rest } = report;
67
90
  return JSON.stringify(rest, null, 2);
68
91
  }
69
- if (format === "github") return renderCheckGithub(report);
92
+ const summary = report.questions ? renderQuestionSummary(report.questions) : [];
93
+ if (format === "github") {
94
+ const annotations = renderCheckGithub(report);
95
+ if (summary.length === 0) return annotations;
96
+ return [...annotations === "" ? [] : [annotations, ""], ...summary].join("\n");
97
+ }
70
98
  const lines = [];
71
99
  for (const f of report.findings) {
72
100
  const where = f.docs.length > 0 ? ` [${f.docs.join(", ")}]` : "";
@@ -75,6 +103,7 @@ function renderCheck(report, format) {
75
103
  );
76
104
  }
77
105
  if (report.findings.length > 0) lines.push("");
106
+ if (summary.length > 0) lines.push(...summary, "");
78
107
  lines.push(
79
108
  `${plural(report.errors, "error")}, ${plural(report.warnings, "warning")}, ${plural(report.notices, "notice")}`
80
109
  );
@@ -85,4 +114,4 @@ export {
85
114
  runCheck,
86
115
  renderCheck
87
116
  };
88
- //# sourceMappingURL=chunk-HQR2ZBHW.js.map
117
+ //# sourceMappingURL=chunk-I2XQRRP7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/graph/commands/check.ts","../src/graph/reporters/github.ts"],"sourcesContent":["/**\n * `manni graph check` — graph-level validation: run the published SHACL shapes\n * (plus the TS-side SKOS integrity checks) over the built graph and report\n * findings with the doc paths responsible. Each page's sample questions are\n * asked too (proposal 0086 §7), with each golden-set file's, and the question\n * set's health is summed up after the findings (proposal 0087). Errors exit 1; warnings and notices are\n * reported but pass.\n */\nimport { dirname, resolve } from \"node:path\";\nimport type { Severity } from \"../../shared/severity.js\";\nimport { loadRunConfig } from \"../core/config.js\";\nimport { loadGraph, compactIri, parseGraph } from \"../core/load.js\";\nimport { documentBase } from \"../core/discover.js\";\nimport { bundledShapesPath } from \"../core/pkg.js\";\nimport {\n compareFindings,\n validateGraph,\n type CheckFinding,\n} from \"../core/shacl.js\";\nimport {\n askSampleQuestions,\n renderQuestionSummary,\n type QuestionSummary,\n} from \"./questions.js\";\nimport { renderCheckGithub } from \"../reporters/github.js\";\nimport type { CheckFormat } from \"../reporters/index.js\";\n\nexport interface CheckOptions {\n config?: string;\n /** `--no-config`: skip discovery and run on the built-in defaults. */\n noConfig?: boolean;\n /** Graph .ttl path (default: config `out`). */\n graph?: string;\n /** Shapes .ttl paths (default: config `check.shapes`, then bundled). */\n shapes?: string[];\n cwd?: string;\n /**\n * The graph as Turtle, in place of reading `graph`: what `buildGraph`\n * returns, so `manni check` checks a build it never wrote.\n */\n turtle?: string;\n}\n\nexport interface CheckReport {\n findings: CheckFinding[];\n /** Counts on the family's scale, not SHACL's (proposal 0051 §2). */\n errors: number;\n warnings: number;\n notices: number;\n /** Shapes files used, as given (for reporting). */\n shapes: string[];\n /** The question set's health (proposal 0087); absent when no question exists. */\n questions?: QuestionSummary;\n exitCode: 0 | 1;\n}\n\nexport async function runCheck(opts: CheckOptions = {}): Promise<CheckReport> {\n const cwd = opts.cwd ?? process.cwd();\n const config = loadRunConfig(\n {\n ...(opts.config === undefined ? {} : { configPath: opts.config }),\n ...(opts.noConfig === undefined ? {} : { noConfig: opts.noConfig }),\n },\n cwd,\n );\n const graphPath = resolve(cwd, opts.graph ?? config.out);\n const store =\n opts.turtle === undefined\n ? loadGraph(graphPath)\n : parseGraph(opts.turtle, \"the built graph\");\n\n // CLI flag over config over the bundled contract — same precedence as\n // every other knob.\n const shapesInput =\n opts.shapes && opts.shapes.length > 0 ? opts.shapes : config.check.shapes;\n const shapes =\n shapesInput.length > 0\n ? shapesInput.map((p) => resolve(cwd, p))\n : [bundledShapesPath(import.meta.url)];\n\n // Pages read from where `build` labels them, and a vector sidecar from\n // beside the graph, as `export search` and `search` read them. Golden-set\n // files resolve from the config file's directory.\n const asked = await askSampleQuestions(\n store,\n config.check.questions,\n documentBase(config, {}, cwd),\n dirname(graphPath),\n {\n source: {\n ...(opts.config === undefined ? {} : { configPath: opts.config }),\n ...(opts.noConfig === undefined ? {} : { noConfig: opts.noConfig }),\n },\n cwd,\n },\n config.questionFiles,\n config.configDir,\n );\n const findings = [...(await validateGraph(store, shapes)), ...asked.findings].sort(\n compareFindings,\n );\n const count = (severity: Severity): number =>\n findings.filter((f) => f.severity === severity).length;\n const errors = count(\"error\");\n\n return {\n findings,\n errors,\n warnings: count(\"warning\"),\n notices: count(\"notice\"),\n shapes,\n ...(asked.summary ? { questions: asked.summary } : {}),\n // Only an `error` fails the run; a warning and a notice are reported and\n // pass, as they were when they were called violations and warnings.\n exitCode: errors > 0 ? 1 : 0,\n };\n}\n\n/** `2 errors`, `1 warning`, `0 notices` — each count pluralized on its own. */\nfunction plural(n: number, word: string): string {\n return `${String(n)} ${word}${n === 1 ? \"\" : \"s\"}`;\n}\n\nexport function renderCheck(report: CheckReport, format: CheckFormat): string {\n if (format === \"json\") {\n const { exitCode: _exitCode, ...rest } = report;\n return JSON.stringify(rest, null, 2);\n }\n const summary = report.questions ? renderQuestionSummary(report.questions) : [];\n if (format === \"github\") {\n // The summary is plain text after the annotations, which GitHub logs as is.\n const annotations = renderCheckGithub(report);\n if (summary.length === 0) return annotations;\n return [...(annotations === \"\" ? [] : [annotations, \"\"]), ...summary].join(\"\\n\");\n }\n const lines: string[] = [];\n for (const f of report.findings) {\n const where = f.docs.length > 0 ? ` [${f.docs.join(\", \")}]` : \"\";\n lines.push(\n `${f.severity}: ${compactIri(f.focusNode)}${\n f.path ? ` ${compactIri(f.path)}` : \"\"\n } — ${f.message}${where}`,\n );\n }\n if (report.findings.length > 0) lines.push(\"\");\n if (summary.length > 0) lines.push(...summary, \"\");\n lines.push(\n `${plural(report.errors, \"error\")}, ${plural(report.warnings, \"warning\")}, ${plural(report.notices, \"notice\")}`,\n );\n return lines.join(\"\\n\");\n}\n","/**\n * `--format github`: one workflow-command annotation per `check` finding.\n *\n * `::error file=<first blamed doc>::<message> (<focus node>)`, with\n * `::warning` and `::notice` for the lower levels — the family scale is\n * GitHub's, so the level is the severity, exactly as a11y's and cite's\n * reporters have it.\n *\n * A SHACL finding carries no line number (stress test 5 of proposal 0051 says\n * why SARIF and JUnit are not here), and a finding about a shared node — a\n * concept, an agent, the scheme — may trace back to no document at all. Then\n * there is nothing to anchor to and the annotation goes out without `file=`,\n * which GitHub shows against the workflow run rather than dropping.\n *\n * Empty when the run is clean, so a clean CI step logs nothing.\n */\nimport {\n escapeWorkflowCommandMessage,\n escapeWorkflowCommandProperty,\n} from \"../../shared/github.js\";\nimport type { CheckReport } from \"../commands/check.js\";\nimport { compactIri } from \"../core/load.js\";\n\nexport function renderCheckGithub(report: CheckReport): string {\n const lines: string[] = [];\n for (const f of report.findings) {\n // The first, not all of them: one annotation lands on one file, and the\n // docs are sorted, so which one is stable across runs.\n const file = f.docs[0];\n const where =\n file === undefined ? \"\" : ` file=${escapeWorkflowCommandProperty(file)}`;\n const message = escapeWorkflowCommandMessage(\n `${f.message} (${compactIri(f.focusNode)})`,\n );\n lines.push(`::${f.severity}${where}::${message}`);\n }\n return lines.join(\"\\n\");\n}\n"],"mappings":"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","names":[]}
@@ -3,13 +3,13 @@ import {
3
3
  REPORT_FORMATS,
4
4
  parseFormat
5
5
  } from "./chunk-ZXRAE55H.js";
6
- import {
7
- palette
8
- } from "./chunk-RNVYGWIC.js";
9
6
  import {
10
7
  escapeWorkflowCommandMessage,
11
8
  escapeWorkflowCommandProperty
12
9
  } from "./chunk-MNH7QO4Z.js";
10
+ import {
11
+ palette
12
+ } from "./chunk-RNVYGWIC.js";
13
13
 
14
14
  // src/docevals/reporters/scope.ts
15
15
  function scopeLine(report) {
@@ -680,4 +680,4 @@ function render(report, format, opts = {}) {
680
680
  export {
681
681
  render
682
682
  };
683
- //# sourceMappingURL=chunk-NCPWXHDO.js.map
683
+ //# sourceMappingURL=chunk-JEUFYSFQ.js.map
@@ -6,7 +6,7 @@ import {
6
6
  extractFrontmatter,
7
7
  extractorForExtension,
8
8
  locateFrontmatter
9
- } from "./chunk-VSEBFHAY.js";
9
+ } from "./chunk-KFKL4VTL.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-2IR4T5PO.js.map
3250
+ //# sourceMappingURL=chunk-JJ4RSDSY.js.map