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

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 (320) hide show
  1. package/API.md +300 -0
  2. package/README.md +34 -189
  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 +42 -27
  10. package/dist/definition.d.ts.map +1 -1
  11. package/dist/definition.js +473 -152
  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 +2 -0
  16. package/dist/document.d.ts.map +1 -1
  17. package/dist/document.js +89 -120
  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 +9 -2
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +6 -3
  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 +2 -3
  28. package/dist/paths.d.ts.map +1 -1
  29. package/dist/paths.js +27 -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 +77 -94
  34. package/dist/refuse.d.ts.map +1 -1
  35. package/dist/refuse.js +2 -10
  36. package/dist/schema.d.ts +7 -5
  37. package/dist/schema.d.ts.map +1 -1
  38. package/dist/schema.js +156 -41
  39. package/dist/sections.d.ts +2 -1
  40. package/dist/sections.d.ts.map +1 -1
  41. package/dist/sections.js +44 -66
  42. package/dist/types.d.ts +30 -2
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/types.js +1 -3
  45. package/dist/validate.d.ts +3 -2
  46. package/dist/validate.d.ts.map +1 -1
  47. package/dist/validate.js +138 -141
  48. package/dist/version.d.ts +1 -1
  49. package/dist/version.d.ts.map +1 -1
  50. package/dist/version.js +1 -3
  51. package/dist/yaml.d.ts +2 -0
  52. package/dist/yaml.d.ts.map +1 -1
  53. package/dist/yaml.js +254 -190
  54. package/fixtures/README.md +85 -56
  55. package/fixtures/cases/absent-optional-field/library/companies/acme.md +4 -0
  56. package/fixtures/cases/absent-optional-field/library/deals/lead.md +6 -0
  57. package/fixtures/cases/absent-optional-field/schema.yaml +56 -0
  58. package/fixtures/cases/binary-any-reference/expected.json +1 -2
  59. package/fixtures/cases/binary-any-reference/schema.yaml +4 -0
  60. package/fixtures/cases/binary-document-collision/expected.json +1 -2
  61. package/fixtures/cases/binary-document-collision/schema.yaml +1 -0
  62. package/fixtures/cases/binary-link-outside-collection/expected.json +1 -2
  63. package/fixtures/cases/binary-link-outside-collection/schema.yaml +1 -0
  64. package/fixtures/cases/binary-prototype-reference/expected.json +1 -2
  65. package/fixtures/cases/binary-prototype-reference/schema.yaml +4 -0
  66. package/fixtures/cases/binary-typed-reference/expected.json +1 -2
  67. package/fixtures/cases/binary-typed-reference/schema.yaml +5 -0
  68. package/fixtures/cases/boolean-field/context.json +1 -0
  69. package/fixtures/cases/boolean-field/expected.json +6 -0
  70. package/fixtures/cases/boolean-field/library/companies/acme.md +4 -0
  71. package/fixtures/cases/boolean-field/library/deals/renewal.md +31 -0
  72. package/fixtures/cases/boolean-field/schema.yaml +56 -0
  73. package/fixtures/cases/bracketed-link-definition/schema.yaml +6 -0
  74. package/fixtures/cases/closed-nested-object/context.json +1 -0
  75. package/fixtures/cases/closed-nested-object/expected.json +6 -0
  76. package/fixtures/cases/closed-nested-object/library/companies/acme.md +4 -0
  77. package/fixtures/cases/closed-nested-object/library/deals/renewal.md +32 -0
  78. package/fixtures/cases/closed-nested-object/schema.yaml +56 -0
  79. package/fixtures/cases/composed-root-reference/context.json +1 -0
  80. package/fixtures/cases/composed-root-reference/expected.json +6 -0
  81. package/fixtures/cases/composed-root-reference/library/a.md +5 -0
  82. package/fixtures/cases/composed-root-reference/schema.yaml +13 -0
  83. package/fixtures/cases/date-time-format/context.json +1 -0
  84. package/fixtures/cases/date-time-format/expected.json +6 -0
  85. package/fixtures/cases/date-time-format/library/companies/acme.md +4 -0
  86. package/fixtures/cases/date-time-format/library/deals/renewal.md +31 -0
  87. package/fixtures/cases/date-time-format/schema.yaml +56 -0
  88. package/fixtures/cases/declared-binary-links/schema.yaml +1 -0
  89. package/fixtures/cases/default-unfilled/context.json +1 -0
  90. package/fixtures/cases/default-unfilled/expected.json +6 -0
  91. package/fixtures/cases/default-unfilled/library/companies/acme.md +4 -0
  92. package/fixtures/cases/default-unfilled/library/deals/renewal.md +29 -0
  93. package/fixtures/cases/default-unfilled/schema.yaml +56 -0
  94. package/fixtures/cases/defs-pattern/context.json +1 -0
  95. package/fixtures/cases/defs-pattern/expected.json +6 -0
  96. package/fixtures/cases/defs-pattern/library/companies/acme.md +4 -0
  97. package/fixtures/cases/defs-pattern/library/deals/renewal.md +31 -0
  98. package/fixtures/cases/defs-pattern/schema.yaml +56 -0
  99. package/fixtures/cases/dependent-rule/context.json +1 -0
  100. package/fixtures/cases/dependent-rule/expected.json +6 -0
  101. package/fixtures/cases/dependent-rule/library/companies/acme.md +4 -0
  102. package/fixtures/cases/dependent-rule/library/deals/renewal.md +30 -0
  103. package/fixtures/cases/dependent-rule/schema.yaml +56 -0
  104. package/fixtures/cases/duplicate-link-definition/schema.yaml +6 -0
  105. package/fixtures/cases/email-format/context.json +1 -0
  106. package/fixtures/cases/email-format/expected.json +6 -0
  107. package/fixtures/cases/email-format/library/companies/acme.md +4 -0
  108. package/fixtures/cases/email-format/library/deals/renewal.md +31 -0
  109. package/fixtures/cases/email-format/schema.yaml +56 -0
  110. package/fixtures/cases/fenced-link-definition/schema.yaml +6 -0
  111. package/fixtures/cases/field-enum/expected.json +2 -3
  112. package/fixtures/cases/field-enum/schema.yaml +7 -0
  113. package/fixtures/cases/frontmatter-schema/context.json +1 -0
  114. package/fixtures/cases/frontmatter-schema/expected.json +5 -0
  115. package/fixtures/cases/frontmatter-schema/schema.yaml +5 -0
  116. package/fixtures/cases/integer-field/context.json +1 -0
  117. package/fixtures/cases/integer-field/expected.json +6 -0
  118. package/fixtures/cases/integer-field/library/companies/acme.md +4 -0
  119. package/fixtures/cases/integer-field/library/deals/renewal.md +31 -0
  120. package/fixtures/cases/integer-field/schema.yaml +56 -0
  121. package/fixtures/cases/interrupted-link-definition/schema.yaml +1 -0
  122. package/fixtures/cases/json-schema-constructs/context.json +1 -0
  123. package/fixtures/cases/json-schema-constructs/expected.json +1 -0
  124. package/fixtures/cases/json-schema-constructs/library/companies/acme.md +4 -0
  125. package/fixtures/cases/json-schema-constructs/library/deals/renewal.md +31 -0
  126. package/fixtures/cases/json-schema-constructs/schema.yaml +56 -0
  127. package/fixtures/cases/list-of-objects-closed/context.json +1 -0
  128. package/fixtures/cases/list-of-objects-closed/expected.json +6 -0
  129. package/fixtures/cases/list-of-objects-closed/library/companies/acme.md +4 -0
  130. package/fixtures/cases/list-of-objects-closed/library/deals/renewal.md +32 -0
  131. package/fixtures/cases/list-of-objects-closed/schema.yaml +56 -0
  132. package/fixtures/cases/list-of-objects-item/context.json +1 -0
  133. package/fixtures/cases/list-of-objects-item/expected.json +6 -0
  134. package/fixtures/cases/list-of-objects-item/library/companies/acme.md +4 -0
  135. package/fixtures/cases/list-of-objects-item/library/deals/renewal.md +31 -0
  136. package/fixtures/cases/list-of-objects-item/schema.yaml +56 -0
  137. package/fixtures/cases/list-size/context.json +1 -0
  138. package/fixtures/cases/list-size/expected.json +6 -0
  139. package/fixtures/cases/list-size/library/companies/acme.md +4 -0
  140. package/fixtures/cases/list-size/library/deals/renewal.md +31 -0
  141. package/fixtures/cases/list-size/schema.yaml +56 -0
  142. package/fixtures/cases/long-fence-link-definition/schema.yaml +1 -0
  143. package/fixtures/cases/malformed-definition/expected.json +2 -4
  144. package/fixtures/cases/malformed-definition/schema.yaml +3 -0
  145. package/fixtures/cases/member-document/context.json +1 -0
  146. package/fixtures/cases/member-document/expected.json +1 -0
  147. package/fixtures/cases/member-document/library/people/ana.md +5 -0
  148. package/fixtures/cases/member-document/schema.yaml +5 -0
  149. package/fixtures/cases/missing-binary-image/expected.json +1 -2
  150. package/fixtures/cases/missing-binary-image/schema.yaml +1 -0
  151. package/fixtures/cases/missing-binary-link/expected.json +1 -2
  152. package/fixtures/cases/missing-binary-link/schema.yaml +1 -0
  153. package/fixtures/cases/missing-required-field/expected.json +2 -3
  154. package/fixtures/cases/missing-required-field/schema.yaml +7 -0
  155. package/fixtures/cases/missing-section-item-kind/expected.json +2 -4
  156. package/fixtures/cases/missing-section-item-kind/schema.yaml +6 -0
  157. package/fixtures/cases/misspelled-key/context.json +1 -0
  158. package/fixtures/cases/misspelled-key/expected.json +6 -0
  159. package/fixtures/cases/misspelled-key/library/companies/acme.md +4 -0
  160. package/fixtures/cases/misspelled-key/library/deals/renewal.md +32 -0
  161. package/fixtures/cases/misspelled-key/schema.yaml +56 -0
  162. package/fixtures/cases/nested-defs/context.json +1 -0
  163. package/fixtures/cases/nested-defs/expected.json +6 -0
  164. package/fixtures/cases/nested-defs/library/deal.md +6 -0
  165. package/fixtures/cases/nested-defs/schema.yaml +11 -0
  166. package/fixtures/cases/nested-required-field/context.json +1 -0
  167. package/fixtures/cases/nested-required-field/expected.json +6 -0
  168. package/fixtures/cases/nested-required-field/library/companies/acme.md +4 -0
  169. package/fixtures/cases/nested-required-field/library/deals/renewal.md +30 -0
  170. package/fixtures/cases/nested-required-field/schema.yaml +56 -0
  171. package/fixtures/cases/null-refused/context.json +1 -0
  172. package/fixtures/cases/null-refused/expected.json +6 -0
  173. package/fixtures/cases/null-refused/library/companies/acme.md +4 -0
  174. package/fixtures/cases/null-refused/library/deals/renewal.md +31 -0
  175. package/fixtures/cases/null-refused/schema.yaml +56 -0
  176. package/fixtures/cases/numeric-range/context.json +1 -0
  177. package/fixtures/cases/numeric-range/expected.json +6 -0
  178. package/fixtures/cases/numeric-range/library/companies/acme.md +4 -0
  179. package/fixtures/cases/numeric-range/library/deals/renewal.md +31 -0
  180. package/fixtures/cases/numeric-range/schema.yaml +56 -0
  181. package/fixtures/cases/one-of-variant/context.json +1 -0
  182. package/fixtures/cases/one-of-variant/expected.json +6 -0
  183. package/fixtures/cases/one-of-variant/library/companies/acme.md +4 -0
  184. package/fixtures/cases/one-of-variant/library/deals/renewal.md +31 -0
  185. package/fixtures/cases/one-of-variant/schema.yaml +56 -0
  186. package/fixtures/cases/open-map-value/context.json +1 -0
  187. package/fixtures/cases/open-map-value/expected.json +6 -0
  188. package/fixtures/cases/open-map-value/library/companies/acme.md +4 -0
  189. package/fixtures/cases/open-map-value/library/deals/renewal.md +31 -0
  190. package/fixtures/cases/open-map-value/schema.yaml +56 -0
  191. package/fixtures/cases/paragraph-link-definition/schema.yaml +1 -0
  192. package/fixtures/cases/prototype-field/expected.json +2 -3
  193. package/fixtures/cases/prototype-field/schema.yaml +6 -0
  194. package/fixtures/cases/quoted-link-definition/expected.json +1 -2
  195. package/fixtures/cases/quoted-link-definition/schema.yaml +1 -0
  196. package/fixtures/cases/referenced-missing-file/expected.json +0 -1
  197. package/fixtures/cases/referenced-missing-file/schema.yaml +11 -0
  198. package/fixtures/cases/remote-ref/context.json +1 -0
  199. package/fixtures/cases/remote-ref/expected.json +5 -0
  200. package/fixtures/cases/remote-ref/schema.yaml +3 -0
  201. package/fixtures/cases/second-member-document/context.json +1 -0
  202. package/fixtures/cases/second-member-document/expected.json +5 -0
  203. package/fixtures/cases/second-member-document/schema.yaml +4 -0
  204. package/fixtures/cases/section-item-enum/context.json +1 -0
  205. package/fixtures/cases/section-item-enum/expected.json +6 -0
  206. package/fixtures/cases/section-item-enum/library/task.md +8 -0
  207. package/fixtures/cases/section-item-enum/schema.yaml +3 -0
  208. package/fixtures/cases/section-item-kind/context.json +1 -0
  209. package/fixtures/cases/section-item-kind/expected.json +6 -0
  210. package/fixtures/cases/section-item-kind/library/task.md +8 -0
  211. package/fixtures/cases/section-item-kind/schema.yaml +3 -0
  212. package/fixtures/cases/section-items/context.json +1 -0
  213. package/fixtures/cases/section-items/expected.json +1 -0
  214. package/fixtures/cases/section-items/library/other.md +3 -0
  215. package/fixtures/cases/section-items/library/page.md +42 -0
  216. package/fixtures/cases/section-items/schema.yaml +10 -0
  217. package/fixtures/cases/section-reference-path/context.json +1 -0
  218. package/fixtures/cases/section-reference-path/expected.json +6 -0
  219. package/fixtures/cases/section-reference-path/library/other.md +3 -0
  220. package/fixtures/cases/section-reference-path/library/page.md +7 -0
  221. package/fixtures/cases/section-reference-path/schema.yaml +3 -0
  222. package/fixtures/cases/section-reference-type/context.json +1 -0
  223. package/fixtures/cases/section-reference-type/expected.json +6 -0
  224. package/fixtures/cases/section-reference-type/library/note.md +1 -0
  225. package/fixtures/cases/section-reference-type/library/page.md +7 -0
  226. package/fixtures/cases/section-reference-type/schema.yaml +3 -0
  227. package/fixtures/cases/shortcut-reference-link/context.json +1 -0
  228. package/fixtures/cases/shortcut-reference-link/expected.json +5 -0
  229. package/fixtures/cases/shortcut-reference-link/library/item.md +10 -0
  230. package/fixtures/cases/shortcut-reference-link/schema.yaml +6 -0
  231. package/fixtures/cases/string-length/context.json +1 -0
  232. package/fixtures/cases/string-length/expected.json +6 -0
  233. package/fixtures/cases/string-length/library/companies/acme.md +4 -0
  234. package/fixtures/cases/string-length/library/deals/renewal.md +31 -0
  235. package/fixtures/cases/string-length/schema.yaml +56 -0
  236. package/fixtures/cases/structured-section/expected.json +1 -2
  237. package/fixtures/cases/structured-section/schema.yaml +7 -0
  238. package/fixtures/cases/submission-keys/context.json +1 -0
  239. package/fixtures/cases/submission-keys/expected.json +1 -0
  240. package/fixtures/cases/submission-keys/library/notes/visitor.md +8 -0
  241. package/fixtures/cases/submission-keys/schema.yaml +4 -0
  242. package/fixtures/cases/text-field-kind/context.json +1 -0
  243. package/fixtures/cases/text-field-kind/expected.json +6 -0
  244. package/fixtures/cases/text-field-kind/library/page.md +4 -0
  245. package/fixtures/cases/text-field-kind/schema.yaml +4 -0
  246. package/fixtures/cases/truncated-link-definition/expected.json +1 -2
  247. package/fixtures/cases/truncated-link-definition/schema.yaml +1 -0
  248. package/fixtures/cases/types-folder-content/context.json +1 -0
  249. package/fixtures/cases/types-folder-content/expected.json +1 -0
  250. package/fixtures/cases/types-folder-content/library/types/task.md +4 -0
  251. package/fixtures/cases/types-folder-content/schema.yaml +4 -0
  252. package/fixtures/cases/unclosed-frontmatter/expected.json +1 -2
  253. package/fixtures/cases/undeclared-field/expected.json +2 -3
  254. package/fixtures/cases/undeclared-field/schema.yaml +6 -0
  255. package/fixtures/cases/unevaluated-items-closed/context.json +1 -0
  256. package/fixtures/cases/unevaluated-items-closed/expected.json +6 -0
  257. package/fixtures/cases/unevaluated-items-closed/library/trip.md +6 -0
  258. package/fixtures/cases/unevaluated-items-closed/schema.yaml +10 -0
  259. package/fixtures/cases/unknown-type/context.json +1 -0
  260. package/fixtures/cases/unknown-type/expected.json +6 -0
  261. package/fixtures/cases/unknown-type/library/item.md +3 -0
  262. package/fixtures/cases/unknown-type/schema.yaml +3 -0
  263. package/fixtures/cases/unlisted-reference-type/context.json +1 -0
  264. package/fixtures/cases/unlisted-reference-type/expected.json +5 -0
  265. package/fixtures/cases/unlisted-reference-type/schema.yaml +3 -0
  266. package/fixtures/cases/unresolved-link/expected.json +1 -2
  267. package/fixtures/cases/unresolved-link/schema.yaml +6 -0
  268. package/fixtures/cases/valid-typed-document/schema.yaml +16 -0
  269. package/fixtures/cases/wide-item-fence-link/schema.yaml +1 -0
  270. package/fixtures/division.json +409 -0
  271. package/fixtures/projection.json +90 -21
  272. package/package.json +3 -12
  273. package/dist/definition.js.map +0 -1
  274. package/dist/document.js.map +0 -1
  275. package/dist/index.js.map +0 -1
  276. package/dist/links.js.map +0 -1
  277. package/dist/paths.js.map +0 -1
  278. package/dist/profile.js.map +0 -1
  279. package/dist/project.js.map +0 -1
  280. package/dist/refuse.js.map +0 -1
  281. package/dist/schema.js.map +0 -1
  282. package/dist/sections.js.map +0 -1
  283. package/dist/types.js.map +0 -1
  284. package/dist/validate.js.map +0 -1
  285. package/dist/version.js.map +0 -1
  286. package/dist/yaml.js.map +0 -1
  287. package/fixtures/cases/binary-any-reference/library/types/note.md +0 -5
  288. package/fixtures/cases/binary-document-collision/library/types/note.md +0 -3
  289. package/fixtures/cases/binary-link-outside-collection/library/types/note.md +0 -3
  290. package/fixtures/cases/binary-prototype-reference/library/types/note.md +0 -5
  291. package/fixtures/cases/binary-typed-reference/library/types/note.md +0 -5
  292. package/fixtures/cases/binary-typed-reference/library/types/person.md +0 -3
  293. package/fixtures/cases/bracketed-link-definition/library/types/task.md +0 -7
  294. package/fixtures/cases/declared-binary-links/library/types/note.md +0 -3
  295. package/fixtures/cases/duplicate-link-definition/library/types/task.md +0 -7
  296. package/fixtures/cases/fenced-link-definition/library/types/task.md +0 -7
  297. package/fixtures/cases/field-enum/library/types/task.md +0 -8
  298. package/fixtures/cases/interrupted-link-definition/library/types/note.md +0 -3
  299. package/fixtures/cases/long-fence-link-definition/library/types/note.md +0 -3
  300. package/fixtures/cases/malformed-definition/library/types/task.md +0 -5
  301. package/fixtures/cases/missing-binary-image/library/types/note.md +0 -3
  302. package/fixtures/cases/missing-binary-link/library/types/note.md +0 -3
  303. package/fixtures/cases/missing-required-field/library/types/task.md +0 -8
  304. package/fixtures/cases/missing-section-item-kind/library/types/task.md +0 -7
  305. package/fixtures/cases/paragraph-link-definition/library/types/note.md +0 -3
  306. package/fixtures/cases/prd-definition/library/types/task.md +0 -16
  307. package/fixtures/cases/prototype-field/library/types/task.md +0 -7
  308. package/fixtures/cases/quoted-link-definition/library/types/note.md +0 -3
  309. package/fixtures/cases/referenced-missing-file/library/types/person.md +0 -5
  310. package/fixtures/cases/referenced-missing-file/library/types/task.md +0 -8
  311. package/fixtures/cases/structured-section/library/types/task.md +0 -8
  312. package/fixtures/cases/truncated-link-definition/library/types/note.md +0 -3
  313. package/fixtures/cases/undeclared-field/library/types/task.md +0 -7
  314. package/fixtures/cases/unresolved-link/library/types/task.md +0 -7
  315. package/fixtures/cases/valid-typed-document/library/types/person.md +0 -5
  316. package/fixtures/cases/valid-typed-document/library/types/task.md +0 -13
  317. package/fixtures/cases/wide-item-fence-link/library/types/note.md +0 -3
  318. package/markdown-syntax-profile.md +0 -9
  319. /package/fixtures/cases/{prd-definition → absent-optional-field}/context.json +0 -0
  320. /package/fixtures/cases/{prd-definition → absent-optional-field}/expected.json +0 -0
