@wdprlib/parser 3.2.0 → 4.0.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 (433) hide show
  1. package/dist/index.cjs +10451 -8402
  2. package/dist/index.d.cts +313 -337
  3. package/dist/index.d.ts +313 -337
  4. package/dist/index.js +10438 -8389
  5. package/package.json +1 -1
  6. package/src/index.ts +7 -0
  7. package/src/lexer/anchor.ts +48 -0
  8. package/src/lexer/index.ts +3 -2
  9. package/src/lexer/lexer.ts +73 -559
  10. package/src/lexer/options.ts +19 -0
  11. package/src/lexer/punctuation.ts +70 -0
  12. package/src/lexer/quoted-string.ts +16 -0
  13. package/src/lexer/runs.ts +85 -0
  14. package/src/lexer/spacing-actions.ts +24 -0
  15. package/src/lexer/state.ts +103 -0
  16. package/src/lexer/syntax-actions.ts +80 -0
  17. package/src/lexer/text-actions.ts +41 -0
  18. package/src/lexer/token-actions.ts +136 -0
  19. package/src/lexer/token-factory.ts +62 -0
  20. package/src/lexer/tokenize.ts +18 -0
  21. package/src/parser/constants.ts +2 -0
  22. package/src/parser/depth/index.ts +111 -0
  23. package/src/parser/depth/stack.ts +82 -0
  24. package/src/parser/parse/block.ts +42 -0
  25. package/src/parser/parse/context.ts +26 -0
  26. package/src/parser/parse/footnotes.ts +25 -0
  27. package/src/parser/parse/index.ts +42 -0
  28. package/src/parser/parse/options.ts +34 -0
  29. package/src/parser/parse/parser.ts +79 -0
  30. package/src/parser/parse/plain-non-ascii.ts +129 -0
  31. package/src/parser/parse/result.ts +57 -0
  32. package/src/parser/parse/source.ts +11 -0
  33. package/src/parser/postprocess/divAdjacentParagraph.ts +1 -1
  34. package/src/parser/postprocess/spanStrip/clean-element.ts +168 -0
  35. package/src/parser/postprocess/spanStrip/cleanup.ts +25 -0
  36. package/src/parser/postprocess/spanStrip/empty-spans.ts +36 -0
  37. package/src/parser/postprocess/spanStrip/escaped.ts +78 -0
  38. package/src/parser/postprocess/spanStrip/factory.ts +23 -0
  39. package/src/parser/postprocess/spanStrip/index.ts +8 -0
  40. package/src/parser/postprocess/spanStrip/merge.ts +117 -0
  41. package/src/parser/postprocess/spanStrip/predicates.ts +59 -0
  42. package/src/parser/postprocess/spanStrip/split.ts +67 -0
  43. package/src/parser/preprocess/expr/chars.ts +15 -0
  44. package/src/parser/preprocess/expr/evaluate.ts +22 -0
  45. package/src/parser/preprocess/expr/index.ts +45 -0
  46. package/src/parser/preprocess/expr/kind.ts +19 -0
  47. package/src/parser/preprocess/expr/parse.ts +103 -0
  48. package/src/parser/preprocess/expr/scan.ts +34 -0
  49. package/src/parser/preprocess/expr/types.ts +14 -0
  50. package/src/parser/preprocess/typography.ts +70 -5
  51. package/src/parser/preprocess/utils/bracket-depths.ts +98 -0
  52. package/src/parser/preprocess/utils/index.ts +13 -0
  53. package/src/parser/preprocess/utils/raw-regions.ts +153 -0
  54. package/src/parser/preprocess/whitespace/detection.ts +39 -0
  55. package/src/parser/preprocess/whitespace/index.ts +79 -0
  56. package/src/parser/preprocess/whitespace/leading-spaces.ts +11 -0
  57. package/src/parser/preprocess/whitespace/patterns.ts +23 -0
  58. package/src/parser/rules/block/align/body.ts +46 -0
  59. package/src/parser/rules/block/align/element.ts +13 -0
  60. package/src/parser/rules/block/align/index.ts +90 -0
  61. package/src/parser/rules/block/align/syntax.ts +113 -0
  62. package/src/parser/rules/block/bibliography/body.ts +81 -0
  63. package/src/parser/rules/block/bibliography/entries.ts +49 -0
  64. package/src/parser/rules/block/bibliography/entry-content.ts +73 -0
  65. package/src/parser/rules/block/bibliography/entry-key.ts +83 -0
  66. package/src/parser/rules/block/bibliography/index.ts +90 -0
  67. package/src/parser/rules/block/bibliography/open.ts +53 -0
  68. package/src/parser/rules/block/block-list/bare-content.ts +105 -0
  69. package/src/parser/rules/block/block-list/bare-paragraph.ts +60 -0
  70. package/src/parser/rules/block/block-list/index.ts +51 -0
  71. package/src/parser/rules/block/block-list/item-content.ts +132 -0
  72. package/src/parser/rules/block/block-list/li-content.ts +107 -0
  73. package/src/parser/rules/block/block-list/li-item.ts +77 -0
  74. package/src/parser/rules/block/block-list/list-block.ts +100 -0
  75. package/src/parser/rules/block/block-list/open.ts +51 -0
  76. package/src/parser/rules/block/block-list/tags.ts +50 -0
  77. package/src/parser/rules/block/blockquote/build.ts +62 -0
  78. package/src/parser/rules/block/blockquote/index.ts +80 -0
  79. package/src/parser/rules/block/blockquote/line.ts +79 -0
  80. package/src/parser/rules/block/blockquote/lines.ts +39 -0
  81. package/src/parser/rules/block/{center.ts → center/index.ts} +7 -22
  82. package/src/parser/rules/block/center/open.ts +27 -0
  83. package/src/parser/rules/block/{clear-float.ts → clear-float/index.ts} +6 -30
  84. package/src/parser/rules/block/clear-float/syntax.ts +43 -0
  85. package/src/parser/rules/block/code/attributes.ts +30 -0
  86. package/src/parser/rules/block/code/content.ts +57 -0
  87. package/src/parser/rules/block/code/index.ts +100 -0
  88. package/src/parser/rules/block/collapsible/attributes.ts +95 -0
  89. package/src/parser/rules/block/collapsible/body.ts +69 -0
  90. package/src/parser/rules/block/collapsible/index.ts +117 -0
  91. package/src/parser/rules/block/collapsible/open.ts +51 -0
  92. package/src/parser/rules/block/collapsible/orphans.ts +31 -0
  93. package/src/parser/rules/block/collapsible/tags.ts +17 -0
  94. package/src/parser/rules/block/comment/consume.ts +37 -0
  95. package/src/parser/rules/block/{comment.ts → comment/index.ts} +12 -38
  96. package/src/parser/rules/block/{content-separator.ts → content-separator/index.ts} +5 -35
  97. package/src/parser/rules/block/content-separator/syntax.ts +33 -0
  98. package/src/parser/rules/block/definition-list/collect.ts +40 -0
  99. package/src/parser/rules/block/definition-list/index.ts +63 -0
  100. package/src/parser/rules/block/definition-list/item-key.ts +95 -0
  101. package/src/parser/rules/block/definition-list/item-value.ts +56 -0
  102. package/src/parser/rules/block/definition-list/items.ts +54 -0
  103. package/src/parser/rules/block/div/body.ts +41 -0
  104. package/src/parser/rules/block/div/close.ts +41 -0
  105. package/src/parser/rules/block/div/failed.ts +117 -0
  106. package/src/parser/rules/block/div/index.ts +112 -0
  107. package/src/parser/rules/block/div/nesting.ts +37 -0
  108. package/src/parser/rules/block/div/open.ts +59 -0
  109. package/src/parser/rules/block/div/paragraph-strip.ts +44 -0
  110. package/src/parser/rules/block/embed-block/content.ts +53 -0
  111. package/src/parser/rules/block/embed-block/index.ts +91 -0
  112. package/src/parser/rules/block/embed-block/open.ts +52 -0
  113. package/src/parser/rules/block/embed-block/tags.ts +5 -0
  114. package/src/parser/rules/block/footnoteblock/attributes.ts +73 -0
  115. package/src/parser/rules/block/footnoteblock/index.ts +82 -0
  116. package/src/parser/rules/block/footnoteblock/open.ts +53 -0
  117. package/src/parser/rules/block/heading/index.ts +87 -0
  118. package/src/parser/rules/block/heading/open.ts +50 -0
  119. package/src/parser/rules/block/heading/toc-text.ts +26 -0
  120. package/src/parser/rules/block/{horizontal-rule.ts → horizontal-rule/index.ts} +4 -21
  121. package/src/parser/rules/block/horizontal-rule/syntax.ts +21 -0
  122. package/src/parser/rules/block/html/body.ts +114 -0
  123. package/src/parser/rules/block/html/diagnostics.ts +11 -0
  124. package/src/parser/rules/block/html/index.ts +95 -0
  125. package/src/parser/rules/block/html/open.ts +36 -0
  126. package/src/parser/rules/block/iframe/attributes.ts +106 -0
  127. package/src/parser/rules/block/iframe/index.ts +73 -0
  128. package/src/parser/rules/block/iframe/open.ts +58 -0
  129. package/src/parser/rules/block/iframe/source.ts +24 -0
  130. package/src/parser/rules/block/iframe/url.ts +38 -0
  131. package/src/parser/rules/block/iftags/body.ts +48 -0
  132. package/src/parser/rules/block/iftags/condition.ts +24 -0
  133. package/src/parser/rules/block/{iftags.ts → iftags/index.ts} +16 -58
  134. package/src/parser/rules/block/include/arguments.ts +48 -0
  135. package/src/parser/rules/block/include/index.ts +75 -0
  136. package/src/parser/rules/block/include/location.ts +24 -0
  137. package/src/parser/rules/block/include/variables.ts +37 -0
  138. package/src/parser/rules/block/list/index.ts +73 -0
  139. package/src/parser/rules/block/list/line.ts +77 -0
  140. package/src/parser/rules/block/list/native.ts +89 -0
  141. package/src/parser/rules/block/math/content.ts +54 -0
  142. package/src/parser/rules/block/math/index.ts +106 -0
  143. package/src/parser/rules/block/math/name.ts +35 -0
  144. package/src/parser/rules/block/module/body.ts +92 -0
  145. package/src/parser/rules/block/module/element.ts +33 -0
  146. package/src/parser/rules/block/module/include/directive.ts +91 -0
  147. package/src/parser/rules/block/module/include/index.ts +11 -2
  148. package/src/parser/rules/block/module/include/references.ts +42 -0
  149. package/src/parser/rules/block/module/include/resolve/cache.ts +44 -0
  150. package/src/parser/rules/block/module/include/resolve/index.ts +106 -0
  151. package/src/parser/rules/block/module/include/resolve/iterate.ts +202 -0
  152. package/src/parser/rules/block/module/include/resolve/replace.ts +31 -0
  153. package/src/parser/rules/block/module/include/resolve/types.ts +105 -0
  154. package/src/parser/rules/block/module/include/scanner.ts +121 -0
  155. package/src/parser/rules/block/module/index.ts +14 -2
  156. package/src/parser/rules/block/module/listpages/compiler.ts +12 -392
  157. package/src/parser/rules/block/module/listpages/extract.ts +25 -359
  158. package/src/parser/rules/block/module/listpages/extraction/listpages.ts +42 -0
  159. package/src/parser/rules/block/module/listpages/extraction/listusers.ts +30 -0
  160. package/src/parser/rules/block/module/listpages/extraction/query.ts +51 -0
  161. package/src/parser/rules/block/module/listpages/extraction/result.ts +18 -0
  162. package/src/parser/rules/block/module/listpages/extraction/template.ts +96 -0
  163. package/src/parser/rules/block/module/listpages/extraction/variables.ts +58 -0
  164. package/src/parser/rules/block/module/listpages/normalization/date-selector.ts +53 -0
  165. package/src/parser/rules/block/module/listpages/normalization/numeric-selector.ts +32 -0
  166. package/src/parser/rules/block/module/listpages/normalization/order-parent.ts +82 -0
  167. package/src/parser/rules/block/module/listpages/normalization/selectors.ts +2 -0
  168. package/src/parser/rules/block/module/listpages/normalization/tags-category.ts +86 -0
  169. package/src/parser/rules/block/module/listpages/normalize.ts +8 -324
  170. package/src/parser/rules/block/module/listpages/resolution/items.ts +43 -0
  171. package/src/parser/rules/block/module/listpages/resolution/wrapper.ts +42 -0
  172. package/src/parser/rules/block/module/listpages/resolve.ts +5 -75
  173. package/src/parser/rules/block/module/listpages/template/format/content.ts +41 -0
  174. package/src/parser/rules/block/module/listpages/template/format/date.ts +116 -0
  175. package/src/parser/rules/block/module/listpages/template/format/index.ts +4 -0
  176. package/src/parser/rules/block/module/listpages/template/format/tags.ts +7 -0
  177. package/src/parser/rules/block/module/listpages/template/format/user.ts +9 -0
  178. package/src/parser/rules/block/module/listpages/template/getters/index.ts +36 -0
  179. package/src/parser/rules/block/module/listpages/template/getters/parameterized.ts +60 -0
  180. package/src/parser/rules/block/module/listpages/template/getters/simple.ts +65 -0
  181. package/src/parser/rules/block/module/listpages/template/getters/types.ts +3 -0
  182. package/src/parser/rules/block/module/listpages/template/syntax.ts +97 -0
  183. package/src/parser/rules/block/module/listpages/types/data-fetcher.ts +15 -0
  184. package/src/parser/rules/block/module/listpages/types/data-requirements.ts +52 -0
  185. package/src/parser/rules/block/module/listpages/types/external-data.ts +77 -0
  186. package/src/parser/rules/block/module/listpages/types/index.ts +17 -0
  187. package/src/parser/rules/block/module/listpages/types/normalized-query.ts +120 -0
  188. package/src/parser/rules/block/module/listpages/types/query.ts +67 -0
  189. package/src/parser/rules/block/module/listpages/types/template.ts +17 -0
  190. package/src/parser/rules/block/module/listpages/types/variables.ts +69 -0
  191. package/src/parser/rules/block/module/listpages/url-resolution/fields.ts +48 -0
  192. package/src/parser/rules/block/module/listpages/url-resolution/params.ts +19 -0
  193. package/src/parser/rules/block/module/listpages/url-resolution/query.ts +24 -0
  194. package/src/parser/rules/block/module/listpages/url-resolution/resolve.ts +53 -0
  195. package/src/parser/rules/block/module/listpages/url-resolution/value.ts +25 -0
  196. package/src/parser/rules/block/module/listpages/url-resolver.ts +3 -160
  197. package/src/parser/rules/block/module/listusers/compiler.ts +4 -25
  198. package/src/parser/rules/block/module/listusers/extract.ts +4 -9
  199. package/src/parser/rules/block/module/listusers/getters.ts +21 -0
  200. package/src/parser/rules/block/module/listusers/variables.ts +15 -0
  201. package/src/parser/rules/block/module/open.ts +57 -0
  202. package/src/parser/rules/block/module/resolution/contexts.ts +78 -0
  203. package/src/parser/rules/block/module/resolution/data-maps.ts +39 -0
  204. package/src/parser/rules/block/module/resolution/dynamic-modules.ts +93 -0
  205. package/src/parser/rules/block/module/resolution/styles.ts +53 -0
  206. package/src/parser/rules/block/module/resolution/walk-resolve.ts +107 -0
  207. package/src/parser/rules/block/module/resolve.ts +79 -292
  208. package/src/parser/rules/block/module/rule.ts +56 -0
  209. package/src/parser/rules/block/module/types-common.ts +11 -0
  210. package/src/parser/rules/block/module/walk/children.ts +35 -0
  211. package/src/parser/rules/block/module/walk/index.ts +9 -0
  212. package/src/parser/rules/block/module/walk/map/index.ts +2 -0
  213. package/src/parser/rules/block/module/walk/map/stateful-definition-list.ts +25 -0
  214. package/src/parser/rules/block/module/walk/map/stateful-list.ts +40 -0
  215. package/src/parser/rules/block/module/walk/map/stateful-table.ts +23 -0
  216. package/src/parser/rules/block/module/walk/map/stateful-tabs.ts +19 -0
  217. package/src/parser/rules/block/module/walk/map/stateful.ts +71 -0
  218. package/src/parser/rules/block/module/walk/map/stateless-definition-list.ts +12 -0
  219. package/src/parser/rules/block/module/walk/map/stateless-list.ts +29 -0
  220. package/src/parser/rules/block/module/walk/map/stateless-table.ts +11 -0
  221. package/src/parser/rules/block/module/walk/map/stateless-tabs.ts +5 -0
  222. package/src/parser/rules/block/module/walk/map/stateless.ts +51 -0
  223. package/src/parser/rules/block/module/walk/map/types.ts +6 -0
  224. package/src/parser/rules/block/module/walk/traverse.ts +65 -0
  225. package/src/parser/rules/block/orphan-li/content.ts +60 -0
  226. package/src/parser/rules/block/orphan-li/index.ts +75 -0
  227. package/src/parser/rules/block/orphan-li/open.ts +25 -0
  228. package/src/parser/rules/block/orphan-li/tags.ts +40 -0
  229. package/src/parser/rules/block/paragraph/content.ts +12 -0
  230. package/src/parser/rules/block/paragraph/index.ts +60 -0
  231. package/src/parser/rules/block/paragraph/normalize.ts +52 -0
  232. package/src/parser/rules/block/paragraph/span-markers.ts +52 -0
  233. package/src/parser/rules/block/parsing/attributes/index.ts +32 -0
  234. package/src/parser/rules/block/parsing/attributes/names.ts +93 -0
  235. package/src/parser/rules/block/parsing/attributes/scanner.ts +75 -0
  236. package/src/parser/rules/block/parsing/attributes/values.ts +26 -0
  237. package/src/parser/rules/block/parsing/block-item.ts +29 -0
  238. package/src/parser/rules/block/parsing/content.ts +127 -0
  239. package/src/parser/rules/block/parsing/end-condition.ts +51 -0
  240. package/src/parser/rules/block/parsing/inline-content.ts +105 -0
  241. package/src/parser/rules/block/parsing/inline-newline.ts +41 -0
  242. package/src/parser/rules/block/parsing/non-boundary.ts +24 -0
  243. package/src/parser/rules/block/parsing/rule-dispatch.ts +44 -0
  244. package/src/parser/rules/block/table/index.ts +80 -0
  245. package/src/parser/rules/block/table/pipe/cell-start.ts +69 -0
  246. package/src/parser/rules/block/table/pipe/cell.ts +106 -0
  247. package/src/parser/rules/block/table/pipe/index.ts +2 -0
  248. package/src/parser/rules/block/table/pipe/row.ts +88 -0
  249. package/src/parser/rules/block/table/pipe/tokens.ts +14 -0
  250. package/src/parser/rules/block/table/pipe/trim.ts +50 -0
  251. package/src/parser/rules/block/table-block/body.ts +79 -0
  252. package/src/parser/rules/block/table-block/cell-attributes.ts +33 -0
  253. package/src/parser/rules/block/table-block/cell-boundary.ts +99 -0
  254. package/src/parser/rules/block/table-block/cell-content/index.ts +88 -0
  255. package/src/parser/rules/block/table-block/cell-content/segments.ts +134 -0
  256. package/src/parser/rules/block/table-block/cell-newline.ts +47 -0
  257. package/src/parser/rules/block/table-block/cell.ts +64 -0
  258. package/src/parser/rules/block/table-block/index.ts +113 -0
  259. package/src/parser/rules/block/table-block/row-boundary.ts +75 -0
  260. package/src/parser/rules/block/table-block/structure.ts +80 -0
  261. package/src/parser/rules/block/tabview/body.ts +64 -0
  262. package/src/parser/rules/block/tabview/index.ts +90 -0
  263. package/src/parser/rules/block/tabview/open.ts +50 -0
  264. package/src/parser/rules/block/tabview/tab.ts +92 -0
  265. package/src/parser/rules/block/tabview/tags.ts +30 -0
  266. package/src/parser/rules/block/toc/element.ts +11 -0
  267. package/src/parser/rules/block/toc/index.ts +44 -0
  268. package/src/parser/rules/block/toc/open.ts +84 -0
  269. package/src/parser/rules/block/utils.ts +10 -610
  270. package/src/parser/rules/{utils.ts → common/attribute-safety.ts} +3 -49
  271. package/src/parser/rules/common/block-name.ts +33 -0
  272. package/src/parser/rules/common/index.ts +2 -0
  273. package/src/parser/rules/contracts/index.ts +3 -0
  274. package/src/parser/rules/contracts/parse-context.ts +38 -0
  275. package/src/parser/rules/contracts/rule.ts +43 -0
  276. package/src/parser/rules/contracts/scope.ts +31 -0
  277. package/src/parser/rules/inline/anchor/attributes.ts +54 -0
  278. package/src/parser/rules/inline/anchor/child.ts +26 -0
  279. package/src/parser/rules/inline/anchor/close.ts +34 -0
  280. package/src/parser/rules/inline/anchor/content.ts +59 -0
  281. package/src/parser/rules/inline/anchor/index.ts +103 -0
  282. package/src/parser/rules/inline/anchor/newline.ts +26 -0
  283. package/src/parser/rules/inline/anchor/open.ts +47 -0
  284. package/src/parser/rules/inline/anchor/paragraph-strip.ts +14 -0
  285. package/src/parser/rules/inline/anchor/syntax.ts +40 -0
  286. package/src/parser/rules/inline/anchor-name/index.ts +38 -0
  287. package/src/parser/rules/inline/anchor-name/name.ts +39 -0
  288. package/src/parser/rules/inline/anchor-name/syntax.ts +46 -0
  289. package/src/parser/rules/inline/bibcite/element.ts +14 -0
  290. package/src/parser/rules/inline/bibcite/index.ts +34 -0
  291. package/src/parser/rules/inline/bibcite/syntax.ts +64 -0
  292. package/src/parser/rules/inline/bold.ts +2 -39
  293. package/src/parser/rules/inline/color/index.ts +35 -0
  294. package/src/parser/rules/inline/color/syntax.ts +69 -0
  295. package/src/parser/rules/inline/comment/consume.ts +31 -0
  296. package/src/parser/rules/inline/{comment.ts → comment/index.ts} +10 -36
  297. package/src/parser/rules/inline/equation-ref/element.ts +8 -0
  298. package/src/parser/rules/inline/equation-ref/index.ts +34 -0
  299. package/src/parser/rules/inline/equation-ref/syntax.ts +45 -0
  300. package/src/parser/rules/inline/expr/branch.ts +104 -0
  301. package/src/parser/rules/inline/expr/conditional-branch.ts +27 -0
  302. package/src/parser/rules/inline/expr/conditional.ts +80 -0
  303. package/src/parser/rules/inline/expr/depth.ts +25 -0
  304. package/src/parser/rules/inline/expr/elements.ts +39 -0
  305. package/src/parser/rules/inline/expr/index.ts +84 -0
  306. package/src/parser/rules/inline/expr/syntax.ts +45 -0
  307. package/src/parser/rules/inline/footnote/child.ts +22 -0
  308. package/src/parser/rules/inline/footnote/close.ts +33 -0
  309. package/src/parser/rules/inline/footnote/content.ts +54 -0
  310. package/src/parser/rules/inline/footnote/elements.ts +38 -0
  311. package/src/parser/rules/inline/footnote/index.ts +54 -0
  312. package/src/parser/rules/inline/footnote/newline.ts +27 -0
  313. package/src/parser/rules/inline/footnote/open.ts +38 -0
  314. package/src/parser/rules/inline/formatting/container.ts +50 -0
  315. package/src/parser/rules/inline/{guillemet.ts → guillemet/index.ts} +5 -13
  316. package/src/parser/rules/inline/guillemet/text.ts +11 -0
  317. package/src/parser/rules/inline/html/gate.ts +64 -0
  318. package/src/parser/rules/inline/{html.ts → html/index.ts} +9 -60
  319. package/src/parser/rules/inline/html/open.ts +37 -0
  320. package/src/parser/rules/inline/image/attributes.ts +22 -0
  321. package/src/parser/rules/inline/image/body.ts +36 -0
  322. package/src/parser/rules/inline/image/index.ts +89 -0
  323. package/src/parser/rules/inline/image/open.ts +56 -0
  324. package/src/parser/rules/inline/image/source.ts +62 -0
  325. package/src/parser/rules/inline/image/syntax.ts +76 -0
  326. package/src/parser/rules/inline/italic.ts +2 -30
  327. package/src/parser/rules/inline/line-break/backslash.ts +58 -0
  328. package/src/parser/rules/inline/line-break/elements.ts +9 -0
  329. package/src/parser/rules/inline/line-break/index.ts +3 -0
  330. package/src/parser/rules/inline/line-break/newline.ts +82 -0
  331. package/src/parser/rules/inline/line-break/underscore.ts +45 -0
  332. package/src/parser/rules/inline/link-anchor.ts +6 -81
  333. package/src/parser/rules/inline/link-bracket/anchor.ts +3 -0
  334. package/src/parser/rules/inline/link-bracket/direct-url.ts +5 -0
  335. package/src/parser/rules/inline/link-bracket/parsed.ts +81 -0
  336. package/src/parser/rules/inline/link-bracket/parts.ts +64 -0
  337. package/src/parser/rules/inline/link-bracket/prefix.ts +15 -0
  338. package/src/parser/rules/inline/link-single.ts +7 -98
  339. package/src/parser/rules/inline/link-star.ts +7 -69
  340. package/src/parser/rules/inline/link-triple/fallback.ts +10 -0
  341. package/src/parser/rules/inline/link-triple/index.ts +62 -0
  342. package/src/parser/rules/inline/link-triple/interwiki.ts +11 -0
  343. package/src/parser/rules/inline/link-triple/label.ts +35 -0
  344. package/src/parser/rules/inline/link-triple/syntax.ts +72 -0
  345. package/src/parser/rules/inline/link-triple/target.ts +36 -0
  346. package/src/parser/rules/inline/math-inline/index.ts +40 -0
  347. package/src/parser/rules/inline/math-inline/syntax.ts +55 -0
  348. package/src/parser/rules/inline/monospace.ts +2 -30
  349. package/src/parser/rules/inline/parsing/block-boundary.ts +42 -0
  350. package/src/parser/rules/inline/parsing/block-start-predicates.ts +117 -0
  351. package/src/parser/rules/inline/parsing/collect.ts +23 -0
  352. package/src/parser/rules/inline/parsing/inline-content.ts +115 -0
  353. package/src/parser/rules/inline/parsing/paragraph-boundary.ts +47 -0
  354. package/src/parser/rules/inline/parsing/plain-text.ts +69 -0
  355. package/src/parser/rules/inline/parsing/preserved-line-break.ts +11 -0
  356. package/src/parser/rules/inline/parsing/rules.ts +34 -0
  357. package/src/parser/rules/inline/parsing/simple-token.ts +26 -0
  358. package/src/parser/rules/inline/raw/angle.ts +40 -0
  359. package/src/parser/rules/inline/raw/double-at.ts +78 -0
  360. package/src/parser/rules/inline/raw/index.ts +26 -0
  361. package/src/parser/rules/inline/raw/result.ts +26 -0
  362. package/src/parser/rules/inline/size/content.ts +65 -0
  363. package/src/parser/rules/inline/size/index.ts +55 -0
  364. package/src/parser/rules/inline/size/open.ts +43 -0
  365. package/src/parser/rules/inline/size/value.ts +45 -0
  366. package/src/parser/rules/inline/span/content.ts +97 -0
  367. package/src/parser/rules/inline/span/elements.ts +108 -0
  368. package/src/parser/rules/inline/span/index.ts +79 -0
  369. package/src/parser/rules/inline/span/newline.ts +50 -0
  370. package/src/parser/rules/inline/span/syntax.ts +70 -0
  371. package/src/parser/rules/inline/{strikethrough.ts → strikethrough/index.ts} +5 -60
  372. package/src/parser/rules/inline/strikethrough/parse.ts +14 -0
  373. package/src/parser/rules/inline/strikethrough/syntax.ts +24 -0
  374. package/src/parser/rules/inline/subscript.ts +2 -39
  375. package/src/parser/rules/inline/superscript.ts +4 -39
  376. package/src/parser/rules/inline/text/element.ts +5 -0
  377. package/src/parser/rules/inline/{text.ts → text/index.ts} +5 -4
  378. package/src/parser/rules/inline/underline/child.ts +26 -0
  379. package/src/parser/rules/inline/underline/content.ts +29 -0
  380. package/src/parser/rules/inline/{underline.ts → underline/index.ts} +6 -49
  381. package/src/parser/rules/inline/user/element.ts +11 -0
  382. package/src/parser/rules/inline/user/index.ts +34 -0
  383. package/src/parser/rules/inline/user/syntax.ts +67 -0
  384. package/src/parser/rules/inline/utils.ts +4 -344
  385. package/src/parser/rules/tokens.ts +106 -0
  386. package/src/parser/rules/types.ts +9 -252
  387. package/src/parser/depth.ts +0 -251
  388. package/src/parser/parse.ts +0 -315
  389. package/src/parser/postprocess/spanStrip.ts +0 -697
  390. package/src/parser/preprocess/expr.ts +0 -265
  391. package/src/parser/preprocess/utils.ts +0 -250
  392. package/src/parser/preprocess/whitespace.ts +0 -111
  393. package/src/parser/rules/block/align.ts +0 -282
  394. package/src/parser/rules/block/bibliography.ts +0 -359
  395. package/src/parser/rules/block/block-list.ts +0 -689
  396. package/src/parser/rules/block/blockquote.ts +0 -238
  397. package/src/parser/rules/block/code.ts +0 -187
  398. package/src/parser/rules/block/collapsible.ts +0 -337
  399. package/src/parser/rules/block/definition-list.ts +0 -270
  400. package/src/parser/rules/block/div.ts +0 -400
  401. package/src/parser/rules/block/embed-block.ts +0 -153
  402. package/src/parser/rules/block/footnoteblock.ts +0 -200
  403. package/src/parser/rules/block/heading.ts +0 -142
  404. package/src/parser/rules/block/html.ts +0 -222
  405. package/src/parser/rules/block/iframe.ts +0 -239
  406. package/src/parser/rules/block/include.ts +0 -179
  407. package/src/parser/rules/block/list.ts +0 -244
  408. package/src/parser/rules/block/math.ts +0 -183
  409. package/src/parser/rules/block/module/include/resolve.ts +0 -556
  410. package/src/parser/rules/block/module/listpages/types.ts +0 -513
  411. package/src/parser/rules/block/module/walk.ts +0 -380
  412. package/src/parser/rules/block/module.ts +0 -164
  413. package/src/parser/rules/block/orphan-li.ts +0 -177
  414. package/src/parser/rules/block/paragraph.ts +0 -157
  415. package/src/parser/rules/block/table-block.ts +0 -726
  416. package/src/parser/rules/block/table.ts +0 -441
  417. package/src/parser/rules/block/tabview.ts +0 -331
  418. package/src/parser/rules/block/toc.ts +0 -129
  419. package/src/parser/rules/inline/anchor-name.ts +0 -154
  420. package/src/parser/rules/inline/anchor.ts +0 -327
  421. package/src/parser/rules/inline/bibcite.ts +0 -153
  422. package/src/parser/rules/inline/color.ts +0 -140
  423. package/src/parser/rules/inline/equation-ref.ts +0 -115
  424. package/src/parser/rules/inline/expr.ts +0 -526
  425. package/src/parser/rules/inline/footnote.ts +0 -223
  426. package/src/parser/rules/inline/image.ts +0 -328
  427. package/src/parser/rules/inline/line-break.ts +0 -326
  428. package/src/parser/rules/inline/link-triple.ts +0 -267
  429. package/src/parser/rules/inline/math-inline.ts +0 -126
  430. package/src/parser/rules/inline/raw.ts +0 -262
  431. package/src/parser/rules/inline/size.ts +0 -244
  432. package/src/parser/rules/inline/span.ts +0 -424
  433. package/src/parser/rules/inline/user.ts +0 -147
