glossarist 0.4.50 → 0.4.52
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/dist/compiled-format.d.ts +43 -0
- package/dist/compiled-format.d.ts.map +1 -0
- package/{src/compiled-format.ts → dist/compiled-format.js} +28 -46
- package/dist/compiled-format.js.map +1 -0
- package/dist/concept-collection.d.ts +39 -0
- package/dist/concept-collection.d.ts.map +1 -0
- package/dist/concept-collection.js +127 -0
- package/dist/concept-collection.js.map +1 -0
- package/dist/concept-diff.d.ts +14 -0
- package/dist/concept-diff.d.ts.map +1 -0
- package/{src/concept-diff.ts → dist/concept-diff.js} +2 -20
- package/dist/concept-diff.js.map +1 -0
- package/dist/concept-parser.d.ts +11 -0
- package/dist/concept-parser.d.ts.map +1 -0
- package/dist/concept-parser.js +209 -0
- package/dist/concept-parser.js.map +1 -0
- package/dist/concept-reader.d.ts +55 -0
- package/dist/concept-reader.d.ts.map +1 -0
- package/{src/concept-reader.ts → dist/concept-reader.js} +70 -76
- package/dist/concept-reader.js.map +1 -0
- package/dist/concept-serializer.d.ts +9 -0
- package/dist/concept-serializer.d.ts.map +1 -0
- package/dist/concept-serializer.js +87 -0
- package/dist/concept-serializer.js.map +1 -0
- package/dist/concept-writer.d.ts +10 -0
- package/dist/concept-writer.d.ts.map +1 -0
- package/dist/concept-writer.js +28 -0
- package/dist/concept-writer.js.map +1 -0
- package/dist/dataset-asset.d.ts +49 -0
- package/dist/dataset-asset.d.ts.map +1 -0
- package/{src/dataset-asset.ts → dist/dataset-asset.js} +16 -33
- package/dist/dataset-asset.js.map +1 -0
- package/dist/diff/canonical-json.d.ts +7 -0
- package/dist/diff/canonical-json.d.ts.map +1 -0
- package/dist/diff/canonical-json.js +28 -0
- package/dist/diff/canonical-json.js.map +1 -0
- package/dist/diff/change.d.ts +67 -0
- package/dist/diff/change.d.ts.map +1 -0
- package/dist/diff/change.js +131 -0
- package/dist/diff/change.js.map +1 -0
- package/dist/diff/collection-diff.d.ts +50 -0
- package/dist/diff/collection-diff.d.ts.map +1 -0
- package/dist/diff/collection-diff.js +182 -0
- package/dist/diff/collection-diff.js.map +1 -0
- package/dist/diff/concept-diff.d.ts +188 -0
- package/dist/diff/concept-diff.d.ts.map +1 -0
- package/dist/diff/concept-diff.js +624 -0
- package/dist/diff/concept-diff.js.map +1 -0
- package/dist/diff/diff-patch.d.ts +7 -0
- package/dist/diff/diff-patch.d.ts.map +1 -0
- package/dist/diff/diff-patch.js +225 -0
- package/dist/diff/diff-patch.js.map +1 -0
- package/dist/diff/diff-renderer.d.ts +44 -0
- package/dist/diff/diff-renderer.d.ts.map +1 -0
- package/dist/diff/diff-renderer.js +263 -0
- package/dist/diff/diff-renderer.js.map +1 -0
- package/dist/diff/identity.d.ts +2 -0
- package/dist/diff/identity.d.ts.map +1 -0
- package/dist/diff/identity.js +29 -0
- package/dist/diff/identity.js.map +1 -0
- package/dist/diff/index.d.ts +8 -0
- package/dist/diff/index.d.ts.map +1 -0
- package/dist/diff/index.js +8 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/diff/list-diff.d.ts +36 -0
- package/dist/diff/list-diff.d.ts.map +1 -0
- package/dist/diff/list-diff.js +185 -0
- package/dist/diff/list-diff.js.map +1 -0
- package/dist/diff/similarity.d.ts +4 -0
- package/dist/diff/similarity.d.ts.map +1 -0
- package/dist/diff/similarity.js +20 -0
- package/dist/diff/similarity.js.map +1 -0
- package/dist/diff/text-diff.d.ts +42 -0
- package/dist/diff/text-diff.d.ts.map +1 -0
- package/dist/diff/text-diff.js +134 -0
- package/dist/diff/text-diff.js.map +1 -0
- package/dist/entity-directory.d.ts +13 -0
- package/dist/entity-directory.d.ts.map +1 -0
- package/dist/entity-directory.js +35 -0
- package/dist/entity-directory.js.map +1 -0
- package/dist/errors.d.ts +15 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +23 -0
- package/dist/errors.js.map +1 -0
- package/dist/gcr-reader.d.ts +57 -0
- package/dist/gcr-reader.d.ts.map +1 -0
- package/dist/gcr-reader.js +264 -0
- package/dist/gcr-reader.js.map +1 -0
- package/dist/gcr-writer.d.ts +23 -0
- package/dist/gcr-writer.d.ts.map +1 -0
- package/dist/gcr-writer.js +84 -0
- package/dist/gcr-writer.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/managed-concept-collection.d.ts +31 -0
- package/dist/managed-concept-collection.d.ts.map +1 -0
- package/dist/managed-concept-collection.js +87 -0
- package/dist/managed-concept-collection.js.map +1 -0
- package/dist/migration/hyperedge-migrator.d.ts +33 -0
- package/dist/migration/hyperedge-migrator.d.ts.map +1 -0
- package/dist/migration/hyperedge-migrator.js +70 -0
- package/dist/migration/hyperedge-migrator.js.map +1 -0
- package/dist/models/abstract-hyperedge.d.ts +35 -0
- package/dist/models/abstract-hyperedge.d.ts.map +1 -0
- package/dist/models/abstract-hyperedge.js +112 -0
- package/dist/models/abstract-hyperedge.js.map +1 -0
- package/dist/models/base.d.ts +58 -0
- package/dist/models/base.d.ts.map +1 -0
- package/dist/models/base.js +77 -0
- package/dist/models/base.js.map +1 -0
- package/dist/models/bibliography-data.d.ts +20 -0
- package/dist/models/bibliography-data.d.ts.map +1 -0
- package/dist/models/bibliography-data.js +43 -0
- package/dist/models/bibliography-data.js.map +1 -0
- package/dist/models/bibliography-entry.d.ts +19 -0
- package/dist/models/bibliography-entry.d.ts.map +1 -0
- package/dist/models/bibliography-entry.js +34 -0
- package/dist/models/bibliography-entry.js.map +1 -0
- package/dist/models/citation.d.ts +40 -0
- package/dist/models/citation.d.ts.map +1 -0
- package/dist/models/citation.js +82 -0
- package/dist/models/citation.js.map +1 -0
- package/dist/models/completeness.d.ts +9 -0
- package/dist/models/completeness.d.ts.map +1 -0
- package/{src/models/completeness.ts → dist/models/completeness.js} +4 -9
- package/dist/models/completeness.js.map +1 -0
- package/dist/models/concept-date.d.ts +20 -0
- package/dist/models/concept-date.d.ts.map +1 -0
- package/dist/models/concept-date.js +36 -0
- package/dist/models/concept-date.js.map +1 -0
- package/dist/models/concept-ref.d.ts +32 -0
- package/dist/models/concept-ref.d.ts.map +1 -0
- package/dist/models/concept-ref.js +53 -0
- package/dist/models/concept-ref.js.map +1 -0
- package/dist/models/concept-reference.d.ts +22 -0
- package/dist/models/concept-reference.d.ts.map +1 -0
- package/dist/models/concept-reference.js +39 -0
- package/dist/models/concept-reference.js.map +1 -0
- package/dist/models/concept-source.d.ts +53 -0
- package/dist/models/concept-source.d.ts.map +1 -0
- package/dist/models/concept-source.js +66 -0
- package/dist/models/concept-source.js.map +1 -0
- package/dist/models/concept-system-type.d.ts +6 -0
- package/dist/models/concept-system-type.d.ts.map +1 -0
- package/dist/models/concept-system-type.js +22 -0
- package/dist/models/concept-system-type.js.map +1 -0
- package/dist/models/concept-system.d.ts +44 -0
- package/dist/models/concept-system.d.ts.map +1 -0
- package/dist/models/concept-system.js +115 -0
- package/dist/models/concept-system.js.map +1 -0
- package/dist/models/concept-type.d.ts +7 -0
- package/dist/models/concept-type.d.ts.map +1 -0
- package/{src/models/concept-type.ts → dist/models/concept-type.js} +8 -19
- package/dist/models/concept-type.js.map +1 -0
- package/dist/models/concept.d.ts +94 -0
- package/dist/models/concept.d.ts.map +1 -0
- package/dist/models/concept.js +368 -0
- package/dist/models/concept.js.map +1 -0
- package/dist/models/dataset-color.d.ts +28 -0
- package/dist/models/dataset-color.d.ts.map +1 -0
- package/dist/models/dataset-color.js +74 -0
- package/dist/models/dataset-color.js.map +1 -0
- package/dist/models/definition-type.d.ts +9 -0
- package/dist/models/definition-type.d.ts.map +1 -0
- package/{src/models/definition-type.ts → dist/models/definition-type.js} +6 -15
- package/dist/models/definition-type.js.map +1 -0
- package/dist/models/designation-relationship.d.ts +17 -0
- package/dist/models/designation-relationship.d.ts.map +1 -0
- package/dist/models/designation-relationship.js +30 -0
- package/dist/models/designation-relationship.js.map +1 -0
- package/dist/models/designation.d.ts +110 -0
- package/dist/models/designation.d.ts.map +1 -0
- package/dist/models/designation.js +224 -0
- package/dist/models/designation.js.map +1 -0
- package/dist/models/detailed-definition.d.ts +34 -0
- package/dist/models/detailed-definition.d.ts.map +1 -0
- package/dist/models/detailed-definition.js +63 -0
- package/dist/models/detailed-definition.js.map +1 -0
- package/dist/models/enum.d.ts +21 -0
- package/dist/models/enum.d.ts.map +1 -0
- package/dist/models/enum.js +39 -0
- package/dist/models/enum.js.map +1 -0
- package/dist/models/equivalence-degree.d.ts +7 -0
- package/dist/models/equivalence-degree.d.ts.map +1 -0
- package/dist/models/equivalence-degree.js +20 -0
- package/dist/models/equivalence-degree.js.map +1 -0
- package/dist/models/figure.d.ts +40 -0
- package/dist/models/figure.d.ts.map +1 -0
- package/dist/models/figure.js +82 -0
- package/dist/models/figure.js.map +1 -0
- package/dist/models/formula.d.ts +15 -0
- package/dist/models/formula.d.ts.map +1 -0
- package/dist/models/formula.js +27 -0
- package/dist/models/formula.js.map +1 -0
- package/dist/models/gcr-metadata.d.ts +62 -0
- package/dist/models/gcr-metadata.d.ts.map +1 -0
- package/dist/models/gcr-metadata.js +102 -0
- package/dist/models/gcr-metadata.js.map +1 -0
- package/dist/models/gcr-statistics.d.ts +30 -0
- package/dist/models/gcr-statistics.d.ts.map +1 -0
- package/dist/models/gcr-statistics.js +53 -0
- package/dist/models/gcr-statistics.js.map +1 -0
- package/dist/models/generic-hyperedge.d.ts +32 -0
- package/dist/models/generic-hyperedge.d.ts.map +1 -0
- package/dist/models/generic-hyperedge.js +51 -0
- package/dist/models/generic-hyperedge.js.map +1 -0
- package/dist/models/generic-member.d.ts +14 -0
- package/dist/models/generic-member.d.ts.map +1 -0
- package/dist/models/generic-member.js +51 -0
- package/dist/models/generic-member.js.map +1 -0
- package/dist/models/grammar-info.d.ts +34 -0
- package/dist/models/grammar-info.d.ts.map +1 -0
- package/dist/models/grammar-info.js +59 -0
- package/dist/models/grammar-info.js.map +1 -0
- package/dist/models/hyperedge-colors.d.ts +19 -0
- package/dist/models/hyperedge-colors.d.ts.map +1 -0
- package/dist/models/hyperedge-colors.js +61 -0
- package/dist/models/hyperedge-colors.js.map +1 -0
- package/dist/models/hyperedge-index.d.ts +34 -0
- package/dist/models/hyperedge-index.d.ts.map +1 -0
- package/dist/models/hyperedge-index.js +85 -0
- package/dist/models/hyperedge-index.js.map +1 -0
- package/dist/models/hyperedge-member.d.ts +28 -0
- package/dist/models/hyperedge-member.d.ts.map +1 -0
- package/dist/models/hyperedge-member.js +92 -0
- package/dist/models/hyperedge-member.js.map +1 -0
- package/dist/models/hyperedge-registry.d.ts +47 -0
- package/dist/models/hyperedge-registry.d.ts.map +1 -0
- package/dist/models/hyperedge-registry.js +118 -0
- package/dist/models/hyperedge-registry.js.map +1 -0
- package/dist/models/index.d.ts +53 -0
- package/dist/models/index.d.ts.map +1 -0
- package/{src/models/index.ts → dist/models/index.js} +11 -63
- package/dist/models/index.js.map +1 -0
- package/dist/models/locality.d.ts +17 -0
- package/dist/models/locality.d.ts.map +1 -0
- package/dist/models/locality.js +26 -0
- package/dist/models/locality.js.map +1 -0
- package/dist/models/localized-concept.d.ts +102 -0
- package/dist/models/localized-concept.d.ts.map +1 -0
- package/dist/models/localized-concept.js +195 -0
- package/dist/models/localized-concept.js.map +1 -0
- package/dist/models/localized-string.d.ts +5 -0
- package/dist/models/localized-string.d.ts.map +1 -0
- package/dist/models/localized-string.js +20 -0
- package/dist/models/localized-string.js.map +1 -0
- package/dist/models/multiplicity.d.ts +42 -0
- package/dist/models/multiplicity.d.ts.map +1 -0
- package/dist/models/multiplicity.js +84 -0
- package/dist/models/multiplicity.js.map +1 -0
- package/dist/models/non-verb-rep.d.ts +20 -0
- package/dist/models/non-verb-rep.d.ts.map +1 -0
- package/dist/models/non-verb-rep.js +32 -0
- package/dist/models/non-verb-rep.js.map +1 -0
- package/dist/models/non-verbal-entity.d.ts +30 -0
- package/dist/models/non-verbal-entity.d.ts.map +1 -0
- package/dist/models/non-verbal-entity.js +48 -0
- package/dist/models/non-verbal-entity.js.map +1 -0
- package/dist/models/non-verbal-reference.d.ts +23 -0
- package/dist/models/non-verbal-reference.d.ts.map +1 -0
- package/dist/models/non-verbal-reference.js +44 -0
- package/dist/models/non-verbal-reference.js.map +1 -0
- package/dist/models/non-verbal-references.d.ts +12 -0
- package/dist/models/non-verbal-references.d.ts.map +1 -0
- package/dist/models/non-verbal-references.js +20 -0
- package/dist/models/non-verbal-references.js.map +1 -0
- package/dist/models/partitive-count.d.ts +10 -0
- package/dist/models/partitive-count.d.ts.map +1 -0
- package/{src/models/partitive-count.ts → dist/models/partitive-count.js} +5 -9
- package/dist/models/partitive-count.js.map +1 -0
- package/dist/models/partitive-enumeration.d.ts +5 -0
- package/dist/models/partitive-enumeration.d.ts.map +1 -0
- package/dist/models/partitive-enumeration.js +16 -0
- package/dist/models/partitive-enumeration.js.map +1 -0
- package/dist/models/partitive-hyperedge.d.ts +43 -0
- package/dist/models/partitive-hyperedge.d.ts.map +1 -0
- package/dist/models/partitive-hyperedge.js +63 -0
- package/dist/models/partitive-hyperedge.js.map +1 -0
- package/dist/models/partitive-member.d.ts +14 -0
- package/dist/models/partitive-member.d.ts.map +1 -0
- package/dist/models/partitive-member.js +44 -0
- package/dist/models/partitive-member.js.map +1 -0
- package/dist/models/partitive-presence.d.ts +9 -0
- package/dist/models/partitive-presence.d.ts.map +1 -0
- package/{src/models/partitive-presence.ts → dist/models/partitive-presence.js} +4 -8
- package/dist/models/partitive-presence.js.map +1 -0
- package/dist/models/plurality-marker.d.ts +5 -0
- package/dist/models/plurality-marker.d.ts.map +1 -0
- package/dist/models/plurality-marker.js +20 -0
- package/dist/models/plurality-marker.js.map +1 -0
- package/dist/models/pronunciation.d.ts +19 -0
- package/dist/models/pronunciation.d.ts.map +1 -0
- package/dist/models/pronunciation.js +34 -0
- package/dist/models/pronunciation.js.map +1 -0
- package/dist/models/register.d.ts +104 -0
- package/dist/models/register.d.ts.map +1 -0
- package/dist/models/register.js +297 -0
- package/dist/models/register.js.map +1 -0
- package/dist/models/registrable.d.ts +25 -0
- package/dist/models/registrable.d.ts.map +1 -0
- package/dist/models/registrable.js +23 -0
- package/dist/models/registrable.js.map +1 -0
- package/dist/models/related-concept.d.ts +33 -0
- package/dist/models/related-concept.d.ts.map +1 -0
- package/dist/models/related-concept.js +95 -0
- package/dist/models/related-concept.js.map +1 -0
- package/dist/models/relation-categories.d.ts +38 -0
- package/dist/models/relation-categories.d.ts.map +1 -0
- package/dist/models/relation-categories.js +135 -0
- package/dist/models/relation-categories.js.map +1 -0
- package/dist/models/relation-colors.d.ts +35 -0
- package/dist/models/relation-colors.d.ts.map +1 -0
- package/dist/models/relation-colors.js +68 -0
- package/dist/models/relation-colors.js.map +1 -0
- package/dist/models/relation-loader.d.ts +41 -0
- package/dist/models/relation-loader.d.ts.map +1 -0
- package/dist/models/relation-loader.js +101 -0
- package/dist/models/relation-loader.js.map +1 -0
- package/dist/models/section.d.ts +22 -0
- package/dist/models/section.d.ts.map +1 -0
- package/dist/models/section.js +47 -0
- package/dist/models/section.js.map +1 -0
- package/dist/models/sequential-hyperedge.d.ts +32 -0
- package/dist/models/sequential-hyperedge.d.ts.map +1 -0
- package/dist/models/sequential-hyperedge.js +49 -0
- package/dist/models/sequential-hyperedge.js.map +1 -0
- package/dist/models/sequential-member.d.ts +8 -0
- package/dist/models/sequential-member.d.ts.map +1 -0
- package/{src/models/sequential-member.ts → dist/models/sequential-member.js} +4 -9
- package/dist/models/sequential-member.js.map +1 -0
- package/dist/models/shared-non-verbal-entity.d.ts +16 -0
- package/dist/models/shared-non-verbal-entity.d.ts.map +1 -0
- package/dist/models/shared-non-verbal-entity.js +28 -0
- package/dist/models/shared-non-verbal-entity.js.map +1 -0
- package/dist/models/table.d.ts +15 -0
- package/dist/models/table.d.ts.map +1 -0
- package/dist/models/table.js +27 -0
- package/dist/models/table.js.map +1 -0
- package/dist/rdf/agents-emitter.d.ts +37 -0
- package/dist/rdf/agents-emitter.d.ts.map +1 -0
- package/dist/rdf/agents-emitter.js +107 -0
- package/dist/rdf/agents-emitter.js.map +1 -0
- package/dist/rdf/bibliography-emitter.d.ts +16 -0
- package/dist/rdf/bibliography-emitter.d.ts.map +1 -0
- package/dist/rdf/bibliography-emitter.js +84 -0
- package/dist/rdf/bibliography-emitter.js.map +1 -0
- package/dist/rdf/bnode-id.d.ts +2 -0
- package/dist/rdf/bnode-id.d.ts.map +1 -0
- package/dist/rdf/bnode-id.js +57 -0
- package/dist/rdf/bnode-id.js.map +1 -0
- package/dist/rdf/build-activity-emitter.d.ts +42 -0
- package/dist/rdf/build-activity-emitter.d.ts.map +1 -0
- package/dist/rdf/build-activity-emitter.js +103 -0
- package/dist/rdf/build-activity-emitter.js.map +1 -0
- package/dist/rdf/curie.d.ts +7 -0
- package/dist/rdf/curie.d.ts.map +1 -0
- package/dist/rdf/curie.js +45 -0
- package/dist/rdf/curie.js.map +1 -0
- package/dist/rdf/dataset-emitter.d.ts +37 -0
- package/dist/rdf/dataset-emitter.d.ts.map +1 -0
- package/dist/rdf/dataset-emitter.js +126 -0
- package/dist/rdf/dataset-emitter.js.map +1 -0
- package/dist/rdf/deterministic-id.d.ts +3 -0
- package/dist/rdf/deterministic-id.d.ts.map +1 -0
- package/dist/rdf/deterministic-id.js +68 -0
- package/dist/rdf/deterministic-id.js.map +1 -0
- package/dist/rdf/document-writer.d.ts +11 -0
- package/dist/rdf/document-writer.d.ts.map +1 -0
- package/dist/rdf/document-writer.js +77 -0
- package/dist/rdf/document-writer.js.map +1 -0
- package/dist/rdf/gloss-concept.d.ts +27 -0
- package/dist/rdf/gloss-concept.d.ts.map +1 -0
- package/dist/rdf/gloss-concept.js +95 -0
- package/dist/rdf/gloss-concept.js.map +1 -0
- package/dist/rdf/gloss-designation.d.ts +17 -0
- package/dist/rdf/gloss-designation.d.ts.map +1 -0
- package/dist/rdf/gloss-designation.js +46 -0
- package/dist/rdf/gloss-designation.js.map +1 -0
- package/dist/rdf/gloss-detailed-definition.d.ts +14 -0
- package/dist/rdf/gloss-detailed-definition.d.ts.map +1 -0
- package/dist/rdf/gloss-detailed-definition.js +53 -0
- package/dist/rdf/gloss-detailed-definition.js.map +1 -0
- package/dist/rdf/gloss-generic-hyperedge.d.ts +27 -0
- package/dist/rdf/gloss-generic-hyperedge.d.ts.map +1 -0
- package/{src/rdf/gloss-generic-hyperedge.ts → dist/rdf/gloss-generic-hyperedge.js} +36 -50
- package/dist/rdf/gloss-generic-hyperedge.js.map +1 -0
- package/dist/rdf/gloss-localized-concept.d.ts +24 -0
- package/dist/rdf/gloss-localized-concept.d.ts.map +1 -0
- package/dist/rdf/gloss-localized-concept.js +71 -0
- package/dist/rdf/gloss-localized-concept.js.map +1 -0
- package/dist/rdf/gloss-non-verbal-rep.d.ts +33 -0
- package/dist/rdf/gloss-non-verbal-rep.d.ts.map +1 -0
- package/dist/rdf/gloss-non-verbal-rep.js +163 -0
- package/dist/rdf/gloss-non-verbal-rep.js.map +1 -0
- package/dist/rdf/gloss-partitive-member.d.ts +8 -0
- package/dist/rdf/gloss-partitive-member.d.ts.map +1 -0
- package/{src/rdf/gloss-partitive-member.ts → dist/rdf/gloss-partitive-member.js} +23 -41
- package/dist/rdf/gloss-partitive-member.js.map +1 -0
- package/dist/rdf/gloss-partitive-relation.d.ts +26 -0
- package/dist/rdf/gloss-partitive-relation.d.ts.map +1 -0
- package/dist/rdf/gloss-partitive-relation.js +73 -0
- package/dist/rdf/gloss-partitive-relation.js.map +1 -0
- package/dist/rdf/gloss-source.d.ts +23 -0
- package/dist/rdf/gloss-source.d.ts.map +1 -0
- package/dist/rdf/gloss-source.js +52 -0
- package/dist/rdf/gloss-source.js.map +1 -0
- package/dist/rdf/group-emitter.d.ts +46 -0
- package/dist/rdf/group-emitter.d.ts.map +1 -0
- package/dist/rdf/group-emitter.js +107 -0
- package/dist/rdf/group-emitter.js.map +1 -0
- package/dist/rdf/image-variant-emitter.d.ts +12 -0
- package/dist/rdf/image-variant-emitter.d.ts.map +1 -0
- package/dist/rdf/image-variant-emitter.js +55 -0
- package/dist/rdf/image-variant-emitter.js.map +1 -0
- package/dist/rdf/index.d.ts +26 -0
- package/dist/rdf/index.d.ts.map +1 -0
- package/{src/rdf/index.ts → dist/rdf/index.js} +8 -37
- package/dist/rdf/index.js.map +1 -0
- package/dist/rdf/normalize-enum.d.ts +3 -0
- package/dist/rdf/normalize-enum.d.ts.map +1 -0
- package/{src/rdf/normalize-enum.ts → dist/rdf/normalize-enum.js} +11 -10
- package/dist/rdf/normalize-enum.js.map +1 -0
- package/dist/rdf/predicates.d.ts +277 -0
- package/dist/rdf/predicates.d.ts.map +1 -0
- package/dist/rdf/predicates.js +279 -0
- package/dist/rdf/predicates.js.map +1 -0
- package/dist/rdf/prefixes.d.ts +16 -0
- package/dist/rdf/prefixes.d.ts.map +1 -0
- package/{src/rdf/prefixes.ts → dist/rdf/prefixes.js} +10 -12
- package/dist/rdf/prefixes.js.map +1 -0
- package/dist/rdf/provenance-emitter.d.ts +28 -0
- package/dist/rdf/provenance-emitter.d.ts.map +1 -0
- package/dist/rdf/provenance-emitter.js +74 -0
- package/dist/rdf/provenance-emitter.js.map +1 -0
- package/dist/rdf/sections-builder.d.ts +17 -0
- package/dist/rdf/sections-builder.d.ts.map +1 -0
- package/dist/rdf/sections-builder.js +137 -0
- package/dist/rdf/sections-builder.js.map +1 -0
- package/dist/rdf/shacl-entry.d.ts +2 -0
- package/dist/rdf/shacl-entry.d.ts.map +1 -0
- package/{src/rdf/shacl-entry.ts → dist/rdf/shacl-entry.js} +1 -1
- package/dist/rdf/shacl-entry.js.map +1 -0
- package/dist/rdf/shacl.d.ts +10 -0
- package/dist/rdf/shacl.d.ts.map +1 -0
- package/{src/rdf/shacl.ts → dist/rdf/shacl.js} +38 -57
- package/dist/rdf/shacl.js.map +1 -0
- package/dist/rdf/terms.d.ts +10 -0
- package/dist/rdf/terms.d.ts.map +1 -0
- package/{src/rdf/terms.ts → dist/rdf/terms.js} +6 -3
- package/dist/rdf/terms.js.map +1 -0
- package/dist/rdf/version-emitter.d.ts +57 -0
- package/dist/rdf/version-emitter.d.ts.map +1 -0
- package/dist/rdf/version-emitter.js +68 -0
- package/dist/rdf/version-emitter.js.map +1 -0
- package/dist/rdf/vocabulary-emitter.d.ts +32 -0
- package/dist/rdf/vocabulary-emitter.d.ts.map +1 -0
- package/dist/rdf/vocabulary-emitter.js +46 -0
- package/dist/rdf/vocabulary-emitter.js.map +1 -0
- package/dist/rdf/write-turtle-sync.d.ts +7 -0
- package/dist/rdf/write-turtle-sync.d.ts.map +1 -0
- package/dist/rdf/write-turtle-sync.js +130 -0
- package/dist/rdf/write-turtle-sync.js.map +1 -0
- package/dist/reference-mention.d.ts +49 -0
- package/dist/reference-mention.d.ts.map +1 -0
- package/dist/reference-mention.js +98 -0
- package/dist/reference-mention.js.map +1 -0
- package/dist/reference-resolver.d.ts +52 -0
- package/dist/reference-resolver.d.ts.map +1 -0
- package/dist/reference-resolver.js +311 -0
- package/dist/reference-resolver.js.map +1 -0
- package/dist/render-classification.d.ts +19 -0
- package/dist/render-classification.d.ts.map +1 -0
- package/dist/render-classification.js +82 -0
- package/dist/render-classification.js.map +1 -0
- package/dist/sort.d.ts +5 -0
- package/dist/sort.d.ts.map +1 -0
- package/dist/sort.js +25 -0
- package/dist/sort.js.map +1 -0
- package/dist/transforms/concept-to-gloss.transform.d.ts +32 -0
- package/dist/transforms/concept-to-gloss.transform.d.ts.map +1 -0
- package/dist/transforms/concept-to-gloss.transform.js +60 -0
- package/dist/transforms/concept-to-gloss.transform.js.map +1 -0
- package/dist/transforms/index.d.ts +2 -0
- package/dist/transforms/index.d.ts.map +1 -0
- package/{src/transforms/index.ts → dist/transforms/index.js} +1 -0
- package/dist/transforms/index.js.map +1 -0
- package/dist/utils/assertions.d.ts +4 -0
- package/dist/utils/assertions.d.ts.map +1 -0
- package/dist/utils/assertions.js +17 -0
- package/dist/utils/assertions.js.map +1 -0
- package/dist/utils/external-detection.d.ts +38 -0
- package/dist/utils/external-detection.d.ts.map +1 -0
- package/dist/utils/external-detection.js +55 -0
- package/dist/utils/external-detection.js.map +1 -0
- package/dist/uuid.d.ts +4 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +23 -0
- package/dist/uuid.js.map +1 -0
- package/dist/v1-reader.d.ts +8 -0
- package/dist/v1-reader.d.ts.map +1 -0
- package/dist/v1-reader.js +56 -0
- package/dist/v1-reader.js.map +1 -0
- package/dist/validators/asset-index.d.ts +23 -0
- package/dist/validators/asset-index.d.ts.map +1 -0
- package/dist/validators/asset-index.js +58 -0
- package/dist/validators/asset-index.js.map +1 -0
- package/dist/validators/binary-has-part-redundancy-rule.d.ts +8 -0
- package/dist/validators/binary-has-part-redundancy-rule.d.ts.map +1 -0
- package/dist/validators/binary-has-part-redundancy-rule.js +57 -0
- package/dist/validators/binary-has-part-redundancy-rule.js.map +1 -0
- package/dist/validators/concept-validator.d.ts +21 -0
- package/dist/validators/concept-validator.d.ts.map +1 -0
- package/dist/validators/concept-validator.js +76 -0
- package/dist/validators/concept-validator.js.map +1 -0
- package/dist/validators/delimiting-coherence-rule.d.ts +8 -0
- package/dist/validators/delimiting-coherence-rule.d.ts.map +1 -0
- package/dist/validators/delimiting-coherence-rule.js +72 -0
- package/dist/validators/delimiting-coherence-rule.js.map +1 -0
- package/dist/validators/extensional-completeness.d.ts +18 -0
- package/dist/validators/extensional-completeness.d.ts.map +1 -0
- package/dist/validators/extensional-completeness.js +41 -0
- package/dist/validators/extensional-completeness.js.map +1 -0
- package/dist/validators/external-concept-shape-rule.d.ts +8 -0
- package/dist/validators/external-concept-shape-rule.d.ts.map +1 -0
- package/dist/validators/external-concept-shape-rule.js +48 -0
- package/dist/validators/external-concept-shape-rule.js.map +1 -0
- package/dist/validators/gcr-validator.d.ts +11 -0
- package/dist/validators/gcr-validator.d.ts.map +1 -0
- package/dist/validators/gcr-validator.js +76 -0
- package/dist/validators/gcr-validator.js.map +1 -0
- package/dist/validators/hyperedge-coherence-rule.d.ts +9 -0
- package/dist/validators/hyperedge-coherence-rule.d.ts.map +1 -0
- package/dist/validators/hyperedge-coherence-rule.js +78 -0
- package/dist/validators/hyperedge-coherence-rule.js.map +1 -0
- package/dist/validators/index.d.ts +21 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/{src/validators/index.ts → dist/validators/index.js} +25 -51
- package/dist/validators/index.js.map +1 -0
- package/dist/validators/partitive-relation-coherence-rule.d.ts +2 -0
- package/dist/validators/partitive-relation-coherence-rule.d.ts.map +1 -0
- package/{src/validators/partitive-relation-coherence-rule.ts → dist/validators/partitive-relation-coherence-rule.js} +1 -1
- package/dist/validators/partitive-relation-coherence-rule.js.map +1 -0
- package/dist/validators/ref-keys.d.ts +8 -0
- package/dist/validators/ref-keys.d.ts.map +1 -0
- package/dist/validators/ref-keys.js +27 -0
- package/dist/validators/ref-keys.js.map +1 -0
- package/dist/validators/register-validator.d.ts +10 -0
- package/dist/validators/register-validator.d.ts.map +1 -0
- package/dist/validators/register-validator.js +18 -0
- package/dist/validators/register-validator.js.map +1 -0
- package/dist/validators/relationship-type-rule.d.ts +13 -0
- package/dist/validators/relationship-type-rule.d.ts.map +1 -0
- package/dist/validators/relationship-type-rule.js +34 -0
- package/dist/validators/relationship-type-rule.js.map +1 -0
- package/dist/validators/sourced-from-locality-rule.d.ts +8 -0
- package/dist/validators/sourced-from-locality-rule.d.ts.map +1 -0
- package/dist/validators/sourced-from-locality-rule.js +37 -0
- package/dist/validators/sourced-from-locality-rule.js.map +1 -0
- package/dist/validators/v3-rules.d.ts +60 -0
- package/dist/validators/v3-rules.d.ts.map +1 -0
- package/dist/validators/v3-rules.js +327 -0
- package/dist/validators/v3-rules.js.map +1 -0
- package/dist/validators/validation-error.d.ts +13 -0
- package/dist/validators/validation-error.d.ts.map +1 -0
- package/dist/validators/validation-error.js +17 -0
- package/dist/validators/validation-error.js.map +1 -0
- package/dist/validators/validation-result.d.ts +17 -0
- package/dist/validators/validation-result.d.ts.map +1 -0
- package/dist/validators/validation-result.js +47 -0
- package/dist/validators/validation-result.js.map +1 -0
- package/dist/validators/validation-rule.d.ts +10 -0
- package/dist/validators/validation-rule.d.ts.map +1 -0
- package/dist/validators/validation-rule.js +17 -0
- package/dist/validators/validation-rule.js.map +1 -0
- package/package.json +37 -42
- package/src/concept-collection.ts +0 -172
- package/src/concept-parser.ts +0 -235
- package/src/concept-reader.d.ts +0 -13
- package/src/concept-serializer.ts +0 -110
- package/src/concept-writer.d.ts +0 -7
- package/src/concept-writer.ts +0 -47
- package/src/diff/canonical-json.ts +0 -29
- package/src/diff/change.ts +0 -175
- package/src/diff/collection-diff.ts +0 -245
- package/src/diff/concept-diff.ts +0 -853
- package/src/diff/diff-patch.ts +0 -276
- package/src/diff/diff-renderer.ts +0 -348
- package/src/diff/identity.ts +0 -33
- package/src/diff/index.d.ts +0 -242
- package/src/diff/index.ts +0 -50
- package/src/diff/list-diff.ts +0 -231
- package/src/diff/similarity.ts +0 -20
- package/src/diff/text-diff.ts +0 -167
- package/src/entity-directory.ts +0 -43
- package/src/errors.d.ts +0 -11
- package/src/errors.ts +0 -24
- package/src/gcr-reader.d.ts +0 -65
- package/src/gcr-reader.ts +0 -512
- package/src/gcr-writer.d.ts +0 -22
- package/src/gcr-writer.ts +0 -99
- package/src/index.d.ts +0 -124
- package/src/index.ts +0 -92
- package/src/managed-concept-collection.ts +0 -130
- package/src/migration/hyperedge-migrator.ts +0 -104
- package/src/models/abstract-hyperedge.ts +0 -164
- package/src/models/base.ts +0 -110
- package/src/models/bibliography-data.ts +0 -64
- package/src/models/bibliography-entry.ts +0 -40
- package/src/models/citation.ts +0 -98
- package/src/models/concept-date.ts +0 -48
- package/src/models/concept-ref.ts +0 -64
- package/src/models/concept-reference.ts +0 -50
- package/src/models/concept-source.ts +0 -96
- package/src/models/concept-system-type.ts +0 -39
- package/src/models/concept-system.ts +0 -152
- package/src/models/concept.ts +0 -499
- package/src/models/dataset-color.ts +0 -88
- package/src/models/designation-relationship.ts +0 -39
- package/src/models/designation.ts +0 -297
- package/src/models/detailed-definition.ts +0 -92
- package/src/models/enum.ts +0 -60
- package/src/models/equivalence-degree.ts +0 -34
- package/src/models/figure.ts +0 -110
- package/src/models/formula.ts +0 -36
- package/src/models/gcr-metadata.ts +0 -118
- package/src/models/gcr-statistics.ts +0 -76
- package/src/models/generic-hyperedge.ts +0 -72
- package/src/models/generic-member.ts +0 -80
- package/src/models/grammar-info.ts +0 -78
- package/src/models/hyperedge-colors.ts +0 -87
- package/src/models/hyperedge-index.ts +0 -101
- package/src/models/hyperedge-member.ts +0 -121
- package/src/models/hyperedge-registry.ts +0 -145
- package/src/models/index.d.ts +0 -586
- package/src/models/locality.ts +0 -34
- package/src/models/localized-concept.ts +0 -284
- package/src/models/localized-string.ts +0 -32
- package/src/models/multiplicity.ts +0 -134
- package/src/models/non-verb-rep.ts +0 -48
- package/src/models/non-verbal-entity.ts +0 -65
- package/src/models/non-verbal-reference.ts +0 -73
- package/src/models/non-verbal-references.ts +0 -29
- package/src/models/partitive-enumeration.ts +0 -27
- package/src/models/partitive-hyperedge.ts +0 -90
- package/src/models/partitive-member.ts +0 -56
- package/src/models/plurality-marker.ts +0 -31
- package/src/models/pronunciation.ts +0 -40
- package/src/models/register.ts +0 -315
- package/src/models/registrable.ts +0 -48
- package/src/models/related-concept.ts +0 -117
- package/src/models/relation-categories.ts +0 -167
- package/src/models/relation-colors.ts +0 -90
- package/src/models/relation-loader.ts +0 -115
- package/src/models/section.ts +0 -61
- package/src/models/sequential-hyperedge.ts +0 -70
- package/src/models/shared-non-verbal-entity.ts +0 -36
- package/src/models/table.ts +0 -36
- package/src/rdf/agents-emitter.ts +0 -137
- package/src/rdf/bibliography-emitter.ts +0 -126
- package/src/rdf/bnode-id.ts +0 -55
- package/src/rdf/build-activity-emitter.ts +0 -129
- package/src/rdf/curie.ts +0 -46
- package/src/rdf/dataset-emitter.ts +0 -170
- package/src/rdf/deterministic-id.ts +0 -69
- package/src/rdf/document-writer.ts +0 -87
- package/src/rdf/gloss-concept.ts +0 -115
- package/src/rdf/gloss-designation.ts +0 -72
- package/src/rdf/gloss-detailed-definition.ts +0 -69
- package/src/rdf/gloss-localized-concept.ts +0 -79
- package/src/rdf/gloss-non-verbal-rep.ts +0 -202
- package/src/rdf/gloss-partitive-relation.ts +0 -89
- package/src/rdf/gloss-source.ts +0 -56
- package/src/rdf/group-emitter.ts +0 -133
- package/src/rdf/image-variant-emitter.ts +0 -80
- package/src/rdf/index.d.ts +0 -371
- package/src/rdf/predicates.d.ts +0 -527
- package/src/rdf/predicates.ts +0 -287
- package/src/rdf/provenance-emitter.ts +0 -87
- package/src/rdf/sections-builder.ts +0 -190
- package/src/rdf/shacl-entry.d.ts +0 -6
- package/src/rdf/version-emitter.ts +0 -97
- package/src/rdf/vocabulary-emitter.ts +0 -67
- package/src/rdf/write-turtle-sync.ts +0 -179
- package/src/reference-mention.ts +0 -114
- package/src/reference-resolver.ts +0 -361
- package/src/render-classification.ts +0 -85
- package/src/sort.ts +0 -22
- package/src/transforms/concept-to-gloss.transform.ts +0 -81
- package/src/transforms/index.d.ts +0 -26
- package/src/uuid.ts +0 -32
- package/src/v1-reader.ts +0 -66
- package/src/validators/asset-index.ts +0 -72
- package/src/validators/binary-has-part-redundancy-rule.ts +0 -67
- package/src/validators/concept-validator.ts +0 -93
- package/src/validators/delimiting-coherence-rule.ts +0 -105
- package/src/validators/external-concept-shape-rule.ts +0 -60
- package/src/validators/gcr-validator.ts +0 -76
- package/src/validators/hyperedge-coherence-rule.ts +0 -98
- package/src/validators/index.d.ts +0 -43
- package/src/validators/ref-keys.ts +0 -31
- package/src/validators/register-validator.ts +0 -18
- package/src/validators/relationship-type-rule.ts +0 -39
- package/src/validators/sourced-from-locality-rule.ts +0 -53
- package/src/validators/v3-rules.ts +0 -382
- package/src/validators/validation-error.ts +0 -19
- package/src/validators/validation-result.ts +0 -52
- package/src/validators/validation-rule.ts +0 -21
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { naturalSort } from './sort.js';
|
|
2
|
-
|
|
3
|
-
const _items = Symbol('items');
|
|
4
|
-
|
|
5
|
-
export class ConceptCollection {
|
|
6
|
-
constructor(concepts = []) {
|
|
7
|
-
this[_items] = Array.from(concepts);
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
get length() { return this[_items].length; }
|
|
11
|
-
[Symbol.iterator]() { return this[_items][Symbol.iterator](); }
|
|
12
|
-
|
|
13
|
-
at(index) { return this[_items].at(index); }
|
|
14
|
-
indexOf(item) { return this[_items].indexOf(item); }
|
|
15
|
-
find(fn) { return this[_items].find(fn); }
|
|
16
|
-
findIndex(fn) { return this[_items].findIndex(fn); }
|
|
17
|
-
forEach(fn) { this[_items].forEach(fn); }
|
|
18
|
-
map(fn) { return this[_items].map(fn); }
|
|
19
|
-
reduce(fn, init) { return this[_items].reduce(fn, init); }
|
|
20
|
-
includes(item) { return this[_items].includes(item); }
|
|
21
|
-
push(...items) { return this[_items].push(...items); }
|
|
22
|
-
splice(...args) { return this[_items].splice(...args); }
|
|
23
|
-
set(index, item) { this[_items][index] = item; }
|
|
24
|
-
|
|
25
|
-
toArray() { return [...this[_items]]; }
|
|
26
|
-
|
|
27
|
-
byId(id) {
|
|
28
|
-
return this[_items].find(c => c.id === id || c.termid === id);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Find a concept by id and version.
|
|
33
|
-
*
|
|
34
|
-
* The version is matched against a top-level `version` field on
|
|
35
|
-
* the concept instance (e.g. `concept.version`). The deployment
|
|
36
|
-
* is responsible for setting this field on bibliographic records;
|
|
37
|
-
* the data model does not enforce its presence or type.
|
|
38
|
-
*
|
|
39
|
-
* If `version` is null, the method falls back to `byId(id)`. This
|
|
40
|
-
* supports the "version-agnostic" lookup for datasets where
|
|
41
|
-
* version is not tracked.
|
|
42
|
-
*
|
|
43
|
-
* @param {string} id
|
|
44
|
-
* @param {string | null} version
|
|
45
|
-
* @returns {Concept | null}
|
|
46
|
-
*/
|
|
47
|
-
byIdAnd(id, version) {
|
|
48
|
-
if (version == null) return this.byId(id);
|
|
49
|
-
return this[_items].find(c =>
|
|
50
|
-
(c.id === id || c.termid === id) && c.version === version
|
|
51
|
-
) ?? null;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
byPrefix(prefix) {
|
|
55
|
-
return new ConceptCollection(this[_items].filter(c => c.id.startsWith(prefix)));
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
byLanguage(lang) {
|
|
59
|
-
return new ConceptCollection(this[_items].filter(c => c.hasLocalization(lang)));
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
byStatus(status) {
|
|
63
|
-
return new ConceptCollection(this[_items].filter(c => {
|
|
64
|
-
return c.languages.some(lang => c.localization(lang)?.entryStatus === status);
|
|
65
|
-
}));
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Cascading section membership filter. Returns concepts whose
|
|
70
|
-
* section closure includes `sectionId`.
|
|
71
|
-
*
|
|
72
|
-
* A concept in section "3.1.1" matches `bySection('3.1')` and
|
|
73
|
-
* `bySection('3')` because the section closure walks ancestors
|
|
74
|
-
* transitively (mirrors owl:TransitiveProperty on
|
|
75
|
-
* gloss:hasParentSection in the concept-model ontology).
|
|
76
|
-
*
|
|
77
|
-
* Two calling conventions:
|
|
78
|
-
*
|
|
79
|
-
* bySection('3.1', { register }) // register expands each concept's section closure
|
|
80
|
-
* bySection(['3.1', '3']) // pre-expanded target set (any of these must match)
|
|
81
|
-
*
|
|
82
|
-
* Concept-side membership is read from `concept.sections` if set,
|
|
83
|
-
* otherwise from `concept.groups` (a flat list of section IDs).
|
|
84
|
-
*/
|
|
85
|
-
bySection(sectionId, options = {}) {
|
|
86
|
-
if (Array.isArray(sectionId)) {
|
|
87
|
-
const targetSet = new Set(sectionId);
|
|
88
|
-
return new ConceptCollection(this[_items].filter(c => {
|
|
89
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
90
|
-
const ids = options.register
|
|
91
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
92
|
-
? options.register.conceptSectionIds(c)
|
|
93
|
-
: _flatConceptSectionIds(c);
|
|
94
|
-
return ids.some(id => targetSet.has(id));
|
|
95
|
-
}));
|
|
96
|
-
}
|
|
97
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
98
|
-
if (!options.register) {
|
|
99
|
-
throw new Error('bySection(sectionId) requires { register } to expand the concept section closures');
|
|
100
|
-
}
|
|
101
|
-
const target = sectionId;
|
|
102
|
-
return new ConceptCollection(this[_items].filter(c => {
|
|
103
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
104
|
-
const ids = options.register.conceptSectionIds(c);
|
|
105
|
-
return ids.includes(target);
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
index() {
|
|
110
|
-
const map = new Map();
|
|
111
|
-
for (const c of this[_items]) map.set(c.id, c);
|
|
112
|
-
return map;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
sorted() {
|
|
116
|
-
const copy = [...this[_items]];
|
|
117
|
-
copy.sort((a, b) => naturalSort(a.id, b.id));
|
|
118
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
119
|
-
return new ConceptCollection(copy);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
search(query) {
|
|
123
|
-
const q = query.toLowerCase();
|
|
124
|
-
return new ConceptCollection(this[_items].filter(c => {
|
|
125
|
-
for (const lang of c.languages) {
|
|
126
|
-
const lc = c.localization(lang);
|
|
127
|
-
if (!lc) continue;
|
|
128
|
-
for (const t of lc.terms) {
|
|
129
|
-
if ((t.designation ?? '').toLowerCase().includes(q)) return true;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
for (const { text } of c.walkTexts()) {
|
|
133
|
-
if (text.toLowerCase().includes(q)) return true;
|
|
134
|
-
}
|
|
135
|
-
return false;
|
|
136
|
-
}));
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
allLanguages() {
|
|
140
|
-
const set = new Set();
|
|
141
|
-
for (const c of this[_items]) {
|
|
142
|
-
for (const lang of c.languages) set.add(lang);
|
|
143
|
-
}
|
|
144
|
-
return [...set].sort();
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
filter(fn) { return new ConceptCollection(this[_items].filter(fn)); }
|
|
148
|
-
slice(...args) { return new ConceptCollection(this[_items].slice(...args)); }
|
|
149
|
-
concat(...args) { return new ConceptCollection(this[_items].concat(...args)); }
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// Standalone helper for the array-closure case where no register is
|
|
153
|
-
// available. Mirrors the lookup done inside Register#conceptSectionIds
|
|
154
|
-
// but without ancestor expansion (the closure is already provided).
|
|
155
|
-
function _flatConceptSectionIds(concept) {
|
|
156
|
-
if (!concept) return [];
|
|
157
|
-
const out = [];
|
|
158
|
-
for (const source of [concept.sections, concept.groups]) {
|
|
159
|
-
if (!Array.isArray(source)) continue;
|
|
160
|
-
for (const entry of source) {
|
|
161
|
-
if (typeof entry === 'string') {
|
|
162
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
163
|
-
out.push(entry);
|
|
164
|
-
} else if (entry && typeof entry === 'object') {
|
|
165
|
-
const id = entry.id ?? entry.sectionId ?? entry.ref?.id;
|
|
166
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
167
|
-
if (id) out.push(String(id));
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return out;
|
|
172
|
-
}
|
package/src/concept-parser.ts
DELETED
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
import * as yaml from 'js-yaml';
|
|
2
|
-
import { Concept } from './models/concept.js';
|
|
3
|
-
import { RelatedConcept } from './models/related-concept.js';
|
|
4
|
-
import { HyperedgeRegistry } from './models/hyperedge-registry.js';
|
|
5
|
-
import { migrateHyperedgeToRelation } from './migration/hyperedge-migrator.js';
|
|
6
|
-
import { InvalidInputError, YamlParseError } from './errors.js';
|
|
7
|
-
|
|
8
|
-
// Structural keys are reserved at the concept level and excluded
|
|
9
|
-
// from language localization discovery. The set is derived from
|
|
10
|
-
// HyperedgeRegistry — every registered hyperedge class contributes
|
|
11
|
-
// its wireKey and any v1WireKeys to the reserved set. Adding a new
|
|
12
|
-
// hyperedge type means the parser reserves its wire key automatically;
|
|
13
|
-
// no edits here.
|
|
14
|
-
const STRUCTURAL_KEYS = new Set([
|
|
15
|
-
'termid', 'term', 'figures', 'tables', 'formulas',
|
|
16
|
-
'related', 'relatedConcepts',
|
|
17
|
-
'relations',
|
|
18
|
-
..._registryStructuralKeys(),
|
|
19
|
-
]);
|
|
20
|
-
|
|
21
|
-
function _registryStructuralKeys() {
|
|
22
|
-
const out = [];
|
|
23
|
-
for (const cls of HyperedgeRegistry.allClasses()) {
|
|
24
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
25
|
-
out.push(cls.wireKey);
|
|
26
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
27
|
-
out.push(_camelCase(cls.wireKey));
|
|
28
|
-
for (const k of cls.v1WireKeys ?? []) {
|
|
29
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
30
|
-
out.push(k);
|
|
31
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
32
|
-
out.push(_camelCase(k));
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return out;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function _camelCase(s) {
|
|
39
|
-
if (typeof s !== 'string' || !s.includes('_')) return s;
|
|
40
|
-
return s.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export class ConceptParser {
|
|
44
|
-
parse(raw, context) {
|
|
45
|
-
const label = context ?? 'concept';
|
|
46
|
-
|
|
47
|
-
if (raw == null) {
|
|
48
|
-
throw new InvalidInputError(
|
|
49
|
-
`parseConceptYaml requires a non-empty YAML string (${label})`,
|
|
50
|
-
'non-null string',
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
if (typeof raw !== 'string' || raw.trim() === '') {
|
|
54
|
-
throw new InvalidInputError(
|
|
55
|
-
`parseConceptYaml requires a non-empty YAML string (${label})`,
|
|
56
|
-
'non-empty string',
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
let docs;
|
|
61
|
-
try {
|
|
62
|
-
// js-yaml 5.x dropped the explicit DEFAULT_SCHEMA export; the
|
|
63
|
-
// default schema is applied automatically when no `schema`
|
|
64
|
-
// option is passed. Passing CORE_SCHEMA reproduces the historical
|
|
65
|
-
// behavior (yaml.org core schema).
|
|
66
|
-
docs = yaml.loadAll(raw, { schema: yaml.CORE_SCHEMA ?? yaml.JSON_SCHEMA });
|
|
67
|
-
} catch (err) {
|
|
68
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
69
|
-
throw new YamlParseError(label, err);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return this._detectFormat(docs, label) === 'managed'
|
|
73
|
-
? this._parseManaged(docs)
|
|
74
|
-
: this._parseCanonical(docs[0]);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
_detectFormat(docs, label) {
|
|
78
|
-
if (docs.length >= 1 && docs[0]?.data?.identifier !== undefined) return 'managed';
|
|
79
|
-
if (docs[0] == null) throw new YamlParseError(label, new Error('YAML document is empty'));
|
|
80
|
-
return 'canonical';
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
_parseCanonical(doc) {
|
|
84
|
-
const localizations = {};
|
|
85
|
-
for (const key of Object.keys(doc)) {
|
|
86
|
-
if (!STRUCTURAL_KEYS.has(key) && typeof doc[key] === 'object' && doc[key] !== null) {
|
|
87
|
-
localizations[key] = doc[key];
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return new Concept({
|
|
91
|
-
id: String(doc.termid),
|
|
92
|
-
term: doc.term || null,
|
|
93
|
-
localizations,
|
|
94
|
-
figures: doc.figures,
|
|
95
|
-
tables: doc.tables,
|
|
96
|
-
formulas: doc.formulas,
|
|
97
|
-
relations: _resolveHyperedgeData(doc),
|
|
98
|
-
raw: doc,
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
_parseManaged(docs) {
|
|
103
|
-
const mc = docs[0];
|
|
104
|
-
const localizations = {};
|
|
105
|
-
|
|
106
|
-
for (const doc of docs.slice(1)) {
|
|
107
|
-
if (!doc?.data?.language_code) continue;
|
|
108
|
-
const lang = doc.data.language_code;
|
|
109
|
-
const lcData = { ...doc.data };
|
|
110
|
-
delete lcData.language_code;
|
|
111
|
-
localizations[lang] = lcData;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// The hyperedge wire keys are reserved at concept level (top-level
|
|
115
|
-
// of the managed concept YAML), not under data:. Derive the list
|
|
116
|
-
// from the registry so adding a type doesn't require an edit here.
|
|
117
|
-
const conceptLevelOnlyKeys = [
|
|
118
|
-
'related',
|
|
119
|
-
'relations',
|
|
120
|
-
...HyperedgeRegistry.allWireAndLegacyKeys(),
|
|
121
|
-
];
|
|
122
|
-
|
|
123
|
-
assertConceptLevelOnly(mc, conceptLevelOnlyKeys);
|
|
124
|
-
|
|
125
|
-
return new Concept({
|
|
126
|
-
id: String(mc.data.identifier),
|
|
127
|
-
term: null,
|
|
128
|
-
localizations,
|
|
129
|
-
related: _normalizeRelated(mc.related),
|
|
130
|
-
relations: _resolveHyperedgeData(mc),
|
|
131
|
-
domains: mc.data.domains,
|
|
132
|
-
groups: mc.data.groups,
|
|
133
|
-
dates: mc.dates ?? mc.data?.dates,
|
|
134
|
-
sources: mc.sources ?? mc.data?.sources,
|
|
135
|
-
figures: mc.data?.figures,
|
|
136
|
-
tables: mc.data?.tables,
|
|
137
|
-
formulas: mc.data?.formulas,
|
|
138
|
-
status: mc.status,
|
|
139
|
-
schemaVersion: mc.schema_version,
|
|
140
|
-
raw: mc,
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
function assertConceptLevelOnly(mc, keys) {
|
|
146
|
-
const conceptId = mc?.data?.identifier ?? '<unknown>';
|
|
147
|
-
for (const key of keys) {
|
|
148
|
-
const camelKey = _camelCase(key);
|
|
149
|
-
if (mc?.data?.[key] != null && mc[key] == null && mc[camelKey] == null) {
|
|
150
|
-
throw new InvalidInputError(
|
|
151
|
-
`'${key}' must live at concept level (top-level of the managed ` +
|
|
152
|
-
`concept document), not under data:. Found data.${key} in concept ` +
|
|
153
|
-
`${conceptId}. Move the key out of the data: block.`,
|
|
154
|
-
'concept-level ' + key,
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Resolve hyperedge data from any input shape into a single unified
|
|
161
|
-
// array. Iterates HyperedgeRegistry — for each registered class:
|
|
162
|
-
// - read its wireKey from the container (e.g. partitive_relations)
|
|
163
|
-
// - read any v1WireKeys (e.g. partitive_hyperedges) and migrate
|
|
164
|
-
// - tag each entry with the class's typeTag
|
|
165
|
-
//
|
|
166
|
-
// Returns null when no relation data is present, so Concept's
|
|
167
|
-
// `_resolveHyperedges` falls back to the empty-array default.
|
|
168
|
-
//
|
|
169
|
-
// Adding a new hyperedge type means: declare it on a class, register.
|
|
170
|
-
// The parser picks it up automatically — no edits here.
|
|
171
|
-
function _resolveHyperedgeData(container) {
|
|
172
|
-
if (!container) return null;
|
|
173
|
-
|
|
174
|
-
if (Array.isArray(container.relations)) {
|
|
175
|
-
return container.relations;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
const out = [];
|
|
179
|
-
|
|
180
|
-
for (const cls of HyperedgeRegistry.allClasses()) {
|
|
181
|
-
// v2 wire key (e.g. partitive_relations)
|
|
182
|
-
const arr = container[cls.wireKey] ?? container[_camelCase(cls.wireKey)];
|
|
183
|
-
if (Array.isArray(arr)) {
|
|
184
|
-
for (const r of arr) {
|
|
185
|
-
const tagged = _addTypeIfMissing(r, cls.typeTag);
|
|
186
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
187
|
-
if (tagged != null) out.push(tagged);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// v1 legacy wire keys (e.g. partitive_hyperedges) — migrated.
|
|
192
|
-
// The migration helper produces a v2 hash; we tag it with the
|
|
193
|
-
// typeTag so Concept's registry dispatch finds the right class.
|
|
194
|
-
for (const v1Key of cls.v1WireKeys ?? []) {
|
|
195
|
-
const v1Arr = container[v1Key] ?? container[_camelCase(v1Key)];
|
|
196
|
-
if (!Array.isArray(v1Arr)) continue;
|
|
197
|
-
for (const h of v1Arr) {
|
|
198
|
-
const hash = h?.toJSON && typeof h.toJSON === 'function' ? h.toJSON() : h;
|
|
199
|
-
const migrated = migrateHyperedgeToRelation(hash);
|
|
200
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
201
|
-
if (migrated) out.push({ ...migrated, type: cls.typeTag });
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
return out.length > 0 ? out : null;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
function _addTypeIfMissing(value, type) {
|
|
210
|
-
if (value == null) return null;
|
|
211
|
-
if (typeof value.toJSON === 'function') {
|
|
212
|
-
const hash = value.toJSON();
|
|
213
|
-
return hash.type ? hash : { ...hash, type };
|
|
214
|
-
}
|
|
215
|
-
if (typeof value === 'object') {
|
|
216
|
-
return value.type ? value : { ...value, type };
|
|
217
|
-
}
|
|
218
|
-
return value;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
function _normalizeRelated(arr) {
|
|
222
|
-
if (!arr || !Array.isArray(arr)) return [];
|
|
223
|
-
return arr.map(r => {
|
|
224
|
-
if (r instanceof RelatedConcept) return r;
|
|
225
|
-
if (r.ref != null && typeof r.ref !== 'object') {
|
|
226
|
-
throw new InvalidInputError(
|
|
227
|
-
`RelatedConcept.ref must be an object { source, id }, got: ${typeof r.ref}`,
|
|
228
|
-
'object',
|
|
229
|
-
);
|
|
230
|
-
}
|
|
231
|
-
return new RelatedConcept(r);
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
export const conceptParser = new ConceptParser();
|
package/src/concept-reader.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Concept, Register } from './models/index';
|
|
2
|
-
|
|
3
|
-
/** Read all concept YAML files from a directory. */
|
|
4
|
-
export function readConcepts(dir: string): Concept[];
|
|
5
|
-
|
|
6
|
-
/** Read a single concept by ID from a directory. */
|
|
7
|
-
export function readConcept(dir: string, id: string): Concept | null;
|
|
8
|
-
|
|
9
|
-
/** List all concept IDs in a directory, optionally filtered by prefix. */
|
|
10
|
-
export function listConceptIds(dir: string, prefix?: string): string[];
|
|
11
|
-
|
|
12
|
-
/** Read register.yaml from a dataset directory (if present). */
|
|
13
|
-
export function readRegister(dir: string): Register | null;
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import * as yaml from 'js-yaml';
|
|
2
|
-
import { PartitiveHyperedge } from './models/partitive-hyperedge.js';
|
|
3
|
-
import { GenericHyperedge } from './models/generic-hyperedge.js';
|
|
4
|
-
|
|
5
|
-
const DUMP_OPTS = { lineWidth: -1, noRefs: true, sortKeys: false, skipInvalid: true };
|
|
6
|
-
|
|
7
|
-
// Partition the unified relations array by concrete type and emit
|
|
8
|
-
// each type under its own wire key. Concept.relations holds mixed
|
|
9
|
-
// types; the wire format stays split for backward compat with
|
|
10
|
-
// existing consumers and the JSON Schema in concept-model.
|
|
11
|
-
function _emitTypedRelations(concept) {
|
|
12
|
-
const partitiveRels = concept.relations.filter(r => r instanceof PartitiveHyperedge);
|
|
13
|
-
const genericRels = concept.relations.filter(r => r instanceof GenericHyperedge);
|
|
14
|
-
return {
|
|
15
|
-
partitive: partitiveRels.map(r => r.toJSON()),
|
|
16
|
-
generic: genericRels.map(r => r.toJSON()),
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export class ConceptSerializer {
|
|
21
|
-
toCanonicalYaml(concept) {
|
|
22
|
-
const doc = { termid: concept.id };
|
|
23
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
24
|
-
if (concept.term) doc.term = concept.term;
|
|
25
|
-
|
|
26
|
-
const { partitive, generic } = _emitTypedRelations(concept);
|
|
27
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
28
|
-
if (partitive.length > 0) doc.partitive_relations = partitive;
|
|
29
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
30
|
-
if (generic.length > 0) doc.generic_relations = generic;
|
|
31
|
-
|
|
32
|
-
for (const lang of concept.languages) {
|
|
33
|
-
const lc = concept.localization(lang);
|
|
34
|
-
if (lc) {
|
|
35
|
-
const lcObj = lc.toJSON();
|
|
36
|
-
delete lcObj.language_code;
|
|
37
|
-
doc[lang] = lcObj;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return yaml.dump(doc, DUMP_OPTS);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
toManagedYaml(concept, uuidFn) {
|
|
45
|
-
const genId = uuidFn ?? (() => crypto.randomUUID());
|
|
46
|
-
const localizedConcepts = {};
|
|
47
|
-
const langDocs = [];
|
|
48
|
-
|
|
49
|
-
for (const lang of concept.languages) {
|
|
50
|
-
const lc = concept.localization(lang);
|
|
51
|
-
if (!lc) continue;
|
|
52
|
-
const lcId = genId();
|
|
53
|
-
localizedConcepts[lang] = lcId;
|
|
54
|
-
|
|
55
|
-
const lcObj = lc.toJSON();
|
|
56
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
57
|
-
langDocs.push({ data: lcObj, id: lcId });
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const mainDoc = {
|
|
61
|
-
data: { identifier: concept.id, localized_concepts: localizedConcepts },
|
|
62
|
-
id: genId(),
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
if (concept.domains.length > 0) {
|
|
66
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
67
|
-
mainDoc.data.domains = concept.domains.map(d => d.toJSON());
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (concept.relatedConcepts.length > 0) {
|
|
71
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
72
|
-
mainDoc.related = concept.relatedConcepts.map(rc => rc.toJSON());
|
|
73
|
-
}
|
|
74
|
-
const { partitive, generic } = _emitTypedRelations(concept);
|
|
75
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
76
|
-
if (partitive.length > 0) mainDoc.partitive_relations = partitive;
|
|
77
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
78
|
-
if (generic.length > 0) mainDoc.generic_relations = generic;
|
|
79
|
-
if (concept.sources.length > 0) {
|
|
80
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
81
|
-
mainDoc.sources = concept.sources.map(s => s.toJSON());
|
|
82
|
-
}
|
|
83
|
-
if (concept.dates.length > 0) {
|
|
84
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
85
|
-
mainDoc.dates = concept.dates.map(d => d.toJSON());
|
|
86
|
-
}
|
|
87
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
88
|
-
if (concept.status) mainDoc.status = concept.status;
|
|
89
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
90
|
-
if (concept.schemaVersion) mainDoc.schema_version = concept.schemaVersion;
|
|
91
|
-
|
|
92
|
-
const parts = [
|
|
93
|
-
'---\n' + yaml.dump(mainDoc, DUMP_OPTS),
|
|
94
|
-
...langDocs.map(d => '---\n' + yaml.dump(d, DUMP_OPTS)),
|
|
95
|
-
];
|
|
96
|
-
return parts.join('');
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
toYaml(concept, uuidFn) {
|
|
100
|
-
return concept.term
|
|
101
|
-
? this.toCanonicalYaml(concept)
|
|
102
|
-
: this.toManagedYaml(concept, uuidFn);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
toRegisterYaml(data) {
|
|
106
|
-
return yaml.dump(data, DUMP_OPTS);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export const conceptSerializer = new ConceptSerializer();
|
package/src/concept-writer.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { Concept } from './models/index';
|
|
2
|
-
|
|
3
|
-
export function writeConcept(dir: string, concept: Concept, format?: 'canonical' | 'managed' | 'auto'): void;
|
|
4
|
-
export function writeConcepts(dir: string, concepts: Concept[], options?: {
|
|
5
|
-
register?: Record<string, unknown>;
|
|
6
|
-
format?: 'canonical' | 'managed' | 'auto';
|
|
7
|
-
}): void;
|
package/src/concept-writer.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import { conceptSerializer } from './concept-serializer.js';
|
|
4
|
-
import { InvalidInputError } from './errors.js';
|
|
5
|
-
|
|
6
|
-
function assertDir(dir, fnName) {
|
|
7
|
-
if (typeof dir !== 'string' || dir.trim() === '') {
|
|
8
|
-
throw new InvalidInputError(`${fnName} requires a directory path`, 'non-empty string');
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function writeConcept(dir, concept, format = 'auto') {
|
|
13
|
-
assertDir(dir, 'writeConcept');
|
|
14
|
-
if (!concept?.id) {
|
|
15
|
-
throw new InvalidInputError('writeConcept requires a Concept with an id', 'Concept');
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const y = format === 'canonical'
|
|
19
|
-
? conceptSerializer.toCanonicalYaml(concept)
|
|
20
|
-
: format === 'managed'
|
|
21
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
22
|
-
? conceptSerializer.toManagedYaml(concept)
|
|
23
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
24
|
-
: conceptSerializer.toYaml(concept);
|
|
25
|
-
|
|
26
|
-
fs.writeFileSync(path.join(dir, `${concept.id}.yaml`), y, 'utf8');
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function writeConcepts(dir, concepts, options = {}) {
|
|
30
|
-
assertDir(dir, 'writeConcepts');
|
|
31
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
32
|
-
|
|
33
|
-
for (const concept of concepts) {
|
|
34
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
35
|
-
writeConcept(dir, concept, options.format);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
39
|
-
if (options.register) {
|
|
40
|
-
fs.writeFileSync(
|
|
41
|
-
path.join(dir, 'register.yaml'),
|
|
42
|
-
// @ts-expect-error TODO(Phase 2e): type this fully
|
|
43
|
-
conceptSerializer.toRegisterYaml(options.register),
|
|
44
|
-
'utf8',
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
// Canonical JSON for equality comparison.
|
|
2
|
-
//
|
|
3
|
-
// Sorts object keys recursively so two semantically-equal values produce
|
|
4
|
-
// identical strings regardless of insertion order. Arrays preserve order
|
|
5
|
-
// (they're ordered in domain semantics). Undefined values are dropped.
|
|
6
|
-
|
|
7
|
-
type JsonInput = null | undefined | string | number | boolean | JsonInput[] | { [k: string]: JsonInput };
|
|
8
|
-
|
|
9
|
-
export function canonicalJson(value: JsonInput | unknown): string {
|
|
10
|
-
return JSON.stringify(toCanonical(value as JsonInput));
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function deepEqualCanonical(a: JsonInput | unknown, b: JsonInput | unknown): boolean {
|
|
14
|
-
return canonicalJson(a) === canonicalJson(b);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function toCanonical(value: JsonInput): unknown {
|
|
18
|
-
if (value == null) return null;
|
|
19
|
-
if (Array.isArray(value)) return value.map(toCanonical);
|
|
20
|
-
if (typeof value === 'object') {
|
|
21
|
-
const out: Record<string, unknown> = {};
|
|
22
|
-
for (const k of Object.keys(value).sort()) {
|
|
23
|
-
const v = toCanonical((value as Record<string, JsonInput>)[k] as JsonInput);
|
|
24
|
-
if (v !== undefined) out[k] = v;
|
|
25
|
-
}
|
|
26
|
-
return out;
|
|
27
|
-
}
|
|
28
|
-
return value;
|
|
29
|
-
}
|