IIIF Presentation 3 types

July 27, 2022 ยท View on GitHub

A set of types that describe the format of the IIIF Presentation 3.0 specification as accurately as possible.

Installation:

$ npm i @iiif/presentation-3

Installation (yarn):

$ yarn add @iiif/presentation-3

Usage (Typescript):

import { Manifest } from '@iiif/presentation-3';

const manifest = getManifestFromSomewhere() as Manifest;

function doSomethingWithManifest(manifest: Manifest) {
  // ...
}

Usage (Javascript):

/**
 * @typedef { import("@iiif/presentation-3").Manifest } Manifest
 */

/**
 * @type {Manifest}
 */
const manifest = {};


/**
 * @param manifest {Manifest}
 */
function doSomethingWithManifest(manifest) {
  console.log(manifest.label);
}

// You can also inline the import:

/**
 * @type {import("@iiif/presentation-3").Manifest}
 */
const manifest2 = {};

This will enable types completions in VSCode and IDEA, along with inline documentation from the IIIF specification: Screenshot 2021-03-28 at 17 11 14

Support

The following types are supported:

  • Manifest
  • Collection
  • Canvas
  • Annotation
  • Annotation Collection
  • Annotation Page
  • Content Resource
  • Provider
  • Range
  • Service

With some other types that aim to cover common services:

  • Auth service
  • GeoJSON service
  • Image service
  • Search service

Full List of types

Basic types

TypeDescription
ResourceTypeString literals for the possible values of type
InternationalStringCommon language property ({ "none": ["..."] })
ReferenceA reference to another resources ({id: '..', type: '..'})
JsonLDContextA partial of {'@context': ... }, extended by resources with contexts
MetadataItemLabel value pair used in the metadata field
SpecificationBehaviorsString literals for supported behaviors mentioned in the specification
SpecificationTimeModeString literals for supported time modes mentioned in the specification
ViewingDirectionString literal for the 4 supported viewing directions

Resources

TypeDescription
ServiceAny service that can appear in services property. Union of generic and specific services.
ManifestTypes for a valid IIIF Manifest
CanvasTypes for a valid IIIF Canvas
ContentResourceTypes for a Content Resource - warning this can be many things!
AnnotationPageTypes for a valid Annotation page
AnnotationTypes for a valid Annotation in the context of a IIIF manifest
AnnotationW3CTypes for a valid W3C annotation (different from above)
CollectionTypes for a valid IIIF Collection
RangeTypes for a valid IIIF Range
AnnotationCollectionTypes for a valid Annotation collection
IIIFExternalWebResourceAbstract type for an external web resource
ContentResourceStringAlias for string

Resource items (structural)

TypeDescription
CanvasItemsAlias for Annotation Page
CollectionItemsUnion of Manifest or Collection
ManifestItemsAlias for Canvas
RangeItemsUnion of Range, Canvas or string

Services

TypeDescription
AuthAccessTokenServiceError[todo]
AuthAccessTokenServiceResponse[todo]
AuthAbstractService[todo]
AuthAccessTokenService[todo]
AuthExternalService[todo]
AuthClickThroughService[todo]
AuthKioskService[todo]
AuthLoginService[todo]
AuthLogoutService[todo]
AuthService[todo]
GeoJsonService[todo]
ImageService[todo]
ImageService2[todo]
ImageServiceProfile[todo]
ImageProfile[todo]
ImageService3[todo]
ImageSize[todo]
ImageTile[todo]
SearchService[todo]
SearchServiceAutocomplete[todo]
SearchServiceAutocompleteQueryParams[todo]
SearchServiceAutocompleteResponse[todo]
SearchServiceCommonHitSelectors[todo]
SearchServiceCommonResources[todo]
SearchServiceQueryParams[todo]
SearchServiceSearchCommonSelectors[todo]
SearchServiceSearchResponse[todo]

W3C Annotations

Most of these types are not exported, but internally follows the full W3C specification.

W3C Model Specification

TypeDescription
Agent[todo]
AnnotationBody[todo]
AnnotationTarget[todo]
AnyMotivation[todo]
Audience[todo]
Body[todo]
ChoiceBody[todo]
ChoiceTarget[todo]
Creator[todo]
BasicState[todo]
CssSelector[todo]
DataPositionSelector[todo]
FragmentSelector[todo]
Selector[todo]
RefinedBy[todo]
RefinedByState[todo]
EmbeddedResource[todo]
ExternalResourceTypes[todo]
ExternalWebResource[todo]
RangeSelector[todo]
RequestHeaderState[todo]
SpecificResource[todo]
State[todo]
SvgSelector[todo]
TextPositionSelector[todo]
TextQuoteSelector[todo]
TimeState[todo]
XPathSelector[todo]
Stylesheet[todo]
Target[todo]
TargetComposite[todo]
TargetList[todo]
TargetIndependents[todo]
W3CAnnotationBody[todo]
W3CAnnotationCollection[todo]
W3CAnnotationPage[todo]
W3CAnnotationTarget[todo]
W3CMotivation[todo]
LinkedResource[todo]
ResourceBaseProperties[todo]
OtherProperties[todo]

Normalized resources

The normalized types have moved to @iiif/presentation-3-normalized.

Partial / Abstract types

These types are building blocks of other types.

TypeDescription
LinkingPropertiesThe linking properties of IIIF in a map LinkingProperties['seeAlso']
DescriptivePropertiesThe descriptive properties of IIIF in a map DescriptiveProperties['label']
TechnicalPropertiesThe technical properties of IIIF in a map DescriptiveProperties['id']
StructuralPropertiesThe structural properties of IIIF in a map DescriptiveProperties['annotations']

Helpers

TypeDescription
OmitPropertiesHelper for removing properties from another type
IdOrAtIdHelper for resources that can have either id or @id
SomeRequiredHelper for requiring some properties from another type
RequiredHelper for requiring all properties from another type