@@ -0,0 +1,77 @@
1
+ /**
2
+ * User information.
3
+ */
4
+ export interface UserInfo {
5
+ id: number;
6
+ name: string;
7
+ unixName: string;
8
+ }
9
+
10
+ /**
11
+ * Page data provided by an external source.
12
+ */
13
+ export interface PageData {
14
+ // Identity
15
+ name: string;
16
+ category: string;
17
+ fullname: string;
18
+ title: string;
19
+
20
+ // Lifecycle - created
21
+ createdAt: Date;
22
+ createdBy?: UserInfo;
23
+
24
+ // Lifecycle - updated
25
+ updatedAt: Date;
26
+ updatedBy?: UserInfo;
27
+
28
+ // Lifecycle - commented
29
+ commentedAt?: Date;
30
+ commentedBy?: UserInfo;
31
+
32
+ // Parent
33
+ parentName?: string;
34
+ parentCategory?: string;
35
+ parentFullname?: string;
36
+ parentTitle?: string;
37
+
38
+ // Wikitext content split by ==== when resolving %%content{n}%%.
39
+ content?: string;
40
+
41
+ // Tags
42
+ tags: string[];
43
+ hiddenTags: string[];
44
+
45
+ // Form data
46
+ formData?: Record<string, string>;
47
+ formRaw?: Record<string, string>;
48
+ formLabel?: Record<string, string>;
49
+ formHint?: Record<string, string>;
50
+
51
+ // Metrics
52
+ children: number;
53
+ comments: number;
54
+ size: number;
55
+ rating: number;
56
+ ratingVotes: number;
57
+ ratingPercent?: number;
58
+ revisions: number;
59
+ }
60
+
61
+ /**
62
+ * Site context information.
63
+ */
64
+ export interface SiteContext {
65
+ title: string;
66
+ name: string;
67
+ domain: string;
68
+ }
69
+
70
+ /**
71
+ * External data for a single ListPages module.
72
+ */
73
+ export interface ListPagesExternalData {
74
+ pages: PageData[];
75
+ totalCount: number;
76
+ site: SiteContext;
77
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Public type facade for the ListPages module system.
3
+ *
4
+ * The actual declarations live under `listpages/types/` by lifecycle concern:
5
+ * query input, template variables, data requirements, external data, compiled
6
+ * templates, and normalized selectors.
7
+ *
8
+ * @module
9
+ */
10
+
11
+ export type * from "./query";
12
+ export type * from "./variables";
13
+ export type * from "./data-requirements";
14
+ export type * from "./external-data";
15
+ export type * from "./data-fetcher";
16
+ export type * from "./template";
17
+ export type * from "./normalized-query";
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Normalized tags selector.
3
+ */
4
+ export interface NormalizedTags {
5
+ /** AND conditions - pages must have all of these tags (+tag). */
6
+ all: string[];
7
+ /** OR conditions - pages must have any of these tags (no prefix). */
8
+ any: string[];
9
+ /** NOT conditions - pages must not have these tags (-tag). */
10
+ none: string[];
11
+ /** Special selector. */
12
+ special: "same-visible" | "same-all" | "none" | null;
13
+ }
14
+
15
+ /**
16
+ * Normalized category selector.
17
+ */
18
+ export interface NormalizedCategory {
19
+ /** Categories to include. */
20
+ include: string[];
21
+ /** Categories to exclude (-category). */
22
+ exclude: string[];
23
+ /** Select all categories (*). */
24
+ all: boolean;
25
+ /** Select current category (.). */
26
+ current: boolean;
27
+ }
28
+
29
+ /**
30
+ * Order field options.
31
+ */
32
+ export type OrderField =
33
+ | "created_at"
34
+ | "updated_at"
35
+ | "title"
36
+ | "fullname"
37
+ | "rating"
38
+ | "votes"
39
+ | "revisions"
40
+ | "comments"
41
+ | "size"
42
+ | "random";
43
+
44
+ /**
45
+ * Order direction.
46
+ */
47
+ export type OrderDirection = "asc" | "desc";
48
+
49
+ /**
50
+ * Normalized order specification.
51
+ */
52
+ export interface NormalizedOrder {
53
+ field: OrderField;
54
+ direction: OrderDirection;
55
+ }
56
+
57
+ /**
58
+ * Normalized parent selector.
59
+ */
60
+ export type NormalizedParent =
61
+ | { type: "none" }
62
+ | { type: "same" }
63
+ | { type: "different" }
64
+ | { type: "children" }
65
+ | { type: "page"; name: string };
66
+
67
+ /**
68
+ * Date comparison operators.
69
+ */
70
+ export type DateComparisonOp = "=" | "<" | ">" | "<=" | ">=" | "<>";
71
+
72
+ /**
73
+ * Normalized date selector.
74
+ */
75
+ export type NormalizedDateSelector =
76
+ | { type: "year"; year: number }
77
+ | { type: "month"; year: number; month: number }
78
+ | { type: "comparison"; op: DateComparisonOp; date: string }
79
+ | { type: "relative"; unit: "day" | "week" | "month"; count: number };
80
+
81
+ /**
82
+ * Numeric comparison operators.
83
+ */
84
+ export type NumericComparisonOp = "=" | "<" | ">" | "<=" | ">=";
85
+
86
+ /**
87
+ * Normalized numeric selector for rating/votes.
88
+ */
89
+ export interface NormalizedNumericSelector {
90
+ op: NumericComparisonOp;
91
+ value: number;
92
+ }
93
+
94
+ /**
95
+ * Fully normalized ListPages query.
96
+ *
97
+ * All string fields are parsed into structured selector objects. Use
98
+ * `normalizeQuery()` to convert from `ListPagesQuery`.
99
+ */
100
+ export interface NormalizedListPagesQuery {
101
+ pagetype?: "normal" | "hidden" | "*";
102
+ category?: NormalizedCategory;
103
+ tags?: NormalizedTags;
104
+ parent?: NormalizedParent;
105
+ linkTo?: string;
106
+ createdAt?: NormalizedDateSelector;
107
+ updatedAt?: NormalizedDateSelector;
108
+ createdBy?: string;
109
+ rating?: NormalizedNumericSelector;
110
+ votes?: NormalizedNumericSelector;
111
+ name?: string;
112
+ fullname?: string;
113
+ range?: "." | "before" | "after" | "others";
114
+ dataFormFields?: Record<string, string>;
115
+ order?: NormalizedOrder;
116
+ offset?: number;
117
+ limit?: number;
118
+ perPage?: number;
119
+ reverse?: boolean;
120
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * ListPages query parameters for page selection.
3
+ *
4
+ * @security All string fields contain untrusted user input from wikitext.
5
+ * When using these values in database queries:
6
+ * - NEVER interpolate directly into SQL/NoSQL query strings.
7
+ * - ALWAYS use parameterized queries or prepared statements.
8
+ * - For ORDER BY clauses, use a whitelist of allowed column names.
9
+ */
10
+ export interface ListPagesQuery {
11
+ /** Page type selector */
12
+ pagetype?: "normal" | "hidden" | "*";
13
+
14
+ /** Category selector. @untrusted User input - use parameterized queries. */
15
+ category?: string;
16
+
17
+ /** Tag selector, e.g. "+fruit -admin". @untrusted User input. */
18
+ tags?: string;
19
+
20
+ /** Parent page selector. @untrusted User input. */
21
+ parent?: string;
22
+
23
+ /** Link target selector. @untrusted User input. */
24
+ linkTo?: string;
25
+
26
+ /** Created date selector. @untrusted User input. */
27
+ createdAt?: string;
28
+
29
+ /** Updated date selector. @untrusted User input. */
30
+ updatedAt?: string;
31
+
32
+ /** Author selector. @untrusted User input. */
33
+ createdBy?: string;
34
+
35
+ /** Rating selector. @untrusted User input. */
36
+ rating?: string;
37
+
38
+ /** Votes selector. @untrusted User input. */
39
+ votes?: string;
40
+
41
+ /** Page name selector. @untrusted User input. */
42
+ name?: string;
43
+
44
+ /** Full page name selector (category:name). @untrusted User input. */
45
+ fullname?: string;
46
+
47
+ /** Range selector relative to current page */
48
+ range?: "." | "before" | "after" | "others";
49
+
50
+ /** Data form field selectors. @untrusted Both keys and values are user input. */
51
+ dataFormFields?: Record<string, string>;
52
+
53
+ /** Ordering specification. @untrusted Use whitelist validation for ORDER BY. */
54
+ order?: string;
55
+
56
+ /** Pagination offset */
57
+ offset?: number;
58
+
59
+ /** Maximum number of results */
60
+ limit?: number;
61
+
62
+ /** Results per page */
63
+ perPage?: number;
64
+
65
+ /** Reverse order */
66
+ reverse?: boolean;
67
+ }
@@ -0,0 +1,17 @@
1
+ import type { PageData, SiteContext } from "./external-data";
2
+
3
+ /**
4
+ * Context passed to a compiled ListPages template.
5
+ */
6
+ export interface VariableContext {
7
+ page: PageData;
8
+ index: number;
9
+ total: number;
10
+ limit?: number;
11
+ site: SiteContext;
12
+ }
13
+
14
+ /**
15
+ * Compiled template function.
16
+ */
17
+ export type CompiledTemplate = (ctx: VariableContext) => string;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * All supported ListPages template variables.
3
+ */
4
+ export type ListPagesVariable =
5
+ // Lifecycle - created
6
+ | "created_at"
7
+ | "created_by"
8
+ | "created_by_unix"
9
+ | "created_by_id"
10
+ | "created_by_linked"
11
+ // Lifecycle - updated
12
+ | "updated_at"
13
+ | "updated_by"
14
+ | "updated_by_unix"
15
+ | "updated_by_id"
16
+ | "updated_by_linked"
17
+ // Lifecycle - commented
18
+ | "commented_at"
19
+ | "commented_by"
20
+ | "commented_by_unix"
21
+ | "commented_by_id"
22
+ | "commented_by_linked"
23
+ // Structure - page
24
+ | "name"
25
+ | "category"
26
+ | "fullname"
27
+ | "title"
28
+ | "title_linked"
29
+ | "link"
30
+ // Structure - parent
31
+ | "parent_name"
32
+ | "parent_category"
33
+ | "parent_fullname"
34
+ | "parent_title"
35
+ | "parent_title_linked"
36
+ // Content
37
+ | "content"
38
+ | "content_n"
39
+ | "preview"
40
+ | "preview_n"
41
+ | "summary"
42
+ | "first_paragraph"
43
+ // Tags
44
+ | "tags"
45
+ | "tags_linked"
46
+ | "_tags"
47
+ | "_tags_linked"
48
+ // Form data
49
+ | "form_data"
50
+ | "form_raw"
51
+ | "form_label"
52
+ | "form_hint"
53
+ // Metrics
54
+ | "children"
55
+ | "comments"
56
+ | "size"
57
+ | "rating"
58
+ | "rating_votes"
59
+ | "rating_percent"
60
+ | "revisions"
61
+ // Pagination
62
+ | "index"
63
+ | "total"
64
+ | "limit"
65
+ | "total_or_limit"
66
+ // Site context
67
+ | "site_title"
68
+ | "site_name"
69
+ | "site_domain";
@@ -0,0 +1,48 @@
1
+ import type { ListPagesQuery } from "../types";
2
+
3
+ export type UrlResolvableField =
4
+ | { attr: string; queryKey: StringUrlQueryKey; type: "string" }
5
+ | { attr: string; queryKey: NumberUrlQueryKey; type: "number" }
6
+ | { attr: string; queryKey: BooleanUrlQueryKey; type: "boolean" };
7
+
8
+ type StringUrlQueryKey = Extract<
9
+ keyof ListPagesQuery,
10
+ | "order"
11
+ | "tags"
12
+ | "category"
13
+ | "parent"
14
+ | "range"
15
+ | "name"
16
+ | "fullname"
17
+ | "createdAt"
18
+ | "updatedAt"
19
+ | "createdBy"
20
+ | "rating"
21
+ | "votes"
22
+ >;
23
+
24
+ type NumberUrlQueryKey = Extract<keyof ListPagesQuery, "offset" | "limit" | "perPage">;
25
+ type BooleanUrlQueryKey = Extract<keyof ListPagesQuery, "reverse">;
26
+
27
+ /**
28
+ * Mapping of module attribute names to their corresponding `ListPagesQuery` keys
29
+ * and expected value types. Only fields listed here support `@URL` resolution.
30
+ */
31
+ export const URL_RESOLVABLE_FIELDS: readonly UrlResolvableField[] = [
32
+ { attr: "offset", queryKey: "offset", type: "number" },
33
+ { attr: "limit", queryKey: "limit", type: "number" },
34
+ { attr: "per-page", queryKey: "perPage", type: "number" },
35
+ { attr: "order", queryKey: "order", type: "string" },
36
+ { attr: "tags", queryKey: "tags", type: "string" },
37
+ { attr: "category", queryKey: "category", type: "string" },
38
+ { attr: "parent", queryKey: "parent", type: "string" },
39
+ { attr: "range", queryKey: "range", type: "string" },
40
+ { attr: "name", queryKey: "name", type: "string" },
41
+ { attr: "fullname", queryKey: "fullname", type: "string" },
42
+ { attr: "created-at", queryKey: "createdAt", type: "string" },
43
+ { attr: "updated-at", queryKey: "updatedAt", type: "string" },
44
+ { attr: "created-by", queryKey: "createdBy", type: "string" },
45
+ { attr: "rating", queryKey: "rating", type: "string" },
46
+ { attr: "votes", queryKey: "votes", type: "string" },
47
+ { attr: "reverse", queryKey: "reverse", type: "boolean" },
48
+ ];
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Parse URL path parameters like /offset/1/page2_limit/1.
3
+ * Returns a map of parameter name -> value.
4
+ */
5
+ export function parseUrlParams(url: string): Map<string, string> {
6
+ const params = new Map<string, string>();
7
+ const parts = url.split("/").filter(Boolean);
8
+
9
+ // Skip the page name (first part), parse key/value pairs.
10
+ for (let i = 1; i < parts.length - 1; i += 2) {
11
+ const key = parts[i];
12
+ const value = parts[i + 1];
13
+ if (key && value) {
14
+ params.set(key, value);
15
+ }
16
+ }
17
+
18
+ return params;
19
+ }
@@ -0,0 +1,24 @@
1
+ import type { ListPagesQuery } from "../types";
2
+ import type { UrlResolvableField } from "./fields";
3
+
4
+ export function assignResolvedUrlField(
5
+ query: ListPagesQuery,
6
+ field: UrlResolvableField,
7
+ value: string,
8
+ ): void {
9
+ switch (field.type) {
10
+ case "number": {
11
+ const num = parseInt(value, 10);
12
+ if (!Number.isNaN(num)) {
13
+ query[field.queryKey] = num;
14
+ }
15
+ return;
16
+ }
17
+ case "boolean":
18
+ query[field.queryKey] = value === "true" || value === "yes" || value === "1";
19
+ return;
20
+ case "string":
21
+ Object.assign(query, { [field.queryKey]: value });
22
+ return;
23
+ }
24
+ }
@@ -0,0 +1,53 @@
1
+ import type { ListPagesDataRequirement, ListPagesQuery, NormalizedListPagesQuery } from "../types";
2
+ import { normalizeQuery } from "../normalize";
3
+ import { URL_RESOLVABLE_FIELDS } from "./fields";
4
+ import { assignResolvedUrlField } from "./query";
5
+ import { resolveUrlValue } from "./value";
6
+
7
+ /**
8
+ * Resolve all `@URL` parameters and build a ListPagesQuery.
9
+ *
10
+ * Takes a ListPagesDataRequirement and URL parameters, resolves all `@URL|default`
11
+ * values, and returns a complete ListPagesQuery ready for database queries.
12
+ *
13
+ * @param requirement - The data requirement from AST extraction
14
+ * @param urlParams - Parsed URL parameters (from parseUrlParams)
15
+ * @returns Resolved ListPagesQuery
16
+ */
17
+ export function resolveQuery(
18
+ requirement: ListPagesDataRequirement,
19
+ urlParams: Map<string, string>,
20
+ ): ListPagesQuery {
21
+ const { query, rawAttributes, urlAttrPrefix } = requirement;
22
+ const resolved: ListPagesQuery = { ...query };
23
+
24
+ for (const field of URL_RESOLVABLE_FIELDS) {
25
+ const rawValue = rawAttributes[field.attr];
26
+ if (!rawValue) continue;
27
+
28
+ const resolvedValue = resolveUrlValue(rawValue, field.attr, urlParams, urlAttrPrefix);
29
+ if (resolvedValue === undefined) continue;
30
+
31
+ assignResolvedUrlField(resolved, field, resolvedValue);
32
+ }
33
+
34
+ return resolved;
35
+ }
36
+
37
+ /**
38
+ * Resolve all `@URL` parameters and normalize the query.
39
+ *
40
+ * Combines URL resolution with query normalization in a single call.
41
+ * This is the recommended way to process ListPages queries for HPC.
42
+ *
43
+ * @param requirement - The data requirement from AST extraction
44
+ * @param urlParams - Parsed URL parameters (from parseUrlParams)
45
+ * @returns Normalized query with all `@URL` values resolved
46
+ */
47
+ export function resolveAndNormalizeQuery(
48
+ requirement: ListPagesDataRequirement,
49
+ urlParams: Map<string, string>,
50
+ ): NormalizedListPagesQuery {
51
+ const resolved = resolveQuery(requirement, urlParams);
52
+ return normalizeQuery(resolved);
53
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Resolve @URL|default format with actual URL parameters.
3
+ *
4
+ * @param rawValue - The raw attribute value (e.g., "@URL|0")
5
+ * @param paramName - The parameter name (e.g., "offset")
6
+ * @param urlParams - Parsed URL parameters
7
+ * @param prefix - Optional URL attribute prefix (e.g., "page2")
8
+ * @returns Resolved value
9
+ */
10
+ export function resolveUrlValue(
11
+ rawValue: string | undefined,
12
+ paramName: string,
13
+ urlParams: Map<string, string>,
14
+ prefix?: string,
15
+ ): string | undefined {
16
+ if (!rawValue) return undefined;
17
+
18
+ if (!rawValue.startsWith("@URL")) {
19
+ return rawValue;
20
+ }
21
+
22
+ const defaultValue = rawValue.includes("|") ? rawValue.split("|")[1] : undefined;
23
+ const actualParamName = prefix ? `${prefix}_${paramName}` : paramName;
24
+ return urlParams.get(actualParamName) ?? defaultValue;
25
+ }