@agentshouse/mdmodel 0.1.0-alpha.8 → 0.1.0-c2987f5d89720

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 (382) hide show
  1. package/API.md +302 -0
  2. package/README.md +34 -175
  3. package/dist/blocks.d.ts +11 -0
  4. package/dist/blocks.d.ts.map +1 -0
  5. package/dist/blocks.js +62 -0
  6. package/dist/condition.d.ts +137 -0
  7. package/dist/condition.d.ts.map +1 -0
  8. package/dist/condition.js +394 -0
  9. package/dist/definition.d.ts +46 -25
  10. package/dist/definition.d.ts.map +1 -1
  11. package/dist/definition.js +485 -146
  12. package/dist/divide.d.ts +3 -0
  13. package/dist/divide.d.ts.map +1 -0
  14. package/dist/divide.js +310 -0
  15. package/dist/document.d.ts +12 -1
  16. package/dist/document.d.ts.map +1 -1
  17. package/dist/document.js +176 -124
  18. package/dist/fields.d.ts +4 -0
  19. package/dist/fields.d.ts.map +1 -0
  20. package/dist/fields.js +3 -0
  21. package/dist/index.d.ts +11 -3
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +8 -4
  24. package/dist/links.d.ts +1 -0
  25. package/dist/links.d.ts.map +1 -1
  26. package/dist/links.js +618 -224
  27. package/dist/paths.d.ts +5 -3
  28. package/dist/paths.d.ts.map +1 -1
  29. package/dist/paths.js +47 -37
  30. package/dist/profile.js +1 -3
  31. package/dist/project.d.ts +19 -1
  32. package/dist/project.d.ts.map +1 -1
  33. package/dist/project.js +82 -73
  34. package/dist/references.d.ts +4 -0
  35. package/dist/references.d.ts.map +1 -0
  36. package/dist/references.js +25 -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 +40 -2
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/types.js +1 -3
  48. package/dist/validate.d.ts +3 -2
  49. package/dist/validate.d.ts.map +1 -1
  50. package/dist/validate.js +129 -137
  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 +2 -0
  55. package/dist/yaml.d.ts.map +1 -1
  56. package/dist/yaml.js +263 -193
  57. package/fixtures/README.md +91 -55
  58. package/fixtures/cases/absent-optional-field/library/companies/acme.md +4 -0
  59. package/fixtures/cases/absent-optional-field/library/deals/lead.md +6 -0
  60. package/fixtures/cases/absent-optional-field/schema.yaml +56 -0
  61. package/fixtures/cases/attachment-reference-any-file/context.json +1 -0
  62. package/fixtures/cases/attachment-reference-any-file/expected.json +1 -0
  63. package/fixtures/cases/attachment-reference-any-file/library/companies/acme.md +4 -0
  64. package/fixtures/cases/attachment-reference-any-file/library/deals/renewal.md +15 -0
  65. package/fixtures/cases/attachment-reference-any-file/library/places/depot.md +4 -0
  66. package/fixtures/cases/attachment-reference-any-file/library/products/seats.md +4 -0
  67. package/fixtures/cases/attachment-reference-any-file/library/products/support.md +4 -0
  68. package/fixtures/cases/attachment-reference-any-file/schema.yaml +32 -0
  69. package/fixtures/cases/attachment-reference-dangles/context.json +1 -0
  70. package/fixtures/cases/attachment-reference-dangles/expected.json +1 -0
  71. package/fixtures/cases/attachment-reference-dangles/library/companies/acme.md +4 -0
  72. package/fixtures/cases/attachment-reference-dangles/library/deals/renewal.md +15 -0
  73. package/fixtures/cases/attachment-reference-dangles/library/places/depot.md +4 -0
  74. package/fixtures/cases/attachment-reference-dangles/library/products/seats.md +4 -0
  75. package/fixtures/cases/attachment-reference-dangles/library/products/support.md +4 -0
  76. package/fixtures/cases/attachment-reference-dangles/schema.yaml +32 -0
  77. package/fixtures/cases/attachment-reference-outside/context.json +1 -0
  78. package/fixtures/cases/attachment-reference-outside/expected.json +6 -0
  79. package/fixtures/cases/attachment-reference-outside/library/companies/acme.md +4 -0
  80. package/fixtures/cases/attachment-reference-outside/library/deals/renewal.md +15 -0
  81. package/fixtures/cases/attachment-reference-outside/library/places/depot.md +4 -0
  82. package/fixtures/cases/attachment-reference-outside/library/products/seats.md +4 -0
  83. package/fixtures/cases/attachment-reference-outside/library/products/support.md +4 -0
  84. package/fixtures/cases/attachment-reference-outside/schema.yaml +32 -0
  85. package/fixtures/cases/binary-any-reference/expected.json +1 -2
  86. package/fixtures/cases/binary-any-reference/schema.yaml +4 -0
  87. package/fixtures/cases/binary-document-collision/expected.json +1 -2
  88. package/fixtures/cases/binary-document-collision/schema.yaml +1 -0
  89. package/fixtures/cases/binary-link-outside-collection/expected.json +1 -2
  90. package/fixtures/cases/binary-link-outside-collection/schema.yaml +1 -0
  91. package/fixtures/cases/binary-prototype-reference/expected.json +1 -2
  92. package/fixtures/cases/binary-prototype-reference/schema.yaml +4 -0
  93. package/fixtures/cases/binary-typed-reference/expected.json +1 -2
  94. package/fixtures/cases/binary-typed-reference/schema.yaml +5 -0
  95. package/fixtures/cases/boolean-field/context.json +1 -0
  96. package/fixtures/cases/boolean-field/expected.json +6 -0
  97. package/fixtures/cases/boolean-field/library/companies/acme.md +4 -0
  98. package/fixtures/cases/boolean-field/library/deals/renewal.md +31 -0
  99. package/fixtures/cases/boolean-field/schema.yaml +56 -0
  100. package/fixtures/cases/bracketed-link-definition/schema.yaml +6 -0
  101. package/fixtures/cases/closed-nested-object/context.json +1 -0
  102. package/fixtures/cases/closed-nested-object/expected.json +6 -0
  103. package/fixtures/cases/closed-nested-object/library/companies/acme.md +4 -0
  104. package/fixtures/cases/closed-nested-object/library/deals/renewal.md +32 -0
  105. package/fixtures/cases/closed-nested-object/schema.yaml +56 -0
  106. package/fixtures/cases/composed-root-reference/context.json +1 -0
  107. package/fixtures/cases/composed-root-reference/expected.json +6 -0
  108. package/fixtures/cases/composed-root-reference/library/a.md +5 -0
  109. package/fixtures/cases/composed-root-reference/schema.yaml +13 -0
  110. package/fixtures/cases/date-time-format/context.json +1 -0
  111. package/fixtures/cases/date-time-format/expected.json +6 -0
  112. package/fixtures/cases/date-time-format/library/companies/acme.md +4 -0
  113. package/fixtures/cases/date-time-format/library/deals/renewal.md +31 -0
  114. package/fixtures/cases/date-time-format/schema.yaml +56 -0
  115. package/fixtures/cases/declared-binary-links/schema.yaml +1 -0
  116. package/fixtures/cases/default-unfilled/context.json +1 -0
  117. package/fixtures/cases/default-unfilled/expected.json +6 -0
  118. package/fixtures/cases/default-unfilled/library/companies/acme.md +4 -0
  119. package/fixtures/cases/default-unfilled/library/deals/renewal.md +29 -0
  120. package/fixtures/cases/default-unfilled/schema.yaml +56 -0
  121. package/fixtures/cases/defs-pattern/context.json +1 -0
  122. package/fixtures/cases/defs-pattern/expected.json +6 -0
  123. package/fixtures/cases/defs-pattern/library/companies/acme.md +4 -0
  124. package/fixtures/cases/defs-pattern/library/deals/renewal.md +31 -0
  125. package/fixtures/cases/defs-pattern/schema.yaml +56 -0
  126. package/fixtures/cases/dependent-rule/context.json +1 -0
  127. package/fixtures/cases/dependent-rule/expected.json +6 -0
  128. package/fixtures/cases/dependent-rule/library/companies/acme.md +4 -0
  129. package/fixtures/cases/dependent-rule/library/deals/renewal.md +30 -0
  130. package/fixtures/cases/dependent-rule/schema.yaml +56 -0
  131. package/fixtures/cases/duplicate-link-definition/schema.yaml +6 -0
  132. package/fixtures/cases/email-format/context.json +1 -0
  133. package/fixtures/cases/email-format/expected.json +6 -0
  134. package/fixtures/cases/email-format/library/companies/acme.md +4 -0
  135. package/fixtures/cases/email-format/library/deals/renewal.md +31 -0
  136. package/fixtures/cases/email-format/schema.yaml +56 -0
  137. package/fixtures/cases/fenced-link-definition/schema.yaml +6 -0
  138. package/fixtures/cases/field-enum/expected.json +2 -3
  139. package/fixtures/cases/field-enum/schema.yaml +7 -0
  140. package/fixtures/cases/frontmatter-schema/context.json +1 -0
  141. package/fixtures/cases/frontmatter-schema/expected.json +5 -0
  142. package/fixtures/cases/frontmatter-schema/schema.yaml +5 -0
  143. package/fixtures/cases/integer-field/context.json +1 -0
  144. package/fixtures/cases/integer-field/expected.json +6 -0
  145. package/fixtures/cases/integer-field/library/companies/acme.md +4 -0
  146. package/fixtures/cases/integer-field/library/deals/renewal.md +31 -0
  147. package/fixtures/cases/integer-field/schema.yaml +56 -0
  148. package/fixtures/cases/interrupted-link-definition/schema.yaml +1 -0
  149. package/fixtures/cases/json-schema-constructs/context.json +1 -0
  150. package/fixtures/cases/json-schema-constructs/expected.json +1 -0
  151. package/fixtures/cases/json-schema-constructs/library/companies/acme.md +4 -0
  152. package/fixtures/cases/json-schema-constructs/library/deals/renewal.md +31 -0
  153. package/fixtures/cases/json-schema-constructs/schema.yaml +56 -0
  154. package/fixtures/cases/list-of-objects-closed/context.json +1 -0
  155. package/fixtures/cases/list-of-objects-closed/expected.json +6 -0
  156. package/fixtures/cases/list-of-objects-closed/library/companies/acme.md +4 -0
  157. package/fixtures/cases/list-of-objects-closed/library/deals/renewal.md +32 -0
  158. package/fixtures/cases/list-of-objects-closed/schema.yaml +56 -0
  159. package/fixtures/cases/list-of-objects-item/context.json +1 -0
  160. package/fixtures/cases/list-of-objects-item/expected.json +6 -0
  161. package/fixtures/cases/list-of-objects-item/library/companies/acme.md +4 -0
  162. package/fixtures/cases/list-of-objects-item/library/deals/renewal.md +31 -0
  163. package/fixtures/cases/list-of-objects-item/schema.yaml +56 -0
  164. package/fixtures/cases/list-of-objects-reference/context.json +1 -0
  165. package/fixtures/cases/list-of-objects-reference/expected.json +6 -0
  166. package/fixtures/cases/list-of-objects-reference/library/companies/acme.md +4 -0
  167. package/fixtures/cases/list-of-objects-reference/library/deals/renewal.md +14 -0
  168. package/fixtures/cases/list-of-objects-reference/library/places/depot.md +4 -0
  169. package/fixtures/cases/list-of-objects-reference/library/products/seats.md +4 -0
  170. package/fixtures/cases/list-of-objects-reference/library/products/support.md +4 -0
  171. package/fixtures/cases/list-of-objects-reference/schema.yaml +32 -0
  172. package/fixtures/cases/list-size/context.json +1 -0
  173. package/fixtures/cases/list-size/expected.json +6 -0
  174. package/fixtures/cases/list-size/library/companies/acme.md +4 -0
  175. package/fixtures/cases/list-size/library/deals/renewal.md +31 -0
  176. package/fixtures/cases/list-size/schema.yaml +56 -0
  177. package/fixtures/cases/long-fence-link-definition/schema.yaml +1 -0
  178. package/fixtures/cases/malformed-definition/expected.json +2 -4
  179. package/fixtures/cases/malformed-definition/schema.yaml +3 -0
  180. package/fixtures/cases/member-document/context.json +1 -0
  181. package/fixtures/cases/member-document/expected.json +1 -0
  182. package/fixtures/cases/member-document/library/people/ana.md +5 -0
  183. package/fixtures/cases/member-document/schema.yaml +5 -0
  184. package/fixtures/cases/missing-binary-image/expected.json +1 -2
  185. package/fixtures/cases/missing-binary-image/schema.yaml +1 -0
  186. package/fixtures/cases/missing-binary-link/expected.json +1 -2
  187. package/fixtures/cases/missing-binary-link/schema.yaml +1 -0
  188. package/fixtures/cases/missing-required-field/expected.json +2 -3
  189. package/fixtures/cases/missing-required-field/schema.yaml +7 -0
  190. package/fixtures/cases/missing-section-item-kind/context.json +1 -0
  191. package/fixtures/cases/missing-section-item-kind/expected.json +5 -0
  192. package/fixtures/cases/missing-section-item-kind/schema.yaml +6 -0
  193. package/fixtures/cases/misspelled-key/context.json +1 -0
  194. package/fixtures/cases/misspelled-key/expected.json +6 -0
  195. package/fixtures/cases/misspelled-key/library/companies/acme.md +4 -0
  196. package/fixtures/cases/misspelled-key/library/deals/renewal.md +32 -0
  197. package/fixtures/cases/misspelled-key/schema.yaml +56 -0
  198. package/fixtures/cases/nested-defs/context.json +1 -0
  199. package/fixtures/cases/nested-defs/expected.json +6 -0
  200. package/fixtures/cases/nested-defs/library/deal.md +6 -0
  201. package/fixtures/cases/nested-defs/schema.yaml +11 -0
  202. package/fixtures/cases/nested-object-reference/context.json +1 -0
  203. package/fixtures/cases/nested-object-reference/expected.json +6 -0
  204. package/fixtures/cases/nested-object-reference/library/companies/acme.md +4 -0
  205. package/fixtures/cases/nested-object-reference/library/deals/renewal.md +14 -0
  206. package/fixtures/cases/nested-object-reference/library/places/depot.md +4 -0
  207. package/fixtures/cases/nested-object-reference/library/products/seats.md +4 -0
  208. package/fixtures/cases/nested-object-reference/library/products/support.md +4 -0
  209. package/fixtures/cases/nested-object-reference/schema.yaml +32 -0
  210. package/fixtures/cases/nested-reference/context.json +1 -0
  211. package/fixtures/cases/nested-reference/expected.json +1 -0
  212. package/fixtures/cases/nested-reference/library/companies/acme.md +4 -0
  213. package/fixtures/cases/nested-reference/library/deals/renewal.md +15 -0
  214. package/fixtures/cases/nested-reference/library/places/depot.md +4 -0
  215. package/fixtures/cases/nested-reference/library/products/seats.md +4 -0
  216. package/fixtures/cases/nested-reference/library/products/support.md +4 -0
  217. package/fixtures/cases/nested-reference/schema.yaml +32 -0
  218. package/fixtures/cases/nested-required-field/context.json +1 -0
  219. package/fixtures/cases/nested-required-field/expected.json +6 -0
  220. package/fixtures/cases/nested-required-field/library/companies/acme.md +4 -0
  221. package/fixtures/cases/nested-required-field/library/deals/renewal.md +30 -0
  222. package/fixtures/cases/nested-required-field/schema.yaml +56 -0
  223. package/fixtures/cases/null-refused/context.json +1 -0
  224. package/fixtures/cases/null-refused/expected.json +6 -0
  225. package/fixtures/cases/null-refused/library/companies/acme.md +4 -0
  226. package/fixtures/cases/null-refused/library/deals/renewal.md +31 -0
  227. package/fixtures/cases/null-refused/schema.yaml +56 -0
  228. package/fixtures/cases/numeric-range/context.json +1 -0
  229. package/fixtures/cases/numeric-range/expected.json +6 -0
  230. package/fixtures/cases/numeric-range/library/companies/acme.md +4 -0
  231. package/fixtures/cases/numeric-range/library/deals/renewal.md +31 -0
  232. package/fixtures/cases/numeric-range/schema.yaml +56 -0
  233. package/fixtures/cases/one-of-variant/context.json +1 -0
  234. package/fixtures/cases/one-of-variant/expected.json +6 -0
  235. package/fixtures/cases/one-of-variant/library/companies/acme.md +4 -0
  236. package/fixtures/cases/one-of-variant/library/deals/renewal.md +31 -0
  237. package/fixtures/cases/one-of-variant/schema.yaml +56 -0
  238. package/fixtures/cases/open-map-value/context.json +1 -0
  239. package/fixtures/cases/open-map-value/expected.json +6 -0
  240. package/fixtures/cases/open-map-value/library/companies/acme.md +4 -0
  241. package/fixtures/cases/open-map-value/library/deals/renewal.md +31 -0
  242. package/fixtures/cases/open-map-value/schema.yaml +56 -0
  243. package/fixtures/cases/other-room-reference/context.json +1 -0
  244. package/fixtures/cases/other-room-reference/expected.json +6 -0
  245. package/fixtures/cases/other-room-reference/library/companies/acme.md +4 -0
  246. package/fixtures/cases/other-room-reference/library/deals/renewal.md +14 -0
  247. package/fixtures/cases/other-room-reference/library/places/depot.md +4 -0
  248. package/fixtures/cases/other-room-reference/library/products/seats.md +4 -0
  249. package/fixtures/cases/other-room-reference/library/products/support.md +4 -0
  250. package/fixtures/cases/other-room-reference/schema.yaml +32 -0
  251. package/fixtures/cases/paragraph-link-definition/schema.yaml +1 -0
  252. package/fixtures/cases/prototype-field/context.json +1 -0
  253. package/fixtures/cases/prototype-field/expected.json +6 -0
  254. package/fixtures/cases/prototype-field/library/item.md +9 -0
  255. package/fixtures/cases/prototype-field/schema.yaml +6 -0
  256. package/fixtures/cases/quoted-link-definition/expected.json +1 -2
  257. package/fixtures/cases/quoted-link-definition/schema.yaml +1 -0
  258. package/fixtures/cases/referenced-missing-file/expected.json +0 -1
  259. package/fixtures/cases/referenced-missing-file/schema.yaml +11 -0
  260. package/fixtures/cases/remote-ref/context.json +1 -0
  261. package/fixtures/cases/remote-ref/expected.json +5 -0
  262. package/fixtures/cases/remote-ref/schema.yaml +3 -0
  263. package/fixtures/cases/second-member-document/context.json +1 -0
  264. package/fixtures/cases/second-member-document/expected.json +5 -0
  265. package/fixtures/cases/second-member-document/schema.yaml +4 -0
  266. package/fixtures/cases/section-item-enum/context.json +1 -0
  267. package/fixtures/cases/section-item-enum/expected.json +6 -0
  268. package/fixtures/cases/section-item-enum/library/task.md +8 -0
  269. package/fixtures/cases/section-item-enum/schema.yaml +3 -0
  270. package/fixtures/cases/section-item-kind/context.json +1 -0
  271. package/fixtures/cases/section-item-kind/expected.json +6 -0
  272. package/fixtures/cases/section-item-kind/library/task.md +8 -0
  273. package/fixtures/cases/section-item-kind/schema.yaml +3 -0
  274. package/fixtures/cases/section-items/context.json +1 -0
  275. package/fixtures/cases/section-items/expected.json +1 -0
  276. package/fixtures/cases/section-items/library/other.md +3 -0
  277. package/fixtures/cases/section-items/library/page.md +42 -0
  278. package/fixtures/cases/section-items/schema.yaml +10 -0
  279. package/fixtures/cases/section-reference-path/context.json +1 -0
  280. package/fixtures/cases/section-reference-path/expected.json +6 -0
  281. package/fixtures/cases/section-reference-path/library/other.md +3 -0
  282. package/fixtures/cases/section-reference-path/library/page.md +7 -0
  283. package/fixtures/cases/section-reference-path/schema.yaml +3 -0
  284. package/fixtures/cases/section-reference-type/context.json +1 -0
  285. package/fixtures/cases/section-reference-type/expected.json +6 -0
  286. package/fixtures/cases/section-reference-type/library/note.md +1 -0
  287. package/fixtures/cases/section-reference-type/library/page.md +7 -0
  288. package/fixtures/cases/section-reference-type/schema.yaml +3 -0
  289. package/fixtures/cases/shortcut-reference-link/context.json +1 -0
  290. package/fixtures/cases/shortcut-reference-link/expected.json +5 -0
  291. package/fixtures/cases/shortcut-reference-link/library/item.md +10 -0
  292. package/fixtures/cases/shortcut-reference-link/schema.yaml +6 -0
  293. package/fixtures/cases/string-length/context.json +1 -0
  294. package/fixtures/cases/string-length/expected.json +6 -0
  295. package/fixtures/cases/string-length/library/companies/acme.md +4 -0
  296. package/fixtures/cases/string-length/library/deals/renewal.md +31 -0
  297. package/fixtures/cases/string-length/schema.yaml +56 -0
  298. package/fixtures/cases/structured-section/expected.json +1 -2
  299. package/fixtures/cases/structured-section/schema.yaml +7 -0
  300. package/fixtures/cases/submission-keys/context.json +1 -0
  301. package/fixtures/cases/submission-keys/expected.json +1 -0
  302. package/fixtures/cases/submission-keys/library/notes/visitor.md +8 -0
  303. package/fixtures/cases/submission-keys/schema.yaml +4 -0
  304. package/fixtures/cases/text-field-kind/context.json +1 -0
  305. package/fixtures/cases/text-field-kind/expected.json +6 -0
  306. package/fixtures/cases/text-field-kind/library/page.md +4 -0
  307. package/fixtures/cases/text-field-kind/schema.yaml +4 -0
  308. package/fixtures/cases/truncated-link-definition/expected.json +1 -2
  309. package/fixtures/cases/truncated-link-definition/schema.yaml +1 -0
  310. package/fixtures/cases/types-folder-content/context.json +1 -0
  311. package/fixtures/cases/types-folder-content/expected.json +1 -0
  312. package/fixtures/cases/types-folder-content/library/types/task.md +4 -0
  313. package/fixtures/cases/types-folder-content/schema.yaml +4 -0
  314. package/fixtures/cases/unclosed-frontmatter/expected.json +1 -2
  315. package/fixtures/cases/undeclared-field/context.json +1 -0
  316. package/fixtures/cases/undeclared-field/expected.json +6 -0
  317. package/fixtures/cases/undeclared-field/library/item.md +9 -0
  318. package/fixtures/cases/undeclared-field/schema.yaml +6 -0
  319. package/fixtures/cases/unevaluated-items-closed/context.json +1 -0
  320. package/fixtures/cases/unevaluated-items-closed/expected.json +6 -0
  321. package/fixtures/cases/unevaluated-items-closed/library/trip.md +6 -0
  322. package/fixtures/cases/unevaluated-items-closed/schema.yaml +10 -0
  323. package/fixtures/cases/unknown-type/context.json +1 -0
  324. package/fixtures/cases/unknown-type/expected.json +6 -0
  325. package/fixtures/cases/unknown-type/library/item.md +3 -0
  326. package/fixtures/cases/unknown-type/schema.yaml +3 -0
  327. package/fixtures/cases/unlisted-reference-type/context.json +1 -0
  328. package/fixtures/cases/unlisted-reference-type/expected.json +5 -0
  329. package/fixtures/cases/unlisted-reference-type/schema.yaml +3 -0
  330. package/fixtures/cases/unresolved-link/expected.json +1 -2
  331. package/fixtures/cases/unresolved-link/schema.yaml +6 -0
  332. package/fixtures/cases/valid-typed-document/library/tasks/one.md +1 -0
  333. package/fixtures/cases/valid-typed-document/schema.yaml +16 -0
  334. package/fixtures/cases/wide-item-fence-link/schema.yaml +1 -0
  335. package/fixtures/division.json +409 -0
  336. package/fixtures/projection.json +109 -28
  337. package/package.json +3 -12
  338. package/dist/definition.js.map +0 -1
  339. package/dist/document.js.map +0 -1
  340. package/dist/index.js.map +0 -1
  341. package/dist/links.js.map +0 -1
  342. package/dist/paths.js.map +0 -1
  343. package/dist/profile.js.map +0 -1
  344. package/dist/project.js.map +0 -1
  345. package/dist/refuse.js.map +0 -1
  346. package/dist/schema.js.map +0 -1
  347. package/dist/sections.js.map +0 -1
  348. package/dist/types.js.map +0 -1
  349. package/dist/validate.js.map +0 -1
  350. package/dist/version.js.map +0 -1
  351. package/dist/yaml.js.map +0 -1
  352. package/fixtures/cases/binary-any-reference/library/types/note.md +0 -5
  353. package/fixtures/cases/binary-document-collision/library/types/note.md +0 -3
  354. package/fixtures/cases/binary-link-outside-collection/library/types/note.md +0 -3
  355. package/fixtures/cases/binary-prototype-reference/library/types/note.md +0 -5
  356. package/fixtures/cases/binary-typed-reference/library/types/note.md +0 -5
  357. package/fixtures/cases/binary-typed-reference/library/types/person.md +0 -3
  358. package/fixtures/cases/bracketed-link-definition/library/types/task.md +0 -7
  359. package/fixtures/cases/declared-binary-links/library/types/note.md +0 -3
  360. package/fixtures/cases/duplicate-link-definition/library/types/task.md +0 -7
  361. package/fixtures/cases/fenced-link-definition/library/types/task.md +0 -7
  362. package/fixtures/cases/field-enum/library/types/task.md +0 -8
  363. package/fixtures/cases/interrupted-link-definition/library/types/note.md +0 -3
  364. package/fixtures/cases/long-fence-link-definition/library/types/note.md +0 -3
  365. package/fixtures/cases/malformed-definition/library/types/task.md +0 -5
  366. package/fixtures/cases/missing-binary-image/library/types/note.md +0 -3
  367. package/fixtures/cases/missing-binary-link/library/types/note.md +0 -3
  368. package/fixtures/cases/missing-required-field/library/types/task.md +0 -8
  369. package/fixtures/cases/paragraph-link-definition/library/types/note.md +0 -3
  370. package/fixtures/cases/prd-definition/library/types/task.md +0 -15
  371. package/fixtures/cases/quoted-link-definition/library/types/note.md +0 -3
  372. package/fixtures/cases/referenced-missing-file/library/types/person.md +0 -5
  373. package/fixtures/cases/referenced-missing-file/library/types/task.md +0 -8
  374. package/fixtures/cases/structured-section/library/types/task.md +0 -8
  375. package/fixtures/cases/truncated-link-definition/library/types/note.md +0 -3
  376. package/fixtures/cases/unresolved-link/library/types/task.md +0 -7
  377. package/fixtures/cases/valid-typed-document/library/types/person.md +0 -5
  378. package/fixtures/cases/valid-typed-document/library/types/task.md +0 -12
  379. package/fixtures/cases/wide-item-fence-link/library/types/note.md +0 -3
  380. package/markdown-syntax-profile.md +0 -9
  381. /package/fixtures/cases/{prd-definition → absent-optional-field}/context.json +0 -0
  382. /package/fixtures/cases/{prd-definition → absent-optional-field}/expected.json +0 -0
