@agentshouse/mdmodel 0.1.0-alpha.9 → 0.1.0-c04c0d681d2d4

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 (404) hide show
  1. package/API.md +368 -0
  2. package/README.md +36 -194
  3. package/dist/blocks.d.ts +11 -0
  4. package/dist/blocks.d.ts.map +1 -0
  5. package/dist/blocks.js +69 -0
  6. package/dist/condition.d.ts +162 -0
  7. package/dist/condition.d.ts.map +1 -0
  8. package/dist/condition.js +616 -0
  9. package/dist/definition.d.ts +70 -27
  10. package/dist/definition.d.ts.map +1 -1
  11. package/dist/definition.js +728 -146
  12. package/dist/divide.d.ts +3 -0
  13. package/dist/divide.d.ts.map +1 -0
  14. package/dist/divide.js +320 -0
  15. package/dist/document.d.ts +12 -2
  16. package/dist/document.d.ts.map +1 -1
  17. package/dist/document.js +400 -177
  18. package/dist/fields.d.ts +6 -0
  19. package/dist/fields.d.ts.map +1 -0
  20. package/dist/fields.js +10 -0
  21. package/dist/index.d.ts +16 -3
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +10 -4
  24. package/dist/links.d.ts +4 -0
  25. package/dist/links.d.ts.map +1 -1
  26. package/dist/links.js +633 -225
  27. package/dist/paths.d.ts +15 -4
  28. package/dist/paths.d.ts.map +1 -1
  29. package/dist/paths.js +149 -36
  30. package/dist/profile.js +1 -3
  31. package/dist/project.d.ts +20 -1
  32. package/dist/project.d.ts.map +1 -1
  33. package/dist/project.js +101 -95
  34. package/dist/references.d.ts +4 -0
  35. package/dist/references.d.ts.map +1 -0
  36. package/dist/references.js +30 -0
  37. package/dist/refuse.d.ts.map +1 -1
  38. package/dist/refuse.js +2 -10
  39. package/dist/schema.d.ts +7 -5
  40. package/dist/schema.d.ts.map +1 -1
  41. package/dist/schema.js +156 -41
  42. package/dist/sections.d.ts +2 -1
  43. package/dist/sections.d.ts.map +1 -1
  44. package/dist/sections.js +44 -66
  45. package/dist/types.d.ts +95 -3
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/types.js +1 -3
  48. package/dist/validate.d.ts +10 -2
  49. package/dist/validate.d.ts.map +1 -1
  50. package/dist/validate.js +283 -159
  51. package/dist/version.d.ts +1 -1
  52. package/dist/version.d.ts.map +1 -1
  53. package/dist/version.js +1 -3
  54. package/dist/yaml.d.ts +9 -3
  55. package/dist/yaml.d.ts.map +1 -1
  56. package/dist/yaml.js +300 -201
  57. package/fixtures/README.md +91 -56
  58. package/fixtures/cases/absent-link-dangles/library/item.md +8 -0
  59. package/fixtures/cases/absent-link-dangles/schema.yaml +6 -0
  60. package/fixtures/cases/absent-optional-field/context.json +1 -0
  61. package/fixtures/cases/absent-optional-field/expected.json +1 -0
  62. package/fixtures/cases/absent-optional-field/library/companies/acme.md +4 -0
  63. package/fixtures/cases/absent-optional-field/library/deals/lead.md +6 -0
  64. package/fixtures/cases/absent-optional-field/schema.yaml +56 -0
  65. package/fixtures/cases/absolute-link/context.json +1 -0
  66. package/fixtures/cases/absolute-link/expected.json +5 -0
  67. package/fixtures/cases/absolute-link/library/item.md +8 -0
  68. package/fixtures/cases/absolute-link/schema.yaml +6 -0
  69. package/fixtures/cases/attachment-reference-any-file/context.json +1 -0
  70. package/fixtures/cases/attachment-reference-any-file/expected.json +1 -0
  71. package/fixtures/cases/attachment-reference-any-file/library/companies/acme.md +4 -0
  72. package/fixtures/cases/attachment-reference-any-file/library/deals/renewal.md +15 -0
  73. package/fixtures/cases/attachment-reference-any-file/library/places/depot.md +4 -0
  74. package/fixtures/cases/attachment-reference-any-file/library/products/seats.md +4 -0
  75. package/fixtures/cases/attachment-reference-any-file/library/products/support.md +4 -0
  76. package/fixtures/cases/attachment-reference-any-file/schema.yaml +32 -0
  77. package/fixtures/cases/attachment-reference-dangles/context.json +1 -0
  78. package/fixtures/cases/attachment-reference-dangles/expected.json +1 -0
  79. package/fixtures/cases/attachment-reference-dangles/library/companies/acme.md +4 -0
  80. package/fixtures/cases/attachment-reference-dangles/library/deals/renewal.md +15 -0
  81. package/fixtures/cases/attachment-reference-dangles/library/places/depot.md +4 -0
  82. package/fixtures/cases/attachment-reference-dangles/library/products/seats.md +4 -0
  83. package/fixtures/cases/attachment-reference-dangles/library/products/support.md +4 -0
  84. package/fixtures/cases/attachment-reference-dangles/schema.yaml +32 -0
  85. package/fixtures/cases/attachment-reference-outside/context.json +1 -0
  86. package/fixtures/cases/attachment-reference-outside/expected.json +6 -0
  87. package/fixtures/cases/attachment-reference-outside/library/companies/acme.md +4 -0
  88. package/fixtures/cases/attachment-reference-outside/library/deals/renewal.md +15 -0
  89. package/fixtures/cases/attachment-reference-outside/library/places/depot.md +4 -0
  90. package/fixtures/cases/attachment-reference-outside/library/products/seats.md +4 -0
  91. package/fixtures/cases/attachment-reference-outside/library/products/support.md +4 -0
  92. package/fixtures/cases/attachment-reference-outside/schema.yaml +32 -0
  93. package/fixtures/cases/binary-any-reference/expected.json +1 -2
  94. package/fixtures/cases/binary-any-reference/schema.yaml +4 -0
  95. package/fixtures/cases/binary-document-collision/expected.json +1 -2
  96. package/fixtures/cases/binary-document-collision/schema.yaml +1 -0
  97. package/fixtures/cases/binary-image-dangles/expected.json +1 -0
  98. package/fixtures/cases/binary-image-dangles/schema.yaml +1 -0
  99. package/fixtures/cases/binary-link-dangles/expected.json +1 -0
  100. package/fixtures/cases/binary-link-dangles/schema.yaml +1 -0
  101. package/fixtures/cases/binary-link-outside-collection/expected.json +1 -2
  102. package/fixtures/cases/binary-link-outside-collection/schema.yaml +1 -0
  103. package/fixtures/cases/binary-prototype-reference/expected.json +1 -2
  104. package/fixtures/cases/binary-prototype-reference/schema.yaml +4 -0
  105. package/fixtures/cases/binary-typed-reference/expected.json +1 -2
  106. package/fixtures/cases/binary-typed-reference/schema.yaml +5 -0
  107. package/fixtures/cases/boolean-field/context.json +1 -0
  108. package/fixtures/cases/boolean-field/expected.json +6 -0
  109. package/fixtures/cases/boolean-field/library/companies/acme.md +4 -0
  110. package/fixtures/cases/boolean-field/library/deals/renewal.md +31 -0
  111. package/fixtures/cases/boolean-field/schema.yaml +56 -0
  112. package/fixtures/cases/bracketed-link-definition/schema.yaml +6 -0
  113. package/fixtures/cases/closed-nested-object/context.json +1 -0
  114. package/fixtures/cases/closed-nested-object/expected.json +6 -0
  115. package/fixtures/cases/closed-nested-object/library/companies/acme.md +4 -0
  116. package/fixtures/cases/closed-nested-object/library/deals/renewal.md +32 -0
  117. package/fixtures/cases/closed-nested-object/schema.yaml +56 -0
  118. package/fixtures/cases/composed-root-reference/context.json +1 -0
  119. package/fixtures/cases/composed-root-reference/expected.json +6 -0
  120. package/fixtures/cases/composed-root-reference/library/a.md +5 -0
  121. package/fixtures/cases/composed-root-reference/schema.yaml +13 -0
  122. package/fixtures/cases/cross-room-link/context.json +1 -0
  123. package/fixtures/cases/cross-room-link/expected.json +1 -0
  124. package/fixtures/cases/cross-room-link/library/clients/acme.md +6 -0
  125. package/fixtures/cases/cross-room-link/schema.yaml +3 -0
  126. package/fixtures/cases/cross-room-reference/context.json +1 -0
  127. package/fixtures/cases/cross-room-reference/expected.json +1 -0
  128. package/fixtures/cases/cross-room-reference/library/clients/acme.md +9 -0
  129. package/fixtures/cases/cross-room-reference/schema.yaml +9 -0
  130. package/fixtures/cases/date-time-format/context.json +1 -0
  131. package/fixtures/cases/date-time-format/expected.json +6 -0
  132. package/fixtures/cases/date-time-format/library/companies/acme.md +4 -0
  133. package/fixtures/cases/date-time-format/library/deals/renewal.md +31 -0
  134. package/fixtures/cases/date-time-format/schema.yaml +56 -0
  135. package/fixtures/cases/declared-binary-links/schema.yaml +1 -0
  136. package/fixtures/cases/default-unfilled/context.json +1 -0
  137. package/fixtures/cases/default-unfilled/expected.json +6 -0
  138. package/fixtures/cases/default-unfilled/library/companies/acme.md +4 -0
  139. package/fixtures/cases/default-unfilled/library/deals/renewal.md +29 -0
  140. package/fixtures/cases/default-unfilled/schema.yaml +56 -0
  141. package/fixtures/cases/defs-pattern/context.json +1 -0
  142. package/fixtures/cases/defs-pattern/expected.json +6 -0
  143. package/fixtures/cases/defs-pattern/library/companies/acme.md +4 -0
  144. package/fixtures/cases/defs-pattern/library/deals/renewal.md +31 -0
  145. package/fixtures/cases/defs-pattern/schema.yaml +56 -0
  146. package/fixtures/cases/dependent-rule/context.json +1 -0
  147. package/fixtures/cases/dependent-rule/expected.json +6 -0
  148. package/fixtures/cases/dependent-rule/library/companies/acme.md +4 -0
  149. package/fixtures/cases/dependent-rule/library/deals/renewal.md +30 -0
  150. package/fixtures/cases/dependent-rule/schema.yaml +56 -0
  151. package/fixtures/cases/duplicate-link-definition/schema.yaml +6 -0
  152. package/fixtures/cases/email-format/context.json +1 -0
  153. package/fixtures/cases/email-format/expected.json +6 -0
  154. package/fixtures/cases/email-format/library/companies/acme.md +4 -0
  155. package/fixtures/cases/email-format/library/deals/renewal.md +31 -0
  156. package/fixtures/cases/email-format/schema.yaml +56 -0
  157. package/fixtures/cases/fenced-link-definition/schema.yaml +6 -0
  158. package/fixtures/cases/field-enum/expected.json +2 -3
  159. package/fixtures/cases/field-enum/schema.yaml +7 -0
  160. package/fixtures/cases/frontmatter-schema/context.json +1 -0
  161. package/fixtures/cases/frontmatter-schema/expected.json +5 -0
  162. package/fixtures/cases/frontmatter-schema/schema.yaml +5 -0
  163. package/fixtures/cases/integer-field/context.json +1 -0
  164. package/fixtures/cases/integer-field/expected.json +6 -0
  165. package/fixtures/cases/integer-field/library/companies/acme.md +4 -0
  166. package/fixtures/cases/integer-field/library/deals/renewal.md +31 -0
  167. package/fixtures/cases/integer-field/schema.yaml +56 -0
  168. package/fixtures/cases/interrupted-link-definition/schema.yaml +1 -0
  169. package/fixtures/cases/json-schema-constructs/context.json +1 -0
  170. package/fixtures/cases/json-schema-constructs/expected.json +1 -0
  171. package/fixtures/cases/json-schema-constructs/library/companies/acme.md +4 -0
  172. package/fixtures/cases/json-schema-constructs/library/deals/renewal.md +31 -0
  173. package/fixtures/cases/json-schema-constructs/schema.yaml +56 -0
  174. package/fixtures/cases/list-of-objects-closed/context.json +1 -0
  175. package/fixtures/cases/list-of-objects-closed/expected.json +6 -0
  176. package/fixtures/cases/list-of-objects-closed/library/companies/acme.md +4 -0
  177. package/fixtures/cases/list-of-objects-closed/library/deals/renewal.md +32 -0
  178. package/fixtures/cases/list-of-objects-closed/schema.yaml +56 -0
  179. package/fixtures/cases/list-of-objects-item/context.json +1 -0
  180. package/fixtures/cases/list-of-objects-item/expected.json +6 -0
  181. package/fixtures/cases/list-of-objects-item/library/companies/acme.md +4 -0
  182. package/fixtures/cases/list-of-objects-item/library/deals/renewal.md +31 -0
  183. package/fixtures/cases/list-of-objects-item/schema.yaml +56 -0
  184. package/fixtures/cases/list-of-objects-reference/context.json +1 -0
  185. package/fixtures/cases/list-of-objects-reference/expected.json +6 -0
  186. package/fixtures/cases/list-of-objects-reference/library/companies/acme.md +4 -0
  187. package/fixtures/cases/list-of-objects-reference/library/deals/renewal.md +14 -0
  188. package/fixtures/cases/list-of-objects-reference/library/places/depot.md +4 -0
  189. package/fixtures/cases/list-of-objects-reference/library/products/seats.md +4 -0
  190. package/fixtures/cases/list-of-objects-reference/library/products/support.md +4 -0
  191. package/fixtures/cases/list-of-objects-reference/schema.yaml +32 -0
  192. package/fixtures/cases/list-size/context.json +1 -0
  193. package/fixtures/cases/list-size/expected.json +6 -0
  194. package/fixtures/cases/list-size/library/companies/acme.md +4 -0
  195. package/fixtures/cases/list-size/library/deals/renewal.md +31 -0
  196. package/fixtures/cases/list-size/schema.yaml +56 -0
  197. package/fixtures/cases/long-fence-link-definition/schema.yaml +1 -0
  198. package/fixtures/cases/malformed-definition/expected.json +2 -4
  199. package/fixtures/cases/malformed-definition/schema.yaml +3 -0
  200. package/fixtures/cases/member-document/context.json +1 -0
  201. package/fixtures/cases/member-document/expected.json +1 -0
  202. package/fixtures/cases/member-document/library/people/ana.md +5 -0
  203. package/fixtures/cases/member-document/schema.yaml +5 -0
  204. package/fixtures/cases/missing-required-field/expected.json +2 -3
  205. package/fixtures/cases/missing-required-field/schema.yaml +7 -0
  206. package/fixtures/cases/missing-section-item-kind/expected.json +2 -4
  207. package/fixtures/cases/missing-section-item-kind/schema.yaml +6 -0
  208. package/fixtures/cases/misspelled-key/context.json +1 -0
  209. package/fixtures/cases/misspelled-key/expected.json +6 -0
  210. package/fixtures/cases/misspelled-key/library/companies/acme.md +4 -0
  211. package/fixtures/cases/misspelled-key/library/deals/renewal.md +32 -0
  212. package/fixtures/cases/misspelled-key/schema.yaml +56 -0
  213. package/fixtures/cases/nested-defs/context.json +1 -0
  214. package/fixtures/cases/nested-defs/expected.json +6 -0
  215. package/fixtures/cases/nested-defs/library/deal.md +6 -0
  216. package/fixtures/cases/nested-defs/schema.yaml +11 -0
  217. package/fixtures/cases/nested-object-reference/context.json +1 -0
  218. package/fixtures/cases/nested-object-reference/expected.json +6 -0
  219. package/fixtures/cases/nested-object-reference/library/companies/acme.md +4 -0
  220. package/fixtures/cases/nested-object-reference/library/deals/renewal.md +14 -0
  221. package/fixtures/cases/nested-object-reference/library/places/depot.md +4 -0
  222. package/fixtures/cases/nested-object-reference/library/products/seats.md +4 -0
  223. package/fixtures/cases/nested-object-reference/library/products/support.md +4 -0
  224. package/fixtures/cases/nested-object-reference/schema.yaml +32 -0
  225. package/fixtures/cases/nested-reference/context.json +1 -0
  226. package/fixtures/cases/nested-reference/expected.json +1 -0
  227. package/fixtures/cases/nested-reference/library/companies/acme.md +4 -0
  228. package/fixtures/cases/nested-reference/library/deals/renewal.md +15 -0
  229. package/fixtures/cases/nested-reference/library/places/depot.md +4 -0
  230. package/fixtures/cases/nested-reference/library/products/seats.md +4 -0
  231. package/fixtures/cases/nested-reference/library/products/support.md +4 -0
  232. package/fixtures/cases/nested-reference/schema.yaml +32 -0
  233. package/fixtures/cases/nested-required-field/context.json +1 -0
  234. package/fixtures/cases/nested-required-field/expected.json +6 -0
  235. package/fixtures/cases/nested-required-field/library/companies/acme.md +4 -0
  236. package/fixtures/cases/nested-required-field/library/deals/renewal.md +30 -0
  237. package/fixtures/cases/nested-required-field/schema.yaml +56 -0
  238. package/fixtures/cases/null-refused/context.json +1 -0
  239. package/fixtures/cases/null-refused/expected.json +6 -0
  240. package/fixtures/cases/null-refused/library/companies/acme.md +4 -0
  241. package/fixtures/cases/null-refused/library/deals/renewal.md +31 -0
  242. package/fixtures/cases/null-refused/schema.yaml +56 -0
  243. package/fixtures/cases/numeric-range/context.json +1 -0
  244. package/fixtures/cases/numeric-range/expected.json +6 -0
  245. package/fixtures/cases/numeric-range/library/companies/acme.md +4 -0
  246. package/fixtures/cases/numeric-range/library/deals/renewal.md +31 -0
  247. package/fixtures/cases/numeric-range/schema.yaml +56 -0
  248. package/fixtures/cases/one-of-variant/context.json +1 -0
  249. package/fixtures/cases/one-of-variant/expected.json +6 -0
  250. package/fixtures/cases/one-of-variant/library/companies/acme.md +4 -0
  251. package/fixtures/cases/one-of-variant/library/deals/renewal.md +31 -0
  252. package/fixtures/cases/one-of-variant/schema.yaml +56 -0
  253. package/fixtures/cases/open-map-value/context.json +1 -0
  254. package/fixtures/cases/open-map-value/expected.json +6 -0
  255. package/fixtures/cases/open-map-value/library/companies/acme.md +4 -0
  256. package/fixtures/cases/open-map-value/library/deals/renewal.md +31 -0
  257. package/fixtures/cases/open-map-value/schema.yaml +56 -0
  258. package/fixtures/cases/other-room-reference/context.json +1 -0
  259. package/fixtures/cases/other-room-reference/expected.json +6 -0
  260. package/fixtures/cases/other-room-reference/library/companies/acme.md +4 -0
  261. package/fixtures/cases/other-room-reference/library/deals/renewal.md +14 -0
  262. package/fixtures/cases/other-room-reference/library/places/depot.md +4 -0
  263. package/fixtures/cases/other-room-reference/library/products/seats.md +4 -0
  264. package/fixtures/cases/other-room-reference/library/products/support.md +4 -0
  265. package/fixtures/cases/other-room-reference/schema.yaml +32 -0
  266. package/fixtures/cases/paragraph-link-definition/schema.yaml +1 -0
  267. package/fixtures/cases/prototype-field/expected.json +2 -3
  268. package/fixtures/cases/prototype-field/schema.yaml +6 -0
  269. package/fixtures/cases/quoted-link-definition/expected.json +1 -2
  270. package/fixtures/cases/quoted-link-definition/library/notes/draft.md +1 -1
  271. package/fixtures/cases/quoted-link-definition/schema.yaml +1 -0
  272. package/fixtures/cases/referenced-missing-file/expected.json +0 -1
  273. package/fixtures/cases/referenced-missing-file/schema.yaml +11 -0
  274. package/fixtures/cases/remote-ref/context.json +1 -0
  275. package/fixtures/cases/remote-ref/expected.json +5 -0
  276. package/fixtures/cases/remote-ref/schema.yaml +3 -0
  277. package/fixtures/cases/second-member-document/context.json +1 -0
  278. package/fixtures/cases/second-member-document/expected.json +5 -0
  279. package/fixtures/cases/second-member-document/schema.yaml +4 -0
  280. package/fixtures/cases/section-item-enum/context.json +1 -0
  281. package/fixtures/cases/section-item-enum/expected.json +6 -0
  282. package/fixtures/cases/section-item-enum/library/task.md +8 -0
  283. package/fixtures/cases/section-item-enum/schema.yaml +3 -0
  284. package/fixtures/cases/section-item-kind/context.json +1 -0
  285. package/fixtures/cases/section-item-kind/expected.json +6 -0
  286. package/fixtures/cases/section-item-kind/library/task.md +8 -0
  287. package/fixtures/cases/section-item-kind/schema.yaml +3 -0
  288. package/fixtures/cases/section-items/context.json +1 -0
  289. package/fixtures/cases/section-items/expected.json +1 -0
  290. package/fixtures/cases/section-items/library/other.md +3 -0
  291. package/fixtures/cases/section-items/library/page.md +42 -0
  292. package/fixtures/cases/section-items/schema.yaml +10 -0
  293. package/fixtures/cases/section-reference-path/context.json +1 -0
  294. package/fixtures/cases/section-reference-path/expected.json +6 -0
  295. package/fixtures/cases/section-reference-path/library/other.md +3 -0
  296. package/fixtures/cases/section-reference-path/library/page.md +7 -0
  297. package/fixtures/cases/section-reference-path/schema.yaml +3 -0
  298. package/fixtures/cases/section-reference-type/context.json +1 -0
  299. package/fixtures/cases/section-reference-type/expected.json +6 -0
  300. package/fixtures/cases/section-reference-type/library/note.md +1 -0
  301. package/fixtures/cases/section-reference-type/library/page.md +7 -0
  302. package/fixtures/cases/section-reference-type/schema.yaml +3 -0
  303. package/fixtures/cases/shortcut-reference-link/context.json +1 -0
  304. package/fixtures/cases/shortcut-reference-link/expected.json +5 -0
  305. package/fixtures/cases/shortcut-reference-link/library/item.md +10 -0
  306. package/fixtures/cases/shortcut-reference-link/schema.yaml +6 -0
  307. package/fixtures/cases/string-length/context.json +1 -0
  308. package/fixtures/cases/string-length/expected.json +6 -0
  309. package/fixtures/cases/string-length/library/companies/acme.md +4 -0
  310. package/fixtures/cases/string-length/library/deals/renewal.md +31 -0
  311. package/fixtures/cases/string-length/schema.yaml +56 -0
  312. package/fixtures/cases/structured-section/expected.json +1 -2
  313. package/fixtures/cases/structured-section/schema.yaml +7 -0
  314. package/fixtures/cases/submission-keys/context.json +1 -0
  315. package/fixtures/cases/submission-keys/expected.json +1 -0
  316. package/fixtures/cases/submission-keys/library/notes/visitor.md +8 -0
  317. package/fixtures/cases/submission-keys/schema.yaml +4 -0
  318. package/fixtures/cases/text-field-kind/context.json +1 -0
  319. package/fixtures/cases/text-field-kind/expected.json +6 -0
  320. package/fixtures/cases/text-field-kind/library/page.md +4 -0
  321. package/fixtures/cases/text-field-kind/schema.yaml +4 -0
  322. package/fixtures/cases/truncated-link-definition/expected.json +1 -2
  323. package/fixtures/cases/truncated-link-definition/library/notes/draft.md +1 -1
  324. package/fixtures/cases/truncated-link-definition/schema.yaml +1 -0
  325. package/fixtures/cases/types-folder-content/context.json +1 -0
  326. package/fixtures/cases/types-folder-content/expected.json +1 -0
  327. package/fixtures/cases/types-folder-content/library/types/task.md +4 -0
  328. package/fixtures/cases/types-folder-content/schema.yaml +4 -0
  329. package/fixtures/cases/unclosed-frontmatter/expected.json +1 -2
  330. package/fixtures/cases/undeclared-field/expected.json +2 -3
  331. package/fixtures/cases/undeclared-field/schema.yaml +6 -0
  332. package/fixtures/cases/unevaluated-items-closed/context.json +1 -0
  333. package/fixtures/cases/unevaluated-items-closed/expected.json +6 -0
  334. package/fixtures/cases/unevaluated-items-closed/library/trip.md +6 -0
  335. package/fixtures/cases/unevaluated-items-closed/schema.yaml +10 -0
  336. package/fixtures/cases/unknown-type/context.json +1 -0
  337. package/fixtures/cases/unknown-type/expected.json +6 -0
  338. package/fixtures/cases/unknown-type/library/item.md +3 -0
  339. package/fixtures/cases/unknown-type/schema.yaml +3 -0
  340. package/fixtures/cases/unlisted-reference-type/context.json +1 -0
  341. package/fixtures/cases/unlisted-reference-type/expected.json +5 -0
  342. package/fixtures/cases/unlisted-reference-type/schema.yaml +3 -0
  343. package/fixtures/cases/unresolved-link/expected.json +1 -2
  344. package/fixtures/cases/unresolved-link/library/item.md +1 -1
  345. package/fixtures/cases/unresolved-link/schema.yaml +6 -0
  346. package/fixtures/cases/valid-typed-document/schema.yaml +16 -0
  347. package/fixtures/cases/wide-item-fence-link/schema.yaml +1 -0
  348. package/fixtures/division.json +409 -0
  349. package/fixtures/projection.json +90 -21
  350. package/package.json +6 -13
  351. package/dist/definition.js.map +0 -1
  352. package/dist/document.js.map +0 -1
  353. package/dist/index.js.map +0 -1
  354. package/dist/links.js.map +0 -1
  355. package/dist/paths.js.map +0 -1
  356. package/dist/profile.js.map +0 -1
  357. package/dist/project.js.map +0 -1
  358. package/dist/refuse.js.map +0 -1
  359. package/dist/schema.js.map +0 -1
  360. package/dist/sections.js.map +0 -1
  361. package/dist/types.js.map +0 -1
  362. package/dist/validate.js.map +0 -1
  363. package/dist/version.js.map +0 -1
  364. package/dist/yaml.js.map +0 -1
  365. package/fixtures/cases/binary-any-reference/library/types/note.md +0 -5
  366. package/fixtures/cases/binary-document-collision/library/types/note.md +0 -3
  367. package/fixtures/cases/binary-link-outside-collection/library/types/note.md +0 -3
  368. package/fixtures/cases/binary-prototype-reference/library/types/note.md +0 -5
  369. package/fixtures/cases/binary-typed-reference/library/types/note.md +0 -5
  370. package/fixtures/cases/binary-typed-reference/library/types/person.md +0 -3
  371. package/fixtures/cases/bracketed-link-definition/library/types/task.md +0 -7
  372. package/fixtures/cases/declared-binary-links/library/types/note.md +0 -3
  373. package/fixtures/cases/duplicate-link-definition/library/types/task.md +0 -7
  374. package/fixtures/cases/fenced-link-definition/library/types/task.md +0 -7
  375. package/fixtures/cases/field-enum/library/types/task.md +0 -8
  376. package/fixtures/cases/interrupted-link-definition/library/types/note.md +0 -3
  377. package/fixtures/cases/long-fence-link-definition/library/types/note.md +0 -3
  378. package/fixtures/cases/malformed-definition/library/types/task.md +0 -5
  379. package/fixtures/cases/missing-binary-image/expected.json +0 -6
  380. package/fixtures/cases/missing-binary-image/library/types/note.md +0 -3
  381. package/fixtures/cases/missing-binary-link/expected.json +0 -6
  382. package/fixtures/cases/missing-binary-link/library/types/note.md +0 -3
  383. package/fixtures/cases/missing-required-field/library/types/task.md +0 -8
  384. package/fixtures/cases/missing-section-item-kind/library/types/task.md +0 -7
  385. package/fixtures/cases/paragraph-link-definition/library/types/note.md +0 -3
  386. package/fixtures/cases/prd-definition/library/types/task.md +0 -16
  387. package/fixtures/cases/prototype-field/library/types/task.md +0 -7
  388. package/fixtures/cases/quoted-link-definition/library/types/note.md +0 -3
  389. package/fixtures/cases/referenced-missing-file/library/types/person.md +0 -5
  390. package/fixtures/cases/referenced-missing-file/library/types/task.md +0 -8
  391. package/fixtures/cases/structured-section/library/types/task.md +0 -8
  392. package/fixtures/cases/truncated-link-definition/library/types/note.md +0 -3
  393. package/fixtures/cases/undeclared-field/library/types/task.md +0 -7
  394. package/fixtures/cases/unresolved-link/library/types/task.md +0 -7
  395. package/fixtures/cases/valid-typed-document/library/types/person.md +0 -5
  396. package/fixtures/cases/valid-typed-document/library/types/task.md +0 -13
  397. package/fixtures/cases/wide-item-fence-link/library/types/note.md +0 -3
  398. package/markdown-syntax-profile.md +0 -9
  399. /package/fixtures/cases/{prd-definition → absent-link-dangles}/context.json +0 -0
  400. /package/fixtures/cases/{prd-definition → absent-link-dangles}/expected.json +0 -0
  401. /package/fixtures/cases/{missing-binary-image → binary-image-dangles}/context.json +0 -0
  402. /package/fixtures/cases/{missing-binary-image → binary-image-dangles}/library/notes/draft.md +0 -0
  403. /package/fixtures/cases/{missing-binary-link → binary-link-dangles}/context.json +0 -0
  404. /package/fixtures/cases/{missing-binary-link → binary-link-dangles}/library/notes/draft.md +0 -0
