@redocly/recheck 0.1.0 → 0.2.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 (591) hide show
  1. package/README.md +1006 -56
  2. package/dist/cli.js +27 -7
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/markdoc-schema.d.ts +17 -0
  5. package/dist/commands/markdoc-schema.d.ts.map +1 -0
  6. package/dist/commands/markdoc-schema.js +127 -0
  7. package/dist/commands/markdoc-schema.js.map +1 -0
  8. package/dist/commands/run.d.ts +0 -1
  9. package/dist/commands/run.d.ts.map +1 -1
  10. package/dist/commands/run.js +68 -5
  11. package/dist/commands/run.js.map +1 -1
  12. package/dist/config/load.d.ts +11 -0
  13. package/dist/config/load.d.ts.map +1 -1
  14. package/dist/config/load.js +12 -2
  15. package/dist/config/load.js.map +1 -1
  16. package/dist/config/presets/google.d.ts +3 -0
  17. package/dist/config/presets/google.d.ts.map +1 -0
  18. package/dist/config/presets/google.js +1671 -0
  19. package/dist/config/presets/google.js.map +1 -0
  20. package/dist/config/presets/inclusive-language.d.ts +3 -0
  21. package/dist/config/presets/inclusive-language.d.ts.map +1 -0
  22. package/dist/config/presets/inclusive-language.js +321 -0
  23. package/dist/config/presets/inclusive-language.js.map +1 -0
  24. package/dist/config/presets/index.d.ts +67 -0
  25. package/dist/config/presets/index.d.ts.map +1 -0
  26. package/dist/config/presets/index.js +137 -0
  27. package/dist/config/presets/index.js.map +1 -0
  28. package/dist/config/presets/markdoc.d.ts +21 -0
  29. package/dist/config/presets/markdoc.d.ts.map +1 -0
  30. package/dist/config/presets/markdoc.js +101 -0
  31. package/dist/config/presets/markdoc.js.map +1 -0
  32. package/dist/config/presets/markdown-relaxed.d.ts +3 -0
  33. package/dist/config/presets/markdown-relaxed.d.ts.map +1 -0
  34. package/dist/config/presets/markdown-relaxed.js +98 -0
  35. package/dist/config/presets/markdown-relaxed.js.map +1 -0
  36. package/dist/config/presets/markdown.d.ts +43 -0
  37. package/dist/config/presets/markdown.d.ts.map +1 -0
  38. package/dist/config/presets/markdown.js +132 -0
  39. package/dist/config/presets/markdown.js.map +1 -0
  40. package/dist/config/presets/microsoft.d.ts +3 -0
  41. package/dist/config/presets/microsoft.d.ts.map +1 -0
  42. package/dist/config/presets/microsoft.js +2268 -0
  43. package/dist/config/presets/microsoft.js.map +1 -0
  44. package/dist/config/presets/minimal.d.ts +3 -0
  45. package/dist/config/presets/minimal.d.ts.map +1 -0
  46. package/dist/config/presets/minimal.js +21 -0
  47. package/dist/config/presets/minimal.js.map +1 -0
  48. package/dist/config/presets/plain-language.d.ts +3 -0
  49. package/dist/config/presets/plain-language.d.ts.map +1 -0
  50. package/dist/config/presets/plain-language.js +351 -0
  51. package/dist/config/presets/plain-language.js.map +1 -0
  52. package/dist/config/presets/prose.d.ts +52 -0
  53. package/dist/config/presets/prose.d.ts.map +1 -0
  54. package/dist/config/presets/prose.js +138 -0
  55. package/dist/config/presets/prose.js.map +1 -0
  56. package/dist/config/schema.d.ts +128 -22
  57. package/dist/config/schema.d.ts.map +1 -1
  58. package/dist/config/schema.js +105 -21
  59. package/dist/config/schema.js.map +1 -1
  60. package/dist/config/validate.d.ts +12 -2
  61. package/dist/config/validate.d.ts.map +1 -1
  62. package/dist/config/validate.js +1200 -44
  63. package/dist/config/validate.js.map +1 -1
  64. package/dist/core/auto-fix.d.ts +8 -13
  65. package/dist/core/auto-fix.d.ts.map +1 -1
  66. package/dist/core/auto-fix.js +94 -75
  67. package/dist/core/auto-fix.js.map +1 -1
  68. package/dist/core/case-preserve.d.ts +46 -0
  69. package/dist/core/case-preserve.d.ts.map +1 -0
  70. package/dist/core/case-preserve.js +57 -0
  71. package/dist/core/case-preserve.js.map +1 -0
  72. package/dist/core/directives.d.ts +9 -0
  73. package/dist/core/directives.d.ts.map +1 -0
  74. package/dist/core/directives.js +73 -0
  75. package/dist/core/directives.js.map +1 -0
  76. package/dist/core/files.d.ts +63 -0
  77. package/dist/core/files.d.ts.map +1 -1
  78. package/dist/core/files.js +185 -0
  79. package/dist/core/files.js.map +1 -1
  80. package/dist/core/inline-code.d.ts +87 -0
  81. package/dist/core/inline-code.d.ts.map +1 -0
  82. package/dist/core/inline-code.js +104 -0
  83. package/dist/core/inline-code.js.map +1 -0
  84. package/dist/core/line-endings.d.ts +32 -0
  85. package/dist/core/line-endings.d.ts.map +1 -0
  86. package/dist/core/line-endings.js +65 -0
  87. package/dist/core/line-endings.js.map +1 -0
  88. package/dist/core/markdoc-tags.d.ts +79 -0
  89. package/dist/core/markdoc-tags.d.ts.map +1 -0
  90. package/dist/core/markdoc-tags.js +131 -0
  91. package/dist/core/markdoc-tags.js.map +1 -0
  92. package/dist/core/runner.d.ts +92 -3
  93. package/dist/core/runner.d.ts.map +1 -1
  94. package/dist/core/runner.js +348 -110
  95. package/dist/core/runner.js.map +1 -1
  96. package/dist/core/timing.d.ts.map +1 -1
  97. package/dist/data/markdoc-realm-schema.d.ts +3 -0
  98. package/dist/data/markdoc-realm-schema.d.ts.map +1 -0
  99. package/dist/data/markdoc-realm-schema.js +760 -0
  100. package/dist/data/markdoc-realm-schema.js.map +1 -0
  101. package/dist/data/proper-nouns.d.ts +2 -0
  102. package/dist/data/proper-nouns.d.ts.map +1 -0
  103. package/dist/data/proper-nouns.js +208 -0
  104. package/dist/data/proper-nouns.js.map +1 -0
  105. package/dist/index.d.ts +90 -0
  106. package/dist/index.d.ts.map +1 -0
  107. package/dist/index.js +152 -0
  108. package/dist/index.js.map +1 -0
  109. package/dist/metrics/formulas.d.ts +17 -0
  110. package/dist/metrics/formulas.d.ts.map +1 -0
  111. package/dist/metrics/formulas.js +70 -0
  112. package/dist/metrics/formulas.js.map +1 -0
  113. package/dist/metrics/index.d.ts +5 -0
  114. package/dist/metrics/index.d.ts.map +1 -0
  115. package/dist/metrics/index.js +3 -0
  116. package/dist/metrics/index.js.map +1 -0
  117. package/dist/metrics/statistics.d.ts +27 -0
  118. package/dist/metrics/statistics.d.ts.map +1 -0
  119. package/dist/metrics/statistics.js +56 -0
  120. package/dist/metrics/statistics.js.map +1 -0
  121. package/dist/parser/index.d.ts +18 -0
  122. package/dist/parser/index.d.ts.map +1 -0
  123. package/dist/parser/index.js +168 -0
  124. package/dist/parser/index.js.map +1 -0
  125. package/dist/parser/markdoc/extract-statics.d.ts +45 -0
  126. package/dist/parser/markdoc/extract-statics.d.ts.map +1 -0
  127. package/dist/parser/markdoc/extract-statics.js +139 -0
  128. package/dist/parser/markdoc/extract-statics.js.map +1 -0
  129. package/dist/parser/markdoc/pairing.d.ts +63 -0
  130. package/dist/parser/markdoc/pairing.d.ts.map +1 -0
  131. package/dist/parser/markdoc/pairing.js +94 -0
  132. package/dist/parser/markdoc/pairing.js.map +1 -0
  133. package/dist/parser/markdoc/schema.d.ts +85 -0
  134. package/dist/parser/markdoc/schema.d.ts.map +1 -0
  135. package/dist/parser/markdoc/schema.js +86 -0
  136. package/dist/parser/markdoc/schema.js.map +1 -0
  137. package/dist/parser/markdoc/span.d.ts +64 -0
  138. package/dist/parser/markdoc/span.d.ts.map +1 -0
  139. package/dist/parser/markdoc/span.js +729 -0
  140. package/dist/parser/markdoc/span.js.map +1 -0
  141. package/dist/parser/markdoc/structure.d.ts +28 -0
  142. package/dist/parser/markdoc/structure.d.ts.map +1 -0
  143. package/dist/parser/markdoc/structure.js +153 -0
  144. package/dist/parser/markdoc/structure.js.map +1 -0
  145. package/dist/parser/markdoc/syntax.d.ts +44 -0
  146. package/dist/parser/markdoc/syntax.d.ts.map +1 -0
  147. package/dist/parser/markdoc/syntax.js +317 -0
  148. package/dist/parser/markdoc/syntax.js.map +1 -0
  149. package/dist/parser/types.d.ts +18 -0
  150. package/dist/parser/types.d.ts.map +1 -0
  151. package/dist/parser/types.js.map +1 -0
  152. package/dist/reporter/fixes.d.ts.map +1 -1
  153. package/dist/reporter/fixes.js +22 -1
  154. package/dist/reporter/fixes.js.map +1 -1
  155. package/dist/reporter/statistics.d.ts +1 -8
  156. package/dist/reporter/statistics.d.ts.map +1 -1
  157. package/dist/reporter/statistics.js.map +1 -1
  158. package/dist/rules/registry.d.ts +15 -0
  159. package/dist/rules/registry.d.ts.map +1 -0
  160. package/dist/rules/registry.js +81 -0
  161. package/dist/rules/registry.js.map +1 -0
  162. package/dist/rules/scope/capitalization.d.ts +3 -0
  163. package/dist/rules/scope/capitalization.d.ts.map +1 -0
  164. package/dist/rules/scope/capitalization.js +161 -0
  165. package/dist/rules/scope/capitalization.js.map +1 -0
  166. package/dist/rules/scope/conditional.d.ts +3 -0
  167. package/dist/rules/scope/conditional.d.ts.map +1 -0
  168. package/dist/rules/scope/conditional.js +112 -0
  169. package/dist/rules/scope/conditional.js.map +1 -0
  170. package/dist/rules/scope/consistency.d.ts +3 -0
  171. package/dist/rules/scope/consistency.d.ts.map +1 -0
  172. package/dist/rules/scope/consistency.js +178 -0
  173. package/dist/rules/scope/consistency.js.map +1 -0
  174. package/dist/rules/scope/length.d.ts +3 -0
  175. package/dist/rules/scope/length.d.ts.map +1 -0
  176. package/dist/rules/scope/length.js +69 -0
  177. package/dist/rules/scope/length.js.map +1 -0
  178. package/dist/rules/scope/max-image-size.d.ts +3 -0
  179. package/dist/rules/scope/max-image-size.d.ts.map +1 -0
  180. package/dist/rules/scope/max-image-size.js +65 -0
  181. package/dist/rules/scope/max-image-size.js.map +1 -0
  182. package/dist/rules/scope/metric.d.ts +17 -0
  183. package/dist/rules/scope/metric.d.ts.map +1 -0
  184. package/dist/rules/scope/metric.js +216 -0
  185. package/dist/rules/scope/metric.js.map +1 -0
  186. package/dist/rules/scope/occurrence.d.ts +3 -0
  187. package/dist/rules/scope/occurrence.d.ts.map +1 -0
  188. package/dist/rules/scope/occurrence.js +48 -0
  189. package/dist/rules/scope/occurrence.js.map +1 -0
  190. package/dist/rules/scope/pattern.d.ts +3 -0
  191. package/dist/rules/scope/pattern.d.ts.map +1 -0
  192. package/dist/rules/scope/pattern.js +75 -0
  193. package/dist/rules/scope/pattern.js.map +1 -0
  194. package/dist/rules/scope/repetition.d.ts +3 -0
  195. package/dist/rules/scope/repetition.d.ts.map +1 -0
  196. package/dist/rules/scope/repetition.js +139 -0
  197. package/dist/rules/scope/repetition.js.map +1 -0
  198. package/dist/rules/scope/semantic-line-breaks.d.ts +3 -0
  199. package/dist/rules/scope/semantic-line-breaks.d.ts.map +1 -0
  200. package/dist/rules/scope/semantic-line-breaks.js +213 -0
  201. package/dist/rules/scope/semantic-line-breaks.js.map +1 -0
  202. package/dist/rules/scope/spelling.d.ts +27 -0
  203. package/dist/rules/scope/spelling.d.ts.map +1 -0
  204. package/dist/rules/scope/spelling.js +227 -0
  205. package/dist/rules/scope/spelling.js.map +1 -0
  206. package/dist/rules/scope/swap.d.ts +3 -0
  207. package/dist/rules/scope/swap.d.ts.map +1 -0
  208. package/dist/rules/scope/swap.js +149 -0
  209. package/dist/rules/scope/swap.js.map +1 -0
  210. package/dist/rules/scope/title-case.d.ts +42 -0
  211. package/dist/rules/scope/title-case.d.ts.map +1 -0
  212. package/dist/rules/scope/title-case.js +264 -0
  213. package/dist/rules/scope/title-case.js.map +1 -0
  214. package/dist/rules/token/blanks-around-fences.d.ts +3 -0
  215. package/dist/rules/token/blanks-around-fences.d.ts.map +1 -0
  216. package/dist/rules/token/blanks-around-fences.js +44 -0
  217. package/dist/rules/token/blanks-around-fences.js.map +1 -0
  218. package/dist/rules/token/blanks-around-headings.d.ts +3 -0
  219. package/dist/rules/token/blanks-around-headings.d.ts.map +1 -0
  220. package/dist/rules/token/blanks-around-headings.js +108 -0
  221. package/dist/rules/token/blanks-around-headings.js.map +1 -0
  222. package/dist/rules/token/blanks-around-lists.d.ts +3 -0
  223. package/dist/rules/token/blanks-around-lists.d.ts.map +1 -0
  224. package/dist/rules/token/blanks-around-lists.js +56 -0
  225. package/dist/rules/token/blanks-around-lists.js.map +1 -0
  226. package/dist/rules/token/blanks-around-tables.d.ts +3 -0
  227. package/dist/rules/token/blanks-around-tables.d.ts.map +1 -0
  228. package/dist/rules/token/blanks-around-tables.js +42 -0
  229. package/dist/rules/token/blanks-around-tables.js.map +1 -0
  230. package/dist/rules/token/code-block-style.d.ts +3 -0
  231. package/dist/rules/token/code-block-style.d.ts.map +1 -0
  232. package/dist/rules/token/code-block-style.js +30 -0
  233. package/dist/rules/token/code-block-style.js.map +1 -0
  234. package/dist/rules/token/code-fence-style.d.ts +3 -0
  235. package/dist/rules/token/code-fence-style.d.ts.map +1 -0
  236. package/dist/rules/token/code-fence-style.js +35 -0
  237. package/dist/rules/token/code-fence-style.js.map +1 -0
  238. package/dist/rules/token/commands-show-output.d.ts +3 -0
  239. package/dist/rules/token/commands-show-output.d.ts.map +1 -0
  240. package/dist/rules/token/commands-show-output.js +38 -0
  241. package/dist/rules/token/commands-show-output.js.map +1 -0
  242. package/dist/rules/token/descriptive-link-text.d.ts +3 -0
  243. package/dist/rules/token/descriptive-link-text.d.ts.map +1 -0
  244. package/dist/rules/token/descriptive-link-text.js +53 -0
  245. package/dist/rules/token/descriptive-link-text.js.map +1 -0
  246. package/dist/rules/token/emphasis-style.d.ts +3 -0
  247. package/dist/rules/token/emphasis-style.d.ts.map +1 -0
  248. package/dist/rules/token/emphasis-style.js +51 -0
  249. package/dist/rules/token/emphasis-style.js.map +1 -0
  250. package/dist/rules/token/fenced-code-language.d.ts +3 -0
  251. package/dist/rules/token/fenced-code-language.d.ts.map +1 -0
  252. package/dist/rules/token/fenced-code-language.js +35 -0
  253. package/dist/rules/token/fenced-code-language.js.map +1 -0
  254. package/dist/rules/token/first-line-h1.d.ts +3 -0
  255. package/dist/rules/token/first-line-h1.d.ts.map +1 -0
  256. package/dist/rules/token/first-line-h1.js +107 -0
  257. package/dist/rules/token/first-line-h1.js.map +1 -0
  258. package/dist/rules/token/heading-increment.d.ts +3 -0
  259. package/dist/rules/token/heading-increment.d.ts.map +1 -0
  260. package/dist/rules/token/heading-increment.js +27 -0
  261. package/dist/rules/token/heading-increment.js.map +1 -0
  262. package/dist/rules/token/heading-start-left.d.ts +3 -0
  263. package/dist/rules/token/heading-start-left.d.ts.map +1 -0
  264. package/dist/rules/token/heading-start-left.js +31 -0
  265. package/dist/rules/token/heading-start-left.js.map +1 -0
  266. package/dist/rules/token/heading-style.d.ts +3 -0
  267. package/dist/rules/token/heading-style.d.ts.map +1 -0
  268. package/dist/rules/token/heading-style.js +41 -0
  269. package/dist/rules/token/heading-style.js.map +1 -0
  270. package/dist/rules/token/helpers.d.ts +313 -0
  271. package/dist/rules/token/helpers.d.ts.map +1 -0
  272. package/dist/rules/token/helpers.js +746 -0
  273. package/dist/rules/token/helpers.js.map +1 -0
  274. package/dist/rules/token/hr-style.d.ts +3 -0
  275. package/dist/rules/token/hr-style.d.ts.map +1 -0
  276. package/dist/rules/token/hr-style.js +28 -0
  277. package/dist/rules/token/hr-style.js.map +1 -0
  278. package/dist/rules/token/index.d.ts +75 -0
  279. package/dist/rules/token/index.d.ts.map +1 -0
  280. package/dist/rules/token/index.js +226 -0
  281. package/dist/rules/token/index.js.map +1 -0
  282. package/dist/rules/token/line-length.d.ts +3 -0
  283. package/dist/rules/token/line-length.d.ts.map +1 -0
  284. package/dist/rules/token/line-length.js +120 -0
  285. package/dist/rules/token/line-length.js.map +1 -0
  286. package/dist/rules/token/link-fragments.d.ts +3 -0
  287. package/dist/rules/token/link-fragments.d.ts.map +1 -0
  288. package/dist/rules/token/link-fragments.js +145 -0
  289. package/dist/rules/token/link-fragments.js.map +1 -0
  290. package/dist/rules/token/link-image-reference-definitions.d.ts +3 -0
  291. package/dist/rules/token/link-image-reference-definitions.d.ts.map +1 -0
  292. package/dist/rules/token/link-image-reference-definitions.js +50 -0
  293. package/dist/rules/token/link-image-reference-definitions.js.map +1 -0
  294. package/dist/rules/token/link-image-style.d.ts +3 -0
  295. package/dist/rules/token/link-image-style.d.ts.map +1 -0
  296. package/dist/rules/token/link-image-style.js +131 -0
  297. package/dist/rules/token/link-image-style.js.map +1 -0
  298. package/dist/rules/token/list-indent.d.ts +3 -0
  299. package/dist/rules/token/list-indent.d.ts.map +1 -0
  300. package/dist/rules/token/list-indent.js +60 -0
  301. package/dist/rules/token/list-indent.js.map +1 -0
  302. package/dist/rules/token/list-length.d.ts +3 -0
  303. package/dist/rules/token/list-length.d.ts.map +1 -0
  304. package/dist/rules/token/list-length.js +55 -0
  305. package/dist/rules/token/list-length.js.map +1 -0
  306. package/dist/rules/token/list-marker-space.d.ts +3 -0
  307. package/dist/rules/token/list-marker-space.d.ts.map +1 -0
  308. package/dist/rules/token/list-marker-space.js +52 -0
  309. package/dist/rules/token/list-marker-space.js.map +1 -0
  310. package/dist/rules/token/markdoc-attributes.d.ts +3 -0
  311. package/dist/rules/token/markdoc-attributes.d.ts.map +1 -0
  312. package/dist/rules/token/markdoc-attributes.js +269 -0
  313. package/dist/rules/token/markdoc-attributes.js.map +1 -0
  314. package/dist/rules/token/markdoc-pairing.d.ts +3 -0
  315. package/dist/rules/token/markdoc-pairing.d.ts.map +1 -0
  316. package/dist/rules/token/markdoc-pairing.js +73 -0
  317. package/dist/rules/token/markdoc-pairing.js.map +1 -0
  318. package/dist/rules/token/markdoc-syntax.d.ts +3 -0
  319. package/dist/rules/token/markdoc-syntax.d.ts.map +1 -0
  320. package/dist/rules/token/markdoc-syntax.js +119 -0
  321. package/dist/rules/token/markdoc-syntax.js.map +1 -0
  322. package/dist/rules/token/markdoc-unknown-tag.d.ts +3 -0
  323. package/dist/rules/token/markdoc-unknown-tag.d.ts.map +1 -0
  324. package/dist/rules/token/markdoc-unknown-tag.js +64 -0
  325. package/dist/rules/token/markdoc-unknown-tag.js.map +1 -0
  326. package/dist/rules/token/messages.d.ts +4 -0
  327. package/dist/rules/token/messages.d.ts.map +1 -0
  328. package/dist/rules/token/messages.js +20 -0
  329. package/dist/rules/token/messages.js.map +1 -0
  330. package/dist/rules/token/no-alt-text.d.ts +3 -0
  331. package/dist/rules/token/no-alt-text.d.ts.map +1 -0
  332. package/dist/rules/token/no-alt-text.js +47 -0
  333. package/dist/rules/token/no-alt-text.js.map +1 -0
  334. package/dist/rules/token/no-bare-urls.d.ts +3 -0
  335. package/dist/rules/token/no-bare-urls.d.ts.map +1 -0
  336. package/dist/rules/token/no-bare-urls.js +88 -0
  337. package/dist/rules/token/no-bare-urls.js.map +1 -0
  338. package/dist/rules/token/no-blanks-blockquote.d.ts +3 -0
  339. package/dist/rules/token/no-blanks-blockquote.d.ts.map +1 -0
  340. package/dist/rules/token/no-blanks-blockquote.js +39 -0
  341. package/dist/rules/token/no-blanks-blockquote.js.map +1 -0
  342. package/dist/rules/token/no-duplicate-heading.d.ts +3 -0
  343. package/dist/rules/token/no-duplicate-heading.d.ts.map +1 -0
  344. package/dist/rules/token/no-duplicate-heading.js +101 -0
  345. package/dist/rules/token/no-duplicate-heading.js.map +1 -0
  346. package/dist/rules/token/no-duplicate-link-destinations.d.ts +3 -0
  347. package/dist/rules/token/no-duplicate-link-destinations.d.ts.map +1 -0
  348. package/dist/rules/token/no-duplicate-link-destinations.js +65 -0
  349. package/dist/rules/token/no-duplicate-link-destinations.js.map +1 -0
  350. package/dist/rules/token/no-emphasis-as-heading.d.ts +3 -0
  351. package/dist/rules/token/no-emphasis-as-heading.d.ts.map +1 -0
  352. package/dist/rules/token/no-emphasis-as-heading.js +44 -0
  353. package/dist/rules/token/no-emphasis-as-heading.js.map +1 -0
  354. package/dist/rules/token/no-empty-headings.d.ts +3 -0
  355. package/dist/rules/token/no-empty-headings.d.ts.map +1 -0
  356. package/dist/rules/token/no-empty-headings.js +28 -0
  357. package/dist/rules/token/no-empty-headings.js.map +1 -0
  358. package/dist/rules/token/no-empty-links.d.ts +3 -0
  359. package/dist/rules/token/no-empty-links.d.ts.map +1 -0
  360. package/dist/rules/token/no-empty-links.js +67 -0
  361. package/dist/rules/token/no-empty-links.js.map +1 -0
  362. package/dist/rules/token/no-hard-tabs.d.ts +3 -0
  363. package/dist/rules/token/no-hard-tabs.d.ts.map +1 -0
  364. package/dist/rules/token/no-hard-tabs.js +76 -0
  365. package/dist/rules/token/no-hard-tabs.js.map +1 -0
  366. package/dist/rules/token/no-inline-html.d.ts +3 -0
  367. package/dist/rules/token/no-inline-html.d.ts.map +1 -0
  368. package/dist/rules/token/no-inline-html.js +45 -0
  369. package/dist/rules/token/no-inline-html.js.map +1 -0
  370. package/dist/rules/token/no-missing-space-atx.d.ts +3 -0
  371. package/dist/rules/token/no-missing-space-atx.d.ts.map +1 -0
  372. package/dist/rules/token/no-missing-space-atx.js +36 -0
  373. package/dist/rules/token/no-missing-space-atx.js.map +1 -0
  374. package/dist/rules/token/no-missing-space-closed-atx.d.ts +3 -0
  375. package/dist/rules/token/no-missing-space-closed-atx.d.ts.map +1 -0
  376. package/dist/rules/token/no-missing-space-closed-atx.js +45 -0
  377. package/dist/rules/token/no-missing-space-closed-atx.js.map +1 -0
  378. package/dist/rules/token/no-multiple-blanks.d.ts +3 -0
  379. package/dist/rules/token/no-multiple-blanks.d.ts.map +1 -0
  380. package/dist/rules/token/no-multiple-blanks.js +35 -0
  381. package/dist/rules/token/no-multiple-blanks.js.map +1 -0
  382. package/dist/rules/token/no-multiple-space-atx.d.ts +13 -0
  383. package/dist/rules/token/no-multiple-space-atx.d.ts.map +1 -0
  384. package/dist/rules/token/no-multiple-space-atx.js +50 -0
  385. package/dist/rules/token/no-multiple-space-atx.js.map +1 -0
  386. package/dist/rules/token/no-multiple-space-blockquote.d.ts +3 -0
  387. package/dist/rules/token/no-multiple-space-blockquote.d.ts.map +1 -0
  388. package/dist/rules/token/no-multiple-space-blockquote.js +43 -0
  389. package/dist/rules/token/no-multiple-space-blockquote.js.map +1 -0
  390. package/dist/rules/token/no-multiple-space-closed-atx.d.ts +3 -0
  391. package/dist/rules/token/no-multiple-space-closed-atx.d.ts.map +1 -0
  392. package/dist/rules/token/no-multiple-space-closed-atx.js +19 -0
  393. package/dist/rules/token/no-multiple-space-closed-atx.js.map +1 -0
  394. package/dist/rules/token/no-reversed-links.d.ts +3 -0
  395. package/dist/rules/token/no-reversed-links.d.ts.map +1 -0
  396. package/dist/rules/token/no-reversed-links.js +52 -0
  397. package/dist/rules/token/no-reversed-links.js.map +1 -0
  398. package/dist/rules/token/no-space-in-code.d.ts +3 -0
  399. package/dist/rules/token/no-space-in-code.d.ts.map +1 -0
  400. package/dist/rules/token/no-space-in-code.js +75 -0
  401. package/dist/rules/token/no-space-in-code.js.map +1 -0
  402. package/dist/rules/token/no-space-in-emphasis.d.ts +3 -0
  403. package/dist/rules/token/no-space-in-emphasis.d.ts.map +1 -0
  404. package/dist/rules/token/no-space-in-emphasis.js +79 -0
  405. package/dist/rules/token/no-space-in-emphasis.js.map +1 -0
  406. package/dist/rules/token/no-space-in-links.d.ts +3 -0
  407. package/dist/rules/token/no-space-in-links.d.ts.map +1 -0
  408. package/dist/rules/token/no-space-in-links.js +48 -0
  409. package/dist/rules/token/no-space-in-links.js.map +1 -0
  410. package/dist/rules/token/no-trailing-punctuation.d.ts +3 -0
  411. package/dist/rules/token/no-trailing-punctuation.d.ts.map +1 -0
  412. package/dist/rules/token/no-trailing-punctuation.js +38 -0
  413. package/dist/rules/token/no-trailing-punctuation.js.map +1 -0
  414. package/dist/rules/token/no-trailing-spaces.d.ts +3 -0
  415. package/dist/rules/token/no-trailing-spaces.d.ts.map +1 -0
  416. package/dist/rules/token/no-trailing-spaces.js +89 -0
  417. package/dist/rules/token/no-trailing-spaces.js.map +1 -0
  418. package/dist/rules/token/ol-prefix.d.ts +3 -0
  419. package/dist/rules/token/ol-prefix.d.ts.map +1 -0
  420. package/dist/rules/token/ol-prefix.js +70 -0
  421. package/dist/rules/token/ol-prefix.js.map +1 -0
  422. package/dist/rules/token/proper-names.d.ts +3 -0
  423. package/dist/rules/token/proper-names.d.ts.map +1 -0
  424. package/dist/rules/token/proper-names.js +93 -0
  425. package/dist/rules/token/proper-names.js.map +1 -0
  426. package/dist/rules/token/reference-links-images.d.ts +3 -0
  427. package/dist/rules/token/reference-links-images.d.ts.map +1 -0
  428. package/dist/rules/token/reference-links-images.js +36 -0
  429. package/dist/rules/token/reference-links-images.js.map +1 -0
  430. package/dist/rules/token/required-headings.d.ts +3 -0
  431. package/dist/rules/token/required-headings.d.ts.map +1 -0
  432. package/dist/rules/token/required-headings.js +83 -0
  433. package/dist/rules/token/required-headings.js.map +1 -0
  434. package/dist/rules/token/single-h1.d.ts +3 -0
  435. package/dist/rules/token/single-h1.d.ts.map +1 -0
  436. package/dist/rules/token/single-h1.js +56 -0
  437. package/dist/rules/token/single-h1.js.map +1 -0
  438. package/dist/rules/token/single-trailing-newline.d.ts +3 -0
  439. package/dist/rules/token/single-trailing-newline.d.ts.map +1 -0
  440. package/dist/rules/token/single-trailing-newline.js +25 -0
  441. package/dist/rules/token/single-trailing-newline.js.map +1 -0
  442. package/dist/rules/token/strong-style.d.ts +3 -0
  443. package/dist/rules/token/strong-style.d.ts.map +1 -0
  444. package/dist/rules/token/strong-style.js +51 -0
  445. package/dist/rules/token/strong-style.js.map +1 -0
  446. package/dist/rules/token/table-column-count.d.ts +3 -0
  447. package/dist/rules/token/table-column-count.d.ts.map +1 -0
  448. package/dist/rules/token/table-column-count.js +44 -0
  449. package/dist/rules/token/table-column-count.js.map +1 -0
  450. package/dist/rules/token/table-column-style.d.ts +3 -0
  451. package/dist/rules/token/table-column-style.d.ts.map +1 -0
  452. package/dist/rules/token/table-column-style.js +179 -0
  453. package/dist/rules/token/table-column-style.js.map +1 -0
  454. package/dist/rules/token/table-pipe-style.d.ts +3 -0
  455. package/dist/rules/token/table-pipe-style.d.ts.map +1 -0
  456. package/dist/rules/token/table-pipe-style.js +54 -0
  457. package/dist/rules/token/table-pipe-style.js.map +1 -0
  458. package/dist/rules/token/ul-indent.d.ts +3 -0
  459. package/dist/rules/token/ul-indent.d.ts.map +1 -0
  460. package/dist/rules/token/ul-indent.js +72 -0
  461. package/dist/rules/token/ul-indent.js.map +1 -0
  462. package/dist/rules/token/ul-style.d.ts +3 -0
  463. package/dist/rules/token/ul-style.d.ts.map +1 -0
  464. package/dist/rules/token/ul-style.js +80 -0
  465. package/dist/rules/token/ul-style.js.map +1 -0
  466. package/dist/rules/types.d.ts +81 -0
  467. package/dist/rules/types.d.ts.map +1 -0
  468. package/dist/rules/types.js +2 -0
  469. package/dist/rules/types.js.map +1 -0
  470. package/dist/rules/utils.d.ts +29 -0
  471. package/dist/rules/utils.d.ts.map +1 -0
  472. package/dist/{assertions → rules}/utils.js +27 -0
  473. package/dist/rules/utils.js.map +1 -0
  474. package/dist/scopes/extractor.d.ts +7 -0
  475. package/dist/scopes/extractor.d.ts.map +1 -0
  476. package/dist/scopes/extractor.js +475 -0
  477. package/dist/scopes/extractor.js.map +1 -0
  478. package/dist/scopes/selector.d.ts +51 -0
  479. package/dist/scopes/selector.d.ts.map +1 -0
  480. package/dist/scopes/selector.js +121 -0
  481. package/dist/scopes/selector.js.map +1 -0
  482. package/dist/scopes/sentences.d.ts +7 -0
  483. package/dist/scopes/sentences.d.ts.map +1 -0
  484. package/dist/scopes/sentences.js +115 -0
  485. package/dist/scopes/sentences.js.map +1 -0
  486. package/dist/scopes/types.d.ts +44 -0
  487. package/dist/scopes/types.d.ts.map +1 -0
  488. package/dist/scopes/types.js +2 -0
  489. package/dist/scopes/types.js.map +1 -0
  490. package/dist/scopes/vocabulary.d.ts +16 -0
  491. package/dist/scopes/vocabulary.d.ts.map +1 -0
  492. package/dist/scopes/vocabulary.js +70 -0
  493. package/dist/scopes/vocabulary.js.map +1 -0
  494. package/dist/types/assertions.d.ts +95 -32
  495. package/dist/types/assertions.d.ts.map +1 -1
  496. package/dist/types/problems.d.ts +4 -5
  497. package/dist/types/problems.d.ts.map +1 -1
  498. package/dist/types/rules.d.ts +4 -6
  499. package/dist/types/rules.d.ts.map +1 -1
  500. package/examples/appendices/google.appendix.yaml +91 -0
  501. package/examples/appendices/inclusive-language.appendix.yaml +61 -0
  502. package/examples/appendices/microsoft.appendix.yaml +99 -0
  503. package/examples/appendices/plain-language.appendix.yaml +88 -0
  504. package/examples/google.yaml +1525 -0
  505. package/examples/inclusive-language.yaml +304 -0
  506. package/examples/microsoft.yaml +1542 -0
  507. package/examples/plain-language.yaml +325 -0
  508. package/package.json +49 -16
  509. package/presets/google/PROVENANCE.md +1022 -0
  510. package/presets/google/sources.json +192 -0
  511. package/presets/inclusive-language/PROVENANCE.md +174 -0
  512. package/presets/inclusive-language/sources.json +107 -0
  513. package/presets/microsoft/PROVENANCE.md +1555 -0
  514. package/presets/microsoft/sources.json +494 -0
  515. package/presets/plain-language/PROVENANCE.md +364 -0
  516. package/presets/plain-language/sources.json +108 -0
  517. package/dist/assertions/bullet-style.d.ts +0 -3
  518. package/dist/assertions/bullet-style.d.ts.map +0 -1
  519. package/dist/assertions/bullet-style.js +0 -60
  520. package/dist/assertions/bullet-style.js.map +0 -1
  521. package/dist/assertions/index.d.ts +0 -21
  522. package/dist/assertions/index.d.ts.map +0 -1
  523. package/dist/assertions/index.js +0 -30
  524. package/dist/assertions/index.js.map +0 -1
  525. package/dist/assertions/max-image-size.d.ts +0 -3
  526. package/dist/assertions/max-image-size.d.ts.map +0 -1
  527. package/dist/assertions/max-image-size.js +0 -73
  528. package/dist/assertions/max-image-size.js.map +0 -1
  529. package/dist/assertions/max-line-length.d.ts +0 -3
  530. package/dist/assertions/max-line-length.d.ts.map +0 -1
  531. package/dist/assertions/max-line-length.js +0 -68
  532. package/dist/assertions/max-line-length.js.map +0 -1
  533. package/dist/assertions/no-broken-fragment-links.d.ts +0 -3
  534. package/dist/assertions/no-broken-fragment-links.d.ts.map +0 -1
  535. package/dist/assertions/no-broken-fragment-links.js +0 -79
  536. package/dist/assertions/no-broken-fragment-links.js.map +0 -1
  537. package/dist/assertions/no-duplicate-headings.d.ts +0 -3
  538. package/dist/assertions/no-duplicate-headings.d.ts.map +0 -1
  539. package/dist/assertions/no-duplicate-headings.js +0 -66
  540. package/dist/assertions/no-duplicate-headings.js.map +0 -1
  541. package/dist/assertions/no-hard-tabs.d.ts +0 -3
  542. package/dist/assertions/no-hard-tabs.d.ts.map +0 -1
  543. package/dist/assertions/no-hard-tabs.js +0 -63
  544. package/dist/assertions/no-hard-tabs.js.map +0 -1
  545. package/dist/assertions/no-trailing-spaces.d.ts +0 -3
  546. package/dist/assertions/no-trailing-spaces.d.ts.map +0 -1
  547. package/dist/assertions/no-trailing-spaces.js +0 -72
  548. package/dist/assertions/no-trailing-spaces.js.map +0 -1
  549. package/dist/assertions/pattern.d.ts +0 -3
  550. package/dist/assertions/pattern.d.ts.map +0 -1
  551. package/dist/assertions/pattern.js +0 -39
  552. package/dist/assertions/pattern.js.map +0 -1
  553. package/dist/assertions/semantic-line-breaks.d.ts +0 -3
  554. package/dist/assertions/semantic-line-breaks.d.ts.map +0 -1
  555. package/dist/assertions/semantic-line-breaks.js +0 -152
  556. package/dist/assertions/semantic-line-breaks.js.map +0 -1
  557. package/dist/assertions/swap.d.ts +0 -3
  558. package/dist/assertions/swap.d.ts.map +0 -1
  559. package/dist/assertions/swap.js +0 -39
  560. package/dist/assertions/swap.js.map +0 -1
  561. package/dist/assertions/utils.d.ts +0 -8
  562. package/dist/assertions/utils.d.ts.map +0 -1
  563. package/dist/assertions/utils.js.map +0 -1
  564. package/dist/core/scope-parser.d.ts +0 -26
  565. package/dist/core/scope-parser.d.ts.map +0 -1
  566. package/dist/core/scope-parser.js +0 -110
  567. package/dist/core/scope-parser.js.map +0 -1
  568. package/dist/files.d.ts +0 -2
  569. package/dist/files.d.ts.map +0 -1
  570. package/dist/files.js +0 -39
  571. package/dist/files.js.map +0 -1
  572. package/dist/load-config.d.ts +0 -25
  573. package/dist/load-config.d.ts.map +0 -1
  574. package/dist/load-config.js +0 -104
  575. package/dist/load-config.js.map +0 -1
  576. package/dist/load.d.ts +0 -25
  577. package/dist/load.d.ts.map +0 -1
  578. package/dist/load.js +0 -112
  579. package/dist/load.js.map +0 -1
  580. package/dist/scope.d.ts +0 -26
  581. package/dist/scope.d.ts.map +0 -1
  582. package/dist/scope.js +0 -110
  583. package/dist/scope.js.map +0 -1
  584. package/dist/types.d.ts +0 -109
  585. package/dist/types.d.ts.map +0 -1
  586. package/dist/types.js.map +0 -1
  587. package/dist/validate.d.ts +0 -31
  588. package/dist/validate.d.ts.map +0 -1
  589. package/dist/validate.js +0 -154
  590. package/dist/validate.js.map +0 -1
  591. /package/dist/{types.js → parser/types.js} +0 -0
