@agentshouse/mdmodel 0.1.0-alpha.8 → 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 (407) hide show
  1. package/API.md +368 -0
  2. package/README.md +36 -180
  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 -25
  10. package/dist/definition.d.ts.map +1 -1
  11. package/dist/definition.js +726 -138
  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 +106 -74
  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 +45 -67
  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 -154
  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 +301 -202
  57. package/fixtures/README.md +91 -55
  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/context.json +1 -0
  207. package/fixtures/cases/missing-section-item-kind/expected.json +5 -0
  208. package/fixtures/cases/missing-section-item-kind/schema.yaml +6 -0
  209. package/fixtures/cases/misspelled-key/context.json +1 -0
  210. package/fixtures/cases/misspelled-key/expected.json +6 -0
  211. package/fixtures/cases/misspelled-key/library/companies/acme.md +4 -0
  212. package/fixtures/cases/misspelled-key/library/deals/renewal.md +32 -0
  213. package/fixtures/cases/misspelled-key/schema.yaml +56 -0
  214. package/fixtures/cases/nested-defs/context.json +1 -0
  215. package/fixtures/cases/nested-defs/expected.json +6 -0
  216. package/fixtures/cases/nested-defs/library/deal.md +6 -0
  217. package/fixtures/cases/nested-defs/schema.yaml +11 -0
  218. package/fixtures/cases/nested-object-reference/context.json +1 -0
  219. package/fixtures/cases/nested-object-reference/expected.json +6 -0
  220. package/fixtures/cases/nested-object-reference/library/companies/acme.md +4 -0
  221. package/fixtures/cases/nested-object-reference/library/deals/renewal.md +14 -0
  222. package/fixtures/cases/nested-object-reference/library/places/depot.md +4 -0
  223. package/fixtures/cases/nested-object-reference/library/products/seats.md +4 -0
  224. package/fixtures/cases/nested-object-reference/library/products/support.md +4 -0
  225. package/fixtures/cases/nested-object-reference/schema.yaml +32 -0
  226. package/fixtures/cases/nested-reference/context.json +1 -0
  227. package/fixtures/cases/nested-reference/expected.json +1 -0
  228. package/fixtures/cases/nested-reference/library/companies/acme.md +4 -0
  229. package/fixtures/cases/nested-reference/library/deals/renewal.md +15 -0
  230. package/fixtures/cases/nested-reference/library/places/depot.md +4 -0
  231. package/fixtures/cases/nested-reference/library/products/seats.md +4 -0
  232. package/fixtures/cases/nested-reference/library/products/support.md +4 -0
  233. package/fixtures/cases/nested-reference/schema.yaml +32 -0
  234. package/fixtures/cases/nested-required-field/context.json +1 -0
  235. package/fixtures/cases/nested-required-field/expected.json +6 -0
  236. package/fixtures/cases/nested-required-field/library/companies/acme.md +4 -0
  237. package/fixtures/cases/nested-required-field/library/deals/renewal.md +30 -0
  238. package/fixtures/cases/nested-required-field/schema.yaml +56 -0
  239. package/fixtures/cases/null-refused/context.json +1 -0
  240. package/fixtures/cases/null-refused/expected.json +6 -0
  241. package/fixtures/cases/null-refused/library/companies/acme.md +4 -0
  242. package/fixtures/cases/null-refused/library/deals/renewal.md +31 -0
  243. package/fixtures/cases/null-refused/schema.yaml +56 -0
  244. package/fixtures/cases/numeric-range/context.json +1 -0
  245. package/fixtures/cases/numeric-range/expected.json +6 -0
  246. package/fixtures/cases/numeric-range/library/companies/acme.md +4 -0
  247. package/fixtures/cases/numeric-range/library/deals/renewal.md +31 -0
  248. package/fixtures/cases/numeric-range/schema.yaml +56 -0
  249. package/fixtures/cases/one-of-variant/context.json +1 -0
  250. package/fixtures/cases/one-of-variant/expected.json +6 -0
  251. package/fixtures/cases/one-of-variant/library/companies/acme.md +4 -0
  252. package/fixtures/cases/one-of-variant/library/deals/renewal.md +31 -0
  253. package/fixtures/cases/one-of-variant/schema.yaml +56 -0
  254. package/fixtures/cases/open-map-value/context.json +1 -0
  255. package/fixtures/cases/open-map-value/expected.json +6 -0
  256. package/fixtures/cases/open-map-value/library/companies/acme.md +4 -0
  257. package/fixtures/cases/open-map-value/library/deals/renewal.md +31 -0
  258. package/fixtures/cases/open-map-value/schema.yaml +56 -0
  259. package/fixtures/cases/other-room-reference/context.json +1 -0
  260. package/fixtures/cases/other-room-reference/expected.json +6 -0
  261. package/fixtures/cases/other-room-reference/library/companies/acme.md +4 -0
  262. package/fixtures/cases/other-room-reference/library/deals/renewal.md +14 -0
  263. package/fixtures/cases/other-room-reference/library/places/depot.md +4 -0
  264. package/fixtures/cases/other-room-reference/library/products/seats.md +4 -0
  265. package/fixtures/cases/other-room-reference/library/products/support.md +4 -0
  266. package/fixtures/cases/other-room-reference/schema.yaml +32 -0
  267. package/fixtures/cases/paragraph-link-definition/schema.yaml +1 -0
  268. package/fixtures/cases/prototype-field/context.json +1 -0
  269. package/fixtures/cases/prototype-field/expected.json +6 -0
  270. package/fixtures/cases/prototype-field/library/item.md +9 -0
  271. package/fixtures/cases/prototype-field/schema.yaml +6 -0
  272. package/fixtures/cases/quoted-link-definition/expected.json +1 -2
  273. package/fixtures/cases/quoted-link-definition/library/notes/draft.md +1 -1
  274. package/fixtures/cases/quoted-link-definition/schema.yaml +1 -0
  275. package/fixtures/cases/referenced-missing-file/expected.json +0 -1
  276. package/fixtures/cases/referenced-missing-file/schema.yaml +11 -0
  277. package/fixtures/cases/remote-ref/context.json +1 -0
  278. package/fixtures/cases/remote-ref/expected.json +5 -0
  279. package/fixtures/cases/remote-ref/schema.yaml +3 -0
  280. package/fixtures/cases/second-member-document/context.json +1 -0
  281. package/fixtures/cases/second-member-document/expected.json +5 -0
  282. package/fixtures/cases/second-member-document/schema.yaml +4 -0
  283. package/fixtures/cases/section-item-enum/context.json +1 -0
  284. package/fixtures/cases/section-item-enum/expected.json +6 -0
  285. package/fixtures/cases/section-item-enum/library/task.md +8 -0
  286. package/fixtures/cases/section-item-enum/schema.yaml +3 -0
  287. package/fixtures/cases/section-item-kind/context.json +1 -0
  288. package/fixtures/cases/section-item-kind/expected.json +6 -0
  289. package/fixtures/cases/section-item-kind/library/task.md +8 -0
  290. package/fixtures/cases/section-item-kind/schema.yaml +3 -0
  291. package/fixtures/cases/section-items/context.json +1 -0
  292. package/fixtures/cases/section-items/expected.json +1 -0
  293. package/fixtures/cases/section-items/library/other.md +3 -0
  294. package/fixtures/cases/section-items/library/page.md +42 -0
  295. package/fixtures/cases/section-items/schema.yaml +10 -0
  296. package/fixtures/cases/section-reference-path/context.json +1 -0
  297. package/fixtures/cases/section-reference-path/expected.json +6 -0
  298. package/fixtures/cases/section-reference-path/library/other.md +3 -0
  299. package/fixtures/cases/section-reference-path/library/page.md +7 -0
  300. package/fixtures/cases/section-reference-path/schema.yaml +3 -0
  301. package/fixtures/cases/section-reference-type/context.json +1 -0
  302. package/fixtures/cases/section-reference-type/expected.json +6 -0
  303. package/fixtures/cases/section-reference-type/library/note.md +1 -0
  304. package/fixtures/cases/section-reference-type/library/page.md +7 -0
  305. package/fixtures/cases/section-reference-type/schema.yaml +3 -0
  306. package/fixtures/cases/shortcut-reference-link/context.json +1 -0
  307. package/fixtures/cases/shortcut-reference-link/expected.json +5 -0
  308. package/fixtures/cases/shortcut-reference-link/library/item.md +10 -0
  309. package/fixtures/cases/shortcut-reference-link/schema.yaml +6 -0
  310. package/fixtures/cases/string-length/context.json +1 -0
  311. package/fixtures/cases/string-length/expected.json +6 -0
  312. package/fixtures/cases/string-length/library/companies/acme.md +4 -0
  313. package/fixtures/cases/string-length/library/deals/renewal.md +31 -0
  314. package/fixtures/cases/string-length/schema.yaml +56 -0
  315. package/fixtures/cases/structured-section/expected.json +1 -2
  316. package/fixtures/cases/structured-section/schema.yaml +7 -0
  317. package/fixtures/cases/submission-keys/context.json +1 -0
  318. package/fixtures/cases/submission-keys/expected.json +1 -0
  319. package/fixtures/cases/submission-keys/library/notes/visitor.md +8 -0
  320. package/fixtures/cases/submission-keys/schema.yaml +4 -0
  321. package/fixtures/cases/text-field-kind/context.json +1 -0
  322. package/fixtures/cases/text-field-kind/expected.json +6 -0
  323. package/fixtures/cases/text-field-kind/library/page.md +4 -0
  324. package/fixtures/cases/text-field-kind/schema.yaml +4 -0
  325. package/fixtures/cases/truncated-link-definition/expected.json +1 -2
  326. package/fixtures/cases/truncated-link-definition/library/notes/draft.md +1 -1
  327. package/fixtures/cases/truncated-link-definition/schema.yaml +1 -0
  328. package/fixtures/cases/types-folder-content/context.json +1 -0
  329. package/fixtures/cases/types-folder-content/expected.json +1 -0
  330. package/fixtures/cases/types-folder-content/library/types/task.md +4 -0
  331. package/fixtures/cases/types-folder-content/schema.yaml +4 -0
  332. package/fixtures/cases/unclosed-frontmatter/expected.json +1 -2
  333. package/fixtures/cases/undeclared-field/context.json +1 -0
  334. package/fixtures/cases/undeclared-field/expected.json +6 -0
  335. package/fixtures/cases/undeclared-field/library/item.md +9 -0
  336. package/fixtures/cases/undeclared-field/schema.yaml +6 -0
  337. package/fixtures/cases/unevaluated-items-closed/context.json +1 -0
  338. package/fixtures/cases/unevaluated-items-closed/expected.json +6 -0
  339. package/fixtures/cases/unevaluated-items-closed/library/trip.md +6 -0
  340. package/fixtures/cases/unevaluated-items-closed/schema.yaml +10 -0
  341. package/fixtures/cases/unknown-type/context.json +1 -0
  342. package/fixtures/cases/unknown-type/expected.json +6 -0
  343. package/fixtures/cases/unknown-type/library/item.md +3 -0
  344. package/fixtures/cases/unknown-type/schema.yaml +3 -0
  345. package/fixtures/cases/unlisted-reference-type/context.json +1 -0
  346. package/fixtures/cases/unlisted-reference-type/expected.json +5 -0
  347. package/fixtures/cases/unlisted-reference-type/schema.yaml +3 -0
  348. package/fixtures/cases/unresolved-link/expected.json +1 -2
  349. package/fixtures/cases/unresolved-link/library/item.md +1 -1
  350. package/fixtures/cases/unresolved-link/schema.yaml +6 -0
  351. package/fixtures/cases/valid-typed-document/library/tasks/one.md +1 -0
  352. package/fixtures/cases/valid-typed-document/schema.yaml +16 -0
  353. package/fixtures/cases/wide-item-fence-link/schema.yaml +1 -0
  354. package/fixtures/division.json +409 -0
  355. package/fixtures/projection.json +109 -28
  356. package/package.json +6 -13
  357. package/dist/definition.js.map +0 -1
  358. package/dist/document.js.map +0 -1
  359. package/dist/index.js.map +0 -1
  360. package/dist/links.js.map +0 -1
  361. package/dist/paths.js.map +0 -1
  362. package/dist/profile.js.map +0 -1
  363. package/dist/project.js.map +0 -1
  364. package/dist/refuse.js.map +0 -1
  365. package/dist/schema.js.map +0 -1
  366. package/dist/sections.js.map +0 -1
  367. package/dist/types.js.map +0 -1
  368. package/dist/validate.js.map +0 -1
  369. package/dist/version.js.map +0 -1
  370. package/dist/yaml.js.map +0 -1
  371. package/fixtures/cases/binary-any-reference/library/types/note.md +0 -5
  372. package/fixtures/cases/binary-document-collision/library/types/note.md +0 -3
  373. package/fixtures/cases/binary-link-outside-collection/library/types/note.md +0 -3
  374. package/fixtures/cases/binary-prototype-reference/library/types/note.md +0 -5
  375. package/fixtures/cases/binary-typed-reference/library/types/note.md +0 -5
  376. package/fixtures/cases/binary-typed-reference/library/types/person.md +0 -3
  377. package/fixtures/cases/bracketed-link-definition/library/types/task.md +0 -7
  378. package/fixtures/cases/declared-binary-links/library/types/note.md +0 -3
  379. package/fixtures/cases/duplicate-link-definition/library/types/task.md +0 -7
  380. package/fixtures/cases/fenced-link-definition/library/types/task.md +0 -7
  381. package/fixtures/cases/field-enum/library/types/task.md +0 -8
  382. package/fixtures/cases/interrupted-link-definition/library/types/note.md +0 -3
  383. package/fixtures/cases/long-fence-link-definition/library/types/note.md +0 -3
  384. package/fixtures/cases/malformed-definition/library/types/task.md +0 -5
  385. package/fixtures/cases/missing-binary-image/expected.json +0 -6
  386. package/fixtures/cases/missing-binary-image/library/types/note.md +0 -3
  387. package/fixtures/cases/missing-binary-link/expected.json +0 -6
  388. package/fixtures/cases/missing-binary-link/library/types/note.md +0 -3
  389. package/fixtures/cases/missing-required-field/library/types/task.md +0 -8
  390. package/fixtures/cases/paragraph-link-definition/library/types/note.md +0 -3
  391. package/fixtures/cases/prd-definition/library/types/task.md +0 -15
  392. package/fixtures/cases/quoted-link-definition/library/types/note.md +0 -3
  393. package/fixtures/cases/referenced-missing-file/library/types/person.md +0 -5
  394. package/fixtures/cases/referenced-missing-file/library/types/task.md +0 -8
  395. package/fixtures/cases/structured-section/library/types/task.md +0 -8
  396. package/fixtures/cases/truncated-link-definition/library/types/note.md +0 -3
  397. package/fixtures/cases/unresolved-link/library/types/task.md +0 -7
  398. package/fixtures/cases/valid-typed-document/library/types/person.md +0 -5
  399. package/fixtures/cases/valid-typed-document/library/types/task.md +0 -12
  400. package/fixtures/cases/wide-item-fence-link/library/types/note.md +0 -3
  401. package/markdown-syntax-profile.md +0 -9
  402. /package/fixtures/cases/{prd-definition → absent-link-dangles}/context.json +0 -0
  403. /package/fixtures/cases/{prd-definition → absent-link-dangles}/expected.json +0 -0
  404. /package/fixtures/cases/{missing-binary-image → binary-image-dangles}/context.json +0 -0
  405. /package/fixtures/cases/{missing-binary-image → binary-image-dangles}/library/notes/draft.md +0 -0
  406. /package/fixtures/cases/{missing-binary-link → binary-link-dangles}/context.json +0 -0
  407. /package/fixtures/cases/{missing-binary-link → binary-link-dangles}/library/notes/draft.md +0 -0
