@jasonbelmonti/markdown-engine 0.1.0 → 2.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 (350) hide show
  1. package/CHANGELOG.md +53 -4
  2. package/README.md +138 -10
  3. package/SECURITY.md +5 -3
  4. package/dist/api/annotation-source-range.d.ts +7 -0
  5. package/dist/api/annotation-source-range.d.ts.map +1 -0
  6. package/dist/api/annotation-source-range.js +103 -0
  7. package/dist/api/annotation-source-range.js.map +1 -0
  8. package/dist/api/annotation-target-candidate.d.ts +10 -0
  9. package/dist/api/annotation-target-candidate.d.ts.map +1 -0
  10. package/dist/api/annotation-target-candidate.js +14 -0
  11. package/dist/api/annotation-target-candidate.js.map +1 -0
  12. package/dist/api/annotation-target-cloning.d.ts +5 -0
  13. package/dist/api/annotation-target-cloning.d.ts.map +1 -0
  14. package/dist/api/annotation-target-cloning.js +122 -0
  15. package/dist/api/annotation-target-cloning.js.map +1 -0
  16. package/dist/api/annotation-target-diagnostics.d.ts +8 -0
  17. package/dist/api/annotation-target-diagnostics.d.ts.map +1 -0
  18. package/dist/api/annotation-target-diagnostics.js +57 -0
  19. package/dist/api/annotation-target-diagnostics.js.map +1 -0
  20. package/dist/api/annotation-target-runtime.d.ts +30 -0
  21. package/dist/api/annotation-target-runtime.d.ts.map +1 -0
  22. package/dist/api/annotation-target-runtime.js +161 -0
  23. package/dist/api/annotation-target-runtime.js.map +1 -0
  24. package/dist/api/annotation-target-validation.d.ts +4 -0
  25. package/dist/api/annotation-target-validation.d.ts.map +1 -0
  26. package/dist/api/annotation-target-validation.js +147 -0
  27. package/dist/api/annotation-target-validation.js.map +1 -0
  28. package/dist/api/annotations.d.ts +4 -0
  29. package/dist/api/annotations.d.ts.map +1 -0
  30. package/dist/api/annotations.js +16 -0
  31. package/dist/api/annotations.js.map +1 -0
  32. package/dist/api/compatibility.d.ts +15 -0
  33. package/dist/api/compatibility.d.ts.map +1 -0
  34. package/dist/api/compatibility.js +57 -0
  35. package/dist/api/compatibility.js.map +1 -0
  36. package/dist/api/contracts.d.ts +4 -1
  37. package/dist/api/contracts.d.ts.map +1 -1
  38. package/dist/api/contracts.js +3 -0
  39. package/dist/api/contracts.js.map +1 -1
  40. package/dist/api/declarative-validation.d.ts +13 -0
  41. package/dist/api/declarative-validation.d.ts.map +1 -0
  42. package/dist/api/declarative-validation.js +63 -0
  43. package/dist/api/declarative-validation.js.map +1 -0
  44. package/dist/api/document-queries.d.ts +3 -0
  45. package/dist/api/document-queries.d.ts.map +1 -0
  46. package/dist/api/document-queries.js +160 -0
  47. package/dist/api/document-queries.js.map +1 -0
  48. package/dist/api/document.d.ts +179 -2
  49. package/dist/api/document.d.ts.map +1 -1
  50. package/dist/api/engine-node-attributes.d.ts +15 -0
  51. package/dist/api/engine-node-attributes.d.ts.map +1 -0
  52. package/dist/api/engine-node-attributes.js +99 -0
  53. package/dist/api/engine-node-attributes.js.map +1 -0
  54. package/dist/api/normalize.d.ts +2 -1
  55. package/dist/api/normalize.d.ts.map +1 -1
  56. package/dist/api/normalize.js +22 -1
  57. package/dist/api/normalize.js.map +1 -1
  58. package/dist/api/serialize.d.ts +5 -1
  59. package/dist/api/serialize.d.ts.map +1 -1
  60. package/dist/api/serialize.js +7 -14
  61. package/dist/api/serialize.js.map +1 -1
  62. package/dist/cli/args.d.ts +18 -0
  63. package/dist/cli/args.d.ts.map +1 -0
  64. package/dist/cli/args.js +109 -0
  65. package/dist/cli/args.js.map +1 -0
  66. package/dist/cli/declarative-validation.d.ts +18 -0
  67. package/dist/cli/declarative-validation.d.ts.map +1 -0
  68. package/dist/cli/declarative-validation.js +131 -0
  69. package/dist/cli/declarative-validation.js.map +1 -0
  70. package/dist/cli/document-version.d.ts +14 -0
  71. package/dist/cli/document-version.d.ts.map +1 -0
  72. package/dist/cli/document-version.js +32 -0
  73. package/dist/cli/document-version.js.map +1 -0
  74. package/dist/cli/files.d.ts +6 -0
  75. package/dist/cli/files.d.ts.map +1 -0
  76. package/dist/cli/files.js +33 -0
  77. package/dist/cli/files.js.map +1 -0
  78. package/dist/cli/index.d.ts +3 -0
  79. package/dist/cli/index.d.ts.map +1 -0
  80. package/dist/cli/index.js +9 -0
  81. package/dist/cli/index.js.map +1 -0
  82. package/dist/cli/normalize-markdown.d.ts +8 -0
  83. package/dist/cli/normalize-markdown.d.ts.map +1 -0
  84. package/dist/cli/normalize-markdown.js +10 -0
  85. package/dist/cli/normalize-markdown.js.map +1 -0
  86. package/dist/cli/run.d.ts +11 -0
  87. package/dist/cli/run.d.ts.map +1 -0
  88. package/dist/cli/run.js +52 -0
  89. package/dist/cli/run.js.map +1 -0
  90. package/dist/cli/validate-args.d.ts +18 -0
  91. package/dist/cli/validate-args.d.ts.map +1 -0
  92. package/dist/cli/validate-args.js +131 -0
  93. package/dist/cli/validate-args.js.map +1 -0
  94. package/dist/declarative-validation/assertions/context.d.ts +8 -0
  95. package/dist/declarative-validation/assertions/context.d.ts.map +1 -0
  96. package/dist/declarative-validation/assertions/context.js +2 -0
  97. package/dist/declarative-validation/assertions/context.js.map +1 -0
  98. package/dist/declarative-validation/assertions/diagnostics.d.ts +22 -0
  99. package/dist/declarative-validation/assertions/diagnostics.d.ts.map +1 -0
  100. package/dist/declarative-validation/assertions/diagnostics.js +71 -0
  101. package/dist/declarative-validation/assertions/diagnostics.js.map +1 -0
  102. package/dist/declarative-validation/assertions/document-text-offsets.d.ts +3 -0
  103. package/dist/declarative-validation/assertions/document-text-offsets.d.ts.map +1 -0
  104. package/dist/declarative-validation/assertions/document-text-offsets.js +32 -0
  105. package/dist/declarative-validation/assertions/document-text-offsets.js.map +1 -0
  106. package/dist/declarative-validation/assertions/evaluator.d.ts +5 -0
  107. package/dist/declarative-validation/assertions/evaluator.d.ts.map +1 -0
  108. package/dist/declarative-validation/assertions/evaluator.js +46 -0
  109. package/dist/declarative-validation/assertions/evaluator.js.map +1 -0
  110. package/dist/declarative-validation/assertions/exists.d.ts +4 -0
  111. package/dist/declarative-validation/assertions/exists.d.ts.map +1 -0
  112. package/dist/declarative-validation/assertions/exists.js +8 -0
  113. package/dist/declarative-validation/assertions/exists.js.map +1 -0
  114. package/dist/declarative-validation/assertions/frontmatter-required.d.ts +9 -0
  115. package/dist/declarative-validation/assertions/frontmatter-required.d.ts.map +1 -0
  116. package/dist/declarative-validation/assertions/frontmatter-required.js +15 -0
  117. package/dist/declarative-validation/assertions/frontmatter-required.js.map +1 -0
  118. package/dist/declarative-validation/assertions/id-targets.d.ts +29 -0
  119. package/dist/declarative-validation/assertions/id-targets.d.ts.map +1 -0
  120. package/dist/declarative-validation/assertions/id-targets.js +428 -0
  121. package/dist/declarative-validation/assertions/id-targets.js.map +1 -0
  122. package/dist/declarative-validation/assertions/id-tokens.d.ts +15 -0
  123. package/dist/declarative-validation/assertions/id-tokens.d.ts.map +1 -0
  124. package/dist/declarative-validation/assertions/id-tokens.js +27 -0
  125. package/dist/declarative-validation/assertions/id-tokens.js.map +1 -0
  126. package/dist/declarative-validation/assertions/ids.d.ts +9 -0
  127. package/dist/declarative-validation/assertions/ids.d.ts.map +1 -0
  128. package/dist/declarative-validation/assertions/ids.js +42 -0
  129. package/dist/declarative-validation/assertions/ids.js.map +1 -0
  130. package/dist/declarative-validation/assertions/index.d.ts +3 -0
  131. package/dist/declarative-validation/assertions/index.d.ts.map +1 -0
  132. package/dist/declarative-validation/assertions/index.js +3 -0
  133. package/dist/declarative-validation/assertions/index.js.map +1 -0
  134. package/dist/declarative-validation/assertions/literal-text.d.ts +2 -0
  135. package/dist/declarative-validation/assertions/literal-text.d.ts.map +1 -0
  136. package/dist/declarative-validation/assertions/literal-text.js +14 -0
  137. package/dist/declarative-validation/assertions/literal-text.js.map +1 -0
  138. package/dist/declarative-validation/assertions/normalized-source-ranges.d.ts +3 -0
  139. package/dist/declarative-validation/assertions/normalized-source-ranges.d.ts.map +1 -0
  140. package/dist/declarative-validation/assertions/normalized-source-ranges.js +105 -0
  141. package/dist/declarative-validation/assertions/normalized-source-ranges.js.map +1 -0
  142. package/dist/declarative-validation/assertions/ordering.d.ts +6 -0
  143. package/dist/declarative-validation/assertions/ordering.d.ts.map +1 -0
  144. package/dist/declarative-validation/assertions/ordering.js +71 -0
  145. package/dist/declarative-validation/assertions/ordering.js.map +1 -0
  146. package/dist/declarative-validation/assertions/references.d.ts +9 -0
  147. package/dist/declarative-validation/assertions/references.d.ts.map +1 -0
  148. package/dist/declarative-validation/assertions/references.js +354 -0
  149. package/dist/declarative-validation/assertions/references.js.map +1 -0
  150. package/dist/declarative-validation/assertions/sections-required.d.ts +9 -0
  151. package/dist/declarative-validation/assertions/sections-required.d.ts.map +1 -0
  152. package/dist/declarative-validation/assertions/sections-required.js +49 -0
  153. package/dist/declarative-validation/assertions/sections-required.js.map +1 -0
  154. package/dist/declarative-validation/assertions/table-columns-required.d.ts +9 -0
  155. package/dist/declarative-validation/assertions/table-columns-required.d.ts.map +1 -0
  156. package/dist/declarative-validation/assertions/table-columns-required.js +31 -0
  157. package/dist/declarative-validation/assertions/table-columns-required.js.map +1 -0
  158. package/dist/declarative-validation/assertions/text-length.d.ts +9 -0
  159. package/dist/declarative-validation/assertions/text-length.d.ts.map +1 -0
  160. package/dist/declarative-validation/assertions/text-length.js +40 -0
  161. package/dist/declarative-validation/assertions/text-length.js.map +1 -0
  162. package/dist/declarative-validation/assertions/text-occurrence-count.d.ts +9 -0
  163. package/dist/declarative-validation/assertions/text-occurrence-count.d.ts.map +1 -0
  164. package/dist/declarative-validation/assertions/text-occurrence-count.js +22 -0
  165. package/dist/declarative-validation/assertions/text-occurrence-count.js.map +1 -0
  166. package/dist/declarative-validation/assertions/text.d.ts +9 -0
  167. package/dist/declarative-validation/assertions/text.d.ts.map +1 -0
  168. package/dist/declarative-validation/assertions/text.js +32 -0
  169. package/dist/declarative-validation/assertions/text.js.map +1 -0
  170. package/dist/declarative-validation/compiler/assertion-builders.d.ts +6 -0
  171. package/dist/declarative-validation/compiler/assertion-builders.d.ts.map +1 -0
  172. package/dist/declarative-validation/compiler/assertion-builders.js +199 -0
  173. package/dist/declarative-validation/compiler/assertion-builders.js.map +1 -0
  174. package/dist/declarative-validation/compiler/assertion-shapes.d.ts +18 -0
  175. package/dist/declarative-validation/compiler/assertion-shapes.d.ts.map +1 -0
  176. package/dist/declarative-validation/compiler/assertion-shapes.js +129 -0
  177. package/dist/declarative-validation/compiler/assertion-shapes.js.map +1 -0
  178. package/dist/declarative-validation/compiler/assertions.d.ts +5 -0
  179. package/dist/declarative-validation/compiler/assertions.d.ts.map +1 -0
  180. package/dist/declarative-validation/compiler/assertions.js +25 -0
  181. package/dist/declarative-validation/compiler/assertions.js.map +1 -0
  182. package/dist/declarative-validation/compiler/compatibility.d.ts +4 -0
  183. package/dist/declarative-validation/compiler/compatibility.d.ts.map +1 -0
  184. package/dist/declarative-validation/compiler/compatibility.js +28 -0
  185. package/dist/declarative-validation/compiler/compatibility.js.map +1 -0
  186. package/dist/declarative-validation/compiler/diagnostics.d.ts +3 -0
  187. package/dist/declarative-validation/compiler/diagnostics.d.ts.map +1 -0
  188. package/dist/declarative-validation/compiler/diagnostics.js +9 -0
  189. package/dist/declarative-validation/compiler/diagnostics.js.map +1 -0
  190. package/dist/declarative-validation/compiler/index.d.ts +5 -0
  191. package/dist/declarative-validation/compiler/index.d.ts.map +1 -0
  192. package/dist/declarative-validation/compiler/index.js +164 -0
  193. package/dist/declarative-validation/compiler/index.js.map +1 -0
  194. package/dist/declarative-validation/compiler/plan.d.ts +58 -0
  195. package/dist/declarative-validation/compiler/plan.d.ts.map +1 -0
  196. package/dist/declarative-validation/compiler/plan.js +2 -0
  197. package/dist/declarative-validation/compiler/plan.js.map +1 -0
  198. package/dist/declarative-validation/diagnostics/index.d.ts +7 -0
  199. package/dist/declarative-validation/diagnostics/index.d.ts.map +1 -0
  200. package/dist/declarative-validation/diagnostics/index.js +2 -0
  201. package/dist/declarative-validation/diagnostics/index.js.map +1 -0
  202. package/dist/declarative-validation/diagnostics/profile-config-diagnostics.d.ts +11 -0
  203. package/dist/declarative-validation/diagnostics/profile-config-diagnostics.d.ts.map +1 -0
  204. package/dist/declarative-validation/diagnostics/profile-config-diagnostics.js +45 -0
  205. package/dist/declarative-validation/diagnostics/profile-config-diagnostics.js.map +1 -0
  206. package/dist/declarative-validation/evidence/index.d.ts +14 -0
  207. package/dist/declarative-validation/evidence/index.d.ts.map +1 -0
  208. package/dist/declarative-validation/evidence/index.js +38 -0
  209. package/dist/declarative-validation/evidence/index.js.map +1 -0
  210. package/dist/declarative-validation/profile/assertion-schema.d.ts +4 -0
  211. package/dist/declarative-validation/profile/assertion-schema.d.ts.map +1 -0
  212. package/dist/declarative-validation/profile/assertion-schema.js +285 -0
  213. package/dist/declarative-validation/profile/assertion-schema.js.map +1 -0
  214. package/dist/declarative-validation/profile/data-closure.d.ts +6 -0
  215. package/dist/declarative-validation/profile/data-closure.d.ts.map +1 -0
  216. package/dist/declarative-validation/profile/data-closure.js +167 -0
  217. package/dist/declarative-validation/profile/data-closure.js.map +1 -0
  218. package/dist/declarative-validation/profile/direct-profile-diagnostics.d.ts +5 -0
  219. package/dist/declarative-validation/profile/direct-profile-diagnostics.d.ts.map +1 -0
  220. package/dist/declarative-validation/profile/direct-profile-diagnostics.js +73 -0
  221. package/dist/declarative-validation/profile/direct-profile-diagnostics.js.map +1 -0
  222. package/dist/declarative-validation/profile/index.d.ts +113 -0
  223. package/dist/declarative-validation/profile/index.d.ts.map +1 -0
  224. package/dist/declarative-validation/profile/index.js +2 -0
  225. package/dist/declarative-validation/profile/index.js.map +1 -0
  226. package/dist/declarative-validation/profile/materialization.d.ts +9 -0
  227. package/dist/declarative-validation/profile/materialization.d.ts.map +1 -0
  228. package/dist/declarative-validation/profile/materialization.js +109 -0
  229. package/dist/declarative-validation/profile/materialization.js.map +1 -0
  230. package/dist/declarative-validation/profile/parse.d.ts +3 -0
  231. package/dist/declarative-validation/profile/parse.d.ts.map +1 -0
  232. package/dist/declarative-validation/profile/parse.js +89 -0
  233. package/dist/declarative-validation/profile/parse.js.map +1 -0
  234. package/dist/declarative-validation/profile/schema-values.d.ts +14 -0
  235. package/dist/declarative-validation/profile/schema-values.d.ts.map +1 -0
  236. package/dist/declarative-validation/profile/schema-values.js +81 -0
  237. package/dist/declarative-validation/profile/schema-values.js.map +1 -0
  238. package/dist/declarative-validation/profile/schema.d.ts +9 -0
  239. package/dist/declarative-validation/profile/schema.d.ts.map +1 -0
  240. package/dist/declarative-validation/profile/schema.js +98 -0
  241. package/dist/declarative-validation/profile/schema.js.map +1 -0
  242. package/dist/declarative-validation/profile/selector-schema.d.ts +4 -0
  243. package/dist/declarative-validation/profile/selector-schema.d.ts.map +1 -0
  244. package/dist/declarative-validation/profile/selector-schema.js +145 -0
  245. package/dist/declarative-validation/profile/selector-schema.js.map +1 -0
  246. package/dist/declarative-validation/results/index.d.ts +26 -0
  247. package/dist/declarative-validation/results/index.d.ts.map +1 -0
  248. package/dist/declarative-validation/results/index.js +2 -0
  249. package/dist/declarative-validation/results/index.js.map +1 -0
  250. package/dist/declarative-validation/selectors/index.d.ts +57 -0
  251. package/dist/declarative-validation/selectors/index.d.ts.map +1 -0
  252. package/dist/declarative-validation/selectors/index.js +149 -0
  253. package/dist/declarative-validation/selectors/index.js.map +1 -0
  254. package/dist/declarative-validation/selectors/source.d.ts +8 -0
  255. package/dist/declarative-validation/selectors/source.d.ts.map +1 -0
  256. package/dist/declarative-validation/selectors/source.js +57 -0
  257. package/dist/declarative-validation/selectors/source.js.map +1 -0
  258. package/dist/declarative-validation/selectors/table-targets.d.ts +13 -0
  259. package/dist/declarative-validation/selectors/table-targets.d.ts.map +1 -0
  260. package/dist/declarative-validation/selectors/table-targets.js +106 -0
  261. package/dist/declarative-validation/selectors/table-targets.js.map +1 -0
  262. package/dist/declarative-validation/selectors/table-text.d.ts +4 -0
  263. package/dist/declarative-validation/selectors/table-text.d.ts.map +1 -0
  264. package/dist/declarative-validation/selectors/table-text.js +16 -0
  265. package/dist/declarative-validation/selectors/table-text.js.map +1 -0
  266. package/dist/internal/document-node-walk.d.ts +10 -0
  267. package/dist/internal/document-node-walk.d.ts.map +1 -0
  268. package/dist/internal/document-node-walk.js +36 -0
  269. package/dist/internal/document-node-walk.js.map +1 -0
  270. package/dist/internal/stable-json.d.ts +3 -0
  271. package/dist/internal/stable-json.d.ts.map +1 -0
  272. package/dist/internal/stable-json.js +17 -0
  273. package/dist/internal/stable-json.js.map +1 -0
  274. package/dist/ir/document-derived-views.d.ts +4 -0
  275. package/dist/ir/document-derived-views.d.ts.map +1 -0
  276. package/dist/ir/document-derived-views.js +27 -0
  277. package/dist/ir/document-derived-views.js.map +1 -0
  278. package/dist/ir/document-link-reference-views.d.ts +3 -0
  279. package/dist/ir/document-link-reference-views.d.ts.map +1 -0
  280. package/dist/ir/document-link-reference-views.js +150 -0
  281. package/dist/ir/document-link-reference-views.js.map +1 -0
  282. package/dist/ir/document-link-views.d.ts +3 -0
  283. package/dist/ir/document-link-views.d.ts.map +1 -0
  284. package/dist/ir/document-link-views.js +23 -0
  285. package/dist/ir/document-link-views.js.map +1 -0
  286. package/dist/ir/document-list-views.d.ts +3 -0
  287. package/dist/ir/document-list-views.d.ts.map +1 -0
  288. package/dist/ir/document-list-views.js +39 -0
  289. package/dist/ir/document-list-views.js.map +1 -0
  290. package/dist/ir/document-sections.d.ts +3 -0
  291. package/dist/ir/document-sections.d.ts.map +1 -0
  292. package/dist/ir/document-sections.js +55 -0
  293. package/dist/ir/document-sections.js.map +1 -0
  294. package/dist/ir/document-table-views.d.ts +3 -0
  295. package/dist/ir/document-table-views.d.ts.map +1 -0
  296. package/dist/ir/document-table-views.js +31 -0
  297. package/dist/ir/document-table-views.js.map +1 -0
  298. package/dist/ir/document-targets.d.ts +10 -0
  299. package/dist/ir/document-targets.d.ts.map +1 -0
  300. package/dist/ir/document-targets.js +44 -0
  301. package/dist/ir/document-targets.js.map +1 -0
  302. package/dist/ir/document-text-spans.d.ts +3 -0
  303. package/dist/ir/document-text-spans.d.ts.map +1 -0
  304. package/dist/ir/document-text-spans.js +18 -0
  305. package/dist/ir/document-text-spans.js.map +1 -0
  306. package/dist/ir/document.d.ts +2 -3
  307. package/dist/ir/document.d.ts.map +1 -1
  308. package/dist/ir/document.js +12 -8
  309. package/dist/ir/document.js.map +1 -1
  310. package/dist/ir/index.d.ts +1 -0
  311. package/dist/ir/index.d.ts.map +1 -1
  312. package/dist/ir/normalization-input.d.ts +12 -0
  313. package/dist/ir/normalization-input.d.ts.map +1 -0
  314. package/dist/ir/normalization-input.js +2 -0
  315. package/dist/ir/normalization-input.js.map +1 -0
  316. package/dist/ir/source-ranges.d.ts +8 -0
  317. package/dist/ir/source-ranges.d.ts.map +1 -0
  318. package/dist/ir/source-ranges.js +21 -0
  319. package/dist/ir/source-ranges.js.map +1 -0
  320. package/dist/rules/code-fence-languages.d.ts.map +1 -1
  321. package/dist/rules/code-fence-languages.js +4 -6
  322. package/dist/rules/code-fence-languages.js.map +1 -1
  323. package/dist/rules/document-query.d.ts +0 -2
  324. package/dist/rules/document-query.d.ts.map +1 -1
  325. package/dist/rules/document-query.js +1 -17
  326. package/dist/rules/document-query.js.map +1 -1
  327. package/dist/rules/index.d.ts +2 -6
  328. package/dist/rules/index.d.ts.map +1 -1
  329. package/dist/rules/index.js +3 -37
  330. package/dist/rules/index.js.map +1 -1
  331. package/dist/rules/links-allowed-schemes.d.ts.map +1 -1
  332. package/dist/rules/links-allowed-schemes.js +3 -2
  333. package/dist/rules/links-allowed-schemes.js.map +1 -1
  334. package/dist/rules/registry.d.ts +12 -0
  335. package/dist/rules/registry.d.ts.map +1 -0
  336. package/dist/rules/registry.js +61 -0
  337. package/dist/rules/registry.js.map +1 -0
  338. package/docs/contracts/api.md +661 -0
  339. package/docs/contracts/declarative-validation.md +559 -0
  340. package/docs/contracts/frontmatter.md +122 -0
  341. package/fixtures/declarative-validation/examples/operational-spec/fail.md +32 -0
  342. package/fixtures/declarative-validation/examples/operational-spec/pass.md +34 -0
  343. package/fixtures/declarative-validation/examples/operational-spec/profile.yaml +131 -0
  344. package/fixtures/declarative-validation/examples/release-checklist/fail.md +22 -0
  345. package/fixtures/declarative-validation/examples/release-checklist/pass.md +22 -0
  346. package/fixtures/declarative-validation/examples/release-checklist/profile.yaml +96 -0
  347. package/fixtures/declarative-validation/examples/requirements-traceability/fail.md +27 -0
  348. package/fixtures/declarative-validation/examples/requirements-traceability/pass.md +27 -0
  349. package/fixtures/declarative-validation/examples/requirements-traceability/profile.yaml +119 -0
  350. package/package.json +37 -4