@@ -0,0 +1,475 @@
1
+ import { filterByTypes } from '../parser/index.js';
2
+ import { newLineRe, offsetToLineColumn } from '../core/line-endings.js';
3
+ import { MARKDOC_TAG_MASK_CHAR } from '../core/markdoc-tags.js';
4
+ import { splitSentences } from './sentences.js';
5
+ function segmentFromToken(scope, token, content) {
6
+ return {
7
+ scope,
8
+ content: content ?? token.text,
9
+ startLine: token.startLine,
10
+ startColumn: token.startColumn,
11
+ endLine: token.endLine,
12
+ endColumn: token.endColumn,
13
+ tokens: [token],
14
+ };
15
+ }
16
+ function findChild(token, type) {
17
+ return token.children.find((child) => child.type === type);
18
+ }
19
+ // Explicit-stack DFS (not call-stack recursion), same pre-order,
20
+ // first-match semantics as the recursive original: pathological nesting
21
+ // must not be able to overflow the call stack anywhere in the extractor —
22
+ // see `extractScopes`'s own iterative walk below for the full rationale.
23
+ function findDescendant(token, type) {
24
+ const stack = [];
25
+ for (let i = token.children.length - 1; i >= 0; i--)
26
+ stack.push(token.children[i]);
27
+ while (stack.length > 0) {
28
+ const current = stack.pop();
29
+ if (current === undefined)
30
+ break;
31
+ if (current.type === type)
32
+ return current;
33
+ for (let i = current.children.length - 1; i >= 0; i--)
34
+ stack.push(current.children[i]);
35
+ }
36
+ return undefined;
37
+ }
38
+ // Like `findDescendant` above, but collects every match instead of stopping
39
+ // at the first. Children are pushed in reverse so they pop left to right,
40
+ // which returns the matches in source order — `maskProse` below depends on
41
+ // that ordering.
42
+ function findAllDescendants(token, type) {
43
+ const found = [];
44
+ const stack = [];
45
+ for (let i = token.children.length - 1; i >= 0; i--)
46
+ stack.push(token.children[i]);
47
+ while (stack.length > 0) {
48
+ const current = stack.pop();
49
+ if (current === undefined)
50
+ break;
51
+ if (current.type === type)
52
+ found.push(current);
53
+ for (let i = current.children.length - 1; i >= 0; i--)
54
+ stack.push(current.children[i]);
55
+ }
56
+ return found;
57
+ }
58
+ // Inverse of `offsetToLineColumn`: the character offset within `text` that
59
+ // corresponds to an absolute (line, column), given `text`'s own absolute
60
+ // start position. Needed to turn a `markdocTag` descendant's absolute
61
+ // position into an offset inside its container's text, so `maskProse` knows
62
+ // which slice of that text to blank.
63
+ function lineColumnToOffset(text, startLine, startColumn, line, column) {
64
+ if (line === startLine)
65
+ return column - startColumn;
66
+ let offset = 0;
67
+ let currentLine = startLine;
68
+ for (const match of text.matchAll(newLineRe)) {
69
+ currentLine++;
70
+ offset = match.index + match[0].length;
71
+ if (currentLine === line)
72
+ break;
73
+ }
74
+ return offset + (column - 1);
75
+ }
76
+ // Blanks every `markdocTag` descendant's span to same-width
77
+ // MARKDOC_TAG_MASK_CHAR so prose containers (paragraph, heading, list item,
78
+ // blockquote, table cell) stop carrying the tag's literal source characters
79
+ // into word counts and sentence splitting. Newlines inside the span are left
80
+ // alone: only a block tag can contain one, and keeping them exact costs
81
+ // nothing. Blanking in place rather than removing is the point — content
82
+ // length and line structure are unchanged, so every other character keeps
83
+ // its true column and positions computed downstream stay correct with no
84
+ // special-casing.
85
+ //
86
+ // Callers pass `hasTags`, which `extractScopes` derives once per document
87
+ // from the tree's own `markdocTag` tokens. That check must be exact rather
88
+ // than a `text.includes('{%')` heuristic: most real documents merely mention
89
+ // `{%` in prose, and walking every container's subtree on all of them is
90
+ // pure cost with no possible result.
91
+ //
92
+ // The single left-to-right pass matters for the same reason: rebuilding the
93
+ // whole string once per tag would be quadratic in a container holding many
94
+ // tags. Spans are sorted and clamped so an overlapping one (tags don't nest,
95
+ // so this shouldn't happen) can only shorten the pass, never rewind the
96
+ // cursor.
97
+ function maskProse(container, hasTags) {
98
+ const { text } = container;
99
+ const unmasked = { content: text, masked: false, maskedRanges: [] };
100
+ if (!hasTags)
101
+ return unmasked;
102
+ const tags = findAllDescendants(container, 'markdocTag');
103
+ if (tags.length === 0)
104
+ return unmasked;
105
+ const offsetOf = (line, column) => lineColumnToOffset(text, container.startLine, container.startColumn, line, column);
106
+ const spans = tags
107
+ .map((tag) => ({
108
+ start: offsetOf(tag.startLine, tag.startColumn),
109
+ end: offsetOf(tag.endLine, tag.endColumn),
110
+ }))
111
+ .sort((a, b) => a.start - b.start);
112
+ const maskedRanges = [];
113
+ const pieces = [];
114
+ let cursor = 0;
115
+ for (const span of spans) {
116
+ const start = Math.max(span.start, cursor);
117
+ const end = Math.max(span.end, start);
118
+ if (end === start)
119
+ continue;
120
+ pieces.push(text.slice(cursor, start));
121
+ pieces.push(text.slice(start, end).replace(/[^\r\n]/g, MARKDOC_TAG_MASK_CHAR));
122
+ maskedRanges.push({ start, end });
123
+ cursor = end;
124
+ }
125
+ if (maskedRanges.length === 0)
126
+ return unmasked;
127
+ pieces.push(text.slice(cursor));
128
+ return { content: pieces.join(''), masked: true, maskedRanges };
129
+ }
130
+ // A prose segment that masking reduced to blanks and whitespace carries no
131
+ // prose at all — its entire text was a markdoc tag. Emitting it only adds
132
+ // noise: a blank `summary` entry, a character count for invisible text, a
133
+ // sentence span with no words in it. Gated on `masked` so a genuinely empty
134
+ // source construct (an `||` table cell) still emits its `''` segment.
135
+ function isProseless(masked) {
136
+ return masked.masked && masked.content.trim() === '';
137
+ }
138
+ // Re-bases masked ranges onto a slice `[offset, offset + length)` of the
139
+ // text they were measured against, dropping anything the slice cut away.
140
+ // Only table cells need this — they are the one scope that trims its
141
+ // content after masking (see the `tableRow` case).
142
+ function shiftRanges(ranges, offset, length) {
143
+ const shifted = [];
144
+ for (const range of ranges) {
145
+ const start = Math.max(range.start - offset, 0);
146
+ const end = Math.min(range.end - offset, length);
147
+ if (end > start)
148
+ shifted.push({ start, end });
149
+ }
150
+ return shifted;
151
+ }
152
+ function headingLevel(token) {
153
+ if (token.type === 'atxHeading') {
154
+ const sequence = findChild(token, 'atxHeadingSequence');
155
+ return sequence ? sequence.text.length : 1;
156
+ }
157
+ // setextHeading: '=' underline → h1, '-' → h2
158
+ const underline = findDescendant(token, 'setextHeadingLineSequence');
159
+ return underline && underline.text.startsWith('=') ? 1 : 2;
160
+ }
161
+ function headingText(token) {
162
+ return findDescendant(token, 'atxHeadingText') ?? findDescendant(token, 'setextHeadingText');
163
+ }
164
+ function ancestorCount(token, types) {
165
+ let count = 0;
166
+ for (let current = token.parent; current; current = current.parent) {
167
+ if (types.includes(current.type))
168
+ count++;
169
+ }
170
+ return count;
171
+ }
172
+ const LIST_TYPES = ['listOrdered', 'listUnordered'];
173
+ // True when `token` (a `paragraph`) is the direct inline body of a
174
+ // container's `content` token whose own parent is a list item or blockquote
175
+ // — i.e. the paragraph text duplicates the container segment already
176
+ // produced for `list-item` / `blockquote`, so it should not get its own
177
+ // standalone `paragraph` segment.
178
+ function isNestedContainerParagraph(token) {
179
+ const content = token.parent;
180
+ if (!content || content.type !== 'content')
181
+ return false;
182
+ const container = content.parent;
183
+ if (!container)
184
+ return false;
185
+ if (LIST_TYPES.includes(container.type))
186
+ return true;
187
+ return container.type === 'blockQuote';
188
+ }
189
+ // `sentence` segments are derived from EXACTLY these three scope kinds —
190
+ // running prose where sentence boundaries are meaningful. Headings and
191
+ // table cells are deliberately NOT sentence sources: their content is
192
+ // label-like, not sentence-structured, and `scope: sentence` consumers
193
+ // (e.g. an oxford-comma rule) depend on this exact source set.
194
+ const SENTENCE_SOURCES = new Set(['paragraph', 'list-item', 'blockquote']);
195
+ // `summary` = the document's prose: every scope kind whose content is
196
+ // human-readable text. That's the sentence sources above PLUS headings
197
+ // (all levels) and table header/body cells. `code`, `frontmatter`, `html`,
198
+ // `comment`, `alt`, and `link` are never prose.
199
+ //
200
+ // This set also defines which scopes get markdoc-masked: prose is exactly the
201
+ // content a tag's `{% ... %}` syntax must not leak into. Exported so tests
202
+ // can enumerate it and require a masking fixture per member, so a new prose
203
+ // scope can't be added without a deliberate decision about masking.
204
+ export const SUMMARY_BLOCK_SOURCES = new Set([...SENTENCE_SOURCES, 'table.header', 'table.cell']);
205
+ // Headings only ever arrive as level-qualified segments (the walker emits
206
+ // `heading.h1`..`heading.h6`, never a bare 'heading' scope).
207
+ export function isSummarySource(scope) {
208
+ return SUMMARY_BLOCK_SOURCES.has(scope) || scope.startsWith('heading.');
209
+ }
210
+ export function extractScopes(tree, _content) {
211
+ const segments = [];
212
+ // Every `markdocTag` token in the document, resolved once. It has two jobs:
213
+ // it is the source for the `markdoc.tag` scope emitted at the bottom of this
214
+ // function, and its emptiness is the gate that keeps `maskProse` from
215
+ // walking a subtree that cannot contain a tag. With markdoc parsing off no
216
+ // `markdocTag` tokens exist, so masking is skipped outright rather than
217
+ // guessed at from the text.
218
+ //
219
+ // `filterByTypes` rather than a raw `tree.flat.filter` so htmlFlow-reparsed
220
+ // tokens are excluded on the same terms every other consumer uses. One list
221
+ // can serve both jobs because reparsed content hangs under an `htmlFlow`
222
+ // token, which the walk below never descends into, so a tag this filter
223
+ // drops was never maskable anyway.
224
+ const markdocTags = filterByTypes(tree, ['markdocTag']);
225
+ const hasMarkdocTags = markdocTags.length > 0;
226
+ // The single place prose segments are emitted, so masking and everything
227
+ // that follows from it are decided once instead of at each call site: the
228
+ // mask itself, the `maskedRanges` a rule needs to reject a match inside a
229
+ // tag, the verbatim `sourceText` a rule needs to quote real source, and the
230
+ // suppression of a segment masking left with no prose in it. Table cells are
231
+ // the one caller that can't use this, because they re-anchor onto trimmed
232
+ // content, but they still mask through the same `maskProse`.
233
+ const emitProse = (scope, anchor) => {
234
+ const masked = maskProse(anchor, hasMarkdocTags);
235
+ if (isProseless(masked))
236
+ return undefined;
237
+ const segment = segmentFromToken(scope, anchor, masked.content);
238
+ if (masked.masked) {
239
+ segment.sourceText = anchor.text;
240
+ segment.maskedRanges = masked.maskedRanges;
241
+ }
242
+ segments.push(segment);
243
+ return segment;
244
+ };
245
+ // Returns whether the walk should descend into `token`'s children —
246
+ // replacing the recursive walker's `return` (skip children) vs `break`
247
+ // (descend) convention. Kept as a per-token visitor so the iterative
248
+ // driver below is a plain pre-order DFS over an explicit stack: the old
249
+ // call-stack recursion overflowed on deeply nested input (e.g. ~10,000
250
+ // nested blockquotes) that micromark itself parses without issue, so
251
+ // recursion depth here must not track document nesting depth.
252
+ const visit = (token) => {
253
+ switch (token.type) {
254
+ case 'atxHeading':
255
+ case 'setextHeading': {
256
+ const level = headingLevel(token);
257
+ const text = headingText(token);
258
+ const anchor = text ?? token;
259
+ // An annotation tag (`# Head {% #main %}`) is tokenized as a child of
260
+ // the heading's own text token, so heading content needs the same
261
+ // masking as paragraph content — otherwise `summary`, which includes
262
+ // every heading level, would leak the tag's text.
263
+ const segment = emitProse(`heading.h${level}`, anchor);
264
+ if (segment)
265
+ segment.metadata = { headingLevel: level };
266
+ return false; // no scopes nested inside headings
267
+ }
268
+ case 'paragraph': {
269
+ // Paragraphs nested directly inside a list-item's `content` or a
270
+ // blockquote's `content` are the inline representation of that
271
+ // container's own segment (list-item / blockquote already cover the
272
+ // same span) — only emit a standalone `paragraph` segment when this
273
+ // paragraph isn't merely restating an ancestor container segment, so
274
+ // summary derivation doesn't double-count the same text twice.
275
+ if (!isNestedContainerParagraph(token))
276
+ emitProse('paragraph', token);
277
+ return true; // continue walking for inline scopes
278
+ }
279
+ // `alt` and `link` are deliberately NOT masked, unlike the prose scopes
280
+ // around them, even though a markdoc tag can appear inside a label
281
+ // (`[text {% x /%} more](url)`). They aren't prose: neither feeds
282
+ // `summary` or `sentence`, and nothing splits them into words or
283
+ // sentences, so the reasons prose is masked don't apply. Rules pointed
284
+ // at these scopes — an alt-text length cap, a pattern rule on link text
285
+ // — are pointed at the label as authored, and blanking part of it would
286
+ // hide authored content from the very rule asked to inspect it. Nothing
287
+ // is at risk either: `--fix` tag safety comes from `protectMarkdocTags`
288
+ // in core/markdoc-tags.ts, not from masking.
289
+ case 'image': {
290
+ const label = findDescendant(token, 'labelText');
291
+ if (label)
292
+ segments.push(segmentFromToken('alt', label));
293
+ return false;
294
+ }
295
+ case 'link': {
296
+ const label = findDescendant(token, 'labelText');
297
+ if (label)
298
+ segments.push(segmentFromToken('link', label));
299
+ return true; // link text may contain other inline tokens
300
+ }
301
+ case 'codeFenced':
302
+ case 'codeIndented': {
303
+ const info = findDescendant(token, 'codeFencedFenceInfo');
304
+ const segment = segmentFromToken('code', token);
305
+ segment.metadata = { codeLanguage: info?.text ?? '' };
306
+ segments.push(segment);
307
+ return false;
308
+ }
309
+ case 'blockQuote': {
310
+ emitProse('blockquote', token);
311
+ return true;
312
+ }
313
+ case 'listItemPrefix': {
314
+ return true; // marker only; content handled via parent list walk
315
+ }
316
+ case 'content': {
317
+ if (token.parent && LIST_TYPES.includes(token.parent.type)) {
318
+ const segment = emitProse('list-item', token);
319
+ if (segment) {
320
+ segment.metadata = {
321
+ listDepth: ancestorCount(token, LIST_TYPES),
322
+ };
323
+ }
324
+ }
325
+ return true;
326
+ }
327
+ case 'tableRow': {
328
+ // Header row vs body row is determined by the ancestor: `tableHead`
329
+ // wraps the header `tableRow` (plus the delimiter row), `tableBody`
330
+ // wraps body rows. Cells are `tableHeader` (in the header row) or
331
+ // `tableData` (in body rows), each containing a `tableContent` with
332
+ // the cell's inline text.
333
+ //
334
+ // Positions anchor on the `tableContent` token, NOT the cell token:
335
+ // the cell spans its leading '|' and padding (`| colour ` for
336
+ // `| colour |`), so a segment carrying trimmed content with the
337
+ // cell's startColumn put every match 2+ columns LEFT of the real
338
+ // text — and a swap --fix then rewrote the pipe/padding instead of
339
+ // the matched word. The content is still trimmed (semantic cell
340
+ // text), so the anchor shifts by the leading-trim length and the
341
+ // end by the trailing-trim length, keeping the recorded span
342
+ // byte-identical to `content` in the source (the alignment
343
+ // invariant locked in scopes/__tests__/extractor.test.ts). Trim
344
+ // lengths and columns both count UTF-16 code units, matching
345
+ // offsetToLineColumn and Fix.editColumn arithmetic. Table cells are
346
+ // single-line by construction, so plain column arithmetic is safe.
347
+ // Cells with no `tableContent` (empty `||` / whitespace-only) keep
348
+ // the cell token's own position: content '' has no text to anchor
349
+ // on, trivially satisfies the invariant, and can never contain a
350
+ // match.
351
+ const inHead = token.parent?.type === 'tableHead';
352
+ const scope = inHead ? 'table.header' : 'table.cell';
353
+ const cellTypes = inHead ? ['tableHeader'] : ['tableData'];
354
+ for (const cell of token.children.filter((child) => cellTypes.includes(child.type))) {
355
+ const text = findDescendant(cell, 'tableContent');
356
+ if (!text) {
357
+ segments.push(segmentFromToken(scope, cell, ''));
358
+ continue;
359
+ }
360
+ // Masked before trimming, not after: a tag flush against the cell's
361
+ // pipe padding becomes whitespace too, so `trim()` folds it into
362
+ // `leadingTrim` exactly like real padding. Same leading-trim-adjusted
363
+ // anchor as above, just computed over the masked text.
364
+ const masked = maskProse(text, hasMarkdocTags);
365
+ if (isProseless(masked))
366
+ continue;
367
+ const leadingTrim = masked.content.length - masked.content.trimStart().length;
368
+ const content = masked.content.trim();
369
+ const segment = segmentFromToken(scope, cell, content);
370
+ segment.startLine = text.startLine;
371
+ segment.startColumn = text.startColumn + leadingTrim;
372
+ segment.endLine = text.startLine;
373
+ segment.endColumn = segment.startColumn + content.length;
374
+ if (masked.masked) {
375
+ // Shifted by the same leading trim the content was, and clipped
376
+ // to what survived it, so the ranges stay offsets into THIS
377
+ // segment's `content` (a tag folded entirely into the trim
378
+ // leaves no range at all).
379
+ segment.sourceText = text.text.slice(leadingTrim, leadingTrim + content.length);
380
+ segment.maskedRanges = shiftRanges(masked.maskedRanges, leadingTrim, content.length);
381
+ }
382
+ segments.push(segment);
383
+ }
384
+ return false;
385
+ }
386
+ case 'yaml': {
387
+ segments.push(segmentFromToken('frontmatter', token));
388
+ return false;
389
+ }
390
+ case 'htmlFlow': {
391
+ const isComment = token.text.trimStart().startsWith('<!--');
392
+ segments.push(segmentFromToken(isComment ? 'comment' : 'html', token));
393
+ return false;
394
+ }
395
+ default:
396
+ return true;
397
+ }
398
+ };
399
+ // Iterative pre-order DFS: children are pushed in reverse so they pop in
400
+ // document order, reproducing the recursive walker's segment ordering
401
+ // exactly (visit parent, then each child subtree left to right).
402
+ const stack = [];
403
+ for (let i = tree.children.length - 1; i >= 0; i--)
404
+ stack.push(tree.children[i]);
405
+ while (stack.length > 0) {
406
+ const token = stack.pop();
407
+ if (token === undefined)
408
+ break;
409
+ if (visit(token)) {
410
+ for (let i = token.children.length - 1; i >= 0; i--)
411
+ stack.push(token.children[i]);
412
+ }
413
+ }
414
+ const summarySegments = segments
415
+ .filter((segment) => isSummarySource(segment.scope))
416
+ .map((segment) => ({ ...segment, scope: 'summary' }));
417
+ const sentenceSegments = [];
418
+ for (const segment of segments) {
419
+ if (!SENTENCE_SOURCES.has(segment.scope))
420
+ continue;
421
+ for (const span of splitSentences(segment.content)) {
422
+ // offsetToLineColumn (never a bare '\n' split): segment content is a
423
+ // verbatim source slice, so on a CR-only file a '\n'-based mapping
424
+ // kept every sentence on the segment's first line with a column
425
+ // counted straight through the '\r'. On the segment's first line the
426
+ // sentence offset is added to the segment's own startColumn (the
427
+ // segment may begin mid-source-line); later lines start at column 1
428
+ // of the source, so the in-segment column is already the source
429
+ // column.
430
+ const start = offsetToLineColumn(segment.content, span.start);
431
+ const end = offsetToLineColumn(segment.content, span.end);
432
+ const sentence = {
433
+ scope: 'sentence',
434
+ content: span.text,
435
+ startLine: segment.startLine + start.line - 1,
436
+ startColumn: start.line === 1 ? segment.startColumn + span.start : start.column,
437
+ endLine: segment.startLine + end.line - 1,
438
+ endColumn: end.line === 1 ? segment.startColumn + span.end : end.column,
439
+ tokens: segment.tokens,
440
+ };
441
+ // A sentence carved out of a masked segment is masked too — re-based
442
+ // onto its own span so `sourceText`/`maskedRanges` keep meaning what
443
+ // they mean everywhere else: offsets into THIS segment's `content`.
444
+ if (segment.sourceText !== undefined) {
445
+ sentence.sourceText = segment.sourceText.slice(span.start, span.start + span.text.length);
446
+ sentence.maskedRanges = shiftRanges(segment.maskedRanges ?? [], span.start, span.text.length);
447
+ }
448
+ sentenceSegments.push(sentence);
449
+ }
450
+ }
451
+ // `markdoc.tag` emits one segment per `markdocTag` token, whatever its
452
+ // `markdocKind` (malformed spans included — a pattern rule may well want to
453
+ // target those) and wherever it sits: a block sibling, an inline child of a
454
+ // paragraph or heading, or nested in a table cell. Sourced from the
455
+ // document's token list rather than from the walk, because the walk stops
456
+ // descending once a `tableRow` has emitted its cell segments and so never
457
+ // reaches a tag inside a cell. With markdoc parsing off no `markdocTag`
458
+ // tokens exist, so this is always `[]`.
459
+ //
460
+ // The sort is a no-op today: `filterByTypes` excludes `inHtmlFlow` tokens,
461
+ // and no `markdocTag` token is ever produced with that flag anyway, because
462
+ // `reparseHtmlFlow` re-tokenizes an html block's text with the base
463
+ // extensions only — `markdocSyntax` is not among them, so a `{% ... %}` span
464
+ // inside `<div>...</div>` never becomes a `markdocTag` at all. Every entry
465
+ // therefore arrives in strict document order. Kept because it costs nothing
466
+ // and becomes load-bearing again the moment something (a markdoc-aware
467
+ // `reparseHtmlFlow`, most plausibly) can append a `markdocTag` out of order,
468
+ // which `computeMarkdocPairing` in parser/markdoc/pairing.ts already has to
469
+ // handle.
470
+ const markdocTagSegments = [...markdocTags]
471
+ .sort((a, b) => a.startLine - b.startLine || a.startColumn - b.startColumn)
472
+ .map((token) => segmentFromToken('markdoc.tag', token));
473
+ return [...segments, ...summarySegments, ...sentenceSegments, ...markdocTagSegments];
474
+ }
475
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/scopes/extractor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKhD,SAAS,gBAAgB,CAAC,KAAa,EAAE,KAAY,EAAE,OAAgB;IACrE,OAAO;QACL,KAAK;QACL,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,IAAI;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,CAAC,KAAK,CAAC;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAY,EAAE,IAAY;IAC3C,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,iEAAiE;AACjE,wEAAwE;AACxE,0EAA0E;AAC1E,yEAAyE;AACzE,SAAS,cAAc,CAAC,KAAY,EAAE,IAAY;IAChD,MAAM,KAAK,GAAY,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM;QACjC,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,4EAA4E;AAC5E,0EAA0E;AAC1E,2EAA2E;AAC3E,iBAAiB;AACjB,SAAS,kBAAkB,CAAC,KAAY,EAAE,IAAY;IACpD,MAAM,KAAK,GAAY,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAY,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM;QACjC,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2EAA2E;AAC3E,yEAAyE;AACzE,sEAAsE;AACtE,4EAA4E;AAC5E,qCAAqC;AACrC,SAAS,kBAAkB,CACzB,IAAY,EACZ,SAAiB,EACjB,WAAmB,EACnB,IAAY,EACZ,MAAc;IAEd,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,GAAG,WAAW,CAAC;IACpD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,WAAW,GAAG,SAAS,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,WAAW,EAAE,CAAC;QACd,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACvC,IAAI,WAAW,KAAK,IAAI;YAAE,MAAM;IAClC,CAAC;IACD,OAAO,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAWD,4DAA4D;AAC5D,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,wEAAwE;AACxE,yEAAyE;AACzE,0EAA0E;AAC1E,yEAAyE;AACzE,kBAAkB;AAClB,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,6EAA6E;AAC7E,yEAAyE;AACzE,qCAAqC;AACrC,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAC7E,wEAAwE;AACxE,UAAU;AACV,SAAS,SAAS,CAAC,SAAgB,EAAE,OAAgB;IACnD,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;IAC3B,MAAM,QAAQ,GAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACjF,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEvC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,CAChD,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG,IAAI;SACf,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACb,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC;QAC/C,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC;KAC1C,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAErC,MAAM,YAAY,GAAgB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,GAAG,KAAK,KAAK;YAAE,SAAS;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC/E,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC;IACf,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAChC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAClE,CAAC;AAED,2EAA2E;AAC3E,0EAA0E;AAC1E,0EAA0E;AAC1E,4EAA4E;AAC5E,sEAAsE;AACtE,SAAS,WAAW,CAAC,MAAmB;IACtC,OAAO,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACvD,CAAC;AAED,yEAAyE;AACzE,yEAAyE;AACzE,qEAAqE;AACrE,mDAAmD;AACnD,SAAS,WAAW,CAAC,MAAmB,EAAE,MAAc,EAAE,MAAc;IACtE,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,GAAG,GAAG,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,KAAY;IAChC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACxD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,8CAA8C;IAC9C,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;IACrE,OAAO,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAC,KAAY;IAC/B,OAAO,cAAc,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,cAAc,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,aAAa,CAAC,KAAY,EAAE,KAAwB;IAC3D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACnE,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,aAAa,EAAE,eAAe,CAAU,CAAC;AAE7D,mEAAmE;AACnE,4EAA4E;AAC5E,qEAAqE;AACrE,wEAAwE;AACxE,kCAAkC;AAClC,SAAS,0BAA0B,CAAC,KAAY;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IACjC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAmC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpF,OAAO,SAAS,CAAC,IAAI,KAAK,YAAY,CAAC;AACzC,CAAC;AAED,yEAAyE;AACzE,uEAAuE;AACvE,sEAAsE;AACtE,uEAAuE;AACvE,+DAA+D;AAC/D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAE3E,sEAAsE;AACtE,uEAAuE;AACvE,2EAA2E;AAC3E,gDAAgD;AAChD,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,4EAA4E;AAC5E,oEAAoE;AACpE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,gBAAgB,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;AAElG,0EAA0E;AAC1E,6DAA6D;AAC7D,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAe,EAAE,QAAgB;IAC7D,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,4EAA4E;IAC5E,6EAA6E;IAC7E,sEAAsE;IACtE,2EAA2E;IAC3E,wEAAwE;IACxE,4BAA4B;IAC5B,EAAE;IACF,4EAA4E;IAC5E,4EAA4E;IAC5E,yEAAyE;IACzE,wEAAwE;IACxE,mCAAmC;IACnC,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAE9C,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,6DAA6D;IAC7D,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,MAAa,EAA6B,EAAE;QAC5E,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACjD,IAAI,WAAW,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1C,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;YACjC,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAC7C,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IAEF,oEAAoE;IACpE,uEAAuE;IACvE,qEAAqE;IACrE,wEAAwE;IACxE,uEAAuE;IACvE,qEAAqE;IACrE,8DAA8D;IAC9D,MAAM,KAAK,GAAG,CAAC,KAAY,EAAW,EAAE;QACtC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,YAAY,CAAC;YAClB,KAAK,eAAe,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;gBAChC,MAAM,MAAM,GAAG,IAAI,IAAI,KAAK,CAAC;gBAC7B,sEAAsE;gBACtE,kEAAkE;gBAClE,qEAAqE;gBACrE,kDAAkD;gBAClD,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;gBACvD,IAAI,OAAO;oBAAE,OAAO,CAAC,QAAQ,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;gBACxD,OAAO,KAAK,CAAC,CAAC,mCAAmC;YACnD,CAAC;YACD,KAAK,WAAW,EAAE,CAAC;gBACjB,iEAAiE;gBACjE,+DAA+D;gBAC/D,oEAAoE;gBACpE,oEAAoE;gBACpE,qEAAqE;gBACrE,+DAA+D;gBAC/D,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC;oBAAE,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBACtE,OAAO,IAAI,CAAC,CAAC,qCAAqC;YACpD,CAAC;YACD,wEAAwE;YACxE,mEAAmE;YACnE,kEAAkE;YAClE,iEAAiE;YACjE,uEAAuE;YACvE,wEAAwE;YACxE,wEAAwE;YACxE,wEAAwE;YACxE,wEAAwE;YACxE,6CAA6C;YAC7C,KAAK,OAAO,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACjD,IAAI,KAAK;oBAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACzD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,KAAK,MAAM,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACjD,IAAI,KAAK;oBAAE,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC1D,OAAO,IAAI,CAAC,CAAC,4CAA4C;YAC3D,CAAC;YACD,KAAK,YAAY,CAAC;YAClB,KAAK,cAAc,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;gBAC1D,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAChD,OAAO,CAAC,QAAQ,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;gBACtD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,KAAK,YAAY,EAAE,CAAC;gBAClB,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,gBAAgB,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,CAAC,oDAAoD;YACnE,CAAC;YACD,KAAK,SAAS,EAAE,CAAC;gBACf,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAmC,CAAC,EAAE,CAAC;oBAC1F,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBAC9C,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO,CAAC,QAAQ,GAAG;4BACjB,SAAS,EAAE,aAAa,CAAC,KAAK,EAAE,UAAiC,CAAC;yBACnE,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,UAAU,EAAE,CAAC;gBAChB,oEAAoE;gBACpE,oEAAoE;gBACpE,kEAAkE;gBAClE,oEAAoE;gBACpE,0BAA0B;gBAC1B,EAAE;gBACF,oEAAoE;gBACpE,8DAA8D;gBAC9D,gEAAgE;gBAChE,iEAAiE;gBACjE,mEAAmE;gBACnE,gEAAgE;gBAChE,iEAAiE;gBACjE,6DAA6D;gBAC7D,2DAA2D;gBAC3D,gEAAgE;gBAChE,6DAA6D;gBAC7D,oEAAoE;gBACpE,mEAAmE;gBACnE,mEAAmE;gBACnE,kEAAkE;gBAClE,iEAAiE;gBACjE,SAAS;gBACT,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,WAAW,CAAC;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;gBACrD,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBAC3D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBACpF,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBAClD,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;wBACjD,SAAS;oBACX,CAAC;oBACD,oEAAoE;oBACpE,iEAAiE;oBACjE,sEAAsE;oBACtE,uDAAuD;oBACvD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBAC/C,IAAI,WAAW,CAAC,MAAM,CAAC;wBAAE,SAAS;oBAClC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;oBAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACtC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;oBACvD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;oBACnC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;oBACrD,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;oBACjC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;oBACzD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAClB,gEAAgE;wBAChE,4DAA4D;wBAC5D,2DAA2D;wBAC3D,2BAA2B;wBAC3B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;wBAChF,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBACvF,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,KAAK,MAAM,EAAE,CAAC;gBACZ,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;gBACtD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,KAAK,UAAU,EAAE,CAAC;gBAChB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC5D,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;gBACvE,OAAO,KAAK,CAAC;YACf,CAAC;YACD;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IAEF,yEAAyE;IACzE,sEAAsE;IACtE,iEAAiE;IACjE,MAAM,KAAK,GAAY,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM;QAC/B,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,QAAQ;SAC7B,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACnD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAExD,MAAM,gBAAgB,GAAoB,EAAE,CAAC;IAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,SAAS;QACnD,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,qEAAqE;YACrE,mEAAmE;YACnE,gEAAgE;YAChE,qEAAqE;YACrE,iEAAiE;YACjE,oEAAoE;YACpE,gEAAgE;YAChE,UAAU;YACV,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9D,MAAM,GAAG,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAkB;gBAC9B,KAAK,EAAE,UAAU;gBACjB,OAAO,EAAE,IAAI,CAAC,IAAI;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC;gBAC7C,WAAW,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;gBAC/E,OAAO,EAAE,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC;gBACzC,SAAS,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM;gBACvE,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC;YACF,qEAAqE;YACrE,qEAAqE;YACrE,oEAAoE;YACpE,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACrC,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1F,QAAQ,CAAC,YAAY,GAAG,WAAW,CACjC,OAAO,CAAC,YAAY,IAAI,EAAE,EAC1B,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,IAAI,CAAC,MAAM,CACjB,CAAC;YACJ,CAAC;YACD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,uEAAuE;IACvE,4EAA4E;IAC5E,4EAA4E;IAC5E,oEAAoE;IACpE,0EAA0E;IAC1E,0EAA0E;IAC1E,wEAAwE;IACxE,wCAAwC;IACxC,EAAE;IACF,2EAA2E;IAC3E,4EAA4E;IAC5E,oEAAoE;IACpE,6EAA6E;IAC7E,2EAA2E;IAC3E,4EAA4E;IAC5E,uEAAuE;IACvE,6EAA6E;IAC7E,4EAA4E;IAC5E,UAAU;IACV,MAAM,kBAAkB,GAAG,CAAC,GAAG,WAAW,CAAC;SACxC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;SAC1E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IAE1D,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,eAAe,EAAE,GAAG,gBAAgB,EAAE,GAAG,kBAAkB,CAAC,CAAC;AACvF,CAAC"}
@@ -0,0 +1,51 @@
1
+ import type { ScopedSegment } from './types.js';
2
+ export type ScopePredicate = (segment: ScopedSegment) => boolean;
3
+ /**
4
+ * One `&`-joined clause of a scope selector entry, e.g. `'~heading'` inside
5
+ * `'paragraph & ~heading'`.
6
+ */
7
+ export interface SelectorClause {
8
+ /** The clause text as written (trimmed), including any leading `~`. */
9
+ clause: string;
10
+ /** True when the clause is `~`-negated. */
11
+ negated: boolean;
12
+ /** The scope name with negation marker and whitespace stripped. */
13
+ term: string;
14
+ }
15
+ /**
16
+ * Splits a selector entry into its `&`-joined clauses. This is THE selector
17
+ * tokenizer: compilation (compileSelector below) and config validation
18
+ * (scopes/vocabulary.ts validateScopeSelector, config/validate.ts) must all
19
+ * parse selector entries through here, so the two sides can never drift
20
+ * apart on what counts as a term.
21
+ */
22
+ export declare function tokenizeSelector(raw: string): SelectorClause[];
23
+ /**
24
+ * Order-preserving removal of duplicate messages within a single selector's
25
+ * problem list. A selector that repeats the same mistake per clause
26
+ * (`all & all`, `bogus & bogus`) produces the identical message once per
27
+ * clause — reporting it twice adds noise, not information. Applied inside
28
+ * the problem-producing helpers (wholeDocumentKeywordProblems here,
29
+ * validateScopeSelector in vocabulary.ts) so every consumer — config
30
+ * validation's error list and compileSelector's throw alike — gets the
31
+ * deduplicated form.
32
+ */
33
+ export declare function dedupeProblems(problems: string[]): string[];
34
+ /**
35
+ * Problems with `all`/`raw` used as selector TERMS inside a compound or
36
+ * negated expression. Both are whole-document keywords, not segment names —
37
+ * extractScopes never emits segments with those scopes — so:
38
+ * - as a conjunction term (`heading & all`) the keyword clause can never
39
+ * match a segment, and the whole rule silently reports nothing;
40
+ * - negated (`~all`, `~raw`) the clause matches EVERY segment, silently
41
+ * meaning "everything" when the set-theoretic reading of `~all` is
42
+ * "nothing".
43
+ * Bare `all`/`raw` as an entire single entry is NOT a problem — that's the
44
+ * valid whole-document form compileSelector normalizes to `null`. Config
45
+ * validation (config/validate.ts validateScope) surfaces these as
46
+ * validation errors; compileSelector throws on them so direct runRules
47
+ * callers that skip validation fail loudly instead of silently.
48
+ */
49
+ export declare function wholeDocumentKeywordProblems(entry: string): string[];
50
+ export declare function compileSelector(scope: string | string[] | undefined): ScopePredicate | null;
51
+ //# sourceMappingURL=selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../src/scopes/selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC;AAIjE;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAO9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE3D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBpE;AAgBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,cAAc,GAAG,IAAI,CAyC3F"}