@@ -0,0 +1,3 @@
1
+ import type { Division, DivisionContext, Document } from './types.js';
2
+ export declare function divide(document: Document, file: string, context: DivisionContext): Division;
3
+ //# sourceMappingURL=divide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divide.d.ts","sourceRoot":"","sources":["../src/divide.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AAwXpF,wBAAgB,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,QAAQ,CAc3F"}
package/dist/divide.js ADDED
@@ -0,0 +1,320 @@
1
+ import { blockRanges, headingLines } from './blocks.js';
2
+ import { firstEditFrom, projectionInput, rangeText, } from './project.js';
3
+ import { refusal } from './refuse.js';
4
+ const SMALLEST_BOUND = 2;
5
+ function node(draft) {
6
+ return {
7
+ start: draft.start,
8
+ end: draft.end,
9
+ bodyStart: draft.bodyStart,
10
+ heading: draft.heading,
11
+ children: draft.children.map(node),
12
+ };
13
+ }
14
+ function forest(state, range) {
15
+ const content = state.content;
16
+ const headings = headingLines(content, range.start, range.end);
17
+ const roots = [];
18
+ const open = [];
19
+ const first = headings[0]?.start ?? range.end;
20
+ if (first > range.start) {
21
+ roots.push({
22
+ level: 0,
23
+ start: range.start,
24
+ end: first,
25
+ bodyStart: range.start,
26
+ heading: '',
27
+ children: [],
28
+ });
29
+ }
30
+ for (const heading of headings) {
31
+ while ((open[open.length - 1]?.level ?? 0) >= heading.level) {
32
+ open.pop().end = heading.start;
33
+ }
34
+ const draft = {
35
+ level: heading.level,
36
+ start: heading.start,
37
+ end: range.end,
38
+ bodyStart: heading.next,
39
+ heading: `${textOf(state, { start: heading.start, end: heading.textEnd })}\n\n`,
40
+ children: [],
41
+ };
42
+ (open[open.length - 1]?.children ?? roots).push(draft);
43
+ open.push(draft);
44
+ }
45
+ return roots.map(node);
46
+ }
47
+ function isSpace(character) {
48
+ return character === ' ' || character === '\t' || character === '\n' || character === '\r';
49
+ }
50
+ const TERMINATORS = new Set(['.', '!', '?', '…', '。', '!', '?']);
51
+ function isTerminator(character) {
52
+ return TERMINATORS.has(character);
53
+ }
54
+ const CLOSERS = new Set(['"', "'", ')', ']', '»', '”']);
55
+ function isCloser(character) {
56
+ return CLOSERS.has(character);
57
+ }
58
+ function sentenceBounds(text) {
59
+ const bounds = [0];
60
+ let i = 0;
61
+ while (i < text.length) {
62
+ if (!isTerminator(text[i])) {
63
+ i += 1;
64
+ continue;
65
+ }
66
+ let after = i + 1;
67
+ while (after < text.length && isCloser(text[after]))
68
+ after += 1;
69
+ if (after >= text.length || !isSpace(text[after])) {
70
+ i = after + 1;
71
+ continue;
72
+ }
73
+ while (after < text.length && isSpace(text[after]))
74
+ after += 1;
75
+ if (after < text.length)
76
+ bounds.push(after);
77
+ i = after;
78
+ }
79
+ bounds.push(text.length);
80
+ return bounds;
81
+ }
82
+ function isTrailingSurrogate(text, index) {
83
+ const code = text.charCodeAt(index);
84
+ return code >= 0xdc00 && code <= 0xdfff;
85
+ }
86
+ function characterLength(text, index) {
87
+ return isTrailingSurrogate(text, index + 1) ? 2 : 1;
88
+ }
89
+ function boundOf(cutting, from, to, bound) {
90
+ const limit = from + bound;
91
+ if (limit >= to)
92
+ return to;
93
+ for (let index = limit; index > from + 1; index -= 1) {
94
+ if (isSpace(cutting.text[index]))
95
+ return index;
96
+ }
97
+ const inside = cutting.masks.find((mask) => limit > mask.start && limit < mask.end);
98
+ if (inside !== undefined)
99
+ return inside.start > from ? inside.start : Math.min(inside.end, to);
100
+ return isTrailingSurrogate(cutting.text, limit) ? limit - 1 : limit;
101
+ }
102
+ function utf8Size(code) {
103
+ if (code < 0x80)
104
+ return 1;
105
+ if (code < 0x800)
106
+ return 2;
107
+ if (code < 0x10000)
108
+ return 3;
109
+ return 4;
110
+ }
111
+ function byteBounds(content, spans) {
112
+ const marks = [...new Set(spans.flatMap((span) => [span.start, span.end]))].sort((left, right) => left - right);
113
+ const bytes = new Map();
114
+ let index = 0;
115
+ let count = 0;
116
+ for (const mark of marks) {
117
+ while (index < mark) {
118
+ const code = content.codePointAt(index);
119
+ count += utf8Size(code);
120
+ index += code > 0xffff ? 2 : 1;
121
+ }
122
+ bytes.set(mark, count);
123
+ }
124
+ return spans.map((span) => ({
125
+ ...span,
126
+ start: bytes.get(span.start),
127
+ end: bytes.get(span.end),
128
+ }));
129
+ }
130
+ function textOf(state, extent) {
131
+ return rangeText(state.content, extent, state.edits);
132
+ }
133
+ function sourceCutting(state, extent) {
134
+ const source = state.content.slice(extent.start, extent.end);
135
+ const masks = [];
136
+ for (let index = firstEditFrom(state.edits, extent.start); index < state.edits.length; index += 1) {
137
+ const edit = state.edits[index];
138
+ if (edit.start > extent.end)
139
+ break;
140
+ if (edit.end > extent.end)
141
+ continue;
142
+ masks.push({ start: edit.start - extent.start, end: edit.end - extent.start });
143
+ }
144
+ let text = '';
145
+ let cursor = 0;
146
+ for (const mask of masks) {
147
+ if (mask.end <= cursor)
148
+ continue;
149
+ const from = Math.max(mask.start, cursor);
150
+ text += `${source.slice(cursor, from)}${'x'.repeat(mask.end - from)}`;
151
+ cursor = mask.end;
152
+ }
153
+ text += source.slice(cursor);
154
+ return {
155
+ text,
156
+ masks,
157
+ piece: (from, to) => {
158
+ const cut = { start: extent.start + from, end: extent.start + to };
159
+ return { ...cut, text: textOf(state, cut) };
160
+ },
161
+ };
162
+ }
163
+ function valueCutting(value) {
164
+ return {
165
+ text: value.text,
166
+ masks: [],
167
+ piece: (from, to) => ({ start: value.start, end: value.end, text: value.text.slice(from, to) }),
168
+ };
169
+ }
170
+ function prefixOf(state, body) {
171
+ if (body.emitted === 0 || body.heading.length >= state.bound)
172
+ return '';
173
+ return body.heading;
174
+ }
175
+ function available(state, body) {
176
+ return state.bound - prefixOf(state, body).length;
177
+ }
178
+ function emit(state, body, piece, bare = false) {
179
+ if (piece.text.trim() === '')
180
+ return;
181
+ const text = (bare ? '' : prefixOf(state, body)) + piece.text;
182
+ state.spans.push({ start: piece.start, end: piece.end, text });
183
+ body.emitted += 1;
184
+ }
185
+ function merge(run) {
186
+ return {
187
+ start: Math.min(...run.map((unit) => unit.start)),
188
+ end: Math.max(...run.map((unit) => unit.end)),
189
+ text: run.map((unit) => unit.text).join(''),
190
+ };
191
+ }
192
+ function divideUnits(state, body, units) {
193
+ let run = [];
194
+ let length = 0;
195
+ const flush = () => {
196
+ if (run.length === 0)
197
+ return;
198
+ emit(state, body, merge(run));
199
+ run = [];
200
+ length = 0;
201
+ };
202
+ for (const unit of units) {
203
+ if (run.length > 0 && length + unit.text.length > available(state, body))
204
+ flush();
205
+ if (unit.text.length > available(state, body)) {
206
+ flush();
207
+ unit.descend();
208
+ continue;
209
+ }
210
+ run.push(unit);
211
+ length += unit.text.length;
212
+ }
213
+ flush();
214
+ }
215
+ function divideBound(state, body, cutting, range) {
216
+ let start = range.start;
217
+ while (start < range.end) {
218
+ const bare = available(state, body) < characterLength(cutting.text, start);
219
+ const room = bare ? state.bound : available(state, body);
220
+ const stop = boundOf(cutting, start, range.end, room);
221
+ const piece = cutting.piece(start, stop);
222
+ if (cutting.masks.length === 0 || piece.text.length <= room) {
223
+ emit(state, body, piece, bare);
224
+ }
225
+ else {
226
+ divideBound(state, body, valueCutting(piece), { start: 0, end: piece.text.length });
227
+ }
228
+ start = stop;
229
+ }
230
+ }
231
+ function divideSentences(state, body, cutting) {
232
+ const cut = cutting.piece;
233
+ const bounds = sentenceBounds(cutting.text);
234
+ let index = 0;
235
+ while (index + 1 < bounds.length) {
236
+ const alone = { start: bounds[index], end: bounds[index + 1] };
237
+ if (cut(alone.start, alone.end).text.length > available(state, body)) {
238
+ divideBound(state, body, cutting, alone);
239
+ index += 1;
240
+ continue;
241
+ }
242
+ const carried = bounds[Math.max(index - 1, 0)];
243
+ const from = cut(carried, alone.end).text.length <= available(state, body) ? carried : alone.start;
244
+ let last = index;
245
+ while (last + 2 < bounds.length &&
246
+ cut(from, bounds[last + 2]).text.length <= available(state, body)) {
247
+ last += 1;
248
+ }
249
+ emit(state, body, cut(from, bounds[last + 1]));
250
+ index = last + 1;
251
+ }
252
+ }
253
+ function blockUnit(state, body, block) {
254
+ return {
255
+ start: block.start,
256
+ end: block.end,
257
+ text: textOf(state, block),
258
+ descend: () => divideSentences(state, body, sourceCutting(state, block)),
259
+ };
260
+ }
261
+ function valueUnit(state, body, value) {
262
+ return {
263
+ start: value.start,
264
+ end: value.end,
265
+ text: value.text,
266
+ descend: () => divideSentences(state, body, valueCutting(value)),
267
+ };
268
+ }
269
+ function nodeUnit(state, subject) {
270
+ return {
271
+ start: subject.start,
272
+ end: subject.end,
273
+ text: textOf(state, subject),
274
+ descend: () => divideNode(state, subject),
275
+ };
276
+ }
277
+ function ownBlocks(subject, end, blocks) {
278
+ const first = blocks[0];
279
+ return first === undefined
280
+ ? [{ start: subject.start, end }]
281
+ : [{ start: subject.start, end: first.end }, ...blocks.slice(1)];
282
+ }
283
+ function divideNode(state, subject) {
284
+ const end = subject.children[0]?.start ?? subject.end;
285
+ const blocks = blockRanges(state.content, subject.bodyStart, end);
286
+ const children = { heading: '', emitted: 0 };
287
+ if (blocks.length === 0 && subject.children.length > 0) {
288
+ const [first, ...rest] = subject.children;
289
+ const led = [{ ...first, start: subject.start }, ...rest];
290
+ divideUnits(state, children, led.map((child) => nodeUnit(state, child)));
291
+ return;
292
+ }
293
+ const body = { heading: subject.heading, emitted: 0 };
294
+ const own = ownBlocks(subject, end, blocks);
295
+ divideUnits(state, body, own.map((block) => blockUnit(state, body, block)));
296
+ divideUnits(state, children, subject.children.map((child) => nodeUnit(state, child)));
297
+ }
298
+ function divideInput(state, input) {
299
+ const body = { heading: '', emitted: 0 };
300
+ divideUnits(state, body, [
301
+ ...input.values.map((value) => valueUnit(state, body, value)),
302
+ ...input.ranges.flatMap((range) => forest(state, range).map((subject) => nodeUnit(state, subject))),
303
+ ]);
304
+ }
305
+ export function divide(document, file, context) {
306
+ if (!Number.isInteger(context.bound) || context.bound < SMALLEST_BOUND) {
307
+ return { ok: false, refusal: refusal(file, 'division-bound') };
308
+ }
309
+ const result = projectionInput(document, file, context);
310
+ if (!result.ok)
311
+ return { ok: false, refusal: result.refusal };
312
+ const state = {
313
+ content: document.content,
314
+ edits: result.input.edits,
315
+ bound: context.bound,
316
+ spans: [],
317
+ };
318
+ divideInput(state, result.input);
319
+ return { ok: true, spans: byteBounds(document.content, state.spans) };
320
+ }
@@ -1,6 +1,16 @@
1
- import type { ApplyResult, Change, Document, Link, ParseResult } from './types.js';
1
+ import { type Definition } from './definition.js';
2
+ import { type LinkInventory } from './links.js';
3
+ import type { ApplyResult, BodyResult, FrontmatterResult, Change, Document, Link, ParseResult } from './types.js';
4
+ import { type YamlMap } from './yaml.js';
5
+ export declare function inventoryOf(document: Document): LinkInventory;
6
+ export declare function parseFrontmatter(content: string, file?: string): FrontmatterResult;
2
7
  export declare function parse(content: string, file?: string): ParseResult;