package/dist/validate.js CHANGED
@@ -1,183 +1,307 @@
1
- import { readDefinition } from './definition.js';
1
+ import { ATTACHMENT, BUILT_IN_TYPE, readSchema } from './definition.js';
2
2
  import { parse } from './document.js';
3
- import { hrefOccurrences } from './links.js';
4
- import { classifyHref, isTypesPath } from './paths.js';
3
+ import { hrefOccurrences, linkInventory } from './links.js';
4
+ import { classifyHref, roomTarget } from './paths.js';
5
+ import { references } from './references.js';
5
6
  import { refusal } from './refuse.js';
6
- import { parseListSection } from './sections.js';
7
- import { validateFields } from './schema.js';
8
- import { bodyAfterFrontmatter } from './yaml.js';
7
+ import { fitsItem, frontmatterRefusal } from './schema.js';
8
+ import { headingSpans, listItems } from './sections.js';
9
+ import { bodyAfterFrontmatter, bodyStartOf } from './yaml.js';
9
10
  function refuse(file, rule, extra) {
10
- return {
11
- verdict: 'refuse',
12
- ...refusal(file, rule, extra)
13
- };
11
+ return { verdict: 'refuse', ...refusal(file, rule, extra) };
14
12
  }
15
- function instanceType(document, file) {
16
- if (isTypesPath(file)) return 'definition';
13
+ function instanceType(document) {
17
14
  const raw = document.fields.type;
18
- if (raw === undefined || raw === null) return 'any';
19
- if (typeof raw !== 'string' || raw === '') return 'invalid';
15
+ if (raw === undefined || raw === null)
16
+ return BUILT_IN_TYPE;
17
+ if (typeof raw !== 'string' || raw === '')
18
+ return null;
20
19
  return raw;
21
20
  }
22
- function referenceTargets(spec, value) {
23
- if (spec.kind === 'reference' && typeof value === 'string') return [
24
- value
25
- ];
26
- if (spec.kind === 'list' && spec.of.kind === 'reference' && Array.isArray(value)) {
27
- return value.filter((item)=>typeof item === 'string');
28
- }
29
- return [];
21
+ function reaches(reference, typeOf, binary) {
22
+ if (reference.target === null)
23
+ return false;
24
+ if (reference.to.includes(ATTACHMENT))
25
+ return true;
26
+ if (binary(reference.target))
27
+ return false;
28
+ const held = typeOf(reference.target);
29
+ return held === undefined || reference.to.includes(held);
30
30
  }
31
- function expectedReferenceType(spec) {
32
- if (spec.kind === 'reference') return spec.to;
33
- if (spec.kind === 'list' && spec.of.kind === 'reference') return spec.of.to;
34
- return null;
31
+ function missing(reference, typeOf, binary) {
32
+ if (reference.to.includes(ATTACHMENT) || reference.target === null)
33
+ return false;
34
+ return typeOf(reference.target) === undefined && !binary(reference.target);
35
35
  }
36
- function declaredTypeOf(content) {
37
- const parsed = parse(content);
38
- if (!parsed.ok) return undefined;
39
- return parsed.document.type ?? 'any';
36
+ export function resolves(reference, typeOf, binary) {
37
+ return reaches(reference, typeOf, binary) && !missing(reference, typeOf, binary);
40
38
  }
41
- export function validate(library, context = {
42
- binaryTargets: []
43
- }) {
44
- const binaryTargets = new Set(context.binaryTargets);
45
- const files = Object.keys(library).sort();
46
- const documents = new Map();
47
- for (const file of files){
48
- if (binaryTargets.has(file)) return refuse(file, 'binary-target-document');
49
- const parsed = parse(library[file], file);
50
- documents.set(file, parsed);
51
- if (!parsed.ok) return {
52
- verdict: 'refuse',
53
- ...parsed.refusal
54
- };
39
+ function usesIn(content) {
40
+ let held;
41
+ return () => {
42
+ if (held !== undefined)
43
+ return held;
44
+ const bodyStart = bodyStartOf(content);
45
+ held = linkInventory(content.slice(bodyStart)).uses.map((use) => ({
46
+ ...use,
47
+ start: bodyStart + use.start,
48
+ end: bodyStart + use.end,
49
+ }));
50
+ return held;
51
+ };
52
+ }
53
+ function itemHrefs(content, items, uses) {
54
+ const hrefs = [];
55
+ for (const item of items) {
56
+ const link = uses().find((use) => use.start === item.start && use.end === item.end && content[item.start] === '[');
57
+ if (link === undefined)
58
+ return null;
59
+ hrefs.push(link.destination.href);
55
60
  }
56
- const definitions = new Map();
57
- for (const file of files){
58
- if (!isTypesPath(file)) continue;
59
- const parsed = documents.get(file);
60
- if (parsed === undefined || !parsed.ok) continue;
61
- const definition = readDefinition(file, parsed.document);
62
- if ('rule' in definition) return {
63
- verdict: 'refuse',
64
- ...definition
65
- };
66
- const existing = definitions.get(definition.name);
67
- if (existing !== undefined) return refuse(file, 'definition-duplicate', {
68
- location: definition.name
69
- });
70
- definitions.set(definition.name, definition);
61
+ return hrefs;
62
+ }
63
+ export function verify(schema) {
64
+ const read = readSchema(schema);
65
+ if ('types' in read)
66
+ return { verdict: 'accept', model: read };
67
+ return {
68
+ verdict: 'refuse',
69
+ rule: read.rule,
70
+ ...(read.location === undefined ? {} : { location: read.location }),
71
+ };
72
+ }
73
+ function structure(file, content, document, definition) {
74
+ if (definition === undefined)
75
+ return { refusal: refuse(file, 'unknown-type', { location: '/type' }) };
76
+ const fieldFailure = frontmatterRefusal(definition, document.fields);
77
+ if (fieldFailure !== undefined) {
78
+ return { refusal: refuse(file, fieldFailure.rule, { location: fieldFailure.location }) };
71
79
  }
72
- for (const file of files){
73
- const parsed = documents.get(file);
74
- if (parsed === undefined || !parsed.ok) continue;
75
- const kind = instanceType(parsed.document, file);
76
- if (kind === 'any') continue;
77
- if (kind === 'invalid' || kind === 'definition') {
78
- if (kind === 'definition' && isTypesPath(file)) continue;
79
- return refuse(file, 'unknown-type', {
80
- location: 'type'
80
+ const spans = headingSpans(content, bodyStartOf(content));
81
+ const uses = usesIn(content);
82
+ const sections = [];
83
+ for (const [name, spec] of Object.entries(definition.sections)) {
84
+ const occurrences = spans.filter((one) => one.name === name);
85
+ if (occurrences.length === 0 && spec.required)
86
+ return { refusal: refuse(file, 'required-section', { location: name }) };
87
+ if (spec.kind !== 'list')
88
+ continue;
89
+ for (const span of occurrences) {
90
+ const items = listItems(content, span.bodyStart, span.bodyEnd);
91
+ if (items === null ||
92
+ items.some((item) => !fitsItem(definition, name, content.slice(item.start, item.end))))
93
+ return { refusal: refuse(file, 'structured-section', { location: name }) };
94
+ if (spec.items.reference === undefined)
95
+ continue;
96
+ const hrefs = itemHrefs(content, items, uses);
97
+ if (hrefs === null)
98
+ return { refusal: refuse(file, 'structured-section', { location: name }) };
99
+ sections.push({
100
+ section: name,
101
+ to: spec.items.reference,
102
+ crossRoom: spec.items.crossRoom === true,
103
+ hrefs,
81
104
  });
82
105
  }
83
- const definition = definitions.get(kind);
84
- if (definition === undefined) return refuse(file, 'unknown-type', {
85
- location: 'type'
86
- });
87
- const fieldFailure = validateFields(definition.fields, parsed.document.fields);
88
- if (fieldFailure !== undefined) {
89
- return refuse(file, fieldFailure.rule, {
90
- location: fieldFailure.field
106
+ }
107
+ return { sections };
108
+ }
109
+ function linked(file, content) {
110
+ return hrefOccurrences(bodyAfterFrontmatter(content)).every((occurrence) => classifyHref(file, occurrence.href).kind !== 'invalid');
111
+ }
112
+ function reached(file, href, to) {
113
+ const resolved = classifyHref(file, href);
114
+ return { target: resolved.kind === 'path' ? resolved.path : null, to };
115
+ }
116
+ function crossing(file, href, crossRoom) {
117
+ return crossRoom === true && classifyHref(file, href).kind === 'room';
118
+ }
119
+ function definitionOf(document, model) {
120
+ const kind = instanceType(document);
121
+ return kind === null || !Object.hasOwn(model.types, kind) ? undefined : model.types[kind];
122
+ }
123
+ export function checkDocument(file, content, model, context = {}) {
124
+ const anyRoom = context.anyRoom === true;
125
+ const parsed = parse(content, file);
126
+ if (!parsed.ok)
127
+ return { ok: false };
128
+ const document = parsed.document;
129
+ const type = document.type ?? BUILT_IN_TYPE;
130
+ if (instanceType(document) === BUILT_IN_TYPE)
131
+ return { ok: true, type, typed: false, references: [] };
132
+ const definition = definitionOf(document, model);
133
+ const read = structure(file, content, document, definition);
134
+ if ('refusal' in read || definition === undefined || !linked(file, content))
135
+ return { ok: false };
136
+ return {
137
+ ok: true,
138
+ type,
139
+ typed: true,
140
+ references: [
141
+ ...references(document, definition).flatMap(({ value, to, crossRoom }) => crossing(file, value, anyRoom || crossRoom) ? [] : [reached(file, value, to)]),
142
+ ...read.sections.flatMap(({ to, crossRoom, hrefs }) => hrefs.flatMap((href) => crossing(file, href, anyRoom || crossRoom) ? [] : [reached(file, href, to)])),
143
+ ],
144
+ };
145
+ }
146
+ export function sectionReferences(file, content, definition) {
147
+ const referring = (name) => {
148
+ const spec = Object.hasOwn(definition.sections, name) ? definition.sections[name] : undefined;
149
+ return spec?.kind === 'list' && spec.items.reference !== undefined ? spec.items : undefined;
150
+ };
151
+ if (!Object.keys(definition.sections).some((name) => referring(name) !== undefined))
152
+ return [];
153
+ const uses = usesIn(content);
154
+ const found = [];
155
+ for (const span of headingSpans(content, bodyStartOf(content))) {
156
+ const items = referring(span.name);
157
+ if (items === undefined)
158
+ continue;
159
+ const listed = listItems(content, span.bodyStart, span.bodyEnd);
160
+ const hrefs = listed === null ? null : itemHrefs(content, listed, uses);
161
+ for (const href of hrefs ?? [])
162
+ if (!crossing(file, href, items.crossRoom))
163
+ found.push(reached(file, href, items.reference));
164
+ }
165
+ return found;
166
+ }
167
+ export function bodyRoomLinks(body) {
168
+ const found = [];
169
+ for (const href of new Set(hrefOccurrences(body).map((occurrence) => occurrence.href))) {
170
+ const room = roomTarget(href);
171
+ if (room !== null)
172
+ found.push({ kind: 'link', href, ...room });
173
+ }
174
+ return found;
175
+ }
176
+ export function roomReferences(file, content, definition) {
177
+ const found = bodyRoomLinks(bodyAfterFrontmatter(content));
178
+ if (definition === undefined)
179
+ return found;
180
+ const parsed = parse(content, file);
181
+ if (!parsed.ok)
182
+ return found;
183
+ for (const { pointer, value, to, crossRoom } of references(parsed.document, definition)) {
184
+ const room = roomTarget(value);
185
+ if (room !== null)
186
+ found.push({
187
+ kind: 'field',
188
+ pointer,
189
+ value,
190
+ to,
191
+ ...room,
192
+ ...(crossRoom ? { crossRoom } : {}),
91
193
  });
92
- }
93
- const declaredFields = new Set(Object.keys(definition.fields));
94
- const undeclared = Object.keys(parsed.document.fields).find((name)=>name !== 'type' && !declaredFields.has(name));
95
- if (undeclared !== undefined) return refuse(file, 'undeclared-field', {
96
- location: undeclared
97
- });
98
- for (const [name, spec] of Object.entries(definition.sections)){
99
- const body = parsed.document.sections[name];
100
- if (body === undefined) {
101
- if (spec.required) return refuse(file, 'required-section', {
102
- location: name
103
- });
104
- continue;
105
- }
106
- if (spec.kind === 'list' && !parseListSection(body)) {
107
- return refuse(file, 'structured-section', {
108
- location: name
109
- });
110
- }
111
- }
112
194
  }
113
- for (const file of files){
114
- const parsed = documents.get(file);
115
- if (parsed === undefined || !parsed.ok) continue;
116
- const kind = instanceType(parsed.document, file);
117
- if (kind === 'any' || kind === 'definition' || kind === 'invalid') continue;
118
- const definition = definitions.get(kind);
119
- if (definition === undefined) continue;
120
- for (const [name, spec] of Object.entries(definition.fields)){
121
- const targets = referenceTargets(spec, parsed.document.fields[name]);
122
- const expected = expectedReferenceType(spec);
123
- if (expected === null) continue;
124
- for (const target of targets){
125
- const resolved = classifyHref(file, target);
126
- if (resolved.kind !== 'path' || binaryTargets.has(resolved.path)) return refuse(file, 'unresolved-reference', {
127
- location: name
128
- });
129
- if (!documents.has(resolved.path)) continue;
130
- const targetType = declaredTypeOf(library[resolved.path]);
131
- if (targetType !== expected) return refuse(file, 'unresolved-reference', {
132
- location: name
195
+ const uses = usesIn(content);
196
+ for (const span of headingSpans(content, bodyStartOf(content))) {
197
+ const spec = Object.hasOwn(definition.sections, span.name)
198
+ ? definition.sections[span.name]
199
+ : undefined;
200
+ if (spec?.kind !== 'list' || spec.items.reference === undefined)
201
+ continue;
202
+ const listed = listItems(content, span.bodyStart, span.bodyEnd);
203
+ for (const href of (listed === null ? null : itemHrefs(content, listed, uses)) ?? []) {
204
+ const room = roomTarget(href);
205
+ if (room !== null)
206
+ found.push({
207
+ kind: 'item',
208
+ section: span.name,
209
+ href,
210
+ to: spec.items.reference,
211
+ ...room,
212
+ ...(spec.items.crossRoom === true ? { crossRoom: true } : {}),
133
213
  });
134
- }
135
- }
136
- const body = bodyAfterFrontmatter(library[file]);
137
- for (const occurrence of hrefOccurrences(body)){
138
- const resolved = classifyHref(file, occurrence.href);
139
- if (resolved.kind === 'skip') continue;
140
- if (resolved.kind === 'invalid' || !documents.has(resolved.path) && !binaryTargets.has(resolved.path)) {
141
- return refuse(file, 'unresolved-link');
142
- }
143
214
  }
144
215
  }
145
- const missing = new Map();
146
- for (const file of files){
147
- const parsed = documents.get(file);
148
- if (parsed === undefined || !parsed.ok) continue;
149
- const kind = instanceType(parsed.document, file);
150
- if (kind === 'any' || kind === 'definition' || kind === 'invalid') continue;
151
- const definition = definitions.get(kind);
152
- if (definition === undefined) continue;
153
- for (const [name, spec] of Object.entries(definition.fields)){
154
- const expected = expectedReferenceType(spec);
155
- if (expected === null) continue;
156
- for (const target of referenceTargets(spec, parsed.document.fields[name])){
157
- const resolved = classifyHref(file, target);
158
- if (resolved.kind !== 'path') continue;
159
- if (documents.has(resolved.path)) continue;
160
- const referrers = missing.get(resolved.path) ?? [];
161
- referrers.push(file);
162
- missing.set(resolved.path, referrers);
163
- }
216
+ return found;
217
+ }
218
+ function least(refused, file, verdict) {
219
+ return refused === undefined || file < refused.file ? { file, verdict } : refused;
220
+ }
221
+ export function* validating(library, context = { binaryTargets: [] }, model = { types: {} }) {
222
+ const binaryTargets = new Set(context.binaryTargets);
223
+ const binary = (path) => binaryTargets.has(path);
224
+ const anyRoom = context.anyRoom === true;
225
+ const types = new Map();
226
+ const typeOf = (path) => types.get(path);
227
+ const documents = new Map();
228
+ let refused;
229
+ for (const [file, content] of library) {
230
+ const parsed = binaryTargets.has(file) ? null : parse(content, file);
231
+ if (parsed === null)
232
+ refused = least(refused, file, refuse(file, 'binary-target-document'));
233
+ else if (!parsed.ok)
234
+ refused = least(refused, file, { verdict: 'refuse', ...parsed.refusal });
235
+ else {
236
+ types.set(file, parsed.document.type ?? BUILT_IN_TYPE);
237
+ if (instanceType(parsed.document) !== BUILT_IN_TYPE)
238
+ documents.set(file, parsed.document);
164
239
  }
240
+ yield { path: file, resolved: 0 };
165
241
  }
166
- const missingPaths = [
167
- ...missing.keys()
168
- ].sort();
169
- if (missingPaths.length > 0) {
170
- const path = missingPaths[0];
171
- const referrers = [
172
- ...new Set(missing.get(path) ?? [])
173
- ].sort();
174
- return refuse(path, 'referenced-missing-file', {
175
- referrers
176
- });
242
+ if (refused !== undefined)
243
+ return refused.verdict;
244
+ const sectionReferences = new Map();
245
+ for (const [file, document] of documents) {
246
+ const read = structure(file, library.get(file), document, definitionOf(document, model));
247
+ if ('refusal' in read)
248
+ refused = least(refused, file, read.refusal);
249
+ else
250
+ sectionReferences.set(file, read.sections);
251
+ yield { path: file, resolved: 0 };
177
252
  }
178
- return {
179
- verdict: 'accept'
253
+ if (refused !== undefined)
254
+ return refused.verdict;
255
+ const referred = (file, document) => {
256
+ const definition = definitionOf(document, model);
257
+ const fields = references(document, definition).flatMap(({ pointer, value, to, crossRoom }) => crossing(file, value, anyRoom || crossRoom)
258
+ ? []
259
+ : [{ reference: reached(file, value, to), location: pointer }]);
260
+ for (const { reference, location } of fields) {
261
+ if (!reaches(reference, typeOf, binary))
262
+ return refuse(file, 'unresolved-reference', { location });
263
+ }
264
+ if (!linked(file, library.get(file)))
265
+ return refuse(file, 'unresolved-link');
266
+ const sections = sectionReferences
267
+ .get(file)
268
+ .flatMap(({ section, to, crossRoom, hrefs }) => hrefs.flatMap((href) => crossing(file, href, anyRoom || crossRoom)
269
+ ? []
270
+ : [{ reference: reached(file, href, to), location: section }]));
271
+ for (const { reference, location } of sections) {
272
+ if (!reaches(reference, typeOf, binary))
273
+ return refuse(file, 'unresolved-reference', { location });
274
+ }
275
+ return { references: [...fields, ...sections] };
180
276
  };
277
+ let missed;
278
+ for (const [file, document] of documents) {
279
+ const checked = referred(file, document);
280
+ if ('verdict' in checked)
281
+ refused = least(refused, file, checked);
282
+ else {
283
+ for (const { reference } of checked.references) {
284
+ if (!missing(reference, typeOf, binary))
285
+ continue;
286
+ const path = reference.target;
287
+ if (missed === undefined || path < missed.path)
288
+ missed = { path, referrers: [] };
289
+ if (path === missed.path && missed.referrers.at(-1) !== file)
290
+ missed.referrers.push(file);
291
+ }
292
+ }
293
+ yield { path: file, resolved: 'verdict' in checked ? 0 : checked.references.length };
294
+ }
295
+ if (refused !== undefined)
296
+ return refused.verdict;
297
+ if (missed !== undefined)
298
+ return refuse(missed.path, 'referenced-missing-file', { referrers: missed.referrers.sort() });
299
+ return { verdict: 'accept' };
300
+ }
301
+ export function validate(library, context = { binaryTargets: [] }, model = { types: {} }) {
302
+ const steps = validating(new Map(Object.entries(library)), context, model);
303
+ let step = steps.next();
304
+ while (step.done !== true)
305
+ step = steps.next();
306
+ return step.value;
181
307
  }
182
-
183
- //# sourceMappingURL=validate.js.map
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.0-alpha.9";
1
+ export declare const VERSION = "0.1.0-alpha.19";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,kBAAkB,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,mBAAmB,CAAC"}
package/dist/version.js CHANGED
@@ -1,3 +1 @@
1
- export const VERSION = '0.1.0-alpha.9';
2
-
3
- //# sourceMappingURL=version.js.map
1
+ export const VERSION = '0.1.0-alpha.19';
package/dist/yaml.d.ts CHANGED
@@ -16,8 +16,7 @@ export type YamlSeq = {
16
16
  };
17
17
  export type YamlEntry = {
18
18
  readonly key: string;
19
- readonly keyStart: number;
20
- readonly keyEnd: number;
19
+ readonly after: number;
21
20
  readonly value: YamlNode;
22
21
  };
23
22
  export type YamlMap = {
@@ -27,11 +26,18 @@ export type YamlMap = {
27
26
  readonly end: number;
28
27
  };
29
28
  export type YamlNode = YamlScalar | YamlSeq | YamlMap;
29
+ export declare function interpretPlain(text: string): string | number | boolean | null;
30
30
  export declare function parseYamlMapping(text: string, start: number, end: number): YamlMap;
31
31
  export declare function jsValue(node: YamlNode): unknown;
32
32
  export declare function mapEntry(map: YamlMap, key: string): YamlEntry | undefined;
33
33
  export declare function isPlainSafe(text: string): boolean;
34
- export declare function serializeJs(value: unknown): string;
34
+ export type FrontmatterValue = string | number | boolean | null | readonly FrontmatterValue[] | {
35
+ readonly [name: string]: FrontmatterValue;
36
+ };
37
+ export declare function plain(value: unknown): value is Record<string, unknown>;
38
+ export declare function frontmatterValue(value: unknown): value is FrontmatterValue;
39
+ export declare function serializeJs(value: FrontmatterValue): string;
40
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
35
41
  export declare function serializeKey(name: string): string;
36
42
  export declare function bodyStartAfterYaml(content: string, yamlEnd: number): number;
37
43
  export declare function bodyStartOf(content: string): number;
@@ -1 +1 @@
1
- {"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAnC,YAAqB,MAAM,EAAE,MAAM,EAGlC;CACF;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAqStD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAclF;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAM/C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEzE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMjD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQlD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAG3E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAqB9F;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAQjE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAEzD"}
1
+ {"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAnC,YAAqB,MAAM,EAAE,MAAM,EAGlC;CACF;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;AAoEtD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAM7E;AAyRD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAclF;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAM/C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEzE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMjD;AAED,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,gBAAgB,EAAE,GAC3B;IAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAA;CAAE,CAAC;AAElD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAItE;AAiBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE1E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAO3D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAG3E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAqB9F;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAgBjE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAEzD"}