@agentshouse/mdmodel 0.1.0-alpha.8 → 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 (323) hide show
  1. package/API.md +300 -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 +42 -25
  10. package/dist/definition.d.ts.map +1 -1
  11. package/dist/definition.js +473 -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 +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 +82 -73
  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 +45 -67
  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 -136
  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 +255 -191
  54. package/fixtures/README.md +85 -55
  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/context.json +1 -0
  156. package/fixtures/cases/missing-section-item-kind/expected.json +5 -0
  157. package/fixtures/cases/missing-section-item-kind/schema.yaml +6 -0
  158. package/fixtures/cases/misspelled-key/context.json +1 -0
  159. package/fixtures/cases/misspelled-key/expected.json +6 -0
  160. package/fixtures/cases/misspelled-key/library/companies/acme.md +4 -0
  161. package/fixtures/cases/misspelled-key/library/deals/renewal.md +32 -0
  162. package/fixtures/cases/misspelled-key/schema.yaml +56 -0
  163. package/fixtures/cases/nested-defs/context.json +1 -0
  164. package/fixtures/cases/nested-defs/expected.json +6 -0
  165. package/fixtures/cases/nested-defs/library/deal.md +6 -0
  166. package/fixtures/cases/nested-defs/schema.yaml +11 -0
  167. package/fixtures/cases/nested-required-field/context.json +1 -0
  168. package/fixtures/cases/nested-required-field/expected.json +6 -0
  169. package/fixtures/cases/nested-required-field/library/companies/acme.md +4 -0
  170. package/fixtures/cases/nested-required-field/library/deals/renewal.md +30 -0
  171. package/fixtures/cases/nested-required-field/schema.yaml +56 -0
  172. package/fixtures/cases/null-refused/context.json +1 -0
  173. package/fixtures/cases/null-refused/expected.json +6 -0
  174. package/fixtures/cases/null-refused/library/companies/acme.md +4 -0
  175. package/fixtures/cases/null-refused/library/deals/renewal.md +31 -0
  176. package/fixtures/cases/null-refused/schema.yaml +56 -0
  177. package/fixtures/cases/numeric-range/context.json +1 -0
  178. package/fixtures/cases/numeric-range/expected.json +6 -0
  179. package/fixtures/cases/numeric-range/library/companies/acme.md +4 -0
  180. package/fixtures/cases/numeric-range/library/deals/renewal.md +31 -0
  181. package/fixtures/cases/numeric-range/schema.yaml +56 -0
  182. package/fixtures/cases/one-of-variant/context.json +1 -0
  183. package/fixtures/cases/one-of-variant/expected.json +6 -0
  184. package/fixtures/cases/one-of-variant/library/companies/acme.md +4 -0
  185. package/fixtures/cases/one-of-variant/library/deals/renewal.md +31 -0
  186. package/fixtures/cases/one-of-variant/schema.yaml +56 -0
  187. package/fixtures/cases/open-map-value/context.json +1 -0
  188. package/fixtures/cases/open-map-value/expected.json +6 -0
  189. package/fixtures/cases/open-map-value/library/companies/acme.md +4 -0
  190. package/fixtures/cases/open-map-value/library/deals/renewal.md +31 -0
  191. package/fixtures/cases/open-map-value/schema.yaml +56 -0
  192. package/fixtures/cases/paragraph-link-definition/schema.yaml +1 -0
  193. package/fixtures/cases/prototype-field/context.json +1 -0
  194. package/fixtures/cases/prototype-field/expected.json +6 -0
  195. package/fixtures/cases/prototype-field/library/item.md +9 -0
  196. package/fixtures/cases/prototype-field/schema.yaml +6 -0
  197. package/fixtures/cases/quoted-link-definition/expected.json +1 -2
  198. package/fixtures/cases/quoted-link-definition/schema.yaml +1 -0
  199. package/fixtures/cases/referenced-missing-file/expected.json +0 -1
  200. package/fixtures/cases/referenced-missing-file/schema.yaml +11 -0
  201. package/fixtures/cases/remote-ref/context.json +1 -0
  202. package/fixtures/cases/remote-ref/expected.json +5 -0
  203. package/fixtures/cases/remote-ref/schema.yaml +3 -0
  204. package/fixtures/cases/second-member-document/context.json +1 -0
  205. package/fixtures/cases/second-member-document/expected.json +5 -0
  206. package/fixtures/cases/second-member-document/schema.yaml +4 -0
  207. package/fixtures/cases/section-item-enum/context.json +1 -0
  208. package/fixtures/cases/section-item-enum/expected.json +6 -0
  209. package/fixtures/cases/section-item-enum/library/task.md +8 -0
  210. package/fixtures/cases/section-item-enum/schema.yaml +3 -0
  211. package/fixtures/cases/section-item-kind/context.json +1 -0
  212. package/fixtures/cases/section-item-kind/expected.json +6 -0
  213. package/fixtures/cases/section-item-kind/library/task.md +8 -0
  214. package/fixtures/cases/section-item-kind/schema.yaml +3 -0
  215. package/fixtures/cases/section-items/context.json +1 -0
  216. package/fixtures/cases/section-items/expected.json +1 -0
  217. package/fixtures/cases/section-items/library/other.md +3 -0
  218. package/fixtures/cases/section-items/library/page.md +42 -0
  219. package/fixtures/cases/section-items/schema.yaml +10 -0
  220. package/fixtures/cases/section-reference-path/context.json +1 -0
  221. package/fixtures/cases/section-reference-path/expected.json +6 -0
  222. package/fixtures/cases/section-reference-path/library/other.md +3 -0
  223. package/fixtures/cases/section-reference-path/library/page.md +7 -0
  224. package/fixtures/cases/section-reference-path/schema.yaml +3 -0
  225. package/fixtures/cases/section-reference-type/context.json +1 -0
  226. package/fixtures/cases/section-reference-type/expected.json +6 -0
  227. package/fixtures/cases/section-reference-type/library/note.md +1 -0
  228. package/fixtures/cases/section-reference-type/library/page.md +7 -0
  229. package/fixtures/cases/section-reference-type/schema.yaml +3 -0
  230. package/fixtures/cases/shortcut-reference-link/context.json +1 -0
  231. package/fixtures/cases/shortcut-reference-link/expected.json +5 -0
  232. package/fixtures/cases/shortcut-reference-link/library/item.md +10 -0
  233. package/fixtures/cases/shortcut-reference-link/schema.yaml +6 -0
  234. package/fixtures/cases/string-length/context.json +1 -0
  235. package/fixtures/cases/string-length/expected.json +6 -0
  236. package/fixtures/cases/string-length/library/companies/acme.md +4 -0
  237. package/fixtures/cases/string-length/library/deals/renewal.md +31 -0
  238. package/fixtures/cases/string-length/schema.yaml +56 -0
  239. package/fixtures/cases/structured-section/expected.json +1 -2
  240. package/fixtures/cases/structured-section/schema.yaml +7 -0
  241. package/fixtures/cases/submission-keys/context.json +1 -0
  242. package/fixtures/cases/submission-keys/expected.json +1 -0
  243. package/fixtures/cases/submission-keys/library/notes/visitor.md +8 -0
  244. package/fixtures/cases/submission-keys/schema.yaml +4 -0
  245. package/fixtures/cases/text-field-kind/context.json +1 -0
  246. package/fixtures/cases/text-field-kind/expected.json +6 -0
  247. package/fixtures/cases/text-field-kind/library/page.md +4 -0
  248. package/fixtures/cases/text-field-kind/schema.yaml +4 -0
  249. package/fixtures/cases/truncated-link-definition/expected.json +1 -2
  250. package/fixtures/cases/truncated-link-definition/schema.yaml +1 -0
  251. package/fixtures/cases/types-folder-content/context.json +1 -0
  252. package/fixtures/cases/types-folder-content/expected.json +1 -0
  253. package/fixtures/cases/types-folder-content/library/types/task.md +4 -0
  254. package/fixtures/cases/types-folder-content/schema.yaml +4 -0
  255. package/fixtures/cases/unclosed-frontmatter/expected.json +1 -2
  256. package/fixtures/cases/undeclared-field/context.json +1 -0
  257. package/fixtures/cases/undeclared-field/expected.json +6 -0
  258. package/fixtures/cases/undeclared-field/library/item.md +9 -0
  259. package/fixtures/cases/undeclared-field/schema.yaml +6 -0
  260. package/fixtures/cases/unevaluated-items-closed/context.json +1 -0
  261. package/fixtures/cases/unevaluated-items-closed/expected.json +6 -0
  262. package/fixtures/cases/unevaluated-items-closed/library/trip.md +6 -0
  263. package/fixtures/cases/unevaluated-items-closed/schema.yaml +10 -0
  264. package/fixtures/cases/unknown-type/context.json +1 -0
  265. package/fixtures/cases/unknown-type/expected.json +6 -0
  266. package/fixtures/cases/unknown-type/library/item.md +3 -0
  267. package/fixtures/cases/unknown-type/schema.yaml +3 -0
  268. package/fixtures/cases/unlisted-reference-type/context.json +1 -0
  269. package/fixtures/cases/unlisted-reference-type/expected.json +5 -0
  270. package/fixtures/cases/unlisted-reference-type/schema.yaml +3 -0
  271. package/fixtures/cases/unresolved-link/expected.json +1 -2
  272. package/fixtures/cases/unresolved-link/schema.yaml +6 -0
  273. package/fixtures/cases/valid-typed-document/library/tasks/one.md +1 -0
  274. package/fixtures/cases/valid-typed-document/schema.yaml +16 -0
  275. package/fixtures/cases/wide-item-fence-link/schema.yaml +1 -0
  276. package/fixtures/division.json +409 -0
  277. package/fixtures/projection.json +109 -28
  278. package/package.json +3 -12
  279. package/dist/definition.js.map +0 -1
  280. package/dist/document.js.map +0 -1
  281. package/dist/index.js.map +0 -1
  282. package/dist/links.js.map +0 -1
  283. package/dist/paths.js.map +0 -1
  284. package/dist/profile.js.map +0 -1
  285. package/dist/project.js.map +0 -1
  286. package/dist/refuse.js.map +0 -1
  287. package/dist/schema.js.map +0 -1
  288. package/dist/sections.js.map +0 -1
  289. package/dist/types.js.map +0 -1
  290. package/dist/validate.js.map +0 -1
  291. package/dist/version.js.map +0 -1
  292. package/dist/yaml.js.map +0 -1
  293. package/fixtures/cases/binary-any-reference/library/types/note.md +0 -5
  294. package/fixtures/cases/binary-document-collision/library/types/note.md +0 -3
  295. package/fixtures/cases/binary-link-outside-collection/library/types/note.md +0 -3
  296. package/fixtures/cases/binary-prototype-reference/library/types/note.md +0 -5
  297. package/fixtures/cases/binary-typed-reference/library/types/note.md +0 -5
  298. package/fixtures/cases/binary-typed-reference/library/types/person.md +0 -3
  299. package/fixtures/cases/bracketed-link-definition/library/types/task.md +0 -7
  300. package/fixtures/cases/declared-binary-links/library/types/note.md +0 -3
  301. package/fixtures/cases/duplicate-link-definition/library/types/task.md +0 -7
  302. package/fixtures/cases/fenced-link-definition/library/types/task.md +0 -7
  303. package/fixtures/cases/field-enum/library/types/task.md +0 -8
  304. package/fixtures/cases/interrupted-link-definition/library/types/note.md +0 -3
  305. package/fixtures/cases/long-fence-link-definition/library/types/note.md +0 -3
  306. package/fixtures/cases/malformed-definition/library/types/task.md +0 -5
  307. package/fixtures/cases/missing-binary-image/library/types/note.md +0 -3
  308. package/fixtures/cases/missing-binary-link/library/types/note.md +0 -3
  309. package/fixtures/cases/missing-required-field/library/types/task.md +0 -8
  310. package/fixtures/cases/paragraph-link-definition/library/types/note.md +0 -3
  311. package/fixtures/cases/prd-definition/library/types/task.md +0 -15
  312. package/fixtures/cases/quoted-link-definition/library/types/note.md +0 -3
  313. package/fixtures/cases/referenced-missing-file/library/types/person.md +0 -5
  314. package/fixtures/cases/referenced-missing-file/library/types/task.md +0 -8
  315. package/fixtures/cases/structured-section/library/types/task.md +0 -8
  316. package/fixtures/cases/truncated-link-definition/library/types/note.md +0 -3
  317. package/fixtures/cases/unresolved-link/library/types/task.md +0 -7
  318. package/fixtures/cases/valid-typed-document/library/types/person.md +0 -5
  319. package/fixtures/cases/valid-typed-document/library/types/task.md +0 -12
  320. package/fixtures/cases/wide-item-fence-link/library/types/note.md +0 -3
  321. package/markdown-syntax-profile.md +0 -9
  322. /package/fixtures/cases/{prd-definition → absent-optional-field}/context.json +0 -0
  323. /package/fixtures/cases/{prd-definition → absent-optional-field}/expected.json +0 -0
