maniiifest
Version:
Typesafe IIIF presentation v3 manifest and collection parsing without external dependencies
139 lines (138 loc) • 6.04 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ManiiifestAnnotation = void 0;
const F = require("./specification");
/**
* Parses and provides access to a standalone W3C Annotation.
*
* Create via `Maniiifest.parseAnnotation(data)` or `new ManiiifestAnnotation(data)`.
*/
class ManiiifestAnnotation {
constructor(data) {
try {
this.specification = F.readAnnotationT(data);
}
catch (error) {
throw new Error(`Failed to parse IIIF data as Annotation: ${error instanceof Error ? error.message : String(error)}`);
}
}
getAnnotation() {
return F.writeAnnotationT(this.specification);
}
getAnnotationId() {
return this.specification.id !== undefined ? F.writeIdT(this.specification.id) : null;
}
getAnnotationType() {
return F.writeTypeT(this.specification.type);
}
getAnnotationContext() {
return this.specification.context !== undefined
? F.writeContextT(this.specification.context)
: null;
}
getAnnotationBody() {
return this.specification.body !== undefined
? F.writeBodyT(this.specification.body)
: null;
}
getAnnotationTarget() {
return this.specification.target !== undefined
? F.writeTargetT(this.specification.target)
: null;
}
getAnnotationMotivation() {
return this.specification.motivation !== undefined
? F.writeMotivationT(this.specification.motivation)
: null;
}
getAnnotationCreator() {
return this.specification.creator !== undefined
? F.writeCreatorT(this.specification.creator)
: null;
}
getAnnotationGenerator() {
return this.specification.generator !== undefined
? F.writeGeneratorT(this.specification.generator)
: null;
}
getAnnotationCreated() {
return this.specification.created !== undefined ? F.writeCreatedT(this.specification.created) : null;
}
getAnnotationModified() {
return this.specification.modified !== undefined ? F.writeModifiedT(this.specification.modified) : null;
}
getAnnotationFeatureCollection() {
var _a;
if (((_a = this.specification.body) === null || _a === void 0 ? void 0 : _a.kind) === 'Value' && this.specification.body.value.kind === 'FeatureCollection') {
return F.writeFeatureCollectionT(this.specification.body.value.value);
}
return null;
}
/** @yields {U.AnnotationBodyTextualBody} Each textual body from the annotation. */
*iterateAnnotationTextualBody() {
var _a, _b;
if (((_a = this.specification.body) === null || _a === void 0 ? void 0 : _a.kind) === 'Array') {
for (const body of this.specification.body.value) {
if (body.kind === 'TextualBody') {
yield F.writeAnnotationBodyTextualBody(body.value);
}
}
}
else if (((_b = this.specification.body) === null || _b === void 0 ? void 0 : _b.kind) === 'Value') {
if (this.specification.body.value.kind === 'TextualBody') {
yield F.writeAnnotationBodyTextualBody(this.specification.body.value.value);
}
}
}
/** @yields {U.AnnotationBodyResource} Each resource body from the annotation. */
*iterateAnnotationResourceBody() {
var _a, _b;
if (((_a = this.specification.body) === null || _a === void 0 ? void 0 : _a.kind) === 'Array') {
for (const body of this.specification.body.value) {
if (body.kind === 'Resource') {
yield F.writeAnnotationBodyResource(body.value);
}
}
}
else if (((_b = this.specification.body) === null || _b === void 0 ? void 0 : _b.kind) === 'Value') {
if (this.specification.body.value.kind === 'Resource') {
yield F.writeAnnotationBodyResource(this.specification.body.value.value);
}
}
}
/** @yields {U.AnnotationTarget} Each target of the annotation. */
*iterateAnnotationTarget() {
var _a;
if (((_a = this.specification.target) === null || _a === void 0 ? void 0 : _a.kind) === 'Array') {
for (const target of this.specification.target.value) {
yield F.writeAnnotationTargetT(target);
}
}
else if (this.specification.target) {
yield F.writeAnnotationTargetT(this.specification.target.value);
}
}
/** @yields {U.Feature} Each GeoJSON feature from a FeatureCollection body. */
*iterateAnnotationFeature() {
var _a, _b;
if (((_a = this.specification.body) === null || _a === void 0 ? void 0 : _a.kind) === 'Value' && this.specification.body.value.kind === 'FeatureCollection') {
for (const feature of (_b = this.specification.body.value.value.features) !== null && _b !== void 0 ? _b : []) {
yield F.writeFeatureT(feature);
}
}
}
/** @yields {U.PointCoordinates} Each point coordinate pair from FeatureCollection geometry. */
*iterateAnnotationGeometryPointCoordinates() {
var _a, _b, _c, _d;
if (((_a = this.specification.body) === null || _a === void 0 ? void 0 : _a.kind) === 'Value' && this.specification.body.value.kind === 'FeatureCollection') {
for (const feature of (_b = this.specification.body.value.value.features) !== null && _b !== void 0 ? _b : []) {
if (((_c = feature.geometry) === null || _c === void 0 ? void 0 : _c.kind) === 'Point') {
for (const coordinates of (_d = feature.geometry.value.coordinates) !== null && _d !== void 0 ? _d : []) {
yield F.writePointCoordinatesT(coordinates);
}
}
}
}
}
}
exports.ManiiifestAnnotation = ManiiifestAnnotation;