@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
package/dist/yaml.js CHANGED
@@ -1,7 +1,8 @@
1
1
  export class YamlError extends Error {
2
2
  offset;
3
- constructor(offset){
4
- super('yaml'), this.offset = offset;
3
+ constructor(offset) {
4
+ super('yaml');
5
+ this.offset = offset;
5
6
  this.name = 'YamlError';
6
7
  }
7
8
  }
@@ -9,20 +10,26 @@ function peek(c) {
9
10
  return c.i < c.end ? c.text[c.i] : '';
10
11
  }
11
12
  function skipEol(c) {
12
- if (peek(c) === '\r') c.i += 1;
13
- if (peek(c) === '\n') c.i += 1;
13
+ if (peek(c) === '\r')
14
+ c.i += 1;
15
+ if (peek(c) === '\n')
16
+ c.i += 1;
14
17
  }
15
18
  function skipSpaces(c) {
16
- while(peek(c) === ' ')c.i += 1;
17
- if (peek(c) === '\t') throw new YamlError(c.i);
19
+ while (peek(c) === ' ')
20
+ c.i += 1;
21
+ if (peek(c) === '\t')
22
+ throw new YamlError(c.i);
18
23
  }
19
24
  function skipToEol(c) {
20
- while(c.i < c.end && peek(c) !== '\n' && peek(c) !== '\r')c.i += 1;
25
+ while (c.i < c.end && peek(c) !== '\n' && peek(c) !== '\r')
26
+ c.i += 1;
21
27
  }
22
28
  function skipBlankAndComments(c) {
23
- while(c.i < c.end){
29
+ while (c.i < c.end) {
24
30
  skipSpaces(c);
25
- if (peek(c) === '#') skipToEol(c);
31
+ if (peek(c) === '#')
32
+ skipToEol(c);
26
33
  if (peek(c) === '\r' || peek(c) === '\n') {
27
34
  skipEol(c);
28
35
  continue;
@@ -31,7 +38,7 @@ function skipBlankAndComments(c) {
31
38
  }
32
39
  }
33
40
  function skipFlowSpace(c) {
34
- while(c.i < c.end){
41
+ while (c.i < c.end) {
35
42
  const ch = peek(c);
36
43
  if (ch === ' ' || ch === '\n' || ch === '\r') {
37
44
  c.i += 1;
@@ -41,36 +48,40 @@ function skipFlowSpace(c) {
41
48
  skipToEol(c);
42
49
  continue;
43
50
  }
44
- if (ch === '\t') throw new YamlError(c.i);
51
+ if (ch === '\t')
52
+ throw new YamlError(c.i);
45
53
  break;
46
54
  }
47
55
  }
48
56
  function indentAt(c) {
49
57
  let j = c.i;
50
- while(j > 0 && c.text[j - 1] !== '\n')j -= 1;
58
+ while (j > 0 && c.text[j - 1] !== '\n' && c.text[j - 1] !== '\r')
59
+ j -= 1;
51
60
  let n = 0;
52
- while(j < c.i){
61
+ while (j < c.i) {
53
62
  const ch = c.text[j];
54
- if (ch === ' ') n += 1;
55
- else if (ch === '\t') throw new YamlError(j);
56
- else break;
63
+ if (ch === ' ')
64
+ n += 1;
65
+ else if (ch === '\t')
66
+ throw new YamlError(j);
67
+ else
68
+ break;
57
69
  j += 1;
58
70
  }
59
71
  return n;
60
72
  }
61
73
  function scalar(value, start, end) {
62
- return {
63
- kind: 'scalar',
64
- value,
65
- start,
66
- end
67
- };
68
- }
69
- function interpretPlain(text) {
70
- if (text === 'true') return true;
71
- if (text === 'false') return false;
72
- if (text === 'null' || text === '') return null;
73
- if (/^-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?$/.test(text)) return Number(text);
74
+ return { kind: 'scalar', value, start, end };
75
+ }
76
+ export function interpretPlain(text) {
77
+ if (text === 'true')
78
+ return true;
79
+ if (text === 'false')
80
+ return false;
81
+ if (text === 'null' || text === '')
82
+ return null;
83
+ if (/^-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?$/.test(text))
84
+ return Number(text);
74
85
  return text;
75
86
  }
76
87
  function parseQuoted(c) {
@@ -78,13 +89,14 @@ function parseQuoted(c) {
78
89
  const start = c.i;
79
90
  c.i += 1;
80
91
  let out = '';
81
- while(c.i < c.end){
92
+ while (c.i < c.end) {
82
93
  const ch = peek(c);
83
94
  if (ch === quote) {
84
95
  c.i += 1;
85
96
  return scalar(out, start, c.i);
86
97
  }
87
- if (ch === '\n' || ch === '\r') throw new YamlError(c.i);
98
+ if (ch === '\n' || ch === '\r')
99
+ throw new YamlError(c.i);
88
100
  if (quote === "'" && ch === "'" && c.text[c.i + 1] === "'") {
89
101
  out += "'";
90
102
  c.i += 2;
@@ -93,11 +105,16 @@ function parseQuoted(c) {
93
105
  if (quote === '"' && ch === '\\') {
94
106
  c.i += 1;
95
107
  const escaped = peek(c);
96
- if (escaped === 'n') out += '\n';
97
- else if (escaped === 't') out += '\t';
98
- else if (escaped === '"') out += '"';
99
- else if (escaped === '\\') out += '\\';
100
- else throw new YamlError(c.i);
108
+ if (escaped === 'n')
109
+ out += '\n';
110
+ else if (escaped === 't')
111
+ out += '\t';
112
+ else if (escaped === '"')
113
+ out += '"';
114
+ else if (escaped === '\\')
115
+ out += '\\';
116
+ else
117
+ throw new YamlError(c.i);
101
118
  c.i += 1;
102
119
  continue;
103
120
  }
@@ -108,90 +125,94 @@ function parseQuoted(c) {
108
125
  }
109
126
  function parsePlain(c, flow) {
110
127
  const start = c.i;
111
- while(c.i < c.end){
128
+ while (c.i < c.end) {
112
129
  const ch = peek(c);
113
- if (flow && (ch === ',' || ch === ']' || ch === '}')) break;
114
- if (ch === '\n' || ch === '\r') break;
115
- if (ch === '#' && (c.i === start || c.text[c.i - 1] === ' ' || c.text[c.i - 1] === '\t')) break;
130
+ if (flow && (ch === ',' || ch === ']' || ch === '}'))
131
+ break;
132
+ if (ch === '\n' || ch === '\r')
133
+ break;
134
+ if (ch === '#' && (c.i === start || c.text[c.i - 1] === ' ' || c.text[c.i - 1] === '\t'))
135
+ break;
116
136
  c.i += 1;
117
137
  }
118
- if (c.i === start) throw new YamlError(c.i);
138
+ if (c.i === start)
139
+ throw new YamlError(c.i);
119
140
  const raw = c.text.slice(start, c.i);
120
141
  const trimmed = raw.trimEnd();
121
142
  return scalar(interpretPlain(trimmed), start, start + trimmed.length);
122
143
  }
123
144
  function parseScalar(c, flow) {
124
145
  const ch = peek(c);
125
- if (ch === '"' || ch === "'") return parseQuoted(c);
146
+ if (ch === '"' || ch === "'")
147
+ return parseQuoted(c);
126
148
  return parsePlain(c, flow);
127
149
  }
128
150
  function parseKey(c) {
129
151
  const start = c.i;
130
152
  if (peek(c) === '"' || peek(c) === "'") {
131
153
  const quoted = parseQuoted(c);
132
- if (typeof quoted.value !== 'string') throw new YamlError(start);
133
- return {
134
- name: quoted.value,
135
- start,
136
- end: c.i
137
- };
154
+ if (typeof quoted.value !== 'string')
155
+ throw new YamlError(start);
156
+ return { name: quoted.value, start, end: c.i };
138
157
  }
139
158
  let end = c.i;
140
- while(c.i < c.end){
159
+ while (c.i < c.end) {
141
160
  const ch = peek(c);
142
- if (ch === ':' || ch === '\n' || ch === '\r' || ch === ',' || ch === '}' || ch === ']' || ch === '#' || ch === '{' || ch === '[') {
161
+ if (ch === ':' ||
162
+ ch === '\n' ||
163
+ ch === '\r' ||
164
+ ch === ',' ||
165
+ ch === '}' ||
166
+ ch === ']' ||
167
+ ch === '#' ||
168
+ ch === '{' ||
169
+ ch === '[') {
143
170
  break;
144
171
  }
145
172
  c.i += 1;
146
- if (ch !== ' ' && ch !== '\t') end = c.i;
173
+ if (ch !== ' ' && ch !== '\t')
174
+ end = c.i;
147
175
  }
148
- if (end === start) throw new YamlError(c.i);
176
+ if (end === start)
177
+ throw new YamlError(c.i);
149
178
  c.i = end;
150
- return {
151
- name: c.text.slice(start, end),
152
- start,
153
- end
154
- };
179
+ return { name: c.text.slice(start, end), start, end };
155
180
  }
156
181
  function parseFlowValue(c) {
157
182
  skipFlowSpace(c);
158
183
  const ch = peek(c);
159
- if (ch === '{') return parseFlowMap(c);
160
- if (ch === '[') return parseFlowSeq(c);
161
- if (ch === '|' || ch === '>') throw new YamlError(c.i);
184
+ if (ch === '{')
185
+ return parseFlowMap(c);
186
+ if (ch === '[')
187
+ return parseFlowSeq(c);
188
+ if (ch === '|' || ch === '>')
189
+ throw new YamlError(c.i);
162
190
  return parseScalar(c, true);
163
191
  }
164
192
  function parseFlowMap(c) {
165
193
  const start = c.i;
166
- if (peek(c) !== '{') throw new YamlError(c.i);
194
+ if (peek(c) !== '{')
195
+ throw new YamlError(c.i);
167
196
  c.i += 1;
168
197
  skipFlowSpace(c);
169
198
  const entries = [];
170
199
  const seen = new Set();
171
200
  if (peek(c) === '}') {
172
201
  c.i += 1;
173
- return {
174
- kind: 'map',
175
- entries,
176
- start,
177
- end: c.i
178
- };
202
+ return { kind: 'map', entries, start, end: c.i };
179
203
  }
180
- while(c.i < c.end){
204
+ while (c.i < c.end) {
181
205
  skipFlowSpace(c);
182
206
  const key = parseKey(c);
183
207
  skipFlowSpace(c);
184
- if (peek(c) !== ':') throw new YamlError(c.i);
208
+ if (peek(c) !== ':')
209
+ throw new YamlError(c.i);
185
210
  c.i += 1;
186
211
  const value = parseFlowValue(c);
187
- if (seen.has(key.name)) throw new YamlError(key.start);
212
+ if (seen.has(key.name))
213
+ throw new YamlError(key.start);
188
214
  seen.add(key.name);
189
- entries.push({
190
- key: key.name,
191
- keyStart: key.start,
192
- keyEnd: key.end,
193
- value
194
- });
215
+ entries.push({ key: key.name, keyStart: key.start, keyEnd: key.end, value });
195
216
  skipFlowSpace(c);
196
217
  if (peek(c) === ',') {
197
218
  c.i += 1;
@@ -199,12 +220,7 @@ function parseFlowMap(c) {
199
220
  }
200
221
  if (peek(c) === '}') {
201
222
  c.i += 1;
202
- return {
203
- kind: 'map',
204
- entries,
205
- start,
206
- end: c.i
207
- };
223
+ return { kind: 'map', entries, start, end: c.i };
208
224
  }
209
225
  throw new YamlError(c.i);
210
226
  }
@@ -212,20 +228,16 @@ function parseFlowMap(c) {
212
228
  }
213
229
  function parseFlowSeq(c) {
214
230
  const start = c.i;
215
- if (peek(c) !== '[') throw new YamlError(c.i);
231
+ if (peek(c) !== '[')
232
+ throw new YamlError(c.i);
216
233
  c.i += 1;
217
234
  skipFlowSpace(c);
218
235
  const items = [];
219
236
  if (peek(c) === ']') {
220
237
  c.i += 1;
221
- return {
222
- kind: 'seq',
223
- items,
224
- start,
225
- end: c.i
226
- };
238
+ return { kind: 'seq', items, start, end: c.i };
227
239
  }
228
- while(c.i < c.end){
240
+ while (c.i < c.end) {
229
241
  items.push(parseFlowValue(c));
230
242
  skipFlowSpace(c);
231
243
  if (peek(c) === ',') {
@@ -235,12 +247,7 @@ function parseFlowSeq(c) {
235
247
  }
236
248
  if (peek(c) === ']') {
237
249
  c.i += 1;
238
- return {
239
- kind: 'seq',
240
- items,
241
- start,
242
- end: c.i
243
- };
250
+ return { kind: 'seq', items, start, end: c.i };
244
251
  }
245
252
  throw new YamlError(c.i);
246
253
  }
@@ -248,126 +255,185 @@ function parseFlowSeq(c) {
248
255
  }
249
256
  function parseValue(c, parentKeyIndent) {
250
257
  skipSpaces(c);
251
- if (peek(c) === '#') skipToEol(c);
258
+ if (peek(c) === '#')
259
+ skipToEol(c);
252
260
  const ch = peek(c);
253
261
  if (ch === '' || ch === '\n' || ch === '\r') {
254
262
  skipEol(c);
255
263
  skipBlankAndComments(c);
256
- if (c.i >= c.end) return scalar(null, c.i, c.i);
264
+ if (c.i >= c.end)
265
+ return scalar(null, c.i, c.i);
257
266
  const nextIndent = indentAt(c);
258
- if (nextIndent <= parentKeyIndent) return scalar(null, c.i, c.i);
259
- if (peek(c) === '-') return parseBlockSeq(c, nextIndent);
260
- if (peek(c) === '[') return parseFlowSeq(c);
261
- if (peek(c) === '{') return parseFlowMap(c);
267
+ if (nextIndent === parentKeyIndent && seqAhead(c))
268
+ return parseBlockSeq(c, nextIndent);
269
+ if (nextIndent <= parentKeyIndent)
270
+ return scalar(null, c.i, c.i);
271
+ if (peek(c) === '-')
272
+ return parseBlockSeq(c, nextIndent);
273
+ if (peek(c) === '[')
274
+ return parseFlowSeq(c);
275
+ if (peek(c) === '{')
276
+ return parseFlowMap(c);
262
277
  return parseBlockMap(c, nextIndent);
263
278
  }
264
- if (ch === '{') return parseFlowMap(c);
265
- if (ch === '[') return parseFlowSeq(c);
266
- if (ch === '|' || ch === '>') throw new YamlError(c.i);
279
+ if (ch === '{')
280
+ return parseFlowMap(c);
281
+ if (ch === '[')
282
+ return parseFlowSeq(c);
283
+ if (ch === '|' || ch === '>')
284
+ throw new YamlError(c.i);
267
285
  return parseScalar(c, false);
268
286
  }
287
+ function seqAhead(c) {
288
+ const next = c.text[c.i + 1];
289
+ return peek(c) === '-' && (next === ' ' || next === '\n' || next === '\r' || c.i + 1 >= c.end);
290
+ }
291
+ function mappingAhead(c) {
292
+ const start = c.i;
293
+ try {
294
+ if (peek(c) === '{' || peek(c) === '[')
295
+ return false;
296
+ parseKey(c);
297
+ skipSpaces(c);
298
+ if (peek(c) !== ':')
299
+ return false;
300
+ const next = c.text[c.i + 1];
301
+ return next === ' ' || next === '\n' || next === '\r' || c.i + 1 >= c.end;
302
+ }
303
+ catch (error) {
304
+ if (error instanceof YamlError)
305
+ return false;
306
+ throw error;
307
+ }
308
+ finally {
309
+ c.i = start;
310
+ }
311
+ }
312
+ function lineStartOf(c) {
313
+ let j = c.i;
314
+ while (j > 0 && c.text[j - 1] !== '\n' && c.text[j - 1] !== '\r')
315
+ j -= 1;
316
+ return j;
317
+ }
318
+ function parseSeqItem(c, indent) {
319
+ skipSpaces(c);
320
+ if (peek(c) !== '#' && peek(c) !== '\n' && peek(c) !== '\r' && c.i < c.end && mappingAhead(c))
321
+ return parseBlockMap(c, c.i - lineStartOf(c), true);
322
+ return parseValue(c, indent);
323
+ }
269
324
  function parseBlockSeq(c, indent) {
270
325
  const start = c.i;
271
326
  const items = [];
272
327
  let end = start;
273
- while(c.i < c.end){
328
+ while (c.i < c.end) {
274
329
  skipBlankAndComments(c);
275
- if (c.i >= c.end) break;
276
- if (indentAt(c) !== indent) break;
277
- if (peek(c) !== '-') break;
330
+ if (c.i >= c.end)
331
+ break;
332
+ if (indentAt(c) !== indent)
333
+ break;
334
+ if (peek(c) !== '-')
335
+ break;
278
336
  c.i += 1;
279
- items.push(parseValue(c, indent));
337
+ items.push(parseSeqItem(c, indent));
280
338
  end = c.i;
281
339
  }
282
- return {
283
- kind: 'seq',
284
- items,
285
- start,
286
- end
287
- };
288
- }
289
- function parseBlockMap(c, indent) {
340
+ return { kind: 'seq', items, start, end };
341
+ }
342
+ function parseBlockMap(c, indent, inline = false) {
290
343
  const start = c.i;
291
344
  const entries = [];
292
345
  const seen = new Set();
293
346
  let end = start;
294
- while(c.i < c.end){
295
- skipBlankAndComments(c);
296
- if (c.i >= c.end) break;
297
- if (indentAt(c) < indent) break;
298
- if (indentAt(c) > indent) throw new YamlError(c.i);
347
+ let first = inline;
348
+ while (c.i < c.end) {
349
+ if (!first) {
350
+ skipBlankAndComments(c);
351
+ if (c.i >= c.end)
352
+ break;
353
+ if (indentAt(c) < indent)
354
+ break;
355
+ if (indentAt(c) > indent)
356
+ throw new YamlError(c.i);
357
+ }
358
+ first = false;
299
359
  const key = parseKey(c);
300
360
  skipSpaces(c);
301
- if (peek(c) !== ':') throw new YamlError(c.i);
361
+ if (peek(c) !== ':')
362
+ throw new YamlError(c.i);
302
363
  c.i += 1;
303
364
  const value = parseValue(c, indent);
304
- if (seen.has(key.name)) throw new YamlError(key.start);
365
+ if (seen.has(key.name))
366
+ throw new YamlError(key.start);
305
367
  seen.add(key.name);
306
- entries.push({
307
- key: key.name,
308
- keyStart: key.start,
309
- keyEnd: key.end,
310
- value
311
- });
368
+ entries.push({ key: key.name, keyStart: key.start, keyEnd: key.end, value });
312
369
  end = c.i;
313
370
  }
314
- return {
315
- kind: 'map',
316
- entries,
317
- start,
318
- end
319
- };
371
+ return { kind: 'map', entries, start, end };
320
372
  }
321
373
  export function parseYamlMapping(text, start, end) {
322
- const c = {
323
- text,
324
- i: start,
325
- end
326
- };
374
+ const c = { text, i: start, end };
327
375
  skipBlankAndComments(c);
328
- if (c.i >= end) return {
329
- kind: 'map',
330
- entries: [],
331
- start,
332
- end
333
- };
376
+ if (c.i >= end)
377
+ return { kind: 'map', entries: [], start, end };
334
378
  if (peek(c) === '{') {
335
379
  const mapped = parseFlowMap(c);
336
380
  skipBlankAndComments(c);
337
- if (c.i < end) throw new YamlError(c.i);
381
+ if (c.i < end)
382
+ throw new YamlError(c.i);
338
383
  return mapped;
339
384
  }
340
385
  const mapped = parseBlockMap(c, indentAt(c));
341
386
  skipBlankAndComments(c);
342
- if (c.i < end) throw new YamlError(c.i);
387
+ if (c.i < end)
388
+ throw new YamlError(c.i);
343
389
  return mapped;
344
390
  }
345
391
  export function jsValue(node) {
346
- if (node.kind === 'scalar') return node.value;
347
- if (node.kind === 'seq') return node.items.map(jsValue);
392
+ if (node.kind === 'scalar')
393
+ return node.value;
394
+ if (node.kind === 'seq')
395
+ return node.items.map(jsValue);
348
396
  const record = Object.create(null);
349
- for (const entry of node.entries)record[entry.key] = jsValue(entry.value);
397
+ for (const entry of node.entries)
398
+ record[entry.key] = jsValue(entry.value);
350
399
  return record;
351
400
  }
352
401
  export function mapEntry(map, key) {
353
- return map.entries.find((entry)=>entry.key === key);
402
+ return map.entries.find((entry) => entry.key === key);
354
403
  }
355
404
  export function isPlainSafe(text) {
356
- if (text === '' || text === 'true' || text === 'false' || text === 'null') return false;
357
- if (/[\s#:{}[\],&*!|>'"%@`]/.test(text)) return false;
358
- if (text.startsWith('-') || text.startsWith('?') || text.startsWith(':')) return false;
359
- if (/^-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?$/.test(text)) return false;
405
+ if (text === '' || text === 'true' || text === 'false' || text === 'null')
406
+ return false;
407
+ if (/[\s#:{}[\],&*!|>'"%@`]/.test(text))
408
+ return false;
409
+ if (text.startsWith('-') || text.startsWith('?') || text.startsWith(':'))
410
+ return false;
411
+ if (/^-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?$/.test(text))
412
+ return false;
360
413
  return true;
361
414
  }
362
415
  export function serializeJs(value) {
363
- if (value === null) return 'null';
364
- if (value === true) return 'true';
365
- if (value === false) return 'false';
366
- if (typeof value === 'number' && Number.isFinite(value)) return JSON.stringify(value);
367
- if (typeof value === 'string') return isPlainSafe(value) ? value : JSON.stringify(value);
368
- if (Array.isArray(value)) return `[${value.map(serializeJs).join(', ')}]`;
416
+ if (value === null)
417
+ return 'null';
418
+ if (value === true)
419
+ return 'true';
420
+ if (value === false)
421
+ return 'false';
422
+ if (typeof value === 'number' && Number.isFinite(value))
423
+ return JSON.stringify(value);
424
+ if (typeof value === 'string')
425
+ return isPlainSafe(value) ? value : JSON.stringify(value);
426
+ if (Array.isArray(value))
427
+ return `[${value.map(serializeJs).join(', ')}]`;
428
+ if (isRecord(value))
429
+ return `{${Object.entries(value)
430
+ .map(([key, held]) => `${serializeKey(key)}: ${serializeJs(held)}`)
431
+ .join(', ')}}`;
369
432
  throw new YamlError(0);
370
433
  }
434
+ export function isRecord(value) {
435
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
436
+ }
371
437
  export function serializeKey(name) {
372
438
  return isPlainSafe(name) || /^[A-Za-z][A-Za-z0-9_-]*$/.test(name) ? name : JSON.stringify(name);
373
439
  }
@@ -383,47 +449,45 @@ export function bodyAfterFrontmatter(content) {
383
449
  return content.slice(bodyStartOf(content));
384
450
  }
385
451
  export function extractFrontmatter(content) {
386
- if (!content.startsWith('---')) return {
387
- kind: 'none'
388
- };
452
+ if (!content.startsWith('---'))
453
+ return { kind: 'none' };
389
454
  const firstNl = content.indexOf('\n');
390
- const firstLine = firstNl === -1 ? content : content.slice(0, content[firstNl - 1] === '\r' ? firstNl - 1 : firstNl);
391
- if (!/^---[ \t]*$/.test(firstLine)) return {
392
- kind: 'none'
393
- };
394
- if (firstNl === -1) return {
395
- kind: 'unclosed'
396
- };
455
+ const firstLine = firstNl === -1
456
+ ? content
457
+ : content.slice(0, content[firstNl - 1] === '\r' ? firstNl - 1 : firstNl);
458
+ if (!/^---[ \t]*$/.test(firstLine))
459
+ return { kind: 'none' };
460
+ if (firstNl === -1)
461
+ return { kind: 'unclosed' };
397
462
  const yamlStart = firstNl + 1;
398
463
  let i = yamlStart;
399
- while(i <= content.length){
464
+ while (i <= content.length) {
400
465
  const nl = content.indexOf('\n', i);
401
466
  const lineEnd = nl === -1 ? content.length : nl;
402
467
  let line = content.slice(i, lineEnd);
403
- if (line.endsWith('\r')) line = line.slice(0, -1);
404
- if (/^---[ \t]*$/.test(line)) return {
405
- kind: 'ok',
406
- yamlStart,
407
- yamlEnd: i
408
- };
409
- if (nl === -1) return {
410
- kind: 'unclosed'
411
- };
468
+ if (line.endsWith('\r'))
469
+ line = line.slice(0, -1);
470
+ if (/^---[ \t]*$/.test(line))
471
+ return { kind: 'ok', yamlStart, yamlEnd: i };
472
+ if (nl === -1)
473
+ return { kind: 'unclosed' };
412
474
  i = nl + 1;
413
475
  }
414
- return {
415
- kind: 'unclosed'
416
- };
476
+ return { kind: 'unclosed' };
417
477
  }
418
478
  export function equalValue(left, right) {
419
- if (left === right) return true;
479
+ if (left === right)
480
+ return true;
420
481
  if (Array.isArray(left) && Array.isArray(right)) {
421
- return left.length === right.length && left.every((item, index)=>equalValue(item, right[index]));
482
+ return (left.length === right.length && left.every((item, index) => equalValue(item, right[index])));
483
+ }
484
+ if (isRecord(left) && isRecord(right)) {
485
+ const keys = Object.keys(left);
486
+ return (keys.length === Object.keys(right).length &&
487
+ keys.every((key) => Object.hasOwn(right, key) && equalValue(left[key], right[key])));
422
488
  }
423
489
  return false;
424
490
  }
425
491
  export function lineEnding(content) {
426
492
  return content.includes('\r\n') ? '\r\n' : '\n';
427
493
  }
428
-
429
- //# sourceMappingURL=yaml.js.map