@@ -0,0 +1,113 @@
1
+ import type { EngineDocumentVersion, EngineNode } from "../../api/document.js";
2
+ import type { MarkdownDiagnostic } from "../../api/diagnostics.js";
3
+ export { parseValidationProfileInput } from "./parse.js";
4
+ export type DeclarativeValidationSeverity = "error" | "warning" | "info";
5
+ export type DeclarativeOutputFormat = "json";
6
+ export type DeclarativeSectionOrder = "none" | "strict";
7
+ export type JsonSafeValue = null | boolean | number | string | readonly JsonSafeValue[] | {
8
+ readonly [key: string]: JsonSafeValue;
9
+ };
10
+ export interface ValidationProfile {
11
+ syntaxVersion: "markdown-engine.validation@v1";
12
+ documentVersion?: EngineDocumentVersion;
13
+ rules: readonly DeclarativeValidationRule[];
14
+ }
15
+ export interface DeclarativeValidationRule {
16
+ id: string;
17
+ severity?: DeclarativeValidationSeverity;
18
+ select: DeclarativeSelector;
19
+ assert: DeclarativeAssertion;
20
+ }
21
+ export type DeclarativeSelector = {
22
+ target: "document";
23
+ } | {
24
+ target: "section";
25
+ title?: string;
26
+ depth?: number;
27
+ } | {
28
+ target: "heading";
29
+ text?: string;
30
+ depth?: number;
31
+ } | {
32
+ target: "table";
33
+ section?: string;
34
+ header?: readonly string[];
35
+ } | {
36
+ target: "tableRow";
37
+ section?: string;
38
+ tableHeader?: readonly string[];
39
+ where?: DeclarativeTableCellPredicate;
40
+ } | {
41
+ target: "tableCell";
42
+ section?: string;
43
+ tableHeader?: readonly string[];
44
+ column: string;
45
+ rowWhere?: DeclarativeTableCellPredicate;
46
+ } | {
47
+ target: "textSpan";
48
+ section?: string;
49
+ nodeType?: EngineNode["type"];
50
+ textIncludes?: string;
51
+ } | {
52
+ target: "link";
53
+ section?: string;
54
+ text?: string;
55
+ url?: string;
56
+ } | {
57
+ target: "list";
58
+ section?: string;
59
+ ordered?: boolean;
60
+ depth?: number;
61
+ };
62
+ export interface DeclarativeTableCellPredicate {
63
+ column: string;
64
+ equals?: string;
65
+ includes?: string;
66
+ }
67
+ export interface DeclarativeAssertion {
68
+ exists?: true;
69
+ sectionsRequired?: {
70
+ headings: readonly string[];
71
+ order?: DeclarativeSectionOrder;
72
+ };
73
+ tableColumnsRequired?: {
74
+ columns: readonly string[];
75
+ };
76
+ ids?: {
77
+ prefix?: string;
78
+ unique?: boolean;
79
+ caseSensitive?: boolean;
80
+ };
81
+ references?: {
82
+ idsFrom: DeclarativeIdSource;
83
+ mustAppearIn: readonly string[];
84
+ };
85
+ text?: {
86
+ contains?: string;
87
+ excludes?: readonly string[];
88
+ };
89
+ textOccurrenceCount?: {
90
+ text: string;
91
+ count: number;
92
+ };
93
+ textLength?: {
94
+ min?: number;
95
+ max?: number;
96
+ };
97
+ frontmatterRequired?: {
98
+ fields: readonly string[];
99
+ };
100
+ }
101
+ export interface DeclarativeIdSource {
102
+ section?: string;
103
+ column?: string;
104
+ prefix?: string;
105
+ }
106
+ export interface DeclarativeProfileParseOptions {
107
+ path?: string;
108
+ }
109
+ export interface DeclarativeProfileParseResult {
110
+ profile?: ValidationProfile;
111
+ diagnostics: readonly MarkdownDiagnostic[];
112
+ }
113
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/declarative-validation/profile/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { parseValidationProfileInput } from "./parse.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/declarative-validation/profile/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { EngineDocumentVersion } from "../../api/document.js";
2
+ import type { MarkdownDiagnostic } from "../../api/diagnostics.js";
3
+ import type { ValidationProfile } from "./index.js";
4
+ export interface MaterializedValidationProfile {
5
+ profile: ValidationProfile;
6
+ diagnostics: readonly MarkdownDiagnostic[];
7
+ }
8
+ export declare function materializeValidationProfile(profile: ValidationProfile, fallbackDocumentVersion: EngineDocumentVersion): MaterializedValidationProfile;
9
+ //# sourceMappingURL=materialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materialization.d.ts","sourceRoot":"","sources":["../../../src/declarative-validation/profile/materialization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAWnE,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,iBAAiB,CAAC;IAC3B,WAAW,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAC5C;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,iBAAiB,EAC1B,uBAAuB,EAAE,qBAAqB,GAC7C,6BAA6B,CAgD/B"}
@@ -0,0 +1,109 @@
1
+ import { isPlainRecord } from "../../internal/plain-record.js";
2
+ import { PROFILE_SYNTAX_VERSION, unsupportedSyntaxVersion, } from "../diagnostics/profile-config-diagnostics.js";
3
+ import { closeProfileDataTree, DATA_CLOSURE_FAILED, } from "./data-closure.js";
4
+ import { pushDirectProfileUnsupportedKeyDiagnostics } from "./direct-profile-diagnostics.js";
5
+ export function materializeValidationProfile(profile, fallbackDocumentVersion) {
6
+ const diagnostics = [];
7
+ if (pushDirectProfileUnsupportedKeyDiagnostics(profile, diagnostics)) {
8
+ return {
9
+ profile: fallbackProfile(fallbackDocumentVersion),
10
+ diagnostics,
11
+ };
12
+ }
13
+ const closedProfile = closeProfileDataTree(profile, "Profile", diagnostics);
14
+ if (closedProfile === DATA_CLOSURE_FAILED || !isPlainRecord(closedProfile)) {
15
+ if (diagnostics.length === 0) {
16
+ diagnostics.push({
17
+ code: "profile.config.invalidShape",
18
+ message: "Profile must be an object.",
19
+ severity: "error",
20
+ });
21
+ }
22
+ return {
23
+ profile: fallbackProfile(fallbackDocumentVersion),
24
+ diagnostics,
25
+ };
26
+ }
27
+ const syntaxVersion = closedProfile.syntaxVersion === PROFILE_SYNTAX_VERSION
28
+ ? PROFILE_SYNTAX_VERSION
29
+ : undefined;
30
+ if (syntaxVersion === undefined) {
31
+ diagnostics.push(unsupportedSyntaxVersion());
32
+ }
33
+ const documentVersion = closedProfile.documentVersion === undefined
34
+ ? undefined
35
+ : documentVersionFromValue(closedProfile.documentVersion, diagnostics);
36
+ const rules = rulesFromValue(closedProfile.rules, diagnostics);
37
+ pushDuplicateRuleIdDiagnostics(rules, diagnostics);
38
+ return {
39
+ profile: {
40
+ syntaxVersion: PROFILE_SYNTAX_VERSION,
41
+ ...(documentVersion !== undefined ? { documentVersion } : {}),
42
+ rules: rules ?? [],
43
+ },
44
+ diagnostics,
45
+ };
46
+ }
47
+ function fallbackProfile(documentVersion) {
48
+ return {
49
+ syntaxVersion: PROFILE_SYNTAX_VERSION,
50
+ documentVersion,
51
+ rules: [],
52
+ };
53
+ }
54
+ function documentVersionFromValue(value, diagnostics) {
55
+ if (value === "0.0.0" || value === "1.0.0") {
56
+ return value;
57
+ }
58
+ diagnostics.push({
59
+ code: "profile.config.invalidShape",
60
+ message: 'Profile documentVersion must be "0.0.0" or "1.0.0" when provided.',
61
+ severity: "error",
62
+ });
63
+ return undefined;
64
+ }
65
+ function rulesFromValue(value, diagnostics) {
66
+ if (!Array.isArray(value)) {
67
+ diagnostics.push({
68
+ code: "profile.config.invalidShape",
69
+ message: "Profile rules must be an array.",
70
+ severity: "error",
71
+ });
72
+ return undefined;
73
+ }
74
+ const rules = [];
75
+ for (let index = 0; index < value.length; index += 1) {
76
+ const rule = value[index];
77
+ if (!isPlainRecord(rule)) {
78
+ diagnostics.push({
79
+ code: "profile.config.invalidShape",
80
+ message: `Profile rule at index ${index} must be an object.`,
81
+ severity: "error",
82
+ });
83
+ continue;
84
+ }
85
+ rules.push(rule);
86
+ }
87
+ return rules;
88
+ }
89
+ function pushDuplicateRuleIdDiagnostics(rules, diagnostics) {
90
+ if (rules === undefined) {
91
+ return;
92
+ }
93
+ const seenRuleIds = new Set();
94
+ for (let index = 0; index < rules.length; index += 1) {
95
+ const ruleId = rules[index]?.id;
96
+ if (typeof ruleId !== "string") {
97
+ continue;
98
+ }
99
+ if (seenRuleIds.has(ruleId)) {
100
+ diagnostics.push({
101
+ code: "profile.config.invalidShape",
102
+ message: `Profile rule at index ${index} duplicates rule id "${ruleId}".`,
103
+ severity: "error",
104
+ });
105
+ }
106
+ seenRuleIds.add(ruleId);
107
+ }
108
+ }
109
+ //# sourceMappingURL=materialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materialization.js","sourceRoot":"","sources":["../../../src/declarative-validation/profile/materialization.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,8CAA8C,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,0CAA0C,EAAE,MAAM,iCAAiC,CAAC;AAW7F,MAAM,UAAU,4BAA4B,CAC1C,OAA0B,EAC1B,uBAA8C;IAE9C,MAAM,WAAW,GAAyB,EAAE,CAAC;IAC7C,IAAI,0CAA0C,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;QACrE,OAAO;YACL,OAAO,EAAE,eAAe,CAAC,uBAAuB,CAAC;YACjD,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAC5E,IAAI,aAAa,KAAK,mBAAmB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,6BAA6B;gBACnC,OAAO,EAAE,4BAA4B;gBACrC,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,OAAO,EAAE,eAAe,CAAC,uBAAuB,CAAC;YACjD,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GACjB,aAAa,CAAC,aAAa,KAAK,sBAAsB;QACpD,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,SAAS,CAAC;IAChB,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,eAAe,GACnB,aAAa,CAAC,eAAe,KAAK,SAAS;QACzC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,wBAAwB,CAAC,aAAa,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,cAAc,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC/D,8BAA8B,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAEnD,OAAO;QACL,OAAO,EAAE;YACP,aAAa,EAAE,sBAAsB;YACrC,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,KAAK,EAAE,KAAK,IAAI,EAAE;SACnB;QACD,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,eAAsC;IAEtC,OAAO;QACL,aAAa,EAAE,sBAAsB;QACrC,eAAe;QACf,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAc,EACd,WAAiC;IAEjC,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,CAAC,IAAI,CAAC;QACf,IAAI,EAAE,6BAA6B;QACnC,OAAO,EAAE,mEAAmE;QAC5E,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CACrB,KAAc,EACd,WAAiC;IAEjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,6BAA6B;YACnC,OAAO,EAAE,iCAAiC;YAC1C,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAgC,EAAE,CAAC;IAE9C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,6BAA6B;gBACnC,OAAO,EAAE,yBAAyB,KAAK,qBAAqB;gBAC5D,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YAEH,SAAS;QACX,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAA4C,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,8BAA8B,CACrC,KAA6C,EAC7C,WAAiC;IAEjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAChC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,6BAA6B;gBACnC,OAAO,EAAE,yBAAyB,KAAK,wBAAwB,MAAM,IAAI;gBACzE,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;QAED,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { DeclarativeProfileParseOptions, DeclarativeProfileParseResult, JsonSafeValue } from "./index.js";
2
+ export declare function parseValidationProfileInput(input: string | JsonSafeValue, _options?: DeclarativeProfileParseOptions): DeclarativeProfileParseResult;
3
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/declarative-validation/profile/parse.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,8BAA8B,EAC9B,6BAA6B,EAC7B,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,GAAG,aAAa,EAC7B,QAAQ,GAAE,8BAAmC,GAC5C,6BAA6B,CAa/B"}
@@ -0,0 +1,89 @@
1
+ import { parseDocument } from "yaml";
2
+ import { yamlIssueToDiagnostic } from "../../frontmatter/yaml-diagnostics.js";
3
+ import { toJsonSafeValue } from "../../frontmatter/yaml-json.js";
4
+ import { YAML_MATERIALIZE_OPTIONS, YAML_PARSE_OPTIONS, } from "../../frontmatter/yaml-options.js";
5
+ import { closeProfileDataTree, DATA_CLOSURE_FAILED, } from "./data-closure.js";
6
+ import { validationProfileFromValue } from "./schema.js";
7
+ export function parseValidationProfileInput(input, _options = {}) {
8
+ const materialized = materializeInput(input);
9
+ if (!materialized.parsed) {
10
+ return { diagnostics: materialized.diagnostics };
11
+ }
12
+ const result = validationProfileFromValue(materialized.value);
13
+ const diagnostics = [...materialized.diagnostics, ...result.diagnostics];
14
+ return result.profile === undefined
15
+ ? { diagnostics }
16
+ : { profile: result.profile, diagnostics };
17
+ }
18
+ function materializeInput(input) {
19
+ if (typeof input === "string") {
20
+ return parseYaml(input);
21
+ }
22
+ const diagnostics = [];
23
+ const closedInput = closeProfileDataTree(input, "Profile", diagnostics);
24
+ return closedInput === DATA_CLOSURE_FAILED
25
+ ? { parsed: false, diagnostics }
26
+ : { parsed: true, value: closedInput, diagnostics };
27
+ }
28
+ function parseYaml(raw) {
29
+ const fallbackRange = fullInputRange(raw);
30
+ const document = parseDocument(raw, YAML_PARSE_OPTIONS);
31
+ const diagnostics = yamlDiagnostics(raw, fallbackRange, document.errors, document.warnings);
32
+ if (document.errors.length > 0) {
33
+ return { parsed: false, diagnostics };
34
+ }
35
+ try {
36
+ const jsonSafe = toJsonSafeValue(document.toJS(YAML_MATERIALIZE_OPTIONS), fallbackRange);
37
+ return jsonSafe.valueParsed
38
+ ? { parsed: true, value: jsonSafe.value, diagnostics }
39
+ : {
40
+ parsed: false,
41
+ diagnostics: [
42
+ ...diagnostics,
43
+ profileYamlDiagnostic(profileYamlMessage(jsonSafe.diagnostic.message), jsonSafe.diagnostic.sourceRange ?? fallbackRange),
44
+ ],
45
+ };
46
+ }
47
+ catch (error) {
48
+ return {
49
+ parsed: false,
50
+ diagnostics: [
51
+ ...diagnostics,
52
+ profileYamlDiagnostic(error instanceof Error
53
+ ? profileYamlMessage(error.message)
54
+ : "Validation profile YAML could not be parsed.", fallbackRange),
55
+ ],
56
+ };
57
+ }
58
+ }
59
+ function yamlDiagnostics(raw, fallbackRange, errors, warnings) {
60
+ const contentStart = { line: 1, column: 1, offset: 0 };
61
+ return [
62
+ ...errors.map((error) => yamlIssueToDiagnostic(error, "profile.config.invalidYaml", "error", raw, contentStart, fallbackRange)),
63
+ ...warnings.map((warning) => yamlIssueToDiagnostic(warning, "profile.config.yamlWarning", "warning", raw, contentStart, fallbackRange)),
64
+ ];
65
+ }
66
+ function profileYamlDiagnostic(message, sourceRange) {
67
+ return {
68
+ code: "profile.config.invalidYaml",
69
+ message,
70
+ severity: "error",
71
+ sourceRange,
72
+ };
73
+ }
74
+ function profileYamlMessage(message) {
75
+ return message.replaceAll("YAML frontmatter", "Validation profile YAML");
76
+ }
77
+ function fullInputRange(input) {
78
+ const lines = input.split(/\r\n|\r|\n/);
79
+ const lastLine = lines.at(-1) ?? "";
80
+ return {
81
+ start: { line: 1, column: 1, offset: 0 },
82
+ end: {
83
+ line: lines.length,
84
+ column: lastLine.length + 1,
85
+ offset: input.length,
86
+ },
87
+ };
88
+ }
89
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/declarative-validation/profile/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { MarkdownDiagnostic } from "../../api/diagnostics.js";
2
+ import { invalidProfileShape } from "../diagnostics/profile-config-diagnostics.js";
3
+ export declare const invalidShape: typeof invalidProfileShape;
4
+ export declare function unsupportedKeys(record: Record<string, unknown>, allowedKeys: readonly string[], diagnostics: MarkdownDiagnostic[]): void;
5
+ export type FieldDiagnosticMessage = (field: string) => string;
6
+ export declare function optionalStringField<Key extends string>(record: Record<string, unknown>, key: Key, diagnostics: MarkdownDiagnostic[], message: FieldDiagnosticMessage): Partial<Record<Key, string>>;
7
+ export declare function optionalStringArrayField<Key extends string>(record: Record<string, unknown>, key: Key, diagnostics: MarkdownDiagnostic[], message: FieldDiagnosticMessage): Partial<Record<Key, readonly string[]>>;
8
+ export declare function optionalBooleanField<Key extends string>(record: Record<string, unknown>, key: Key, diagnostics: MarkdownDiagnostic[], message: FieldDiagnosticMessage): Partial<Record<Key, boolean>>;
9
+ export declare function optionalNumberField<Key extends string>(record: Record<string, unknown>, key: Key, diagnostics: MarkdownDiagnostic[], message: FieldDiagnosticMessage): Partial<Record<Key, number>>;
10
+ export declare function requiredNonEmptyStringField(value: unknown, field: string, diagnostics: MarkdownDiagnostic[], message: FieldDiagnosticMessage): string | undefined;
11
+ export declare function isFiniteNumber(value: unknown): value is number;
12
+ export declare function nonEmptyString(value: unknown): string | undefined;
13
+ export declare function stringArray(value: unknown): readonly string[] | undefined;
14
+ //# sourceMappingURL=schema-values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-values.d.ts","sourceRoot":"","sources":["../../../src/declarative-validation/profile/schema-values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EACL,mBAAmB,EAEpB,MAAM,8CAA8C,CAAC;AAEtD,eAAO,MAAM,YAAY,4BAAsB,CAAC;AAEhD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,WAAW,EAAE,kBAAkB,EAAE,GAChC,IAAI,CAEN;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAE/D,wBAAgB,mBAAmB,CAAC,GAAG,SAAS,MAAM,EACpD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,kBAAkB,EAAE,EACjC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAc9B;AAED,wBAAgB,wBAAwB,CAAC,GAAG,SAAS,MAAM,EACzD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,kBAAkB,EAAE,EACjC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAgBzC;AAED,wBAAgB,oBAAoB,CAAC,GAAG,SAAS,MAAM,EACrD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,kBAAkB,EAAE,EACjC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAc/B;AAED,wBAAgB,mBAAmB,CAAC,GAAG,SAAS,MAAM,EACpD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,kBAAkB,EAAE,EACjC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAc9B;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,kBAAkB,EAAE,EACjC,OAAO,EAAE,sBAAsB,GAC9B,MAAM,GAAG,SAAS,CAQpB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEjE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAuBzE"}
@@ -0,0 +1,81 @@
1
+ import { invalidProfileShape, unsupportedProfileKeys, } from "../diagnostics/profile-config-diagnostics.js";
2
+ export const invalidShape = invalidProfileShape;
3
+ export function unsupportedKeys(record, allowedKeys, diagnostics) {
4
+ unsupportedProfileKeys(record, allowedKeys, diagnostics);
5
+ }
6
+ export function optionalStringField(record, key, diagnostics, message) {
7
+ const value = record[key];
8
+ if (value === undefined) {
9
+ return {};
10
+ }
11
+ if (typeof value !== "string" || value.length === 0) {
12
+ diagnostics.push(invalidShape(message(key)));
13
+ return {};
14
+ }
15
+ return { [key]: value };
16
+ }
17
+ export function optionalStringArrayField(record, key, diagnostics, message) {
18
+ const value = record[key];
19
+ if (value === undefined) {
20
+ return {};
21
+ }
22
+ const values = stringArray(value);
23
+ if (values === undefined) {
24
+ diagnostics.push(invalidShape(message(key)));
25
+ return {};
26
+ }
27
+ return { [key]: values };
28
+ }
29
+ export function optionalBooleanField(record, key, diagnostics, message) {
30
+ const value = record[key];
31
+ if (value === undefined) {
32
+ return {};
33
+ }
34
+ if (typeof value !== "boolean") {
35
+ diagnostics.push(invalidShape(message(key)));
36
+ return {};
37
+ }
38
+ return { [key]: value };
39
+ }
40
+ export function optionalNumberField(record, key, diagnostics, message) {
41
+ const value = record[key];
42
+ if (value === undefined) {
43
+ return {};
44
+ }
45
+ if (!isFiniteNumber(value)) {
46
+ diagnostics.push(invalidShape(message(key)));
47
+ return {};
48
+ }
49
+ return { [key]: value };
50
+ }
51
+ export function requiredNonEmptyStringField(value, field, diagnostics, message) {
52
+ const text = nonEmptyString(value);
53
+ if (text === undefined) {
54
+ diagnostics.push(invalidShape(message(field)));
55
+ }
56
+ return text;
57
+ }
58
+ export function isFiniteNumber(value) {
59
+ return typeof value === "number" && Number.isFinite(value);
60
+ }
61
+ export function nonEmptyString(value) {
62
+ return typeof value === "string" && value.length > 0 ? value : undefined;
63
+ }
64
+ export function stringArray(value) {
65
+ if (!Array.isArray(value) || value.length === 0) {
66
+ return undefined;
67
+ }
68
+ const values = [];
69
+ for (let index = 0; index < value.length; index += 1) {
70
+ const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
71
+ if (descriptor === undefined ||
72
+ !("value" in descriptor) ||
73
+ typeof descriptor.value !== "string" ||
74
+ descriptor.value.length === 0) {
75
+ return undefined;
76
+ }
77
+ values.push(descriptor.value);
78
+ }
79
+ return values;
80
+ }
81
+ //# sourceMappingURL=schema-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-values.js","sourceRoot":"","sources":["../../../src/declarative-validation/profile/schema-values.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { MarkdownDiagnostic } from "../../api/diagnostics.js";
2
+ import type { JsonSafeValue, ValidationProfile } from "./index.js";
3
+ interface ProfileSchemaResult {
4
+ profile?: ValidationProfile;
5
+ diagnostics: MarkdownDiagnostic[];
6
+ }
7
+ export declare function validationProfileFromValue(value: JsonSafeValue): ProfileSchemaResult;
8
+ export {};
9
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/declarative-validation/profile/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAMnE,OAAO,KAAK,EAGV,aAAa,EACb,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAgBpB,UAAU,mBAAmB;IAC3B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACnC;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,aAAa,GACnB,mBAAmB,CA2BrB"}
@@ -0,0 +1,98 @@
1
+ import { isPlainRecord } from "../../internal/plain-record.js";
2
+ import { PROFILE_SYNTAX_VERSION, unsupportedSyntaxVersion, } from "../diagnostics/profile-config-diagnostics.js";
3
+ import { assertionFromValue } from "./assertion-schema.js";
4
+ import { selectorFromValue } from "./selector-schema.js";
5
+ import { invalidShape, nonEmptyString, unsupportedKeys, } from "./schema-values.js";
6
+ const DOCUMENT_VERSIONS = new Set(["0.0.0", "1.0.0"]);
7
+ const SEVERITIES = new Set([
8
+ "error",
9
+ "warning",
10
+ "info",
11
+ ]);
12
+ export function validationProfileFromValue(value) {
13
+ if (!isPlainRecord(value)) {
14
+ return { diagnostics: [invalidShape("Profile must be an object.")] };
15
+ }
16
+ const diagnostics = [];
17
+ unsupportedKeys(value, ["syntaxVersion", "documentVersion", "rules"], diagnostics);
18
+ if (value.syntaxVersion !== PROFILE_SYNTAX_VERSION) {
19
+ diagnostics.push(unsupportedSyntaxVersion());
20
+ }
21
+ const documentVersion = documentVersionFromValue(value.documentVersion, diagnostics);
22
+ const rules = rulesFromValue(value.rules, diagnostics);
23
+ if (diagnostics.length > 0 || rules === undefined) {
24
+ return { diagnostics };
25
+ }
26
+ return {
27
+ profile: {
28
+ syntaxVersion: PROFILE_SYNTAX_VERSION,
29
+ ...(documentVersion !== undefined ? { documentVersion } : {}),
30
+ rules,
31
+ },
32
+ diagnostics,
33
+ };
34
+ }
35
+ function documentVersionFromValue(value, diagnostics) {
36
+ if (value === undefined) {
37
+ return undefined;
38
+ }
39
+ if (typeof value === "string" &&
40
+ DOCUMENT_VERSIONS.has(value)) {
41
+ return value;
42
+ }
43
+ diagnostics.push(invalidShape("Profile documentVersion must be \"0.0.0\" or \"1.0.0\" when provided."));
44
+ return undefined;
45
+ }
46
+ function rulesFromValue(value, diagnostics) {
47
+ if (!Array.isArray(value)) {
48
+ diagnostics.push(invalidShape("Profile rules must be an array."));
49
+ return undefined;
50
+ }
51
+ const rules = [];
52
+ const seenRuleIds = new Set();
53
+ for (const [index, item] of value.entries()) {
54
+ const rule = ruleFromValue(item, index, diagnostics);
55
+ if (rule !== undefined) {
56
+ if (seenRuleIds.has(rule.id)) {
57
+ diagnostics.push(invalidShape(`Profile rule at index ${index} duplicates rule id "${rule.id}".`));
58
+ }
59
+ seenRuleIds.add(rule.id);
60
+ rules.push(rule);
61
+ }
62
+ }
63
+ return rules;
64
+ }
65
+ function ruleFromValue(value, index, diagnostics) {
66
+ if (!isPlainRecord(value)) {
67
+ diagnostics.push(invalidShape(`Profile rule at index ${index} must be an object.`));
68
+ return undefined;
69
+ }
70
+ unsupportedKeys(value, ["id", "severity", "select", "assert"], diagnostics);
71
+ const id = nonEmptyString(value.id);
72
+ const severity = severityFromValue(value.severity, diagnostics);
73
+ const select = selectorFromValue(value.select, diagnostics);
74
+ const assert = assertionFromValue(value.assert, diagnostics);
75
+ if (id === undefined) {
76
+ diagnostics.push(invalidShape(`Profile rule at index ${index} must have a non-empty id.`));
77
+ }
78
+ return id === undefined || select === undefined || assert === undefined
79
+ ? undefined
80
+ : {
81
+ id,
82
+ ...(severity !== undefined ? { severity } : {}),
83
+ select,
84
+ assert,
85
+ };
86
+ }
87
+ function severityFromValue(value, diagnostics) {
88
+ if (value === undefined) {
89
+ return undefined;
90
+ }
91
+ if (typeof value === "string" &&
92
+ SEVERITIES.has(value)) {
93
+ return value;
94
+ }
95
+ diagnostics.push(invalidShape("Rule severity must be \"error\", \"warning\", or \"info\" when provided."));
96
+ return undefined;
97
+ }
98
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/declarative-validation/profile/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { MarkdownDiagnostic } from "../../api/diagnostics.js";
2
+ import type { DeclarativeSelector } from "./index.js";
3
+ export declare function selectorFromValue(value: unknown, diagnostics: MarkdownDiagnostic[]): DeclarativeSelector | undefined;
4
+ //# sourceMappingURL=selector-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-schema.d.ts","sourceRoot":"","sources":["../../../src/declarative-validation/profile/selector-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,OAAO,KAAK,EACV,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAWpB,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,kBAAkB,EAAE,GAChC,mBAAmB,GAAG,SAAS,CAkIjC"}