@@ -1,171 +1,492 @@
1
- import { typeNameFromPath } from './paths.js';
2
- import { refusal } from './refuse.js';
3
- function refuse(file, rule, location) {
4
- return location === undefined ? refusal(file, rule) : refusal(file, rule, {
5
- location
6
- });
7
- }
8
- function isRecord(value) {
9
- return value !== null && typeof value === 'object' && !Array.isArray(value);
10
- }
11
- function requiredFlag(value) {
12
- if (value === undefined) return false;
13
- if (typeof value === 'boolean') return value;
1
+ import { MEMBER_FIELD, RECEIVED_FIELD, SITE_FIELD } from './fields.js';
2
+ import { equalValue, isRecord, jsValue, parseYamlMapping, YamlError } from './yaml.js';
3
+ export const JSON_TYPES = [
4
+ 'string',
5
+ 'number',
6
+ 'integer',
7
+ 'boolean',
8
+ 'object',
9
+ 'array',
10
+ 'null',
11
+ ];
12
+ export const BUILT_IN_TYPE = 'any';
13
+ export const ATTACHMENT = 'attachment';
14
+ const SCALAR_TYPES = new Set(['string', 'number', 'integer', 'boolean']);
15
+ const DEFS_REFERENCE = '#/$defs/';
16
+ const UNRESOLVED = /[\u0000-\u001f\u007f%[\]\\^{|}]|\s$/u;
17
+ const ARRAY_INDEX = /^(?:0|[1-9][0-9]*)$/u;
18
+ const HOUSE_KEYS = {
19
+ type: { prose: false },
20
+ [SITE_FIELD]: { prose: false },
21
+ [RECEIVED_FIELD]: { prose: false },
22
+ };
23
+ function refuse(rule, location) {
24
+ return location === undefined ? { rule } : { rule, location };
25
+ }
26
+ export function escapePointer(key) {
27
+ return key.replaceAll('~', '~0').replaceAll('/', '~1');
28
+ }
29
+ function unescapePointer(segment) {
30
+ return segment.replaceAll('~1', '/').replaceAll('~0', '~');
31
+ }
32
+ export function refTarget(reference, defs) {
33
+ if (!reference.startsWith(DEFS_REFERENCE) || UNRESOLVED.test(reference))
34
+ return undefined;
35
+ const segments = reference.slice(DEFS_REFERENCE.length).split('/');
36
+ const [name = '', ...rest] = segments.map(unescapePointer);
37
+ if (segments.some((segment) => escapePointer(unescapePointer(segment)) !== segment))
38
+ return undefined;
39
+ if (!Object.hasOwn(defs, name))
40
+ return undefined;
41
+ let node = defs[name];
42
+ for (let index = 0; index < rest.length; index += 1) {
43
+ const keyword = rest[index];
44
+ if (!isRecord(node) || !Object.hasOwn(node, keyword) || !Object.hasOwn(KEYWORDS, keyword))
45
+ return undefined;
46
+ const check = KEYWORDS[keyword];
47
+ const held = node[keyword];
48
+ if (check === SCHEMA) {
49
+ node = held;
50
+ continue;
51
+ }
52
+ const key = rest[index + 1];
53
+ index += 1;
54
+ if (check === SCHEMA_LIST && Array.isArray(held) && key !== undefined && ARRAY_INDEX.test(key))
55
+ node = held[Number(key)];
56
+ else if (check === SCHEMA_MAP &&
57
+ isRecord(held) &&
58
+ key !== undefined &&
59
+ Object.hasOwn(held, key))
60
+ node = held[key];
61
+ else
62
+ return undefined;
63
+ if (node === undefined)
64
+ return undefined;
65
+ }
66
+ return { name, node };
67
+ }
68
+ function compiles(pattern) {
69
+ if (typeof pattern !== 'string')
70
+ return false;
71
+ try {
72
+ new RegExp(pattern, 'u');
73
+ return true;
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ function finite(value) {
80
+ return typeof value === 'number' && Number.isFinite(value);
81
+ }
82
+ function count(value) {
83
+ return Number.isSafeInteger(value) && value >= 0;
84
+ }
85
+ function strings(value) {
86
+ return (Array.isArray(value) &&
87
+ value.every((item) => typeof item === 'string') &&
88
+ new Set(value).size === value.length);
89
+ }
90
+ function schemaFailure(value, at, context) {
91
+ if (typeof value === 'boolean')
92
+ return undefined;
93
+ if (!isRecord(value))
94
+ return refuse('schema', at);
95
+ for (const [key, held] of Object.entries(value)) {
96
+ const where = `${at}/${escapePointer(key)}`;
97
+ if (!Object.hasOwn(KEYWORDS, key))
98
+ return refuse('schema-keyword', where);
99
+ const check = KEYWORDS[key];
100
+ if (check === SCHEMA) {
101
+ const failure = schemaFailure(held, where, context);
102
+ if (failure !== undefined)
103
+ return failure;
104
+ continue;
105
+ }
106
+ if (check === SCHEMA_LIST) {
107
+ if (!Array.isArray(held) || held.length === 0)
108
+ return refuse(key, where);
109
+ for (const [index, item] of held.entries()) {
110
+ const failure = schemaFailure(item, `${where}/${index}`, context);
111
+ if (failure !== undefined)
112
+ return failure;
113
+ }
114
+ continue;
115
+ }
116
+ if (check === SCHEMA_MAP) {
117
+ if (!isRecord(held))
118
+ return refuse(key, where);
119
+ for (const [name, item] of Object.entries(held)) {
120
+ if (key === 'patternProperties' && !compiles(name))
121
+ return refuse(key, `${where}/${escapePointer(name)}`);
122
+ const failure = schemaFailure(item, `${where}/${escapePointer(name)}`, context);
123
+ if (failure !== undefined)
124
+ return failure;
125
+ }
126
+ continue;
127
+ }
128
+ if (!check(held, where, value, context))
129
+ return refuse(key, where);
130
+ }
14
131
  return undefined;
15
132
  }
16
- function stringList(value) {
17
- if (!Array.isArray(value) || value.length === 0) return undefined;
18
- if (!value.every((item)=>typeof item === 'string' && item !== '')) return undefined;
19
- return value;
133
+ const SCHEMA = () => true;
134
+ const SCHEMA_LIST = () => true;
135
+ const SCHEMA_MAP = () => true;
136
+ const ANY = () => true;
137
+ const TEXT = (value) => typeof value === 'string';
138
+ const FLAG = (value) => typeof value === 'boolean';
139
+ const NUMBER = finite;
140
+ const COUNT = count;
141
+ const KEYWORDS = {
142
+ $comment: TEXT,
143
+ $ref: (value, _at, _node, context) => typeof value === 'string' && refTarget(value, context.defs) !== undefined,
144
+ $defs: SCHEMA_MAP,
145
+ allOf: SCHEMA_LIST,
146
+ anyOf: SCHEMA_LIST,
147
+ oneOf: SCHEMA_LIST,
148
+ prefixItems: SCHEMA_LIST,
149
+ not: SCHEMA,
150
+ if: SCHEMA,
151
+ then: SCHEMA,
152
+ else: SCHEMA,
153
+ items: SCHEMA,
154
+ contains: SCHEMA,
155
+ additionalProperties: SCHEMA,
156
+ unevaluatedProperties: SCHEMA,
157
+ unevaluatedItems: SCHEMA,
158
+ propertyNames: SCHEMA,
159
+ contentSchema: SCHEMA,
160
+ properties: SCHEMA_MAP,
161
+ patternProperties: SCHEMA_MAP,
162
+ dependentSchemas: SCHEMA_MAP,
163
+ type: (value) => (typeof value === 'string' && JSON_TYPES.includes(value)) ||
164
+ (Array.isArray(value) &&
165
+ value.length > 0 &&
166
+ strings(value) &&
167
+ value.every((item) => JSON_TYPES.includes(item))),
168
+ enum: (value) => Array.isArray(value) && value.length > 0,
169
+ const: ANY,
170
+ multipleOf: (value) => finite(value) && value > 0,
171
+ maximum: NUMBER,
172
+ exclusiveMaximum: NUMBER,
173
+ minimum: NUMBER,
174
+ exclusiveMinimum: NUMBER,
175
+ maxLength: COUNT,
176
+ minLength: COUNT,
177
+ maxItems: COUNT,
178
+ minItems: COUNT,
179
+ maxContains: COUNT,
180
+ minContains: COUNT,
181
+ maxProperties: COUNT,
182
+ minProperties: COUNT,
183
+ pattern: compiles,
184
+ uniqueItems: FLAG,
185
+ required: strings,
186
+ dependentRequired: (value) => isRecord(value) && Object.values(value).every(strings),
187
+ format: TEXT,
188
+ contentEncoding: TEXT,
189
+ contentMediaType: TEXT,
190
+ title: TEXT,
191
+ description: TEXT,
192
+ default: ANY,
193
+ examples: (value) => Array.isArray(value),
194
+ deprecated: FLAG,
195
+ readOnly: FLAG,
196
+ writeOnly: FLAG,
197
+ reference: (value, _at, node, context) => {
198
+ if (node.type !== 'string')
199
+ return false;
200
+ const named = typeof value === 'string' ? [value] : value;
201
+ return (Array.isArray(named) &&
202
+ named.length > 0 &&
203
+ strings(named) &&
204
+ named.every((name) => name === BUILT_IN_TYPE || name === ATTACHMENT || context.types.has(name)));
205
+ },
206
+ };
207
+ function sharedType(values) {
208
+ if (values.length === 0)
209
+ return undefined;
210
+ if (values.every((value) => typeof value === 'string'))
211
+ return 'string';
212
+ if (values.every((value) => typeof value === 'number'))
213
+ return 'number';
214
+ if (values.every((value) => typeof value === 'boolean'))
215
+ return 'boolean';
216
+ return undefined;
20
217
  }
21
- const SCALAR_KINDS = new Set([
22
- 'text',
23
- 'string',
24
- 'number',
25
- 'date',
26
- 'enum',
27
- 'reference'
28
- ]);
29
- function parseScalar(file, location, spec, required) {
30
- const kind = spec.kind;
31
- if (kind === 'text') return {
32
- kind: 'text',
33
- required
34
- };
35
- if (kind === 'string') return {
36
- kind: 'string',
37
- required
38
- };
39
- if (kind === 'number') return {
40
- kind: 'number',
41
- required
42
- };
43
- if (kind === 'date') return {
44
- kind: 'date',
45
- required
46
- };
47
- if (kind === 'enum') {
48
- const values = stringList(spec.values);
49
- if (values === undefined) return refuse(file, 'definition-enum-values', location);
50
- return {
51
- kind: 'enum',
52
- required,
53
- values
54
- };
55
- }
56
- if (kind === 'reference') {
57
- if (typeof spec.to !== 'string' || spec.to === '') return refuse(file, 'definition-reference-to', location);
58
- return {
59
- kind: 'reference',
60
- required,
61
- to: spec.to
62
- };
63
- }
64
- return refuse(file, 'definition-field-kind', location);
65
- }
66
- function extraKeys(spec, allowed) {
67
- return Object.keys(spec).some((key)=>!allowed.includes(key));
68
- }
69
- function parseList(file, location, spec, required, malformed) {
70
- if (typeof spec.of !== 'string' || !SCALAR_KINDS.has(spec.of)) {
71
- return refuse(file, 'definition-list-of', location);
72
- }
73
- const allowed = spec.of === 'enum' ? [
74
- 'kind',
75
- 'required',
76
- 'of',
77
- 'values'
78
- ] : spec.of === 'reference' ? [
79
- 'kind',
80
- 'required',
81
- 'of',
82
- 'to'
83
- ] : [
84
- 'kind',
85
- 'required',
86
- 'of'
87
- ];
88
- if (extraKeys(spec, allowed)) return refuse(file, malformed, location);
89
- const inner = parseScalar(file, location, {
90
- ...spec,
91
- kind: spec.of
92
- }, false);
93
- if ('rule' in inner) return inner;
94
- return {
95
- kind: 'list',
96
- required,
97
- of: inner
218
+ function singleType(type) {
219
+ if (typeof type === 'string')
220
+ return type;
221
+ if (!Array.isArray(type))
222
+ return undefined;
223
+ const kept = type.filter((one) => one !== 'null');
224
+ return kept.length === 1 ? kept[0] : undefined;
225
+ }
226
+ function firstOf(held, read) {
227
+ for (const node of held) {
228
+ const value = read(node);
229
+ if (value !== undefined)
230
+ return value;
231
+ }
232
+ return undefined;
233
+ }
234
+ function conjoined(nodes, defs, ancestry) {
235
+ const held = [];
236
+ const reached = new Set(ancestry);
237
+ const visit = (node) => {
238
+ if (!isRecord(node) || held.includes(node))
239
+ return;
240
+ held.push(node);
241
+ if (typeof node.$ref === 'string') {
242
+ const target = refTarget(node.$ref, defs)?.node;
243
+ if (target !== undefined && !reached.has(target)) {
244
+ reached.add(target);
245
+ visit(target);
246
+ }
247
+ }
248
+ if (Array.isArray(node.allOf))
249
+ for (const one of node.allOf)
250
+ visit(one);
98
251
  };
252
+ for (const node of nodes)
253
+ visit(node);
254
+ return { held, ancestry: reached };
99
255
  }
100
- function parseField(file, location, value) {
101
- if (!isRecord(value) || typeof value.kind !== 'string') return refuse(file, 'definition-field', location);
102
- const required = requiredFlag(value.required);
103
- if (required === undefined) return refuse(file, 'definition-field', location);
104
- if (value.kind === 'list') return parseList(file, location, value, required, 'definition-field');
105
- const allowed = value.kind === 'enum' ? [
106
- 'kind',
107
- 'required',
108
- 'values'
109
- ] : value.kind === 'reference' ? [
110
- 'kind',
111
- 'required',
112
- 'to'
113
- ] : [
114
- 'kind',
115
- 'required'
116
- ];
117
- if (extraKeys(value, allowed)) return refuse(file, 'definition-field', location);
118
- return parseScalar(file, location, value, required);
119
- }
120
- function parseSection(file, location, value) {
121
- if (!isRecord(value) || value.kind !== 'text' && value.kind !== 'list') {
122
- return refuse(file, 'definition-section-kind', location);
123
- }
124
- const required = requiredFlag(value.required);
125
- if (required === undefined) return refuse(file, 'definition-section', location);
126
- if (value.kind === 'list') return parseList(file, location, value, required, 'definition-section');
127
- if (extraKeys(value, [
128
- 'kind',
129
- 'required'
130
- ])) return refuse(file, 'definition-section', location);
256
+ function variantsOf(node) {
257
+ return [
258
+ ...(Array.isArray(node.anyOf) ? node.anyOf : []),
259
+ ...(Array.isArray(node.oneOf) ? node.oneOf : []),
260
+ node.then,
261
+ node.else,
262
+ ...(isRecord(node.dependentSchemas) ? Object.values(node.dependentSchemas) : []),
263
+ ].filter(isRecord);
264
+ }
265
+ function united(left, right) {
266
+ if (left === undefined || right === undefined)
267
+ return undefined;
268
+ return [...left, ...right.filter((value) => !left.some((held) => equalValue(held, value)))];
269
+ }
270
+ function joined(left, right) {
271
+ const type = left.type === right.type ? left.type : undefined;
272
+ const format = left.format === right.format ? left.format : undefined;
273
+ const values = united(left.values, right.values);
274
+ const reference = united(left.reference, right.reference);
275
+ const items = left.items !== undefined && right.items !== undefined
276
+ ? joined(left.items, right.items)
277
+ : undefined;
131
278
  return {
132
- kind: 'text',
133
- required
279
+ ...(type === undefined ? {} : { type }),
280
+ ...(format === undefined ? {} : { format }),
281
+ ...(values === undefined ? {} : { values }),
282
+ ...(reference === undefined ? {} : { reference }),
283
+ prose: left.prose && right.prose,
284
+ ...(items === undefined ? {} : { items }),
134
285
  };
135
286
  }
136
- export function readDefinition(file, document) {
137
- if (document.type !== 'definition') return refuse(file, 'definition-type');
138
- const name = typeNameFromPath(file);
139
- if (name === '') return refuse(file, 'definition-type');
140
- for (const key of Object.keys(document.fields)){
141
- if (key !== 'type' && key !== 'fields' && key !== 'sections') {
142
- return refuse(file, 'definition-shape', key);
287
+ function propertiesOf(held, defs, ancestry) {
288
+ const declared = new Map();
289
+ for (const node of held) {
290
+ if (!isRecord(node.properties))
291
+ continue;
292
+ for (const [name, schema] of Object.entries(node.properties))
293
+ declared.set(name, [...(declared.get(name) ?? []), schema]);
294
+ }
295
+ const properties = Object.create(null);
296
+ for (const [name, schemas] of declared)
297
+ properties[name] = factsOf(schemas, defs, ancestry);
298
+ const variants = Object.create(null);
299
+ for (const branch of held.flatMap(variantsOf)) {
300
+ for (const [name, facts] of Object.entries(factsOf([branch], defs, ancestry).properties ?? {})) {
301
+ if (Object.hasOwn(properties, name))
302
+ continue;
303
+ variants[name] = Object.hasOwn(variants, name) ? joined(variants[name], facts) : facts;
143
304
  }
144
305
  }
145
- const fieldsValue = document.fields.fields;
146
- const sectionsValue = document.fields.sections;
147
- if (fieldsValue !== undefined && !isRecord(fieldsValue)) return refuse(file, 'definition-fields', 'fields');
148
- if (sectionsValue !== undefined && !isRecord(sectionsValue)) {
149
- return refuse(file, 'definition-sections', 'sections');
306
+ Object.assign(properties, variants);
307
+ return Object.keys(properties).length === 0 ? undefined : properties;
308
+ }
309
+ function factsOf(nodes, defs, ancestry) {
310
+ const { held, ancestry: reached } = conjoined(nodes, defs, ancestry);
311
+ const listed = held.flatMap((node) => Array.isArray(node.enum) ? [node.enum] : node.const !== undefined ? [[node.const]] : []);
312
+ const values = listed.length === 0
313
+ ? undefined
314
+ : listed.reduce((kept, list) => kept.filter((value) => list.some((other) => equalValue(other, value))));
315
+ const type = firstOf(held, (node) => singleType(node.type)) ??
316
+ (values === undefined ? undefined : sharedType(values));
317
+ const reference = firstOf(held, (node) => typeof node.reference === 'string'
318
+ ? [node.reference]
319
+ : Array.isArray(node.reference)
320
+ ? node.reference
321
+ : undefined);
322
+ const format = firstOf(held, (node) => typeof node.format === 'string' ? node.format : undefined);
323
+ const prose = type === 'string' &&
324
+ values === undefined &&
325
+ format === undefined &&
326
+ reference === undefined &&
327
+ held.every((node) => node.pattern === undefined);
328
+ const listedItems = held.flatMap((node) => (node.items === undefined ? [] : [node.items]));
329
+ const items = type === 'array' && listedItems.length > 0 ? factsOf(listedItems, defs, reached) : undefined;
330
+ const mapped = type === 'object' || type === undefined;
331
+ const properties = mapped ? propertiesOf(held, defs, reached) : undefined;
332
+ const patterns = mapped
333
+ ? held.flatMap((node) => Object.entries(isRecord(node.patternProperties) ? node.patternProperties : {}).map(([pattern, schema]) => ({ pattern, facts: factsOf([schema], defs, reached) })))
334
+ : [];
335
+ const opened = mapped
336
+ ? held.flatMap((node) => [node.additionalProperties, node.unevaluatedProperties].filter(isRecord))
337
+ : [];
338
+ const additional = opened.length === 0 ? undefined : factsOf(opened, defs, reached);
339
+ return {
340
+ ...(type === undefined ? {} : { type }),
341
+ ...(format === undefined ? {} : { format }),
342
+ ...(values === undefined ? {} : { values }),
343
+ ...(reference === undefined ? {} : { reference }),
344
+ prose,
345
+ ...(items === undefined ? {} : { items }),
346
+ ...(properties === undefined ? {} : { properties }),
347
+ ...(patterns.length === 0 ? {} : { patterns }),
348
+ ...(additional === undefined ? {} : { additional }),
349
+ };
350
+ }
351
+ export function valueFacts(node, defs) {
352
+ return factsOf([node], defs, new Set());
353
+ }
354
+ export function memberFacts(facts, key) {
355
+ if (facts.properties !== undefined && Object.hasOwn(facts.properties, key))
356
+ return facts.properties[key];
357
+ const pattern = facts.patterns?.find((one) => new RegExp(one.pattern, 'u').test(key));
358
+ return pattern === undefined ? facts.additional : pattern.facts;
359
+ }
360
+ function reachedDefs(value, defs, reached) {
361
+ if (Array.isArray(value)) {
362
+ for (const item of value)
363
+ reachedDefs(item, defs, reached);
364
+ return;
150
365
  }
151
- const fields = Object.create(null);
152
- for (const [fieldName, spec] of Object.entries(fieldsValue ?? {})){
153
- const parsed = parseField(file, fieldName, spec);
154
- if ('rule' in parsed) return parsed;
155
- fields[fieldName] = parsed;
366
+ if (!isRecord(value))
367
+ return;
368
+ for (const [key, held] of Object.entries(value)) {
369
+ if (key === '$ref' && typeof held === 'string') {
370
+ const name = refTarget(held, defs)?.name;
371
+ if (name === undefined || Object.hasOwn(reached, name))
372
+ continue;
373
+ reached[name] = defs[name];
374
+ reachedDefs(defs[name], defs, reached);
375
+ continue;
376
+ }
377
+ reachedDefs(held, defs, reached);
156
378
  }
379
+ }
380
+ function readSections(value, at, context) {
381
+ const failed = (rule, location) => ({ failure: refuse(rule, location) });
382
+ if (!isRecord(value))
383
+ return failed('sections', at);
157
384
  const sections = Object.create(null);
158
- for (const [sectionName, spec] of Object.entries(sectionsValue ?? {})){
159
- const parsed = parseSection(file, sectionName, spec);
160
- if ('rule' in parsed) return parsed;
161
- sections[sectionName] = parsed;
385
+ for (const [name, spec] of Object.entries(value)) {
386
+ const where = `${at}/${escapePointer(name)}`;
387
+ if (!isRecord(spec) || (spec.kind !== 'text' && spec.kind !== 'list'))
388
+ return failed('sections', where);
389
+ const allowed = spec.kind === 'list' ? ['kind', 'required', 'items'] : ['kind', 'required'];
390
+ const extra = Object.keys(spec).find((key) => !allowed.includes(key));
391
+ if (extra !== undefined)
392
+ return failed('sections', `${where}/${escapePointer(extra)}`);
393
+ if (spec.required !== undefined && typeof spec.required !== 'boolean')
394
+ return failed('sections', `${where}/required`);
395
+ const required = spec.required === true;
396
+ if (spec.kind === 'text') {
397
+ sections[name] = { kind: 'text', required };
398
+ continue;
399
+ }
400
+ if (spec.items === undefined)
401
+ return failed('sections', `${where}/items`);
402
+ const failure = schemaFailure(spec.items, `${where}/items`, context);
403
+ if (failure !== undefined)
404
+ return { failure };
405
+ const items = valueFacts(spec.items, context.defs);
406
+ if (items.type === undefined || !SCALAR_TYPES.has(items.type))
407
+ return failed('sections', `${where}/items`);
408
+ sections[name] = { kind: 'list', required, items };
409
+ }
410
+ return { sections };
411
+ }
412
+ function deepFreeze(value) {
413
+ if (value !== null && typeof value === 'object' && !Object.isFrozen(value)) {
414
+ Object.freeze(value);
415
+ for (const held of Object.values(value))
416
+ deepFreeze(held);
162
417
  }
418
+ return value;
419
+ }
420
+ function readType(name, value, context) {
421
+ const at = `/${escapePointer(name)}`;
422
+ if (!isRecord(value))
423
+ return refuse('schema', at);
424
+ const { sections: declared, member_document: mark, ...schema } = value;
425
+ if (mark !== undefined && typeof mark !== 'boolean')
426
+ return refuse('member_document', `${at}/member_document`);
427
+ const read = declared === undefined
428
+ ? { sections: Object.create(null) }
429
+ : readSections(declared, `${at}/sections`, context);
430
+ if ('failure' in read)
431
+ return read.failure;
432
+ const failure = schemaFailure(schema, at, context);
433
+ if (failure !== undefined)
434
+ return failure;
435
+ const memberDocument = mark === true;
436
+ const root = valueFacts(schema, context.defs);
437
+ const fields = Object.assign(Object.create(null), root.properties);
438
+ if (memberDocument && !Object.hasOwn(fields, MEMBER_FIELD))
439
+ fields[MEMBER_FIELD] = { type: 'string', prose: false };
440
+ const defs = Object.create(null);
441
+ reachedDefs(value, context.defs, defs);
163
442
  return {
164
443
  name,
165
- file,
444
+ memberDocument,
445
+ frontmatter: { ...root, properties: { ...HOUSE_KEYS, ...fields } },
166
446
  fields,
167
- sections
447
+ sections: read.sections,
448
+ shape: { schema: value, defs },
168
449
  };
169
450
  }
170
-
171
- //# sourceMappingURL=definition.js.map
451
+ function lineAt(text, offset) {
452
+ return text.slice(0, offset).split(/\r\n|\r|\n/).length;
453
+ }
454
+ export function readSchema(text) {
455
+ let root;
456
+ try {
457
+ root = jsValue(parseYamlMapping(text, 0, text.length));
458
+ }
459
+ catch (error) {
460
+ if (error instanceof YamlError)
461
+ return refuse('schema-yaml', `line ${lineAt(text, error.offset)}`);
462
+ throw error;
463
+ }
464
+ const defs = root.$defs ?? Object.create(null);
465
+ if (!isRecord(defs))
466
+ return refuse('$defs', '/$defs');
467
+ const names = Object.keys(root).filter((key) => key !== '$defs');
468
+ for (const name of names) {
469
+ if (name === '' || name.startsWith('$') || name === BUILT_IN_TYPE || name === ATTACHMENT)
470
+ return refuse('schema-type-name', `/${escapePointer(name)}`);
471
+ }
472
+ const context = { defs, types: new Set(names) };
473
+ for (const [name, def] of Object.entries(defs)) {
474
+ const failure = schemaFailure(def, `/$defs/${escapePointer(name)}`, context);
475
+ if (failure !== undefined)
476
+ return failure;
477
+ }
478
+ const types = Object.create(null);
479
+ let marked = false;
480
+ for (const name of names) {
481
+ const definition = readType(name, root[name], context);
482
+ if ('rule' in definition)
483
+ return definition;
484
+ if (definition.memberDocument) {
485
+ if (marked)
486
+ return refuse('member_document', `/${escapePointer(name)}/member_document`);
487
+ marked = true;
488
+ }
489
+ types[name] = deepFreeze(definition);
490
+ }
491
+ return Object.freeze({ types: Object.freeze(types) });
492
+ }
@@ -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":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AA4WpF,wBAAgB,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,QAAQ,CAc3F"}