@@ -1,165 +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
- 'string',
23
- 'number',
24
- 'date',
25
- 'enum',
26
- 'reference'
27
- ]);
28
- function parseScalar(file, location, spec, required) {
29
- const kind = spec.kind;
30
- if (kind === 'string') return {
31
- kind: 'string',
32
- required
33
- };
34
- if (kind === 'number') return {
35
- kind: 'number',
36
- required
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);
37
251
  };
38
- if (kind === 'date') return {
39
- kind: 'date',
40
- required
252
+ for (const node of nodes)
253
+ visit(node);
254
+ return { held, ancestry: reached };
255
+ }
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;
278
+ return {
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 }),
41
285
  };
42
- if (kind === 'enum') {
43
- const values = stringList(spec.values);
44
- if (values === undefined) return refuse(file, 'definition-enum-values', location);
45
- return {
46
- kind: 'enum',
47
- required,
48
- values
49
- };
50
- }
51
- if (kind === 'reference') {
52
- if (typeof spec.to !== 'string' || spec.to === '') return refuse(file, 'definition-reference-to', location);
53
- return {
54
- kind: 'reference',
55
- required,
56
- to: spec.to
57
- };
58
- }
59
- return refuse(file, 'definition-field-kind', location);
60
- }
61
- function extraKeys(spec, allowed) {
62
- return Object.keys(spec).some((key)=>!allowed.includes(key));
63
- }
64
- function parseField(file, location, value) {
65
- if (!isRecord(value) || typeof value.kind !== 'string') return refuse(file, 'definition-field', location);
66
- const required = requiredFlag(value.required);
67
- if (required === undefined) return refuse(file, 'definition-field', location);
68
- if (value.kind === 'list') {
69
- if (typeof value.of !== 'string' || !SCALAR_KINDS.has(value.of)) {
70
- return refuse(file, 'definition-list-of', location);
286
+ }
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;
71
304
  }
72
- const allowed = value.of === 'enum' ? [
73
- 'kind',
74
- 'required',
75
- 'of',
76
- 'values'
77
- ] : value.of === 'reference' ? [
78
- 'kind',
79
- 'required',
80
- 'of',
81
- 'to'
82
- ] : [
83
- 'kind',
84
- 'required',
85
- 'of'
86
- ];
87
- if (extraKeys(value, allowed)) return refuse(file, 'definition-field', location);
88
- const inner = parseScalar(file, location, {
89
- ...value,
90
- kind: value.of
91
- }, false);
92
- if ('rule' in inner) return inner;
93
- return {
94
- kind: 'list',
95
- required,
96
- of: inner
97
- };
98
- }
99
- const allowed = value.kind === 'enum' ? [
100
- 'kind',
101
- 'required',
102
- 'values'
103
- ] : value.kind === 'reference' ? [
104
- 'kind',
105
- 'required',
106
- 'to'
107
- ] : [
108
- 'kind',
109
- 'required'
110
- ];
111
- if (extraKeys(value, allowed)) return refuse(file, 'definition-field', location);
112
- return parseScalar(file, location, value, required);
113
- }
114
- function parseSection(file, location, value) {
115
- if (!isRecord(value) || value.kind !== 'text' && value.kind !== 'list') {
116
- return refuse(file, 'definition-section-kind', location);
117
- }
118
- const required = requiredFlag(value.required);
119
- if (required === undefined || extraKeys(value, [
120
- 'kind',
121
- 'required'
122
- ])) {
123
- return refuse(file, 'definition-section', location);
124
305
  }
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);
125
339
  return {
126
- kind: value.kind,
127
- required
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 }),
128
349
  };
