@agentshouse/mdmodel 0.1.0-alpha.9 → 0.1.0-c04c0d681d2d4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/API.md +368 -0
- package/README.md +36 -194
- package/dist/blocks.d.ts +11 -0
- package/dist/blocks.d.ts.map +1 -0
- package/dist/blocks.js +69 -0
- package/dist/condition.d.ts +162 -0
- package/dist/condition.d.ts.map +1 -0
- package/dist/condition.js +616 -0
- package/dist/definition.d.ts +70 -27
- package/dist/definition.d.ts.map +1 -1
- package/dist/definition.js +728 -146
- package/dist/divide.d.ts +3 -0
- package/dist/divide.d.ts.map +1 -0
- package/dist/divide.js +320 -0
- package/dist/document.d.ts +12 -2
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +400 -177
- package/dist/fields.d.ts +6 -0
- package/dist/fields.d.ts.map +1 -0
- package/dist/fields.js +10 -0
- package/dist/index.d.ts +16 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/links.d.ts +4 -0
- package/dist/links.d.ts.map +1 -1
- package/dist/links.js +633 -225
- package/dist/paths.d.ts +15 -4
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +149 -36
- package/dist/profile.js +1 -3
- package/dist/project.d.ts +20 -1
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +101 -95
- package/dist/references.d.ts +4 -0
- package/dist/references.d.ts.map +1 -0
- package/dist/references.js +30 -0
- package/dist/refuse.d.ts.map +1 -1
- package/dist/refuse.js +2 -10
- package/dist/schema.d.ts +7 -5
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +156 -41
- package/dist/sections.d.ts +2 -1
- package/dist/sections.d.ts.map +1 -1
- package/dist/sections.js +44 -66
- package/dist/types.d.ts +95 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -3
- package/dist/validate.d.ts +10 -2
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +283 -159
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -3
- package/dist/yaml.d.ts +9 -3
- package/dist/yaml.d.ts.map +1 -1
- package/dist/yaml.js +300 -201
- package/fixtures/README.md +91 -56
- package/fixtures/cases/absent-link-dangles/library/item.md +8 -0
- package/fixtures/cases/absent-link-dangles/schema.yaml +6 -0
- package/fixtures/cases/absent-optional-field/context.json +1 -0
- package/fixtures/cases/absent-optional-field/expected.json +1 -0
- package/fixtures/cases/absent-optional-field/library/companies/acme.md +4 -0
- package/fixtures/cases/absent-optional-field/library/deals/lead.md +6 -0
- package/fixtures/cases/absent-optional-field/schema.yaml +56 -0
- package/fixtures/cases/absolute-link/context.json +1 -0
- package/fixtures/cases/absolute-link/expected.json +5 -0
- package/fixtures/cases/absolute-link/library/item.md +8 -0
- package/fixtures/cases/absolute-link/schema.yaml +6 -0
- package/fixtures/cases/attachment-reference-any-file/context.json +1 -0
- package/fixtures/cases/attachment-reference-any-file/expected.json +1 -0
- package/fixtures/cases/attachment-reference-any-file/library/companies/acme.md +4 -0
- package/fixtures/cases/attachment-reference-any-file/library/deals/renewal.md +15 -0
- package/fixtures/cases/attachment-reference-any-file/library/places/depot.md +4 -0
- package/fixtures/cases/attachment-reference-any-file/library/products/seats.md +4 -0
- package/fixtures/cases/attachment-reference-any-file/library/products/support.md +4 -0
- package/fixtures/cases/attachment-reference-any-file/schema.yaml +32 -0
- package/fixtures/cases/attachment-reference-dangles/context.json +1 -0
- package/fixtures/cases/attachment-reference-dangles/expected.json +1 -0
- package/fixtures/cases/attachment-reference-dangles/library/companies/acme.md +4 -0
- package/fixtures/cases/attachment-reference-dangles/library/deals/renewal.md +15 -0
- package/fixtures/cases/attachment-reference-dangles/library/places/depot.md +4 -0
- package/fixtures/cases/attachment-reference-dangles/library/products/seats.md +4 -0
- package/fixtures/cases/attachment-reference-dangles/library/products/support.md +4 -0
- package/fixtures/cases/attachment-reference-dangles/schema.yaml +32 -0
- package/fixtures/cases/attachment-reference-outside/context.json +1 -0
- package/fixtures/cases/attachment-reference-outside/expected.json +6 -0
- package/fixtures/cases/attachment-reference-outside/library/companies/acme.md +4 -0
- package/fixtures/cases/attachment-reference-outside/library/deals/renewal.md +15 -0
- package/fixtures/cases/attachment-reference-outside/library/places/depot.md +4 -0
- package/fixtures/cases/attachment-reference-outside/library/products/seats.md +4 -0
- package/fixtures/cases/attachment-reference-outside/library/products/support.md +4 -0
- package/fixtures/cases/attachment-reference-outside/schema.yaml +32 -0
- package/fixtures/cases/binary-any-reference/expected.json +1 -2
- package/fixtures/cases/binary-any-reference/schema.yaml +4 -0
- package/fixtures/cases/binary-document-collision/expected.json +1 -2
- package/fixtures/cases/binary-document-collision/schema.yaml +1 -0
- package/fixtures/cases/binary-image-dangles/expected.json +1 -0
- package/fixtures/cases/binary-image-dangles/schema.yaml +1 -0
- package/fixtures/cases/binary-link-dangles/expected.json +1 -0
- package/fixtures/cases/binary-link-dangles/schema.yaml +1 -0
- package/fixtures/cases/binary-link-outside-collection/expected.json +1 -2
- package/fixtures/cases/binary-link-outside-collection/schema.yaml +1 -0
- package/fixtures/cases/binary-prototype-reference/expected.json +1 -2
- package/fixtures/cases/binary-prototype-reference/schema.yaml +4 -0
- package/fixtures/cases/binary-typed-reference/expected.json +1 -2
- package/fixtures/cases/binary-typed-reference/schema.yaml +5 -0
- package/fixtures/cases/boolean-field/context.json +1 -0
- package/fixtures/cases/boolean-field/expected.json +6 -0
- package/fixtures/cases/boolean-field/library/companies/acme.md +4 -0
- package/fixtures/cases/boolean-field/library/deals/renewal.md +31 -0
- package/fixtures/cases/boolean-field/schema.yaml +56 -0
- package/fixtures/cases/bracketed-link-definition/schema.yaml +6 -0
- package/fixtures/cases/closed-nested-object/context.json +1 -0
- package/fixtures/cases/closed-nested-object/expected.json +6 -0
- package/fixtures/cases/closed-nested-object/library/companies/acme.md +4 -0
- package/fixtures/cases/closed-nested-object/library/deals/renewal.md +32 -0
- package/fixtures/cases/closed-nested-object/schema.yaml +56 -0
- package/fixtures/cases/composed-root-reference/context.json +1 -0
- package/fixtures/cases/composed-root-reference/expected.json +6 -0
- package/fixtures/cases/composed-root-reference/library/a.md +5 -0
- package/fixtures/cases/composed-root-reference/schema.yaml +13 -0
- package/fixtures/cases/cross-room-link/context.json +1 -0
- package/fixtures/cases/cross-room-link/expected.json +1 -0
- package/fixtures/cases/cross-room-link/library/clients/acme.md +6 -0
- package/fixtures/cases/cross-room-link/schema.yaml +3 -0
- package/fixtures/cases/cross-room-reference/context.json +1 -0
- package/fixtures/cases/cross-room-reference/expected.json +1 -0
- package/fixtures/cases/cross-room-reference/library/clients/acme.md +9 -0
- package/fixtures/cases/cross-room-reference/schema.yaml +9 -0
- package/fixtures/cases/date-time-format/context.json +1 -0
- package/fixtures/cases/date-time-format/expected.json +6 -0
- package/fixtures/cases/date-time-format/library/companies/acme.md +4 -0
- package/fixtures/cases/date-time-format/library/deals/renewal.md +31 -0
- package/fixtures/cases/date-time-format/schema.yaml +56 -0
- package/fixtures/cases/declared-binary-links/schema.yaml +1 -0
- package/fixtures/cases/default-unfilled/context.json +1 -0
- package/fixtures/cases/default-unfilled/expected.json +6 -0
- package/fixtures/cases/default-unfilled/library/companies/acme.md +4 -0
- package/fixtures/cases/default-unfilled/library/deals/renewal.md +29 -0
- package/fixtures/cases/default-unfilled/schema.yaml +56 -0
- package/fixtures/cases/defs-pattern/context.json +1 -0
- package/fixtures/cases/defs-pattern/expected.json +6 -0
- package/fixtures/cases/defs-pattern/library/companies/acme.md +4 -0
- package/fixtures/cases/defs-pattern/library/deals/renewal.md +31 -0
- package/fixtures/cases/defs-pattern/schema.yaml +56 -0
- package/fixtures/cases/dependent-rule/context.json +1 -0
- package/fixtures/cases/dependent-rule/expected.json +6 -0
- package/fixtures/cases/dependent-rule/library/companies/acme.md +4 -0
- package/fixtures/cases/dependent-rule/library/deals/renewal.md +30 -0
- package/fixtures/cases/dependent-rule/schema.yaml +56 -0
- package/fixtures/cases/duplicate-link-definition/schema.yaml +6 -0
- package/fixtures/cases/email-format/context.json +1 -0
- package/fixtures/cases/email-format/expected.json +6 -0
- package/fixtures/cases/email-format/library/companies/acme.md +4 -0
- package/fixtures/cases/email-format/library/deals/renewal.md +31 -0
- package/fixtures/cases/email-format/schema.yaml +56 -0
- package/fixtures/cases/fenced-link-definition/schema.yaml +6 -0
- package/fixtures/cases/field-enum/expected.json +2 -3
- package/fixtures/cases/field-enum/schema.yaml +7 -0
- package/fixtures/cases/frontmatter-schema/context.json +1 -0
- package/fixtures/cases/frontmatter-schema/expected.json +5 -0
- package/fixtures/cases/frontmatter-schema/schema.yaml +5 -0
- package/fixtures/cases/integer-field/context.json +1 -0
- package/fixtures/cases/integer-field/expected.json +6 -0
- package/fixtures/cases/integer-field/library/companies/acme.md +4 -0
- package/fixtures/cases/integer-field/library/deals/renewal.md +31 -0
- package/fixtures/cases/integer-field/schema.yaml +56 -0
- package/fixtures/cases/interrupted-link-definition/schema.yaml +1 -0
- package/fixtures/cases/json-schema-constructs/context.json +1 -0
- package/fixtures/cases/json-schema-constructs/expected.json +1 -0
- package/fixtures/cases/json-schema-constructs/library/companies/acme.md +4 -0
- package/fixtures/cases/json-schema-constructs/library/deals/renewal.md +31 -0
- package/fixtures/cases/json-schema-constructs/schema.yaml +56 -0
- package/fixtures/cases/list-of-objects-closed/context.json +1 -0
- package/fixtures/cases/list-of-objects-closed/expected.json +6 -0
- package/fixtures/cases/list-of-objects-closed/library/companies/acme.md +4 -0
- package/fixtures/cases/list-of-objects-closed/library/deals/renewal.md +32 -0
- package/fixtures/cases/list-of-objects-closed/schema.yaml +56 -0
- package/fixtures/cases/list-of-objects-item/context.json +1 -0
- package/fixtures/cases/list-of-objects-item/expected.json +6 -0
- package/fixtures/cases/list-of-objects-item/library/companies/acme.md +4 -0
- package/fixtures/cases/list-of-objects-item/library/deals/renewal.md +31 -0
- package/fixtures/cases/list-of-objects-item/schema.yaml +56 -0
- package/fixtures/cases/list-of-objects-reference/context.json +1 -0
- package/fixtures/cases/list-of-objects-reference/expected.json +6 -0
- package/fixtures/cases/list-of-objects-reference/library/companies/acme.md +4 -0
- package/fixtures/cases/list-of-objects-reference/library/deals/renewal.md +14 -0
- package/fixtures/cases/list-of-objects-reference/library/places/depot.md +4 -0
- package/fixtures/cases/list-of-objects-reference/library/products/seats.md +4 -0
- package/fixtures/cases/list-of-objects-reference/library/products/support.md +4 -0
- package/fixtures/cases/list-of-objects-reference/schema.yaml +32 -0
- package/fixtures/cases/list-size/context.json +1 -0
- package/fixtures/cases/list-size/expected.json +6 -0
- package/fixtures/cases/list-size/library/companies/acme.md +4 -0
- package/fixtures/cases/list-size/library/deals/renewal.md +31 -0
- package/fixtures/cases/list-size/schema.yaml +56 -0
- package/fixtures/cases/long-fence-link-definition/schema.yaml +1 -0
- package/fixtures/cases/malformed-definition/expected.json +2 -4
- package/fixtures/cases/malformed-definition/schema.yaml +3 -0
- package/fixtures/cases/member-document/context.json +1 -0
- package/fixtures/cases/member-document/expected.json +1 -0
- package/fixtures/cases/member-document/library/people/ana.md +5 -0
- package/fixtures/cases/member-document/schema.yaml +5 -0
- package/fixtures/cases/missing-required-field/expected.json +2 -3
- package/fixtures/cases/missing-required-field/schema.yaml +7 -0
- package/fixtures/cases/missing-section-item-kind/expected.json +2 -4
- package/fixtures/cases/missing-section-item-kind/schema.yaml +6 -0
- package/fixtures/cases/misspelled-key/context.json +1 -0
- package/fixtures/cases/misspelled-key/expected.json +6 -0
- package/fixtures/cases/misspelled-key/library/companies/acme.md +4 -0
- package/fixtures/cases/misspelled-key/library/deals/renewal.md +32 -0
- package/fixtures/cases/misspelled-key/schema.yaml +56 -0
- package/fixtures/cases/nested-defs/context.json +1 -0
- package/fixtures/cases/nested-defs/expected.json +6 -0
- package/fixtures/cases/nested-defs/library/deal.md +6 -0
- package/fixtures/cases/nested-defs/schema.yaml +11 -0
- package/fixtures/cases/nested-object-reference/context.json +1 -0
- package/fixtures/cases/nested-object-reference/expected.json +6 -0
- package/fixtures/cases/nested-object-reference/library/companies/acme.md +4 -0
- package/fixtures/cases/nested-object-reference/library/deals/renewal.md +14 -0
- package/fixtures/cases/nested-object-reference/library/places/depot.md +4 -0
- package/fixtures/cases/nested-object-reference/library/products/seats.md +4 -0
- package/fixtures/cases/nested-object-reference/library/products/support.md +4 -0
- package/fixtures/cases/nested-object-reference/schema.yaml +32 -0
- package/fixtures/cases/nested-reference/context.json +1 -0
- package/fixtures/cases/nested-reference/expected.json +1 -0
- package/fixtures/cases/nested-reference/library/companies/acme.md +4 -0
- package/fixtures/cases/nested-reference/library/deals/renewal.md +15 -0
- package/fixtures/cases/nested-reference/library/places/depot.md +4 -0
- package/fixtures/cases/nested-reference/library/products/seats.md +4 -0
- package/fixtures/cases/nested-reference/library/products/support.md +4 -0
- package/fixtures/cases/nested-reference/schema.yaml +32 -0
- package/fixtures/cases/nested-required-field/context.json +1 -0
- package/fixtures/cases/nested-required-field/expected.json +6 -0
- package/fixtures/cases/nested-required-field/library/companies/acme.md +4 -0
- package/fixtures/cases/nested-required-field/library/deals/renewal.md +30 -0
- package/fixtures/cases/nested-required-field/schema.yaml +56 -0
- package/fixtures/cases/null-refused/context.json +1 -0
- package/fixtures/cases/null-refused/expected.json +6 -0
- package/fixtures/cases/null-refused/library/companies/acme.md +4 -0
- package/fixtures/cases/null-refused/library/deals/renewal.md +31 -0
- package/fixtures/cases/null-refused/schema.yaml +56 -0
- package/fixtures/cases/numeric-range/context.json +1 -0
- package/fixtures/cases/numeric-range/expected.json +6 -0
- package/fixtures/cases/numeric-range/library/companies/acme.md +4 -0
- package/fixtures/cases/numeric-range/library/deals/renewal.md +31 -0
- package/fixtures/cases/numeric-range/schema.yaml +56 -0
- package/fixtures/cases/one-of-variant/context.json +1 -0
- package/fixtures/cases/one-of-variant/expected.json +6 -0
- package/fixtures/cases/one-of-variant/library/companies/acme.md +4 -0
- package/fixtures/cases/one-of-variant/library/deals/renewal.md +31 -0
- package/fixtures/cases/one-of-variant/schema.yaml +56 -0
- package/fixtures/cases/open-map-value/context.json +1 -0
- package/fixtures/cases/open-map-value/expected.json +6 -0
- package/fixtures/cases/open-map-value/library/companies/acme.md +4 -0
- package/fixtures/cases/open-map-value/library/deals/renewal.md +31 -0
- package/fixtures/cases/open-map-value/schema.yaml +56 -0
- package/fixtures/cases/other-room-reference/context.json +1 -0
- package/fixtures/cases/other-room-reference/expected.json +6 -0
- package/fixtures/cases/other-room-reference/library/companies/acme.md +4 -0
- package/fixtures/cases/other-room-reference/library/deals/renewal.md +14 -0
- package/fixtures/cases/other-room-reference/library/places/depot.md +4 -0
- package/fixtures/cases/other-room-reference/library/products/seats.md +4 -0
- package/fixtures/cases/other-room-reference/library/products/support.md +4 -0
- package/fixtures/cases/other-room-reference/schema.yaml +32 -0
- package/fixtures/cases/paragraph-link-definition/schema.yaml +1 -0
- package/fixtures/cases/prototype-field/expected.json +2 -3
- package/fixtures/cases/prototype-field/schema.yaml +6 -0
- package/fixtures/cases/quoted-link-definition/expected.json +1 -2
- package/fixtures/cases/quoted-link-definition/library/notes/draft.md +1 -1
- package/fixtures/cases/quoted-link-definition/schema.yaml +1 -0
- package/fixtures/cases/referenced-missing-file/expected.json +0 -1
- package/fixtures/cases/referenced-missing-file/schema.yaml +11 -0
- package/fixtures/cases/remote-ref/context.json +1 -0
- package/fixtures/cases/remote-ref/expected.json +5 -0
- package/fixtures/cases/remote-ref/schema.yaml +3 -0
- package/fixtures/cases/second-member-document/context.json +1 -0
- package/fixtures/cases/second-member-document/expected.json +5 -0
- package/fixtures/cases/second-member-document/schema.yaml +4 -0
- package/fixtures/cases/section-item-enum/context.json +1 -0
- package/fixtures/cases/section-item-enum/expected.json +6 -0
- package/fixtures/cases/section-item-enum/library/task.md +8 -0
- package/fixtures/cases/section-item-enum/schema.yaml +3 -0
- package/fixtures/cases/section-item-kind/context.json +1 -0
- package/fixtures/cases/section-item-kind/expected.json +6 -0
- package/fixtures/cases/section-item-kind/library/task.md +8 -0
- package/fixtures/cases/section-item-kind/schema.yaml +3 -0
- package/fixtures/cases/section-items/context.json +1 -0
- package/fixtures/cases/section-items/expected.json +1 -0
- package/fixtures/cases/section-items/library/other.md +3 -0
- package/fixtures/cases/section-items/library/page.md +42 -0
- package/fixtures/cases/section-items/schema.yaml +10 -0
- package/fixtures/cases/section-reference-path/context.json +1 -0
- package/fixtures/cases/section-reference-path/expected.json +6 -0
- package/fixtures/cases/section-reference-path/library/other.md +3 -0
- package/fixtures/cases/section-reference-path/library/page.md +7 -0
- package/fixtures/cases/section-reference-path/schema.yaml +3 -0
- package/fixtures/cases/section-reference-type/context.json +1 -0
- package/fixtures/cases/section-reference-type/expected.json +6 -0
- package/fixtures/cases/section-reference-type/library/note.md +1 -0
- package/fixtures/cases/section-reference-type/library/page.md +7 -0
- package/fixtures/cases/section-reference-type/schema.yaml +3 -0
- package/fixtures/cases/shortcut-reference-link/context.json +1 -0
- package/fixtures/cases/shortcut-reference-link/expected.json +5 -0
- package/fixtures/cases/shortcut-reference-link/library/item.md +10 -0
- package/fixtures/cases/shortcut-reference-link/schema.yaml +6 -0
- package/fixtures/cases/string-length/context.json +1 -0
- package/fixtures/cases/string-length/expected.json +6 -0
- package/fixtures/cases/string-length/library/companies/acme.md +4 -0
- package/fixtures/cases/string-length/library/deals/renewal.md +31 -0
- package/fixtures/cases/string-length/schema.yaml +56 -0
- package/fixtures/cases/structured-section/expected.json +1 -2
- package/fixtures/cases/structured-section/schema.yaml +7 -0
- package/fixtures/cases/submission-keys/context.json +1 -0
- package/fixtures/cases/submission-keys/expected.json +1 -0
- package/fixtures/cases/submission-keys/library/notes/visitor.md +8 -0
- package/fixtures/cases/submission-keys/schema.yaml +4 -0
- package/fixtures/cases/text-field-kind/context.json +1 -0
- package/fixtures/cases/text-field-kind/expected.json +6 -0
- package/fixtures/cases/text-field-kind/library/page.md +4 -0
- package/fixtures/cases/text-field-kind/schema.yaml +4 -0
- package/fixtures/cases/truncated-link-definition/expected.json +1 -2
- package/fixtures/cases/truncated-link-definition/library/notes/draft.md +1 -1
- package/fixtures/cases/truncated-link-definition/schema.yaml +1 -0
- package/fixtures/cases/types-folder-content/context.json +1 -0
- package/fixtures/cases/types-folder-content/expected.json +1 -0
- package/fixtures/cases/types-folder-content/library/types/task.md +4 -0
- package/fixtures/cases/types-folder-content/schema.yaml +4 -0
- package/fixtures/cases/unclosed-frontmatter/expected.json +1 -2
- package/fixtures/cases/undeclared-field/expected.json +2 -3
- package/fixtures/cases/undeclared-field/schema.yaml +6 -0
- package/fixtures/cases/unevaluated-items-closed/context.json +1 -0
- package/fixtures/cases/unevaluated-items-closed/expected.json +6 -0
- package/fixtures/cases/unevaluated-items-closed/library/trip.md +6 -0
- package/fixtures/cases/unevaluated-items-closed/schema.yaml +10 -0
- package/fixtures/cases/unknown-type/context.json +1 -0
- package/fixtures/cases/unknown-type/expected.json +6 -0
- package/fixtures/cases/unknown-type/library/item.md +3 -0
- package/fixtures/cases/unknown-type/schema.yaml +3 -0
- package/fixtures/cases/unlisted-reference-type/context.json +1 -0
- package/fixtures/cases/unlisted-reference-type/expected.json +5 -0
- package/fixtures/cases/unlisted-reference-type/schema.yaml +3 -0
- package/fixtures/cases/unresolved-link/expected.json +1 -2
- package/fixtures/cases/unresolved-link/library/item.md +1 -1
- package/fixtures/cases/unresolved-link/schema.yaml +6 -0
- package/fixtures/cases/valid-typed-document/schema.yaml +16 -0
- package/fixtures/cases/wide-item-fence-link/schema.yaml +1 -0
- package/fixtures/division.json +409 -0
- package/fixtures/projection.json +90 -21
- package/package.json +6 -13
- package/dist/definition.js.map +0 -1
- package/dist/document.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/links.js.map +0 -1
- package/dist/paths.js.map +0 -1
- package/dist/profile.js.map +0 -1
- package/dist/project.js.map +0 -1
- package/dist/refuse.js.map +0 -1
- package/dist/schema.js.map +0 -1
- package/dist/sections.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/validate.js.map +0 -1
- package/dist/version.js.map +0 -1
- package/dist/yaml.js.map +0 -1
- package/fixtures/cases/binary-any-reference/library/types/note.md +0 -5
- package/fixtures/cases/binary-document-collision/library/types/note.md +0 -3
- package/fixtures/cases/binary-link-outside-collection/library/types/note.md +0 -3
- package/fixtures/cases/binary-prototype-reference/library/types/note.md +0 -5
- package/fixtures/cases/binary-typed-reference/library/types/note.md +0 -5
- package/fixtures/cases/binary-typed-reference/library/types/person.md +0 -3
- package/fixtures/cases/bracketed-link-definition/library/types/task.md +0 -7
- package/fixtures/cases/declared-binary-links/library/types/note.md +0 -3
- package/fixtures/cases/duplicate-link-definition/library/types/task.md +0 -7
- package/fixtures/cases/fenced-link-definition/library/types/task.md +0 -7
- package/fixtures/cases/field-enum/library/types/task.md +0 -8
- package/fixtures/cases/interrupted-link-definition/library/types/note.md +0 -3
- package/fixtures/cases/long-fence-link-definition/library/types/note.md +0 -3
- package/fixtures/cases/malformed-definition/library/types/task.md +0 -5
- package/fixtures/cases/missing-binary-image/expected.json +0 -6
- package/fixtures/cases/missing-binary-image/library/types/note.md +0 -3
- package/fixtures/cases/missing-binary-link/expected.json +0 -6
- package/fixtures/cases/missing-binary-link/library/types/note.md +0 -3
- package/fixtures/cases/missing-required-field/library/types/task.md +0 -8
- package/fixtures/cases/missing-section-item-kind/library/types/task.md +0 -7
- package/fixtures/cases/paragraph-link-definition/library/types/note.md +0 -3
- package/fixtures/cases/prd-definition/library/types/task.md +0 -16
- package/fixtures/cases/prototype-field/library/types/task.md +0 -7
- package/fixtures/cases/quoted-link-definition/library/types/note.md +0 -3
- package/fixtures/cases/referenced-missing-file/library/types/person.md +0 -5
- package/fixtures/cases/referenced-missing-file/library/types/task.md +0 -8
- package/fixtures/cases/structured-section/library/types/task.md +0 -8
- package/fixtures/cases/truncated-link-definition/library/types/note.md +0 -3
- package/fixtures/cases/undeclared-field/library/types/task.md +0 -7
- package/fixtures/cases/unresolved-link/library/types/task.md +0 -7
- package/fixtures/cases/valid-typed-document/library/types/person.md +0 -5
- package/fixtures/cases/valid-typed-document/library/types/task.md +0 -13
- package/fixtures/cases/wide-item-fence-link/library/types/note.md +0 -3
- package/markdown-syntax-profile.md +0 -9
- /package/fixtures/cases/{prd-definition → absent-link-dangles}/context.json +0 -0
- /package/fixtures/cases/{prd-definition → absent-link-dangles}/expected.json +0 -0
- /package/fixtures/cases/{missing-binary-image → binary-image-dangles}/context.json +0 -0
- /package/fixtures/cases/{missing-binary-image → binary-image-dangles}/library/notes/draft.md +0 -0
- /package/fixtures/cases/{missing-binary-link → binary-link-dangles}/context.json +0 -0
- /package/fixtures/cases/{missing-binary-link → binary-link-dangles}/library/notes/draft.md +0 -0
package/dist/validate.js
CHANGED
|
@@ -1,183 +1,307 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ATTACHMENT, BUILT_IN_TYPE, readSchema } from './definition.js';
|
|
2
2
|
import { parse } from './document.js';
|
|
3
|
-
import { hrefOccurrences } from './links.js';
|
|
4
|
-
import { classifyHref,
|
|
3
|
+
import { hrefOccurrences, linkInventory } from './links.js';
|
|
4
|
+
import { classifyHref, roomTarget } from './paths.js';
|
|
5
|
+
import { references } from './references.js';
|
|
5
6
|
import { refusal } from './refuse.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { bodyAfterFrontmatter } from './yaml.js';
|
|
7
|
+
import { fitsItem, frontmatterRefusal } from './schema.js';
|
|
8
|
+
import { headingSpans, listItems } from './sections.js';
|
|
9
|
+
import { bodyAfterFrontmatter, bodyStartOf } from './yaml.js';
|
|
9
10
|
function refuse(file, rule, extra) {
|
|
10
|
-
return {
|
|
11
|
-
verdict: 'refuse',
|
|
12
|
-
...refusal(file, rule, extra)
|
|
13
|
-
};
|
|
11
|
+
return { verdict: 'refuse', ...refusal(file, rule, extra) };
|
|
14
12
|
}
|
|
15
|
-
function instanceType(document
|
|
16
|
-
if (isTypesPath(file)) return 'definition';
|
|
13
|
+
function instanceType(document) {
|
|
17
14
|
const raw = document.fields.type;
|
|
18
|
-
if (raw === undefined || raw === null)
|
|
19
|
-
|
|
15
|
+
if (raw === undefined || raw === null)
|
|
16
|
+
return BUILT_IN_TYPE;
|
|
17
|
+
if (typeof raw !== 'string' || raw === '')
|
|
18
|
+
return null;
|
|
20
19
|
return raw;
|
|
21
20
|
}
|
|
22
|
-
function
|
|
23
|
-
if (
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
function reaches(reference, typeOf, binary) {
|
|
22
|
+
if (reference.target === null)
|
|
23
|
+
return false;
|
|
24
|
+
if (reference.to.includes(ATTACHMENT))
|
|
25
|
+
return true;
|
|
26
|
+
if (binary(reference.target))
|
|
27
|
+
return false;
|
|
28
|
+
const held = typeOf(reference.target);
|
|
29
|
+
return held === undefined || reference.to.includes(held);
|
|
30
30
|
}
|
|
31
|
-
function
|
|
32
|
-
if (
|
|
33
|
-
|
|
34
|
-
return
|
|
31
|
+
function missing(reference, typeOf, binary) {
|
|
32
|
+
if (reference.to.includes(ATTACHMENT) || reference.target === null)
|
|
33
|
+
return false;
|
|
34
|
+
return typeOf(reference.target) === undefined && !binary(reference.target);
|
|
35
35
|
}
|
|
36
|
-
function
|
|
37
|
-
|
|
38
|
-
if (!parsed.ok) return undefined;
|
|
39
|
-
return parsed.document.type ?? 'any';
|
|
36
|
+
export function resolves(reference, typeOf, binary) {
|
|
37
|
+
return reaches(reference, typeOf, binary) && !missing(reference, typeOf, binary);
|
|
40
38
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
39
|
+
function usesIn(content) {
|
|
40
|
+
let held;
|
|
41
|
+
return () => {
|
|
42
|
+
if (held !== undefined)
|
|
43
|
+
return held;
|
|
44
|
+
const bodyStart = bodyStartOf(content);
|
|
45
|
+
held = linkInventory(content.slice(bodyStart)).uses.map((use) => ({
|
|
46
|
+
...use,
|
|
47
|
+
start: bodyStart + use.start,
|
|
48
|
+
end: bodyStart + use.end,
|
|
49
|
+
}));
|
|
50
|
+
return held;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function itemHrefs(content, items, uses) {
|
|
54
|
+
const hrefs = [];
|
|
55
|
+
for (const item of items) {
|
|
56
|
+
const link = uses().find((use) => use.start === item.start && use.end === item.end && content[item.start] === '[');
|
|
57
|
+
if (link === undefined)
|
|
58
|
+
return null;
|
|
59
|
+
hrefs.push(link.destination.href);
|
|
55
60
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
61
|
+
return hrefs;
|
|
62
|
+
}
|
|
63
|
+
export function verify(schema) {
|
|
64
|
+
const read = readSchema(schema);
|
|
65
|
+
if ('types' in read)
|
|
66
|
+
return { verdict: 'accept', model: read };
|
|
67
|
+
return {
|
|
68
|
+
verdict: 'refuse',
|
|
69
|
+
rule: read.rule,
|
|
70
|
+
...(read.location === undefined ? {} : { location: read.location }),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function structure(file, content, document, definition) {
|
|
74
|
+
if (definition === undefined)
|
|
75
|
+
return { refusal: refuse(file, 'unknown-type', { location: '/type' }) };
|
|
76
|
+
const fieldFailure = frontmatterRefusal(definition, document.fields);
|
|
77
|
+
if (fieldFailure !== undefined) {
|
|
78
|
+
return { refusal: refuse(file, fieldFailure.rule, { location: fieldFailure.location }) };
|
|
71
79
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
const spans = headingSpans(content, bodyStartOf(content));
|
|
81
|
+
const uses = usesIn(content);
|
|
82
|
+
const sections = [];
|
|
83
|
+
for (const [name, spec] of Object.entries(definition.sections)) {
|
|
84
|
+
const occurrences = spans.filter((one) => one.name === name);
|
|
85
|
+
if (occurrences.length === 0 && spec.required)
|
|
86
|
+
return { refusal: refuse(file, 'required-section', { location: name }) };
|
|
87
|
+
if (spec.kind !== 'list')
|
|
88
|
+
continue;
|
|
89
|
+
for (const span of occurrences) {
|
|
90
|
+
const items = listItems(content, span.bodyStart, span.bodyEnd);
|
|
91
|
+
if (items === null ||
|
|
92
|
+
items.some((item) => !fitsItem(definition, name, content.slice(item.start, item.end))))
|
|
93
|
+
return { refusal: refuse(file, 'structured-section', { location: name }) };
|
|
94
|
+
if (spec.items.reference === undefined)
|
|
95
|
+
continue;
|
|
96
|
+
const hrefs = itemHrefs(content, items, uses);
|
|
97
|
+
if (hrefs === null)
|
|
98
|
+
return { refusal: refuse(file, 'structured-section', { location: name }) };
|
|
99
|
+
sections.push({
|
|
100
|
+
section: name,
|
|
101
|
+
to: spec.items.reference,
|
|
102
|
+
crossRoom: spec.items.crossRoom === true,
|
|
103
|
+
hrefs,
|
|
81
104
|
});
|
|
82
105
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
106
|
+
}
|
|
107
|
+
return { sections };
|
|
108
|
+
}
|
|
109
|
+
function linked(file, content) {
|
|
110
|
+
return hrefOccurrences(bodyAfterFrontmatter(content)).every((occurrence) => classifyHref(file, occurrence.href).kind !== 'invalid');
|
|
111
|
+
}
|
|
112
|
+
function reached(file, href, to) {
|
|
113
|
+
const resolved = classifyHref(file, href);
|
|
114
|
+
return { target: resolved.kind === 'path' ? resolved.path : null, to };
|
|
115
|
+
}
|
|
116
|
+
function crossing(file, href, crossRoom) {
|
|
117
|
+
return crossRoom === true && classifyHref(file, href).kind === 'room';
|
|
118
|
+
}
|
|
119
|
+
function definitionOf(document, model) {
|
|
120
|
+
const kind = instanceType(document);
|
|
121
|
+
return kind === null || !Object.hasOwn(model.types, kind) ? undefined : model.types[kind];
|
|
122
|
+
}
|
|
123
|
+
export function checkDocument(file, content, model, context = {}) {
|
|
124
|
+
const anyRoom = context.anyRoom === true;
|
|
125
|
+
const parsed = parse(content, file);
|
|
126
|
+
if (!parsed.ok)
|
|
127
|
+
return { ok: false };
|
|
128
|
+
const document = parsed.document;
|
|
129
|
+
const type = document.type ?? BUILT_IN_TYPE;
|
|
130
|
+
if (instanceType(document) === BUILT_IN_TYPE)
|
|
131
|
+
return { ok: true, type, typed: false, references: [] };
|
|
132
|
+
const definition = definitionOf(document, model);
|
|
133
|
+
const read = structure(file, content, document, definition);
|
|
134
|
+
if ('refusal' in read || definition === undefined || !linked(file, content))
|
|
135
|
+
return { ok: false };
|
|
136
|
+
return {
|
|
137
|
+
ok: true,
|
|
138
|
+
type,
|
|
139
|
+
typed: true,
|
|
140
|
+
references: [
|
|
141
|
+
...references(document, definition).flatMap(({ value, to, crossRoom }) => crossing(file, value, anyRoom || crossRoom) ? [] : [reached(file, value, to)]),
|
|
142
|
+
...read.sections.flatMap(({ to, crossRoom, hrefs }) => hrefs.flatMap((href) => crossing(file, href, anyRoom || crossRoom) ? [] : [reached(file, href, to)])),
|
|
143
|
+
],
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export function sectionReferences(file, content, definition) {
|
|
147
|
+
const referring = (name) => {
|
|
148
|
+
const spec = Object.hasOwn(definition.sections, name) ? definition.sections[name] : undefined;
|
|
149
|
+
return spec?.kind === 'list' && spec.items.reference !== undefined ? spec.items : undefined;
|
|
150
|
+
};
|
|
151
|
+
if (!Object.keys(definition.sections).some((name) => referring(name) !== undefined))
|
|
152
|
+
return [];
|
|
153
|
+
const uses = usesIn(content);
|
|
154
|
+
const found = [];
|
|
155
|
+
for (const span of headingSpans(content, bodyStartOf(content))) {
|
|
156
|
+
const items = referring(span.name);
|
|
157
|
+
if (items === undefined)
|
|
158
|
+
continue;
|
|
159
|
+
const listed = listItems(content, span.bodyStart, span.bodyEnd);
|
|
160
|
+
const hrefs = listed === null ? null : itemHrefs(content, listed, uses);
|
|
161
|
+
for (const href of hrefs ?? [])
|
|
162
|
+
if (!crossing(file, href, items.crossRoom))
|
|
163
|
+
found.push(reached(file, href, items.reference));
|
|
164
|
+
}
|
|
165
|
+
return found;
|
|
166
|
+
}
|
|
167
|
+
export function bodyRoomLinks(body) {
|
|
168
|
+
const found = [];
|
|
169
|
+
for (const href of new Set(hrefOccurrences(body).map((occurrence) => occurrence.href))) {
|
|
170
|
+
const room = roomTarget(href);
|
|
171
|
+
if (room !== null)
|
|
172
|
+
found.push({ kind: 'link', href, ...room });
|
|
173
|
+
}
|
|
174
|
+
return found;
|
|
175
|
+
}
|
|
176
|
+
export function roomReferences(file, content, definition) {
|
|
177
|
+
const found = bodyRoomLinks(bodyAfterFrontmatter(content));
|
|
178
|
+
if (definition === undefined)
|
|
179
|
+
return found;
|
|
180
|
+
const parsed = parse(content, file);
|
|
181
|
+
if (!parsed.ok)
|
|
182
|
+
return found;
|
|
183
|
+
for (const { pointer, value, to, crossRoom } of references(parsed.document, definition)) {
|
|
184
|
+
const room = roomTarget(value);
|
|
185
|
+
if (room !== null)
|
|
186
|
+
found.push({
|
|
187
|
+
kind: 'field',
|
|
188
|
+
pointer,
|
|
189
|
+
value,
|
|
190
|
+
to,
|
|
191
|
+
...room,
|
|
192
|
+
...(crossRoom ? { crossRoom } : {}),
|
|
91
193
|
});
|
|
92
|
-
}
|
|
93
|
-
const declaredFields = new Set(Object.keys(definition.fields));
|
|
94
|
-
const undeclared = Object.keys(parsed.document.fields).find((name)=>name !== 'type' && !declaredFields.has(name));
|
|
95
|
-
if (undeclared !== undefined) return refuse(file, 'undeclared-field', {
|
|
96
|
-
location: undeclared
|
|
97
|
-
});
|
|
98
|
-
for (const [name, spec] of Object.entries(definition.sections)){
|
|
99
|
-
const body = parsed.document.sections[name];
|
|
100
|
-
if (body === undefined) {
|
|
101
|
-
if (spec.required) return refuse(file, 'required-section', {
|
|
102
|
-
location: name
|
|
103
|
-
});
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
if (spec.kind === 'list' && !parseListSection(body)) {
|
|
107
|
-
return refuse(file, 'structured-section', {
|
|
108
|
-
location: name
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
194
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const
|
|
123
|
-
if (
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (targetType !== expected) return refuse(file, 'unresolved-reference', {
|
|
132
|
-
location: name
|
|
195
|
+
const uses = usesIn(content);
|
|
196
|
+
for (const span of headingSpans(content, bodyStartOf(content))) {
|
|
197
|
+
const spec = Object.hasOwn(definition.sections, span.name)
|
|
198
|
+
? definition.sections[span.name]
|
|
199
|
+
: undefined;
|
|
200
|
+
if (spec?.kind !== 'list' || spec.items.reference === undefined)
|
|
201
|
+
continue;
|
|
202
|
+
const listed = listItems(content, span.bodyStart, span.bodyEnd);
|
|
203
|
+
for (const href of (listed === null ? null : itemHrefs(content, listed, uses)) ?? []) {
|
|
204
|
+
const room = roomTarget(href);
|
|
205
|
+
if (room !== null)
|
|
206
|
+
found.push({
|
|
207
|
+
kind: 'item',
|
|
208
|
+
section: span.name,
|
|
209
|
+
href,
|
|
210
|
+
to: spec.items.reference,
|
|
211
|
+
...room,
|
|
212
|
+
...(spec.items.crossRoom === true ? { crossRoom: true } : {}),
|
|
133
213
|
});
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
const body = bodyAfterFrontmatter(library[file]);
|
|
137
|
-
for (const occurrence of hrefOccurrences(body)){
|
|
138
|
-
const resolved = classifyHref(file, occurrence.href);
|
|
139
|
-
if (resolved.kind === 'skip') continue;
|
|
140
|
-
if (resolved.kind === 'invalid' || !documents.has(resolved.path) && !binaryTargets.has(resolved.path)) {
|
|
141
|
-
return refuse(file, 'unresolved-link');
|
|
142
|
-
}
|
|
143
214
|
}
|
|
144
215
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
216
|
+
return found;
|
|
217
|
+
}
|
|
218
|
+
function least(refused, file, verdict) {
|
|
219
|
+
return refused === undefined || file < refused.file ? { file, verdict } : refused;
|
|
220
|
+
}
|
|
221
|
+
export function* validating(library, context = { binaryTargets: [] }, model = { types: {} }) {
|
|
222
|
+
const binaryTargets = new Set(context.binaryTargets);
|
|
223
|
+
const binary = (path) => binaryTargets.has(path);
|
|
224
|
+
const anyRoom = context.anyRoom === true;
|
|
225
|
+
const types = new Map();
|
|
226
|
+
const typeOf = (path) => types.get(path);
|
|
227
|
+
const documents = new Map();
|
|
228
|
+
let refused;
|
|
229
|
+
for (const [file, content] of library) {
|
|
230
|
+
const parsed = binaryTargets.has(file) ? null : parse(content, file);
|
|
231
|
+
if (parsed === null)
|
|
232
|
+
refused = least(refused, file, refuse(file, 'binary-target-document'));
|
|
233
|
+
else if (!parsed.ok)
|
|
234
|
+
refused = least(refused, file, { verdict: 'refuse', ...parsed.refusal });
|
|
235
|
+
else {
|
|
236
|
+
types.set(file, parsed.document.type ?? BUILT_IN_TYPE);
|
|
237
|
+
if (instanceType(parsed.document) !== BUILT_IN_TYPE)
|
|
238
|
+
documents.set(file, parsed.document);
|
|
164
239
|
}
|
|
240
|
+
yield { path: file, resolved: 0 };
|
|
165
241
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
});
|
|
242
|
+
if (refused !== undefined)
|
|
243
|
+
return refused.verdict;
|
|
244
|
+
const sectionReferences = new Map();
|
|
245
|
+
for (const [file, document] of documents) {
|
|
246
|
+
const read = structure(file, library.get(file), document, definitionOf(document, model));
|
|
247
|
+
if ('refusal' in read)
|
|
248
|
+
refused = least(refused, file, read.refusal);
|
|
249
|
+
else
|
|
250
|
+
sectionReferences.set(file, read.sections);
|
|
251
|
+
yield { path: file, resolved: 0 };
|
|
177
252
|
}
|
|
178
|
-
|
|
179
|
-
verdict
|
|
253
|
+
if (refused !== undefined)
|
|
254
|
+
return refused.verdict;
|
|
255
|
+
const referred = (file, document) => {
|
|
256
|
+
const definition = definitionOf(document, model);
|
|
257
|
+
const fields = references(document, definition).flatMap(({ pointer, value, to, crossRoom }) => crossing(file, value, anyRoom || crossRoom)
|
|
258
|
+
? []
|
|
259
|
+
: [{ reference: reached(file, value, to), location: pointer }]);
|
|
260
|
+
for (const { reference, location } of fields) {
|
|
261
|
+
if (!reaches(reference, typeOf, binary))
|
|
262
|
+
return refuse(file, 'unresolved-reference', { location });
|
|
263
|
+
}
|
|
264
|
+
if (!linked(file, library.get(file)))
|
|
265
|
+
return refuse(file, 'unresolved-link');
|
|
266
|
+
const sections = sectionReferences
|
|
267
|
+
.get(file)
|
|
268
|
+
.flatMap(({ section, to, crossRoom, hrefs }) => hrefs.flatMap((href) => crossing(file, href, anyRoom || crossRoom)
|
|
269
|
+
? []
|
|
270
|
+
: [{ reference: reached(file, href, to), location: section }]));
|
|
271
|
+
for (const { reference, location } of sections) {
|
|
272
|
+
if (!reaches(reference, typeOf, binary))
|
|
273
|
+
return refuse(file, 'unresolved-reference', { location });
|
|
274
|
+
}
|
|
275
|
+
return { references: [...fields, ...sections] };
|
|
180
276
|
};
|
|
277
|
+
let missed;
|
|
278
|
+
for (const [file, document] of documents) {
|
|
279
|
+
const checked = referred(file, document);
|
|
280
|
+
if ('verdict' in checked)
|
|
281
|
+
refused = least(refused, file, checked);
|
|
282
|
+
else {
|
|
283
|
+
for (const { reference } of checked.references) {
|
|
284
|
+
if (!missing(reference, typeOf, binary))
|
|
285
|
+
continue;
|
|
286
|
+
const path = reference.target;
|
|
287
|
+
if (missed === undefined || path < missed.path)
|
|
288
|
+
missed = { path, referrers: [] };
|
|
289
|
+
if (path === missed.path && missed.referrers.at(-1) !== file)
|
|
290
|
+
missed.referrers.push(file);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
yield { path: file, resolved: 'verdict' in checked ? 0 : checked.references.length };
|
|
294
|
+
}
|
|
295
|
+
if (refused !== undefined)
|
|
296
|
+
return refused.verdict;
|
|
297
|
+
if (missed !== undefined)
|
|
298
|
+
return refuse(missed.path, 'referenced-missing-file', { referrers: missed.referrers.sort() });
|
|
299
|
+
return { verdict: 'accept' };
|
|
300
|
+
}
|
|
301
|
+
export function validate(library, context = { binaryTargets: [] }, model = { types: {} }) {
|
|
302
|
+
const steps = validating(new Map(Object.entries(library)), context, model);
|
|
303
|
+
let step = steps.next();
|
|
304
|
+
while (step.done !== true)
|
|
305
|
+
step = steps.next();
|
|
306
|
+
return step.value;
|
|
181
307
|
}
|
|
182
|
-
|
|
183
|
-
//# sourceMappingURL=validate.js.map
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.0-alpha.
|
|
1
|
+
export declare const VERSION = "0.1.0-alpha.19";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,mBAAmB,CAAC"}
|
package/dist/version.js
CHANGED
package/dist/yaml.d.ts
CHANGED
|
@@ -16,8 +16,7 @@ export type YamlSeq = {
|
|
|
16
16
|
};
|
|
17
17
|
export type YamlEntry = {
|
|
18
18
|
readonly key: string;
|
|
19
|
-
readonly
|
|
20
|
-
readonly keyEnd: number;
|
|
19
|
+
readonly after: number;
|
|
21
20
|
readonly value: YamlNode;
|
|
22
21
|
};
|
|
23
22
|
export type YamlMap = {
|
|
@@ -27,11 +26,18 @@ export type YamlMap = {
|
|
|
27
26
|
readonly end: number;
|
|
28
27
|
};
|
|
29
28
|
export type YamlNode = YamlScalar | YamlSeq | YamlMap;
|
|
29
|
+
export declare function interpretPlain(text: string): string | number | boolean | null;
|
|
30
30
|
export declare function parseYamlMapping(text: string, start: number, end: number): YamlMap;
|
|
31
31
|
export declare function jsValue(node: YamlNode): unknown;
|
|
32
32
|
export declare function mapEntry(map: YamlMap, key: string): YamlEntry | undefined;
|
|
33
33
|
export declare function isPlainSafe(text: string): boolean;
|
|
34
|
-
export
|
|
34
|
+
export type FrontmatterValue = string | number | boolean | null | readonly FrontmatterValue[] | {
|
|
35
|
+
readonly [name: string]: FrontmatterValue;
|
|
36
|
+
};
|
|
37
|
+
export declare function plain(value: unknown): value is Record<string, unknown>;
|
|
38
|
+
export declare function frontmatterValue(value: unknown): value is FrontmatterValue;
|
|
39
|
+
export declare function serializeJs(value: FrontmatterValue): string;
|
|
40
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
35
41
|
export declare function serializeKey(name: string): string;
|
|
36
42
|
export declare function bodyStartAfterYaml(content: string, yamlEnd: number): number;
|
|
37
43
|
export declare function bodyStartOf(content: string): number;
|
package/dist/yaml.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAnC,YAAqB,MAAM,EAAE,MAAM,EAGlC;CACF;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"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"}
|