@openuji/speculator 0.3.1 → 0.4.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 (610) hide show
  1. package/README.md +111 -50
  2. package/dist/file-provider/__tests__/compliance.test.d.ts +5 -0
  3. package/dist/file-provider/__tests__/compliance.test.d.ts.map +1 -0
  4. package/dist/file-provider/__tests__/compliance.test.js +52 -0
  5. package/dist/file-provider/__tests__/compliance.test.js.map +1 -0
  6. package/dist/file-provider/index.d.ts +8 -0
  7. package/dist/file-provider/index.d.ts.map +1 -0
  8. package/dist/file-provider/index.js +10 -0
  9. package/dist/file-provider/index.js.map +1 -0
  10. package/dist/file-provider/memory.d.ts +46 -0
  11. package/dist/file-provider/memory.d.ts.map +1 -0
  12. package/dist/file-provider/memory.js +99 -0
  13. package/dist/file-provider/memory.js.map +1 -0
  14. package/dist/file-provider/node.d.ts +32 -0
  15. package/dist/file-provider/node.d.ts.map +1 -0
  16. package/dist/file-provider/node.js +65 -0
  17. package/dist/file-provider/node.js.map +1 -0
  18. package/dist/file-provider/types.d.ts +69 -0
  19. package/dist/file-provider/types.d.ts.map +1 -0
  20. package/dist/file-provider/types.js +47 -0
  21. package/dist/file-provider/types.js.map +1 -0
  22. package/dist/file-provider/web.d.ts +32 -0
  23. package/dist/file-provider/web.d.ts.map +1 -0
  24. package/dist/file-provider/web.js +77 -0
  25. package/dist/file-provider/web.js.map +1 -0
  26. package/dist/index.d.ts +15 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +16 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/parse/AsideHtmlParser.d.ts +12 -0
  31. package/dist/parse/AsideHtmlParser.d.ts.map +1 -0
  32. package/dist/parse/AsideHtmlParser.js +74 -0
  33. package/dist/parse/AsideHtmlParser.js.map +1 -0
  34. package/dist/parse/BlockquoteHtmlParser.d.ts +11 -0
  35. package/dist/parse/BlockquoteHtmlParser.d.ts.map +1 -0
  36. package/dist/parse/BlockquoteHtmlParser.js +28 -0
  37. package/dist/parse/BlockquoteHtmlParser.js.map +1 -0
  38. package/dist/parse/BlockquoteMarkdownParser.d.ts +11 -0
  39. package/dist/parse/BlockquoteMarkdownParser.d.ts.map +1 -0
  40. package/dist/parse/BlockquoteMarkdownParser.js +26 -0
  41. package/dist/parse/BlockquoteMarkdownParser.js.map +1 -0
  42. package/dist/parse/CodeHtmlParser.d.ts +11 -0
  43. package/dist/parse/CodeHtmlParser.d.ts.map +1 -0
  44. package/dist/parse/CodeHtmlParser.js +38 -0
  45. package/dist/parse/CodeHtmlParser.js.map +1 -0
  46. package/dist/parse/CodeMarkdownParser.d.ts +11 -0
  47. package/dist/parse/CodeMarkdownParser.d.ts.map +1 -0
  48. package/dist/parse/CodeMarkdownParser.js +29 -0
  49. package/dist/parse/CodeMarkdownParser.js.map +1 -0
  50. package/dist/parse/DfnHtmlParser.d.ts +12 -0
  51. package/dist/parse/DfnHtmlParser.d.ts.map +1 -0
  52. package/dist/parse/DfnHtmlParser.js +53 -0
  53. package/dist/parse/DfnHtmlParser.js.map +1 -0
  54. package/dist/parse/HeadingsHtmlParser.d.ts +11 -0
  55. package/dist/parse/HeadingsHtmlParser.d.ts.map +1 -0
  56. package/dist/parse/HeadingsHtmlParser.js +30 -0
  57. package/dist/parse/HeadingsHtmlParser.js.map +1 -0
  58. package/dist/parse/HeadingsMarkdownParser.d.ts +11 -0
  59. package/dist/parse/HeadingsMarkdownParser.d.ts.map +1 -0
  60. package/dist/parse/HeadingsMarkdownParser.js +26 -0
  61. package/dist/parse/HeadingsMarkdownParser.js.map +1 -0
  62. package/dist/parse/InlinesHtmlParser.d.ts +12 -0
  63. package/dist/parse/InlinesHtmlParser.d.ts.map +1 -0
  64. package/dist/parse/InlinesHtmlParser.js +150 -0
  65. package/dist/parse/InlinesHtmlParser.js.map +1 -0
  66. package/dist/parse/InlinesMarkdownParser.d.ts +11 -0
  67. package/dist/parse/InlinesMarkdownParser.d.ts.map +1 -0
  68. package/dist/parse/InlinesMarkdownParser.js +91 -0
  69. package/dist/parse/InlinesMarkdownParser.js.map +1 -0
  70. package/dist/parse/ListsHtmlParser.d.ts +11 -0
  71. package/dist/parse/ListsHtmlParser.d.ts.map +1 -0
  72. package/dist/parse/ListsHtmlParser.js +71 -0
  73. package/dist/parse/ListsHtmlParser.js.map +1 -0
  74. package/dist/parse/ListsMarkdownParser.d.ts +11 -0
  75. package/dist/parse/ListsMarkdownParser.d.ts.map +1 -0
  76. package/dist/parse/ListsMarkdownParser.js +46 -0
  77. package/dist/parse/ListsMarkdownParser.js.map +1 -0
  78. package/dist/parse/MiscHtmlParser.d.ts +12 -0
  79. package/dist/parse/MiscHtmlParser.d.ts.map +1 -0
  80. package/dist/parse/MiscHtmlParser.js +85 -0
  81. package/dist/parse/MiscHtmlParser.js.map +1 -0
  82. package/dist/parse/MiscMarkdownParser.d.ts +11 -0
  83. package/dist/parse/MiscMarkdownParser.d.ts.map +1 -0
  84. package/dist/parse/MiscMarkdownParser.js +38 -0
  85. package/dist/parse/MiscMarkdownParser.js.map +1 -0
  86. package/dist/parse/ParagraphsHtmlParser.d.ts +11 -0
  87. package/dist/parse/ParagraphsHtmlParser.d.ts.map +1 -0
  88. package/dist/parse/ParagraphsHtmlParser.js +30 -0
  89. package/dist/parse/ParagraphsHtmlParser.js.map +1 -0
  90. package/dist/parse/ParagraphsMarkdownParser.d.ts +11 -0
  91. package/dist/parse/ParagraphsMarkdownParser.d.ts.map +1 -0
  92. package/dist/parse/ParagraphsMarkdownParser.js +25 -0
  93. package/dist/parse/ParagraphsMarkdownParser.js.map +1 -0
  94. package/dist/parse/SectionsHtmlParser.d.ts +12 -0
  95. package/dist/parse/SectionsHtmlParser.d.ts.map +1 -0
  96. package/dist/parse/SectionsHtmlParser.js +58 -0
  97. package/dist/parse/SectionsHtmlParser.js.map +1 -0
  98. package/dist/parse/TablesHtmlParser.d.ts +11 -0
  99. package/dist/parse/TablesHtmlParser.d.ts.map +1 -0
  100. package/dist/parse/TablesHtmlParser.js +81 -0
  101. package/dist/parse/TablesHtmlParser.js.map +1 -0
  102. package/dist/parse/TablesMarkdownParser.d.ts +11 -0
  103. package/dist/parse/TablesMarkdownParser.d.ts.map +1 -0
  104. package/dist/parse/TablesMarkdownParser.js +56 -0
  105. package/dist/parse/TablesMarkdownParser.js.map +1 -0
  106. package/dist/parse/XrefHtmlParser.d.ts +12 -0
  107. package/dist/parse/XrefHtmlParser.d.ts.map +1 -0
  108. package/dist/parse/XrefHtmlParser.js +124 -0
  109. package/dist/parse/XrefHtmlParser.js.map +1 -0
  110. package/dist/parse/__tests__/assembler.test.d.ts +5 -0
  111. package/dist/parse/__tests__/assembler.test.d.ts.map +1 -0
  112. package/dist/parse/__tests__/assembler.test.js +135 -0
  113. package/dist/parse/__tests__/assembler.test.js.map +1 -0
  114. package/dist/parse/__tests__/html.test.d.ts +5 -0
  115. package/dist/parse/__tests__/html.test.d.ts.map +1 -0
  116. package/dist/parse/__tests__/html.test.js +149 -0
  117. package/dist/parse/__tests__/html.test.js.map +1 -0
  118. package/dist/parse/__tests__/markdown.test.d.ts +5 -0
  119. package/dist/parse/__tests__/markdown.test.d.ts.map +1 -0
  120. package/dist/parse/__tests__/markdown.test.js +133 -0
  121. package/dist/parse/__tests__/markdown.test.js.map +1 -0
  122. package/dist/parse/__tests__/pipeline.test.d.ts +5 -0
  123. package/dist/parse/__tests__/pipeline.test.d.ts.map +1 -0
  124. package/dist/parse/__tests__/pipeline.test.js +215 -0
  125. package/dist/parse/__tests__/pipeline.test.js.map +1 -0
  126. package/dist/parse/__tests__/respec.test.d.ts +7 -0
  127. package/dist/parse/__tests__/respec.test.d.ts.map +1 -0
  128. package/dist/parse/__tests__/respec.test.js +151 -0
  129. package/dist/parse/__tests__/respec.test.js.map +1 -0
  130. package/dist/parse/assembler.d.ts +20 -0
  131. package/dist/parse/assembler.d.ts.map +1 -0
  132. package/dist/parse/assembler.js +175 -0
  133. package/dist/parse/assembler.js.map +1 -0
  134. package/dist/parse/html/AsideHtmlParser.d.ts +12 -0
  135. package/dist/parse/html/AsideHtmlParser.d.ts.map +1 -0
  136. package/dist/parse/html/AsideHtmlParser.js +74 -0
  137. package/dist/parse/html/AsideHtmlParser.js.map +1 -0
  138. package/dist/parse/html/BlockquoteHtmlParser.d.ts +11 -0
  139. package/dist/parse/html/BlockquoteHtmlParser.d.ts.map +1 -0
  140. package/dist/parse/html/BlockquoteHtmlParser.js +28 -0
  141. package/dist/parse/html/BlockquoteHtmlParser.js.map +1 -0
  142. package/dist/parse/html/CodeHtmlParser.d.ts +11 -0
  143. package/dist/parse/html/CodeHtmlParser.d.ts.map +1 -0
  144. package/dist/parse/html/CodeHtmlParser.js +38 -0
  145. package/dist/parse/html/CodeHtmlParser.js.map +1 -0
  146. package/dist/parse/html/DfnHtmlParser.d.ts +12 -0
  147. package/dist/parse/html/DfnHtmlParser.d.ts.map +1 -0
  148. package/dist/parse/html/DfnHtmlParser.js +53 -0
  149. package/dist/parse/html/DfnHtmlParser.js.map +1 -0
  150. package/dist/parse/html/HeadingsHtmlParser.d.ts +11 -0
  151. package/dist/parse/html/HeadingsHtmlParser.d.ts.map +1 -0
  152. package/dist/parse/html/HeadingsHtmlParser.js +30 -0
  153. package/dist/parse/html/HeadingsHtmlParser.js.map +1 -0
  154. package/dist/parse/html/InlinesHtmlParser.d.ts +12 -0
  155. package/dist/parse/html/InlinesHtmlParser.d.ts.map +1 -0
  156. package/dist/parse/html/InlinesHtmlParser.js +150 -0
  157. package/dist/parse/html/InlinesHtmlParser.js.map +1 -0
  158. package/dist/parse/html/ListsHtmlParser.d.ts +11 -0
  159. package/dist/parse/html/ListsHtmlParser.d.ts.map +1 -0
  160. package/dist/parse/html/ListsHtmlParser.js +71 -0
  161. package/dist/parse/html/ListsHtmlParser.js.map +1 -0
  162. package/dist/parse/html/MiscHtmlParser.d.ts +12 -0
  163. package/dist/parse/html/MiscHtmlParser.d.ts.map +1 -0
  164. package/dist/parse/html/MiscHtmlParser.js +85 -0
  165. package/dist/parse/html/MiscHtmlParser.js.map +1 -0
  166. package/dist/parse/html/ParagraphsHtmlParser.d.ts +11 -0
  167. package/dist/parse/html/ParagraphsHtmlParser.d.ts.map +1 -0
  168. package/dist/parse/html/ParagraphsHtmlParser.js +30 -0
  169. package/dist/parse/html/ParagraphsHtmlParser.js.map +1 -0
  170. package/dist/parse/html/SectionsHtmlParser.d.ts +12 -0
  171. package/dist/parse/html/SectionsHtmlParser.d.ts.map +1 -0
  172. package/dist/parse/html/SectionsHtmlParser.js +58 -0
  173. package/dist/parse/html/SectionsHtmlParser.js.map +1 -0
  174. package/dist/parse/html/TablesHtmlParser.d.ts +11 -0
  175. package/dist/parse/html/TablesHtmlParser.d.ts.map +1 -0
  176. package/dist/parse/html/TablesHtmlParser.js +81 -0
  177. package/dist/parse/html/TablesHtmlParser.js.map +1 -0
  178. package/dist/parse/html/XrefHtmlParser.d.ts +12 -0
  179. package/dist/parse/html/XrefHtmlParser.d.ts.map +1 -0
  180. package/dist/parse/html/XrefHtmlParser.js +125 -0
  181. package/dist/parse/html/XrefHtmlParser.js.map +1 -0
  182. package/dist/parse/html/handlers/blockquote.d.ts +9 -0
  183. package/dist/parse/html/handlers/blockquote.d.ts.map +1 -0
  184. package/dist/parse/html/handlers/blockquote.js +21 -0
  185. package/dist/parse/html/handlers/blockquote.js.map +1 -0
  186. package/dist/parse/html/handlers/code.d.ts +9 -0
  187. package/dist/parse/html/handlers/code.d.ts.map +1 -0
  188. package/dist/parse/html/handlers/code.js +31 -0
  189. package/dist/parse/html/handlers/code.js.map +1 -0
  190. package/dist/parse/html/handlers/containers.d.ts +16 -0
  191. package/dist/parse/html/handlers/containers.d.ts.map +1 -0
  192. package/dist/parse/html/handlers/containers.js +25 -0
  193. package/dist/parse/html/handlers/containers.js.map +1 -0
  194. package/dist/parse/html/handlers/heading.d.ts +9 -0
  195. package/dist/parse/html/handlers/heading.d.ts.map +1 -0
  196. package/dist/parse/html/handlers/heading.js +26 -0
  197. package/dist/parse/html/handlers/heading.js.map +1 -0
  198. package/dist/parse/html/handlers/index.d.ts +23 -0
  199. package/dist/parse/html/handlers/index.d.ts.map +1 -0
  200. package/dist/parse/html/handlers/index.js +47 -0
  201. package/dist/parse/html/handlers/index.js.map +1 -0
  202. package/dist/parse/html/handlers/inline.d.ts +35 -0
  203. package/dist/parse/html/handlers/inline.d.ts.map +1 -0
  204. package/dist/parse/html/handlers/inline.js +119 -0
  205. package/dist/parse/html/handlers/inline.js.map +1 -0
  206. package/dist/parse/html/handlers/list.d.ts +9 -0
  207. package/dist/parse/html/handlers/list.d.ts.map +1 -0
  208. package/dist/parse/html/handlers/list.js +63 -0
  209. package/dist/parse/html/handlers/list.js.map +1 -0
  210. package/dist/parse/html/handlers/paragraph.d.ts +9 -0
  211. package/dist/parse/html/handlers/paragraph.d.ts.map +1 -0
  212. package/dist/parse/html/handlers/paragraph.js +20 -0
  213. package/dist/parse/html/handlers/paragraph.js.map +1 -0
  214. package/dist/parse/html/handlers/section.d.ts +9 -0
  215. package/dist/parse/html/handlers/section.d.ts.map +1 -0
  216. package/dist/parse/html/handlers/section.js +53 -0
  217. package/dist/parse/html/handlers/section.js.map +1 -0
  218. package/dist/parse/html/index.d.ts +5 -0
  219. package/dist/parse/html/index.d.ts.map +1 -0
  220. package/dist/parse/html/index.js +12 -0
  221. package/dist/parse/html/index.js.map +1 -0
  222. package/dist/parse/html/parser.d.ts +51 -0
  223. package/dist/parse/html/parser.d.ts.map +1 -0
  224. package/dist/parse/html/parser.js +228 -0
  225. package/dist/parse/html/parser.js.map +1 -0
  226. package/dist/parse/index.d.ts +16 -0
  227. package/dist/parse/index.d.ts.map +1 -0
  228. package/dist/parse/index.js +19 -0
  229. package/dist/parse/index.js.map +1 -0
  230. package/dist/parse/markdown/BlockquoteMarkdownParser.d.ts +11 -0
  231. package/dist/parse/markdown/BlockquoteMarkdownParser.d.ts.map +1 -0
  232. package/dist/parse/markdown/BlockquoteMarkdownParser.js +26 -0
  233. package/dist/parse/markdown/BlockquoteMarkdownParser.js.map +1 -0
  234. package/dist/parse/markdown/CodeMarkdownParser.d.ts +11 -0
  235. package/dist/parse/markdown/CodeMarkdownParser.d.ts.map +1 -0
  236. package/dist/parse/markdown/CodeMarkdownParser.js +29 -0
  237. package/dist/parse/markdown/CodeMarkdownParser.js.map +1 -0
  238. package/dist/parse/markdown/HeadingsMarkdownParser.d.ts +11 -0
  239. package/dist/parse/markdown/HeadingsMarkdownParser.d.ts.map +1 -0
  240. package/dist/parse/markdown/HeadingsMarkdownParser.js +26 -0
  241. package/dist/parse/markdown/HeadingsMarkdownParser.js.map +1 -0
  242. package/dist/parse/markdown/InlinesMarkdownParser.d.ts +11 -0
  243. package/dist/parse/markdown/InlinesMarkdownParser.d.ts.map +1 -0
  244. package/dist/parse/markdown/InlinesMarkdownParser.js +91 -0
  245. package/dist/parse/markdown/InlinesMarkdownParser.js.map +1 -0
  246. package/dist/parse/markdown/ListsMarkdownParser.d.ts +11 -0
  247. package/dist/parse/markdown/ListsMarkdownParser.d.ts.map +1 -0
  248. package/dist/parse/markdown/ListsMarkdownParser.js +46 -0
  249. package/dist/parse/markdown/ListsMarkdownParser.js.map +1 -0
  250. package/dist/parse/markdown/MiscMarkdownParser.d.ts +11 -0
  251. package/dist/parse/markdown/MiscMarkdownParser.d.ts.map +1 -0
  252. package/dist/parse/markdown/MiscMarkdownParser.js +38 -0
  253. package/dist/parse/markdown/MiscMarkdownParser.js.map +1 -0
  254. package/dist/parse/markdown/ParagraphsMarkdownParser.d.ts +11 -0
  255. package/dist/parse/markdown/ParagraphsMarkdownParser.d.ts.map +1 -0
  256. package/dist/parse/markdown/ParagraphsMarkdownParser.js +25 -0
  257. package/dist/parse/markdown/ParagraphsMarkdownParser.js.map +1 -0
  258. package/dist/parse/markdown/TablesMarkdownParser.d.ts +11 -0
  259. package/dist/parse/markdown/TablesMarkdownParser.d.ts.map +1 -0
  260. package/dist/parse/markdown/TablesMarkdownParser.js +56 -0
  261. package/dist/parse/markdown/TablesMarkdownParser.js.map +1 -0
  262. package/dist/parse/markdown/handlers/blockquote.d.ts +9 -0
  263. package/dist/parse/markdown/handlers/blockquote.d.ts.map +1 -0
  264. package/dist/parse/markdown/handlers/blockquote.js +22 -0
  265. package/dist/parse/markdown/handlers/blockquote.js.map +1 -0
  266. package/dist/parse/markdown/handlers/code.d.ts +9 -0
  267. package/dist/parse/markdown/handlers/code.d.ts.map +1 -0
  268. package/dist/parse/markdown/handlers/code.js +25 -0
  269. package/dist/parse/markdown/handlers/code.js.map +1 -0
  270. package/dist/parse/markdown/handlers/heading.d.ts +9 -0
  271. package/dist/parse/markdown/handlers/heading.d.ts.map +1 -0
  272. package/dist/parse/markdown/handlers/heading.js +22 -0
  273. package/dist/parse/markdown/handlers/heading.js.map +1 -0
  274. package/dist/parse/markdown/handlers/index.d.ts +23 -0
  275. package/dist/parse/markdown/handlers/index.d.ts.map +1 -0
  276. package/dist/parse/markdown/handlers/index.js +47 -0
  277. package/dist/parse/markdown/handlers/index.js.map +1 -0
  278. package/dist/parse/markdown/handlers/inline.d.ts +35 -0
  279. package/dist/parse/markdown/handlers/inline.d.ts.map +1 -0
  280. package/dist/parse/markdown/handlers/inline.js +126 -0
  281. package/dist/parse/markdown/handlers/inline.js.map +1 -0
  282. package/dist/parse/markdown/handlers/list.d.ts +9 -0
  283. package/dist/parse/markdown/handlers/list.d.ts.map +1 -0
  284. package/dist/parse/markdown/handlers/list.js +42 -0
  285. package/dist/parse/markdown/handlers/list.js.map +1 -0
  286. package/dist/parse/markdown/handlers/misc.d.ts +15 -0
  287. package/dist/parse/markdown/handlers/misc.d.ts.map +1 -0
  288. package/dist/parse/markdown/handlers/misc.js +38 -0
  289. package/dist/parse/markdown/handlers/misc.js.map +1 -0
  290. package/dist/parse/markdown/handlers/paragraph.d.ts +9 -0
  291. package/dist/parse/markdown/handlers/paragraph.d.ts.map +1 -0
  292. package/dist/parse/markdown/handlers/paragraph.js +21 -0
  293. package/dist/parse/markdown/handlers/paragraph.js.map +1 -0
  294. package/dist/parse/markdown/handlers/table.d.ts +9 -0
  295. package/dist/parse/markdown/handlers/table.d.ts.map +1 -0
  296. package/dist/parse/markdown/handlers/table.js +52 -0
  297. package/dist/parse/markdown/handlers/table.js.map +1 -0
  298. package/dist/parse/markdown/index.d.ts +5 -0
  299. package/dist/parse/markdown/index.d.ts.map +1 -0
  300. package/dist/parse/markdown/index.js +12 -0
  301. package/dist/parse/markdown/index.js.map +1 -0
  302. package/dist/parse/markdown/parser.d.ts +51 -0
  303. package/dist/parse/markdown/parser.d.ts.map +1 -0
  304. package/dist/parse/markdown/parser.js +134 -0
  305. package/dist/parse/markdown/parser.js.map +1 -0
  306. package/dist/parse/normalize.d.ts +51 -0
  307. package/dist/parse/normalize.d.ts.map +1 -0
  308. package/dist/parse/normalize.js +78 -0
  309. package/dist/parse/normalize.js.map +1 -0
  310. package/dist/parse/parsers.d.ts +37 -0
  311. package/dist/parse/parsers.d.ts.map +1 -0
  312. package/dist/parse/parsers.js +86 -0
  313. package/dist/parse/parsers.js.map +1 -0
  314. package/dist/parse/pipeline.d.ts +41 -0
  315. package/dist/parse/pipeline.d.ts.map +1 -0
  316. package/dist/parse/pipeline.js +120 -0
  317. package/dist/parse/pipeline.js.map +1 -0
  318. package/dist/parse/registry.d.ts +156 -0
  319. package/dist/parse/registry.d.ts.map +1 -0
  320. package/dist/parse/registry.js +104 -0
  321. package/dist/parse/registry.js.map +1 -0
  322. package/dist/parse/types.d.ts +67 -0
  323. package/dist/parse/types.d.ts.map +1 -0
  324. package/dist/parse/types.js +19 -0
  325. package/dist/parse/types.js.map +1 -0
  326. package/dist/pipeline/__tests__/pipeline.test.d.ts +5 -0
  327. package/dist/pipeline/__tests__/pipeline.test.d.ts.map +1 -0
  328. package/dist/pipeline/__tests__/pipeline.test.js +69 -0
  329. package/dist/pipeline/__tests__/pipeline.test.js.map +1 -0
  330. package/dist/pipeline/__tests__/single-as-workspace.test.d.ts +2 -0
  331. package/dist/pipeline/__tests__/single-as-workspace.test.d.ts.map +1 -0
  332. package/dist/pipeline/__tests__/single-as-workspace.test.js +19 -0
  333. package/dist/pipeline/__tests__/single-as-workspace.test.js.map +1 -0
  334. package/dist/pipeline/__tests__/workspace-rules.test.d.ts +11 -0
  335. package/dist/pipeline/__tests__/workspace-rules.test.d.ts.map +1 -0
  336. package/dist/pipeline/__tests__/workspace-rules.test.js +54 -0
  337. package/dist/pipeline/__tests__/workspace-rules.test.js.map +1 -0
  338. package/dist/pipeline/__tests__/workspace.test.d.ts +2 -0
  339. package/dist/pipeline/__tests__/workspace.test.d.ts.map +1 -0
  340. package/dist/pipeline/__tests__/workspace.test.js +61 -0
  341. package/dist/pipeline/__tests__/workspace.test.js.map +1 -0
  342. package/dist/pipeline/index.d.ts +34 -0
  343. package/dist/pipeline/index.d.ts.map +1 -0
  344. package/dist/pipeline/index.js +45 -0
  345. package/dist/pipeline/index.js.map +1 -0
  346. package/dist/pipeline/runner.d.ts +38 -0
  347. package/dist/pipeline/runner.d.ts.map +1 -0
  348. package/dist/pipeline/runner.js +128 -0
  349. package/dist/pipeline/runner.js.map +1 -0
  350. package/dist/pipeline/types.d.ts +106 -0
  351. package/dist/pipeline/types.d.ts.map +1 -0
  352. package/dist/pipeline/types.js +9 -0
  353. package/dist/pipeline/types.js.map +1 -0
  354. package/dist/pipeline/workspace-index.d.ts +11 -0
  355. package/dist/pipeline/workspace-index.d.ts.map +1 -0
  356. package/dist/pipeline/workspace-index.js +57 -0
  357. package/dist/pipeline/workspace-index.js.map +1 -0
  358. package/dist/plugins/__tests__/citation-transform.test.d.ts +7 -0
  359. package/dist/plugins/__tests__/citation-transform.test.d.ts.map +1 -0
  360. package/dist/plugins/__tests__/citation-transform.test.js +89 -0
  361. package/dist/plugins/__tests__/citation-transform.test.js.map +1 -0
  362. package/dist/plugins/__tests__/dfn-parsing.test.d.ts +2 -0
  363. package/dist/plugins/__tests__/dfn-parsing.test.d.ts.map +1 -0
  364. package/dist/plugins/__tests__/dfn-parsing.test.js +65 -0
  365. package/dist/plugins/__tests__/dfn-parsing.test.js.map +1 -0
  366. package/dist/plugins/__tests__/dfn-resolve.test.d.ts +5 -0
  367. package/dist/plugins/__tests__/dfn-resolve.test.d.ts.map +1 -0
  368. package/dist/plugins/__tests__/dfn-resolve.test.js +152 -0
  369. package/dist/plugins/__tests__/dfn-resolve.test.js.map +1 -0
  370. package/dist/plugins/__tests__/xref-parsing.test.d.ts +2 -0
  371. package/dist/plugins/__tests__/xref-parsing.test.d.ts.map +1 -0
  372. package/dist/plugins/__tests__/xref-parsing.test.js +66 -0
  373. package/dist/plugins/__tests__/xref-parsing.test.js.map +1 -0
  374. package/dist/plugins/aside.d.ts +12 -0
  375. package/dist/plugins/aside.d.ts.map +1 -0
  376. package/dist/plugins/aside.js +78 -0
  377. package/dist/plugins/aside.js.map +1 -0
  378. package/dist/plugins/blockquote.d.ts +11 -0
  379. package/dist/plugins/blockquote.d.ts.map +1 -0
  380. package/dist/plugins/blockquote.js +47 -0
  381. package/dist/plugins/blockquote.js.map +1 -0
  382. package/dist/plugins/citation-transform.d.ts +19 -0
  383. package/dist/plugins/citation-transform.d.ts.map +1 -0
  384. package/dist/plugins/citation-transform.js +176 -0
  385. package/dist/plugins/citation-transform.js.map +1 -0
  386. package/dist/plugins/citation.d.ts +21 -0
  387. package/dist/plugins/citation.d.ts.map +1 -0
  388. package/dist/plugins/citation.js +131 -0
  389. package/dist/plugins/citation.js.map +1 -0
  390. package/dist/plugins/code.d.ts +11 -0
  391. package/dist/plugins/code.d.ts.map +1 -0
  392. package/dist/plugins/code.js +60 -0
  393. package/dist/plugins/code.js.map +1 -0
  394. package/dist/plugins/core-html.d.ts +27 -0
  395. package/dist/plugins/core-html.d.ts.map +1 -0
  396. package/dist/plugins/core-html.js +53 -0
  397. package/dist/plugins/core-html.js.map +1 -0
  398. package/dist/plugins/core-markdown.d.ts +26 -0
  399. package/dist/plugins/core-markdown.d.ts.map +1 -0
  400. package/dist/plugins/core-markdown.js +55 -0
  401. package/dist/plugins/core-markdown.js.map +1 -0
  402. package/dist/plugins/data-cite.d.ts +12 -0
  403. package/dist/plugins/data-cite.d.ts.map +1 -0
  404. package/dist/plugins/data-cite.js +50 -0
  405. package/dist/plugins/data-cite.js.map +1 -0
  406. package/dist/plugins/dfn-resolve.d.ts +15 -0
  407. package/dist/plugins/dfn-resolve.d.ts.map +1 -0
  408. package/dist/plugins/dfn-resolve.js +257 -0
  409. package/dist/plugins/dfn-resolve.js.map +1 -0
  410. package/dist/plugins/dfn.d.ts +12 -0
  411. package/dist/plugins/dfn.d.ts.map +1 -0
  412. package/dist/plugins/dfn.js +57 -0
  413. package/dist/plugins/dfn.js.map +1 -0
  414. package/dist/plugins/directives.d.ts +8 -0
  415. package/dist/plugins/directives.d.ts.map +1 -0
  416. package/dist/plugins/directives.js +34 -0
  417. package/dist/plugins/directives.js.map +1 -0
  418. package/dist/plugins/heading.d.ts +11 -0
  419. package/dist/plugins/heading.d.ts.map +1 -0
  420. package/dist/plugins/heading.js +49 -0
  421. package/dist/plugins/heading.js.map +1 -0
  422. package/dist/plugins/index.d.ts +12 -0
  423. package/dist/plugins/index.d.ts.map +1 -0
  424. package/dist/plugins/index.js +26 -0
  425. package/dist/plugins/index.js.map +1 -0
  426. package/dist/plugins/inline.d.ts +12 -0
  427. package/dist/plugins/inline.d.ts.map +1 -0
  428. package/dist/plugins/inline.js +234 -0
  429. package/dist/plugins/inline.js.map +1 -0
  430. package/dist/plugins/list.d.ts +11 -0
  431. package/dist/plugins/list.d.ts.map +1 -0
  432. package/dist/plugins/list.js +110 -0
  433. package/dist/plugins/list.js.map +1 -0
  434. package/dist/plugins/misc.d.ts +12 -0
  435. package/dist/plugins/misc.d.ts.map +1 -0
  436. package/dist/plugins/misc.js +116 -0
  437. package/dist/plugins/misc.js.map +1 -0
  438. package/dist/plugins/paragraph.d.ts +11 -0
  439. package/dist/plugins/paragraph.d.ts.map +1 -0
  440. package/dist/plugins/paragraph.js +48 -0
  441. package/dist/plugins/paragraph.js.map +1 -0
  442. package/dist/plugins/section.d.ts +12 -0
  443. package/dist/plugins/section.d.ts.map +1 -0
  444. package/dist/plugins/section.js +62 -0
  445. package/dist/plugins/section.js.map +1 -0
  446. package/dist/plugins/table.d.ts +11 -0
  447. package/dist/plugins/table.d.ts.map +1 -0
  448. package/dist/plugins/table.js +130 -0
  449. package/dist/plugins/table.js.map +1 -0
  450. package/dist/plugins/xref.d.ts +12 -0
  451. package/dist/plugins/xref.d.ts.map +1 -0
  452. package/dist/plugins/xref.js +92 -0
  453. package/dist/plugins/xref.js.map +1 -0
  454. package/dist/postprocess/__tests__/citation-transform.test.d.ts +7 -0
  455. package/dist/postprocess/__tests__/citation-transform.test.d.ts.map +1 -0
  456. package/dist/postprocess/__tests__/citation-transform.test.js +89 -0
  457. package/dist/postprocess/__tests__/citation-transform.test.js.map +1 -0
  458. package/dist/postprocess/__tests__/dfn-resolve.test.d.ts +5 -0
  459. package/dist/postprocess/__tests__/dfn-resolve.test.d.ts.map +1 -0
  460. package/dist/postprocess/__tests__/dfn-resolve.test.js +160 -0
  461. package/dist/postprocess/__tests__/dfn-resolve.test.js.map +1 -0
  462. package/dist/postprocess/__tests__/section-id.test.d.ts +5 -0
  463. package/dist/postprocess/__tests__/section-id.test.d.ts.map +1 -0
  464. package/dist/postprocess/__tests__/section-id.test.js +222 -0
  465. package/dist/postprocess/__tests__/section-id.test.js.map +1 -0
  466. package/dist/postprocess/citation-transform.d.ts +19 -0
  467. package/dist/postprocess/citation-transform.d.ts.map +1 -0
  468. package/dist/postprocess/citation-transform.js +176 -0
  469. package/dist/postprocess/citation-transform.js.map +1 -0
  470. package/dist/postprocess/dfn-index.d.ts +16 -0
  471. package/dist/postprocess/dfn-index.d.ts.map +1 -0
  472. package/dist/postprocess/dfn-index.js +72 -0
  473. package/dist/postprocess/dfn-index.js.map +1 -0
  474. package/dist/postprocess/dfn-resolve.d.ts +15 -0
  475. package/dist/postprocess/dfn-resolve.d.ts.map +1 -0
  476. package/dist/postprocess/dfn-resolve.js +257 -0
  477. package/dist/postprocess/dfn-resolve.js.map +1 -0
  478. package/dist/postprocess/index.d.ts +15 -0
  479. package/dist/postprocess/index.d.ts.map +1 -0
  480. package/dist/postprocess/index.js +36 -0
  481. package/dist/postprocess/index.js.map +1 -0
  482. package/dist/postprocess/plugins/citation-transform.d.ts +19 -0
  483. package/dist/postprocess/plugins/citation-transform.d.ts.map +1 -0
  484. package/dist/postprocess/plugins/citation-transform.js +179 -0
  485. package/dist/postprocess/plugins/citation-transform.js.map +1 -0
  486. package/dist/postprocess/plugins/dfn-index.d.ts +16 -0
  487. package/dist/postprocess/plugins/dfn-index.d.ts.map +1 -0
  488. package/dist/postprocess/plugins/dfn-index.js +76 -0
  489. package/dist/postprocess/plugins/dfn-index.js.map +1 -0
  490. package/dist/postprocess/plugins/reference-resolve.d.ts +19 -0
  491. package/dist/postprocess/plugins/reference-resolve.d.ts.map +1 -0
  492. package/dist/postprocess/plugins/reference-resolve.js +103 -0
  493. package/dist/postprocess/plugins/reference-resolve.js.map +1 -0
  494. package/dist/postprocess/plugins/section-id.d.ts +16 -0
  495. package/dist/postprocess/plugins/section-id.d.ts.map +1 -0
  496. package/dist/postprocess/plugins/section-id.js +116 -0
  497. package/dist/postprocess/plugins/section-id.js.map +1 -0
  498. package/dist/postprocess/plugins/walk-ast.d.ts +38 -0
  499. package/dist/postprocess/plugins/walk-ast.d.ts.map +1 -0
  500. package/dist/postprocess/plugins/walk-ast.js +92 -0
  501. package/dist/postprocess/plugins/walk-ast.js.map +1 -0
  502. package/dist/postprocess/reference-resolve.d.ts +19 -0
  503. package/dist/postprocess/reference-resolve.d.ts.map +1 -0
  504. package/dist/postprocess/reference-resolve.js +105 -0
  505. package/dist/postprocess/reference-resolve.js.map +1 -0
  506. package/dist/postprocess/walk-ast.d.ts +38 -0
  507. package/dist/postprocess/walk-ast.d.ts.map +1 -0
  508. package/dist/postprocess/walk-ast.js +94 -0
  509. package/dist/postprocess/walk-ast.js.map +1 -0
  510. package/dist/preprocess/__tests__/pipeline.test.d.ts +5 -0
  511. package/dist/preprocess/__tests__/pipeline.test.d.ts.map +1 -0
  512. package/dist/preprocess/__tests__/pipeline.test.js +188 -0
  513. package/dist/preprocess/__tests__/pipeline.test.js.map +1 -0
  514. package/dist/preprocess/__tests__/resolver.test.d.ts +5 -0
  515. package/dist/preprocess/__tests__/resolver.test.d.ts.map +1 -0
  516. package/dist/preprocess/__tests__/resolver.test.js +165 -0
  517. package/dist/preprocess/__tests__/resolver.test.js.map +1 -0
  518. package/dist/preprocess/__tests__/scan-html.test.d.ts +5 -0
  519. package/dist/preprocess/__tests__/scan-html.test.d.ts.map +1 -0
  520. package/dist/preprocess/__tests__/scan-html.test.js +99 -0
  521. package/dist/preprocess/__tests__/scan-html.test.js.map +1 -0
  522. package/dist/preprocess/__tests__/scan-markdown.test.d.ts +5 -0
  523. package/dist/preprocess/__tests__/scan-markdown.test.d.ts.map +1 -0
  524. package/dist/preprocess/__tests__/scan-markdown.test.js +92 -0
  525. package/dist/preprocess/__tests__/scan-markdown.test.js.map +1 -0
  526. package/dist/preprocess/config/doc-config.d.ts +30 -0
  527. package/dist/preprocess/config/doc-config.d.ts.map +1 -0
  528. package/dist/preprocess/config/doc-config.js +85 -0
  529. package/dist/preprocess/config/doc-config.js.map +1 -0
  530. package/dist/preprocess/config/index.d.ts +9 -0
  531. package/dist/preprocess/config/index.d.ts.map +1 -0
  532. package/dist/preprocess/config/index.js +7 -0
  533. package/dist/preprocess/config/index.js.map +1 -0
  534. package/dist/preprocess/config/loader.d.ts +61 -0
  535. package/dist/preprocess/config/loader.d.ts.map +1 -0
  536. package/dist/preprocess/config/loader.js +40 -0
  537. package/dist/preprocess/config/loader.js.map +1 -0
  538. package/dist/preprocess/config/normalize.d.ts +19 -0
  539. package/dist/preprocess/config/normalize.d.ts.map +1 -0
  540. package/dist/preprocess/config/normalize.js +106 -0
  541. package/dist/preprocess/config/normalize.js.map +1 -0
  542. package/dist/preprocess/config/types.d.ts +40 -0
  543. package/dist/preprocess/config/types.d.ts.map +1 -0
  544. package/dist/preprocess/config/types.js +8 -0
  545. package/dist/preprocess/config/types.js.map +1 -0
  546. package/dist/preprocess/include/index.d.ts +7 -0
  547. package/dist/preprocess/include/index.d.ts.map +1 -0
  548. package/dist/preprocess/include/index.js +7 -0
  549. package/dist/preprocess/include/index.js.map +1 -0
  550. package/dist/preprocess/include/resolver.d.ts +40 -0
  551. package/dist/preprocess/include/resolver.d.ts.map +1 -0
  552. package/dist/preprocess/include/resolver.js +187 -0
  553. package/dist/preprocess/include/resolver.js.map +1 -0
  554. package/dist/preprocess/include/scan-html.d.ts +31 -0
  555. package/dist/preprocess/include/scan-html.d.ts.map +1 -0
  556. package/dist/preprocess/include/scan-html.js +100 -0
  557. package/dist/preprocess/include/scan-html.js.map +1 -0
  558. package/dist/preprocess/include/scan-markdown.d.ts +31 -0
  559. package/dist/preprocess/include/scan-markdown.d.ts.map +1 -0
  560. package/dist/preprocess/include/scan-markdown.js +83 -0
  561. package/dist/preprocess/include/scan-markdown.js.map +1 -0
  562. package/dist/preprocess/index.d.ts +16 -0
  563. package/dist/preprocess/index.d.ts.map +1 -0
  564. package/dist/preprocess/index.js +16 -0
  565. package/dist/preprocess/index.js.map +1 -0
  566. package/dist/preprocess/pipeline.d.ts +57 -0
  567. package/dist/preprocess/pipeline.d.ts.map +1 -0
  568. package/dist/preprocess/pipeline.js +100 -0
  569. package/dist/preprocess/pipeline.js.map +1 -0
  570. package/dist/preprocess/types.d.ts +197 -0
  571. package/dist/preprocess/types.d.ts.map +1 -0
  572. package/dist/preprocess/types.js +22 -0
  573. package/dist/preprocess/types.js.map +1 -0
  574. package/dist/types/ast.generated.d.ts +517 -0
  575. package/dist/types/ast.generated.d.ts.map +1 -0
  576. package/dist/types/ast.generated.js +66 -0
  577. package/dist/types/ast.generated.js.map +1 -0
  578. package/dist/validation/validate.d.ts +86 -0
  579. package/dist/validation/validate.d.ts.map +1 -0
  580. package/dist/validation/validate.js +162 -0
  581. package/dist/validation/validate.js.map +1 -0
  582. package/dist/workspace/__tests__/sort.test.d.ts +2 -0
  583. package/dist/workspace/__tests__/sort.test.d.ts.map +1 -0
  584. package/dist/workspace/__tests__/sort.test.js +122 -0
  585. package/dist/workspace/__tests__/sort.test.js.map +1 -0
  586. package/dist/workspace/index.d.ts +8 -0
  587. package/dist/workspace/index.d.ts.map +1 -0
  588. package/dist/workspace/index.js +7 -0
  589. package/dist/workspace/index.js.map +1 -0
  590. package/dist/workspace/sort.d.ts +49 -0
  591. package/dist/workspace/sort.d.ts.map +1 -0
  592. package/dist/workspace/sort.js +114 -0
  593. package/dist/workspace/sort.js.map +1 -0
  594. package/package.json +46 -81
  595. package/schema/spec-ast.schema.json +1440 -0
  596. package/bin/speculator.mjs +0 -76
  597. package/dist/browser.cjs +0 -1690
  598. package/dist/browser.d.cts +0 -418
  599. package/dist/browser.d.ts +0 -418
  600. package/dist/browser.js +0 -36
  601. package/dist/chunk-H7C7MOU6.js +0 -28
  602. package/dist/chunk-V4GSFQE7.js +0 -1646
  603. package/dist/cli/export-assertions.cjs +0 -1710
  604. package/dist/cli/export-assertions.d.cts +0 -25
  605. package/dist/cli/export-assertions.d.ts +0 -25
  606. package/dist/cli/export-assertions.js +0 -107
  607. package/dist/node.cjs +0 -1712
  608. package/dist/node.d.cts +0 -17
  609. package/dist/node.d.ts +0 -17
  610. package/dist/node.js +0 -40
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-resolve.d.ts","sourceRoot":"","sources":["../../../src/postprocess/plugins/reference-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,qBAAqB,CAAC;AAuFlE;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MA2BpC,CAAC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Reference Resolve Plugin
3
+ *
4
+ * Resolves cross-references (xref) to their target definitions (dfn).
5
+ *
6
+ * Process:
7
+ * 1. Build lookup map from document.indexes.definitions
8
+ * 2. Walk AST to find all InlineReference nodes
9
+ * 3. Match references to definitions using term/candidateTerms + forContext
10
+ * 4. Assign targetId to resolved references
11
+ *
12
+ * Note: Requires dfn-index plugin to run first to populate document.indexes.definitions
13
+ */
14
+ import { normalizeTerm } from '#src/parse/normalize';
15
+ import { walkDocument } from '../walk-ast.js';
16
+ /**
17
+ * Build lookup map from definition index
18
+ */
19
+ function buildLookupMap(document) {
20
+ const map = new Map();
21
+ const definitions = document.indexes?.definitions || [];
22
+ for (const entry of definitions) {
23
+ const linkTexts = entry.linkTexts || [entry.term];
24
+ // Index by all link texts
25
+ for (const text of linkTexts) {
26
+ const key = normalizeTerm(text);
27
+ const existing = map.get(key) || [];
28
+ existing.push(entry);
29
+ map.set(key, existing);
30
+ }
31
+ // Also index by the primary term if different
32
+ const termKey = normalizeTerm(entry.term);
33
+ if (!linkTexts.some(lt => normalizeTerm(lt) === termKey)) {
34
+ const existing = map.get(termKey) || [];
35
+ existing.push(entry);
36
+ map.set(termKey, existing);
37
+ }
38
+ }
39
+ return map;
40
+ }
41
+ /**
42
+ * Resolve a reference to a definition
43
+ */
44
+ function resolveReference(ref, index) {
45
+ const candidateTerms = ref.candidateTerms || [ref.targetTerm];
46
+ const forContexts = ref.forContexts || [null];
47
+ const preferredType = ref.preferredType;
48
+ // Try each candidate term
49
+ for (const term of candidateTerms) {
50
+ const key = normalizeTerm(term);
51
+ const entries = index.get(key);
52
+ if (!entries || entries.length === 0)
53
+ continue;
54
+ // Filter by forContext if specified
55
+ let matches = entries;
56
+ // If reference has a forContext, prefer definitions with that forContext
57
+ const refForContext = forContexts.find((fc) => fc !== null);
58
+ if (refForContext) {
59
+ const exactMatches = matches.filter(e => (e.forContexts || [null]).some(fc => fc && normalizeTerm(fc) === normalizeTerm(refForContext)));
60
+ if (exactMatches.length > 0) {
61
+ matches = exactMatches;
62
+ }
63
+ }
64
+ // Filter by preferred type if specified
65
+ if (preferredType && matches.length > 1) {
66
+ const typeMatches = matches.filter(e => e.dfnType === preferredType);
67
+ if (typeMatches.length > 0) {
68
+ matches = typeMatches;
69
+ }
70
+ }
71
+ // Return first match
72
+ if (matches.length > 0) {
73
+ return matches[0];
74
+ }
75
+ }
76
+ return null;
77
+ }
78
+ /**
79
+ * Reference resolve plugin
80
+ */
81
+ export const referenceResolvePlugin = {
82
+ name: 'reference-resolve',
83
+ order: { resolve: 10 },
84
+ async resolve(ctx) {
85
+ // Use global index if in a workspace, otherwise build local lookup map
86
+ const index = ctx.workspace
87
+ ? ctx.workspace.globalIndex.definitions
88
+ : buildLookupMap(ctx.document);
89
+ walkDocument(ctx.document, {
90
+ visitInline: (inline) => {
91
+ if (inline.type === 'reference') {
92
+ const ref = inline;
93
+ const match = resolveReference(ref, index);
94
+ if (match) {
95
+ // Assign the resolved target ID (mutation for resolution)
96
+ ref.targetId = match.id;
97
+ }
98
+ }
99
+ }
100
+ });
101
+ },
102
+ };
103
+ //# sourceMappingURL=reference-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-resolve.js","sourceRoot":"","sources":["../../../src/postprocess/plugins/reference-resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Section ID Plugin
3
+ *
4
+ * Ensures all sections have unique, slug-based IDs.
5
+ *
6
+ * Process:
7
+ * 1. Walk AST to find all Section nodes
8
+ * 2. For sections without IDs or with non-slug IDs, generate from heading text
9
+ * 3. Ensure uniqueness by tracking used IDs and appending numbers (-2, -3, etc.)
10
+ */
11
+ import type { Plugin } from '#src/pipeline/types';
12
+ /**
13
+ * Section ID plugin
14
+ */
15
+ export declare const sectionIdPlugin: Plugin;
16
+ //# sourceMappingURL=section-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-id.d.ts","sourceRoot":"","sources":["../../../src/postprocess/plugins/section-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AA8GhE;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAO7B,CAAC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Section ID Plugin
3
+ *
4
+ * Ensures all sections have unique, slug-based IDs.
5
+ *
6
+ * Process:
7
+ * 1. Walk AST to find all Section nodes
8
+ * 2. For sections without IDs or with non-slug IDs, generate from heading text
9
+ * 3. Ensure uniqueness by tracking used IDs and appending numbers (-2, -3, etc.)
10
+ */
11
+ import { walkDocument } from '../walk-ast.js';
12
+ /**
13
+ * Extract plain text from heading inline nodes
14
+ */
15
+ function extractHeadingText(heading) {
16
+ function extractFromInlines(inlines) {
17
+ return inlines
18
+ .map(inline => {
19
+ switch (inline.type) {
20
+ case 'text':
21
+ return inline.value;
22
+ case 'emphasis':
23
+ case 'strong':
24
+ case 'link':
25
+ return extractFromInlines(inline.children);
26
+ case 'inlineCode':
27
+ return inline.value;
28
+ case 'definition':
29
+ return inline.term;
30
+ case 'reference':
31
+ return inline.targetTerm;
32
+ case 'issue':
33
+ return extractFromInlines(inline.children);
34
+ case 'cite':
35
+ return inline.children ? extractFromInlines(inline.children) : inline.key;
36
+ default:
37
+ return '';
38
+ }
39
+ })
40
+ .join('');
41
+ }
42
+ return extractFromInlines(heading.children);
43
+ }
44
+ /**
45
+ * Convert text to URL-safe slug
46
+ */
47
+ function slugify(text) {
48
+ return text
49
+ .toLowerCase()
50
+ .trim()
51
+ // Replace spaces and underscores with hyphens
52
+ .replace(/[\s_]+/g, '-')
53
+ // Remove non-alphanumeric characters except hyphens
54
+ .replace(/[^a-z0-9-]+/g, '')
55
+ // Remove leading/trailing hyphens
56
+ .replace(/^-+|-+$/g, '')
57
+ // Collapse multiple hyphens
58
+ .replace(/-+/g, '-');
59
+ }
60
+ /**
61
+ * Check if a string looks like a slug (lowercase alphanumeric with hyphens)
62
+ */
63
+ function isSlugLike(id) {
64
+ return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(id);
65
+ }
66
+ /**
67
+ * Ensure all sections have unique, slug-based IDs
68
+ */
69
+ function ensureSectionIds(document) {
70
+ const usedIds = new Set();
71
+ /**
72
+ * Generate a unique ID from base slug
73
+ */
74
+ function makeUniqueId(baseSlug) {
75
+ if (!baseSlug) {
76
+ baseSlug = 'section';
77
+ }
78
+ let id = baseSlug;
79
+ let counter = 2;
80
+ while (usedIds.has(id)) {
81
+ id = `${baseSlug}-${counter}`;
82
+ counter++;
83
+ }
84
+ usedIds.add(id);
85
+ return id;
86
+ }
87
+ walkDocument(document, {
88
+ visitSection: (section) => {
89
+ // Check if section needs an ID
90
+ const needsId = !section.id || !isSlugLike(section.id);
91
+ if (needsId && section.heading) {
92
+ // Generate ID from heading text
93
+ const headingText = extractHeadingText(section.heading);
94
+ const baseSlug = slugify(headingText);
95
+ const uniqueId = makeUniqueId(baseSlug);
96
+ // Assign the ID to the section
97
+ section.id = uniqueId;
98
+ }
99
+ else if (section.id) {
100
+ // Track existing ID to avoid duplicates
101
+ usedIds.add(section.id);
102
+ }
103
+ }
104
+ });
105
+ }
106
+ /**
107
+ * Section ID plugin
108
+ */
109
+ export const sectionIdPlugin = {
110
+ name: 'section-id',
111
+ order: { index: 5 },
112
+ async index(ctx) {
113
+ ensureSectionIds(ctx.document);
114
+ },
115
+ };
116
+ //# sourceMappingURL=section-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-id.js","sourceRoot":"","sources":["../../../src/postprocess/plugins/section-id.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * AST Walker Utility
3
+ *
4
+ * Provides a generic visitor pattern for walking the SpecAST.
5
+ * Used by postprocess plugins to traverse document structure.
6
+ */
7
+ import type { SpeculatorASTSchema as Document, Section, Block, Inline } from '#src/types/ast.generated';
8
+ /**
9
+ * Visitor interface for AST traversal.
10
+ * Implement only the methods you need.
11
+ */
12
+ export interface AstVisitor {
13
+ /** Called for each inline node */
14
+ visitInline?(inline: Inline): void;
15
+ /** Called for each block node */
16
+ visitBlock?(block: Block): void;
17
+ /** Called for each section node */
18
+ visitSection?(section: Section): void;
19
+ }
20
+ /**
21
+ * Walk an entire document, calling visitor methods for each node type.
22
+ *
23
+ * @param document - The document to traverse
24
+ * @param visitor - Visitor with optional callbacks for each node type
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * walkDocument(doc, {
29
+ * visitInline: (inline) => {
30
+ * if (inline.type === 'definition') {
31
+ * // process definition
32
+ * }
33
+ * }
34
+ * });
35
+ * ```
36
+ */
37
+ export declare function walkDocument(document: Document, visitor: AstVisitor): void;
38
+ //# sourceMappingURL=walk-ast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-ast.d.ts","sourceRoot":"","sources":["../../../src/postprocess/plugins/walk-ast.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,mBAAmB,IAAI,QAAQ,EAC/B,OAAO,EACP,KAAK,EACL,MAAM,EACT,MAAM,0BAA0B,CAAC;AAElC;;;GAGG;AACH,MAAM,WAAW,UAAU;IACvB,kCAAkC;IAClC,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iCAAiC;IACjC,UAAU,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAChC,mCAAmC;IACnC,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzC;AAiED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAQ1E"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * AST Walker Utility
3
+ *
4
+ * Provides a generic visitor pattern for walking the SpecAST.
5
+ * Used by postprocess plugins to traverse document structure.
6
+ */
7
+ /** Inline type names for detection */
8
+ const INLINE_TYPES = new Set([
9
+ 'text', 'emphasis', 'strong', 'inlineCode', 'link', 'image',
10
+ 'definition', 'reference', 'requirement', 'issue', 'cite'
11
+ ]);
12
+ /**
13
+ * Walk all inline nodes, calling visitor.visitInline for each
14
+ */
15
+ function walkInlines(inlines, visitor) {
16
+ for (const inline of inlines) {
17
+ visitor.visitInline?.(inline);
18
+ // Recurse into children
19
+ if ('children' in inline && Array.isArray(inline.children)) {
20
+ walkInlines(inline.children, visitor);
21
+ }
22
+ }
23
+ }
24
+ /**
25
+ * Walk a block node and its children
26
+ */
27
+ function walkBlock(block, visitor) {
28
+ visitor.visitBlock?.(block);
29
+ if ('children' in block) {
30
+ const children = block.children;
31
+ if (Array.isArray(children) && children.length > 0) {
32
+ const firstChild = children[0];
33
+ if (firstChild && typeof firstChild === 'object' && 'type' in firstChild) {
34
+ if (INLINE_TYPES.has(firstChild.type)) {
35
+ walkInlines(children, visitor);
36
+ }
37
+ else {
38
+ for (const child of children) {
39
+ walkBlock(child, visitor);
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
46
+ /**
47
+ * Walk a section node and its children
48
+ */
49
+ function walkSection(section, visitor) {
50
+ visitor.visitSection?.(section);
51
+ // Walk heading if present
52
+ if (section.heading) {
53
+ walkInlines(section.heading.children, visitor);
54
+ }
55
+ // Walk children
56
+ for (const child of section.children) {
57
+ if (child.type === 'section') {
58
+ walkSection(child, visitor);
59
+ }
60
+ else {
61
+ walkBlock(child, visitor);
62
+ }
63
+ }
64
+ }
65
+ /**
66
+ * Walk an entire document, calling visitor methods for each node type.
67
+ *
68
+ * @param document - The document to traverse
69
+ * @param visitor - Visitor with optional callbacks for each node type
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * walkDocument(doc, {
74
+ * visitInline: (inline) => {
75
+ * if (inline.type === 'definition') {
76
+ * // process definition
77
+ * }
78
+ * }
79
+ * });
80
+ * ```
81
+ */
82
+ export function walkDocument(document, visitor) {
83
+ for (const child of document.children) {
84
+ if (child.type === 'section') {
85
+ walkSection(child, visitor);
86
+ }
87
+ else {
88
+ walkBlock(child, visitor);
89
+ }
90
+ }
91
+ }
92
+ //# sourceMappingURL=walk-ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-ast.js","sourceRoot":"","sources":["../../../src/postprocess/plugins/walk-ast.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsBH,sCAAsC;AACtC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IACzB,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO;IAC3D,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM;CAC5D,CAAC,CAAC;AAEH;;GAEG;AACH,SAAS,WAAW,CAAC,OAAiB,EAAE,OAAmB;IACvD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC;QAC9B,wBAAwB;QACxB,IAAI,UAAU,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAE,MAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClE,WAAW,CAAE,MAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAY,EAAE,OAAmB;IAChD,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;IAE5B,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAI,KAAa,CAAC,QAAQ,CAAC;QACzC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,MAAM,IAAI,UAAU,EAAE,CAAC;gBACvE,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACJ,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;wBAC3B,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;oBAC9B,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,OAAgB,EAAE,OAAmB;IACtD,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;IAEhC,0BAA0B;IAC1B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,gBAAgB;IAChB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACJ,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAAC,QAAkB,EAAE,OAAmB;IAChE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACJ,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Reference Resolve Plugin
3
+ *
4
+ * Resolves cross-references (xref) to their target definitions (dfn).
5
+ *
6
+ * Process:
7
+ * 1. Build lookup map from document.indexes.definitions
8
+ * 2. Walk AST to find all InlineReference nodes
9
+ * 3. Match references to definitions using term/candidateTerms + forContext
10
+ * 4. Assign targetId to resolved references
11
+ *
12
+ * Note: Requires dfn-index plugin to run first to populate document.indexes.definitions
13
+ */
14
+ import type { Plugin } from '#src/pipeline/types';
15
+ /**
16
+ * Reference resolve plugin
17
+ */
18
+ export declare const referenceResolvePlugin: Plugin;
19
+ //# sourceMappingURL=reference-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-resolve.d.ts","sourceRoot":"","sources":["../../src/postprocess/reference-resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,qBAAqB,CAAC;AAyGlE;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAQpC,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Reference Resolve Plugin
3
+ *
4
+ * Resolves cross-references (xref) to their target definitions (dfn).
5
+ *
6
+ * Process:
7
+ * 1. Build lookup map from document.indexes.definitions
8
+ * 2. Walk AST to find all InlineReference nodes
9
+ * 3. Match references to definitions using term/candidateTerms + forContext
10
+ * 4. Assign targetId to resolved references
11
+ *
12
+ * Note: Requires dfn-index plugin to run first to populate document.indexes.definitions
13
+ */
14
+ import { normalizeTerm } from '#src/parse/normalize';
15
+ import { walkDocument } from './walk-ast.js';
16
+ /**
17
+ * Build lookup map from definition index
18
+ */
19
+ function buildLookupMap(document) {
20
+ const map = new Map();
21
+ const definitions = document.indexes?.definitions || [];
22
+ for (const entry of definitions) {
23
+ const linkTexts = entry.linkTexts || [entry.term];
24
+ // Index by all link texts
25
+ for (const text of linkTexts) {
26
+ const key = normalizeTerm(text);
27
+ const existing = map.get(key) || [];
28
+ existing.push(entry);
29
+ map.set(key, existing);
30
+ }
31
+ // Also index by the primary term if different
32
+ const termKey = normalizeTerm(entry.term);
33
+ if (!linkTexts.some(lt => normalizeTerm(lt) === termKey)) {
34
+ const existing = map.get(termKey) || [];
35
+ existing.push(entry);
36
+ map.set(termKey, existing);
37
+ }
38
+ }
39
+ return map;
40
+ }
41
+ /**
42
+ * Resolve a reference to a definition
43
+ */
44
+ function resolveReference(ref, index) {
45
+ const candidateTerms = ref.candidateTerms || [ref.targetTerm];
46
+ const forContexts = ref.forContexts || [null];
47
+ const preferredType = ref.preferredType;
48
+ // Try each candidate term
49
+ for (const term of candidateTerms) {
50
+ const key = normalizeTerm(term);
51
+ const entries = index.get(key);
52
+ if (!entries || entries.length === 0)
53
+ continue;
54
+ // Filter by forContext if specified
55
+ let matches = entries;
56
+ // If reference has a forContext, prefer definitions with that forContext
57
+ const refForContext = forContexts.find((fc) => fc !== null);
58
+ if (refForContext) {
59
+ const exactMatches = matches.filter(e => (e.forContexts || [null]).some(fc => fc && normalizeTerm(fc) === normalizeTerm(refForContext)));
60
+ if (exactMatches.length > 0) {
61
+ matches = exactMatches;
62
+ }
63
+ }
64
+ // Filter by preferred type if specified
65
+ if (preferredType && matches.length > 1) {
66
+ const typeMatches = matches.filter(e => e.dfnType === preferredType);
67
+ if (typeMatches.length > 0) {
68
+ matches = typeMatches;
69
+ }
70
+ }
71
+ // Return first match
72
+ if (matches.length > 0) {
73
+ return matches[0];
74
+ }
75
+ }
76
+ return null;
77
+ }
78
+ /**
79
+ * Walk document and resolve all references
80
+ */
81
+ function resolveReferences(document, index) {
82
+ walkDocument(document, {
83
+ visitInline: (inline) => {
84
+ if (inline.type === 'reference') {
85
+ const ref = inline;
86
+ const match = resolveReference(ref, index);
87
+ if (match) {
88
+ ref.targetId = match.id;
89
+ }
90
+ }
91
+ }
92
+ });
93
+ }
94
+ /**
95
+ * Reference resolve plugin
96
+ */
97
+ export const referenceResolvePlugin = {
98
+ name: 'reference-resolve',
99
+ order: { resolve: 10 },
100
+ async resolve(ctx) {
101
+ const index = buildLookupMap(ctx.document);
102
+ resolveReferences(ctx.document, index);
103
+ },
104
+ };
105
+ //# sourceMappingURL=reference-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-resolve.js","sourceRoot":"","sources":["../../src/postprocess/reference-resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * AST Walker Utility
3
+ *
4
+ * Provides a generic visitor pattern for walking the SpecAST.
5
+ * Used by postprocess plugins to traverse document structure.
6
+ */
7
+ import type { Document, Section, Block, Inline } from '#src/types/ast.generated';
8
+ /**
9
+ * Visitor interface for AST traversal.
10
+ * Implement only the methods you need.
11
+ */
12
+ export interface AstVisitor {
13
+ /** Called for each inline node */
14
+ visitInline?(inline: Inline): void;
15
+ /** Called for each block node */
16
+ visitBlock?(block: Block): void;
17
+ /** Called for each section node */
18
+ visitSection?(section: Section): void;
19
+ }
20
+ /**
21
+ * Walk an entire document, calling visitor methods for each node type.
22
+ *
23
+ * @param document - The document to traverse
24
+ * @param visitor - Visitor with optional callbacks for each node type
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * walkDocument(doc, {
29
+ * visitInline: (inline) => {
30
+ * if (inline.type === 'definition') {
31
+ * // process definition
32
+ * }
33
+ * }
34
+ * });
35
+ * ```
36
+ */
37
+ export declare function walkDocument(document: Document, visitor: AstVisitor): void;
38
+ //# sourceMappingURL=walk-ast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk-ast.d.ts","sourceRoot":"","sources":["../../src/postprocess/walk-ast.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,MAAM,EACT,MAAM,0BAA0B,CAAC;AAGlC;;;GAGG;AACH,MAAM,WAAW,UAAU;IACvB,kCAAkC;IAClC,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iCAAiC;IACjC,UAAU,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAChC,mCAAmC;IACnC,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzC;AAmED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAQ1E"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * AST Walker Utility
3
+ *
4
+ * Provides a generic visitor pattern for walking the SpecAST.
5
+ * Used by postprocess plugins to traverse document structure.
6
+ */
7
+ /** Inline type names for detection */
8
+ const INLINE_TYPES = new Set([
9
+ 'text', 'emphasis', 'strong', 'inlineCode', 'link', 'image',
10
+ 'definition', 'reference', 'requirement', 'issue', 'cite'
11
+ ]);
12
+ /**
13
+ * Walk all inline nodes, calling visitor.visitInline for each
14
+ */
15
+ function walkInlines(inlines, visitor) {
16
+ for (const inline of inlines) {
17
+ visitor.visitInline?.(inline);
18
+ // Recurse into children
19
+ if ('children' in inline && Array.isArray(inline.children)) {
20
+ const inlineWithChildren = inline;
21
+ walkInlines(inlineWithChildren.children, visitor);
22
+ }
23
+ }
24
+ }
25
+ /**
26
+ * Walk a block node and its children
27
+ */
28
+ function walkBlock(block, visitor) {
29
+ visitor.visitBlock?.(block);
30
+ if ('children' in block) {
31
+ const blockWithChildren = block;
32
+ const children = blockWithChildren.children;
33
+ if (Array.isArray(children) && children.length > 0) {
34
+ const firstChild = children[0];
35
+ if (firstChild && typeof firstChild === 'object' && 'type' in firstChild) {
36
+ if (INLINE_TYPES.has(firstChild.type)) {
37
+ walkInlines(children, visitor);
38
+ }
39
+ else {
40
+ for (const child of children) {
41
+ walkBlock(child, visitor);
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ /**
49
+ * Walk a section node and its children
50
+ */
51
+ function walkSection(section, visitor) {
52
+ visitor.visitSection?.(section);
53
+ // Walk heading if present
54
+ if (section.heading) {
55
+ walkInlines(section.heading.children, visitor);
56
+ }
57
+ // Walk children
58
+ for (const child of section.children) {
59
+ if (child.type === 'section') {
60
+ walkSection(child, visitor);
61
+ }
62
+ else {
63
+ walkBlock(child, visitor);
64
+ }
65
+ }
66
+ }
67
+ /**
68
+ * Walk an entire document, calling visitor methods for each node type.
69
+ *
70
+ * @param document - The document to traverse
71
+ * @param visitor - Visitor with optional callbacks for each node type
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * walkDocument(doc, {
76
+ * visitInline: (inline) => {
77
+ * if (inline.type === 'definition') {
78
+ * // process definition
79
+ * }
80
+ * }
81
+ * });
82
+ * ```
83
+ */
84
+ export function walkDocument(document, visitor) {
85
+ for (const child of document.children) {
86
+ if (child.type === 'section') {
87
+ walkSection(child, visitor);
88
+ }
89
+ else {
90
+ walkBlock(child, visitor);
91
+ }
92
+ }
93
+ }
94
+ //# sourceMappingURL=walk-ast.js.map