129
350
  }
130
- export function readDefinition(file, document) {
131
- if (document.type !== 'definition') return refuse(file, 'definition-type');
132
- const name = typeNameFromPath(file);
133
- if (name === '') return refuse(file, 'definition-type');
134
- for (const key of Object.keys(document.fields)){
135
- if (key !== 'type' && key !== 'fields' && key !== 'sections') {
136
- return refuse(file, 'definition-shape', key);
137
- }
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;
138
365
  }
139
- const fieldsValue = document.fields.fields;
140
- const sectionsValue = document.fields.sections;
141
- if (fieldsValue !== undefined && !isRecord(fieldsValue)) return refuse(file, 'definition-fields', 'fields');
142
- if (sectionsValue !== undefined && !isRecord(sectionsValue)) {
143
- return refuse(file, 'definition-sections', 'sections');
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);
144
378
  }
145
- const fields = {};
146
- for (const [fieldName, spec] of Object.entries(fieldsValue ?? {})){
147
- const parsed = parseField(file, fieldName, spec);
148
- if ('rule' in parsed) return parsed;
149
- fields[fieldName] = parsed;
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);
384
+ const sections = Object.create(null);
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 };
150
409
  }
151
- const sections = {};
152
- for (const [sectionName, spec] of Object.entries(sectionsValue ?? {})){
153
- const parsed = parseSection(file, sectionName, spec);
154
- if ('rule' in parsed) return parsed;
155
- sections[sectionName] = parsed;
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);
156
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);
157
442
  return {
158
443
  name,
159
- file,
444
+ memberDocument,
445
+ frontmatter: { ...root, properties: { ...HOUSE_KEYS, ...fields } },
160
446
  fields,
161
- sections
447
+ sections: read.sections,
448
+ shape: { schema: value, defs },
162
449
  };
163
450
  }
164
-
165
- //# 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"}