package/dist/divide.js ADDED
@@ -0,0 +1,310 @@
1
+ import { blockRanges, headingLines } from './blocks.js';
2
+ import { projectionInput, rangeText } from './project.js';
3
+ import { refusal } from './refuse.js';
4
+ const SMALLEST_BUDGET = 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, budget) {
90
+ const limit = from + budget;
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
+ let text = state.content.slice(extent.start, extent.end);
135
+ const masks = [];
136
+ for (const edit of state.edits) {
137
+ if (edit.start < extent.start || edit.end > extent.end)
138
+ continue;
139
+ const from = edit.start - extent.start;
140
+ const to = edit.end - extent.start;
141
+ text = `${text.slice(0, from)}${'x'.repeat(to - from)}${text.slice(to)}`;
142
+ masks.push({ start: from, end: to });
143
+ }
144
+ return {
145
+ text,
146
+ masks,
147
+ piece: (from, to) => {
148
+ const cut = { start: extent.start + from, end: extent.start + to };
149
+ return { ...cut, text: textOf(state, cut) };
150
+ },
151
+ };
152
+ }
153
+ function valueCutting(value) {
154
+ return {
155
+ text: value.text,
156
+ masks: [],
157
+ piece: (from, to) => ({ start: value.start, end: value.end, text: value.text.slice(from, to) }),
158
+ };
159
+ }
160
+ function prefixOf(state, body) {
161
+ if (body.emitted === 0 || body.heading.length >= state.budget)
162
+ return '';
163
+ return body.heading;
164
+ }
165
+ function available(state, body) {
166
+ return state.budget - prefixOf(state, body).length;
167
+ }
168
+ function emit(state, body, piece, bare = false) {
169
+ if (piece.text.trim() === '')
170
+ return;
171
+ const text = (bare ? '' : prefixOf(state, body)) + piece.text;
172
+ state.spans.push({ start: piece.start, end: piece.end, text });
173
+ body.emitted += 1;
174
+ }
175
+ function merge(run) {
176
+ return {
177
+ start: Math.min(...run.map((unit) => unit.start)),
178
+ end: Math.max(...run.map((unit) => unit.end)),
179
+ text: run.map((unit) => unit.text).join(''),
180
+ };
181
+ }
182
+ function divideUnits(state, body, units) {
183
+ let run = [];
184
+ let length = 0;
185
+ const flush = () => {
186
+ if (run.length === 0)
187
+ return;
188
+ emit(state, body, merge(run));
189
+ run = [];
190
+ length = 0;
191
+ };
192
+ for (const unit of units) {
193
+ if (run.length > 0 && length + unit.text.length > available(state, body))
194
+ flush();
195
+ if (unit.text.length > available(state, body)) {
196
+ flush();
197
+ unit.descend();
198
+ continue;
199
+ }
200
+ run.push(unit);
201
+ length += unit.text.length;
202
+ }
203
+ flush();
204
+ }
205
+ function divideBound(state, body, cutting, range) {
206
+ let start = range.start;
207
+ while (start < range.end) {
208
+ const bare = available(state, body) < characterLength(cutting.text, start);
209
+ const room = bare ? state.budget : available(state, body);
210
+ const stop = boundOf(cutting, start, range.end, room);
211
+ const piece = cutting.piece(start, stop);
212
+ if (cutting.masks.length === 0 || piece.text.length <= room) {
213
+ emit(state, body, piece, bare);
214
+ }
215
+ else {
216
+ divideBound(state, body, valueCutting(piece), { start: 0, end: piece.text.length });
217
+ }
218
+ start = stop;
219
+ }
220
+ }
221
+ function divideSentences(state, body, cutting) {
222
+ const cut = cutting.piece;
223
+ const bounds = sentenceBounds(cutting.text);
224
+ let index = 0;
225
+ while (index + 1 < bounds.length) {
226
+ const alone = { start: bounds[index], end: bounds[index + 1] };
227
+ if (cut(alone.start, alone.end).text.length > available(state, body)) {
228
+ divideBound(state, body, cutting, alone);
229
+ index += 1;
230
+ continue;
231
+ }
232
+ const carried = bounds[Math.max(index - 1, 0)];
233
+ const from = cut(carried, alone.end).text.length <= available(state, body) ? carried : alone.start;
234
+ let last = index;
235
+ while (last + 2 < bounds.length &&
236
+ cut(from, bounds[last + 2]).text.length <= available(state, body)) {
237
+ last += 1;
238
+ }
239
+ emit(state, body, cut(from, bounds[last + 1]));
240
+ index = last + 1;
241
+ }
242
+ }
243
+ function blockUnit(state, body, block) {
244
+ return {
245
+ start: block.start,
246
+ end: block.end,
247
+ text: textOf(state, block),
248
+ descend: () => divideSentences(state, body, sourceCutting(state, block)),
249
+ };
250
+ }
251
+ function valueUnit(state, body, value) {
252
+ return {
253
+ start: value.start,
254
+ end: value.end,
255
+ text: value.text,
256
+ descend: () => divideSentences(state, body, valueCutting(value)),
257
+ };
258
+ }
259
+ function nodeUnit(state, subject) {
260
+ return {
261
+ start: subject.start,
262
+ end: subject.end,
263
+ text: textOf(state, subject),
264
+ descend: () => divideNode(state, subject),
265
+ };
266
+ }
267
+ function ownBlocks(subject, end, blocks) {
268
+ const first = blocks[0];
269
+ return first === undefined
270
+ ? [{ start: subject.start, end }]
271
+ : [{ start: subject.start, end: first.end }, ...blocks.slice(1)];
272
+ }
273
+ function divideNode(state, subject) {
274
+ const end = subject.children[0]?.start ?? subject.end;
275
+ const blocks = blockRanges(state.content, subject.bodyStart, end);
276
+ const children = { heading: '', emitted: 0 };
277
+ if (blocks.length === 0 && subject.children.length > 0) {
278
+ const [first, ...rest] = subject.children;
279
+ const led = [{ ...first, start: subject.start }, ...rest];
280
+ divideUnits(state, children, led.map((child) => nodeUnit(state, child)));
281
+ return;
282
+ }
283
+ const body = { heading: subject.heading, emitted: 0 };
284
+ const own = ownBlocks(subject, end, blocks);
285
+ divideUnits(state, body, own.map((block) => blockUnit(state, body, block)));
286
+ divideUnits(state, children, subject.children.map((child) => nodeUnit(state, child)));
287
+ }
288
+ function divideInput(state, input) {
289
+ const body = { heading: '', emitted: 0 };
290
+ divideUnits(state, body, [
291
+ ...input.values.map((value) => valueUnit(state, body, value)),
292
+ ...input.ranges.flatMap((range) => forest(state, range).map((subject) => nodeUnit(state, subject))),
293
+ ]);
294
+ }
295
+ export function divide(document, file, context) {
296
+ if (!Number.isInteger(context.budget) || context.budget < SMALLEST_BUDGET) {
297
+ return { ok: false, refusal: refusal(file, 'division-budget') };
298
+ }
299
+ const result = projectionInput(document, file, context);
300
+ if (!result.ok)
301
+ return { ok: false, refusal: result.refusal };
302
+ const state = {
303
+ content: document.content,
304
+ edits: result.input.edits,
305
+ budget: context.budget,
306
+ spans: [],
307
+ };
308
+ divideInput(state, result.input);
309
+ return { ok: true, spans: byteBounds(document.content, state.spans) };
310
+ }
@@ -1,6 +1,17 @@
1
- import type { ApplyResult, Change, Document, Link, ParseResult } from './types.js';
1
+ import { type Definition } from './definition.js';
2
+ import type { ApplyResult, Change, Document, Link, ParseResult, Refusal } from './types.js';
3
+ import { type YamlMap } from './yaml.js';
2
4
  export declare function parse(content: string, file?: string): ParseResult;
5
+ export declare function relativize(document: Document, file: string, handle: string, definition?: Definition): ApplyResult;
6
+ export declare function relativizeBody(body: string, file: string, handle: string): {
7
+ readonly outcome: 'applied';
8
+ readonly body: string;
9
+ } | {
10
+ readonly outcome: 'refuse';
11
+ readonly refusal: Refusal;
12
+ };
3
13
  export declare function links(document: Document, file: string): readonly Link[];
4
14
  export declare function apply(document: Document, change: Change): ApplyResult;
5
15
  export declare function serialize(document: Document): string;
16
+ export declare function frontmatter(document: Document): YamlMap | null;
6
17
  //# 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;AAMhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAYL,KAAK,OAAO,EAEb,MAAM,WAAW,CAAC;AAwCnB,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,WAAW,CAkD7D;AA2KD,wBAAgB,UAAU,CACxB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,UAAU,GACtB,WAAW,CAYb;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GAEZ;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAO5D;AAED,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,CAerE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAEpD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CAE9D"}