8
+ export declare function relativize(document: Document, file: string, handle: string, definition?: Definition, kept?: ReadonlySet<string>): ApplyResult;
9
+ export declare function relativizeBody(body: string, file: string, handle: string): BodyResult;
10
+ export declare function relinkBody(body: string, file: string, moves: ReadonlyMap<string, string>): BodyResult;
3
11
  export declare function links(document: Document, file: string): readonly Link[];
4
- export declare function apply(document: Document, change: Change): ApplyResult;
12
+ export declare function bodyLinks(body: string, file: string): readonly Link[];
13
+ export declare function apply(document: Document, changes: readonly Change[]): ApplyResult;
5
14
  export declare function serialize(document: Document): string;
15
+ export declare function frontmatter(document: Document): YamlMap | null;
6
16
  //# sourceMappingURL=document.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAsDnF,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,WAAW,CAkD7D;AAyGD,wBAAgB,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,IAAI,EAAE,CAWvE;AAED,wBAAgB,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAarE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAEpD"}
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAcpB,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,WAAW,EAEZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAcL,KAAK,OAAO,EAEb,MAAM,WAAW,CAAC;AAYnB,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,CAM7D;AA2DD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,iBAAiB,CAW9E;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,WAAW,CAgB7D;AAmED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,UAAU,EACvB,IAAI,GAAE,WAAW,CAAC,MAAM,CAAa,GACpC,WAAW,CAuBb;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAUrF;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,UAAU,CAkBZ;AAeD,wBAAgB,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,IAAI,EAAE,CAEvE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,IAAI,EAAE,CAErE;AA4LD,wBAAgB,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CA4CjF;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAEpD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CAE9D"}